150 lines
6.7 KiB
PHP
150 lines
6.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
|
|
|
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
|
use App\Enums\ProntoAtendimento\Atendimento\Medico\AtestadoModelo;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
|
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
|
use App\Models\Geral\DocumentoTipo;
|
|
use App\Models\ProntoAtendimento\Atendimento\Medico\AtendimentoMedico;
|
|
use App\Models\ProntoAtendimento\Atendimento\Recepcao;
|
|
use App\Models\Sigtap\Cid;
|
|
use App\Utils\DataUtil;
|
|
use App\Utils\Exports\Pdf;
|
|
use App\Utils\Exports\Template;
|
|
use App\Utils\MaskUtil;
|
|
use App\Utils\NumericUtil;
|
|
use DateTime;
|
|
|
|
class AtestadoAcompanhanteController extends Controller
|
|
{
|
|
private const TITLE = 'Atestado Acompanhante';
|
|
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.atestado-acompanhante';
|
|
|
|
public static function getTemplate($atendimentoId = null)
|
|
{
|
|
if ($atendimentoId) {
|
|
|
|
$atendimentoMedico = AtendimentoMedico::orderByDesc('created_at')
|
|
->where('atendimento_id', $atendimentoId)
|
|
->has('atestado')
|
|
->firstOrFail();
|
|
|
|
$recepcao = Recepcao::orderByDesc('atendido_em')
|
|
->where('atendimento_id', $atendimentoId)
|
|
->firstOrFail();
|
|
|
|
$atestado = $atendimentoMedico->atestado;
|
|
$paciente = $atendimentoMedico->atendimento->faa->paciente;
|
|
$atendido_em = new DateTime($recepcao->atendido_em);
|
|
|
|
$data = [
|
|
'paciente' => [
|
|
'nome' => $paciente->cidadao->nome,
|
|
'cpf' => MaskUtil::getDocumentMasked(1, $paciente->cidadao->cpf),
|
|
'nomeSocial' => $paciente->cidadao->nome_social,
|
|
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
|
],
|
|
'nomeAcompanhante' => $atestado->nome_acompanhante,
|
|
'documento' => [
|
|
'tipo' => $atestado->documentoTipo->nome,
|
|
'numero' => MaskUtil::getDocumentMasked($atestado->documento_tipo_id, $atestado->documento_numero),
|
|
],
|
|
'unidade' => [
|
|
'nome' => $atestado->updatedLotacao->infraestrutura->unidade->nome_fantasia,
|
|
],
|
|
'data' => $atendido_em->format('d/m/Y'),
|
|
'hora' => $atendido_em->format('H:i:s'),
|
|
'cid' => $atestado->imprime_cid ? $atendimentoMedico->cid->cid->codigo : '',
|
|
'afastamento_texto' => self::getAfastamentoTexto(
|
|
$atestado->modelo_id ?? AtestadoModelo::PADRAO,
|
|
$atestado->dias,
|
|
$atestado->quantidade_horas,
|
|
$atestado->horario_inicial,
|
|
),
|
|
'profissional' => [
|
|
'nome' => $atestado->updatedLotacao->usuario->cidadao->nome,
|
|
'cbo' => $atestado->updatedLotacao->ocupacao->nome,
|
|
]
|
|
];
|
|
}
|
|
else {
|
|
|
|
$paciente = Paciente::findOrFail(request()->paciente_id);
|
|
$documentoTipo = DocumentoTipo::findOrFail(request()->documento_tipo_id);
|
|
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
|
$atendido_em = new DateTime(request()->atendido_em);
|
|
|
|
$data = [
|
|
'paciente' => [
|
|
'nome' => $paciente->cidadao->nome,
|
|
'cpf' => MaskUtil::getDocumentMasked(1, $paciente->cidadao->cpf),
|
|
'nomeSocial' => $paciente->cidadao->nome_social,
|
|
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
|
],
|
|
'nomeAcompanhante' => request()->nome,
|
|
'documento' => [
|
|
'tipo' => $documentoTipo->nome,
|
|
'numero' => MaskUtil::getDocumentMasked($documentoTipo->id, request()->documento_numero),
|
|
],
|
|
'unidade' => [
|
|
'nome' => $lotacao->infraestrutura->unidade->nome_fantasia,
|
|
],
|
|
'data' => $atendido_em->format('d/m/Y'),
|
|
'hora' => $atendido_em->format('H:i:s'),
|
|
'cid' => DataUtil::isStringTrue(request()->imprime_cid) && request()->cid_id
|
|
? Cid::findOrFail(request()->cid_id)->codigo : '',
|
|
'afastamento_texto' => self::getAfastamentoTexto(
|
|
request()->modelo_id ?? AtestadoModelo::PADRAO,
|
|
request()->dias,
|
|
request()->quantidade_horas,
|
|
request()->horario_inicial,
|
|
),
|
|
'profissional' => [
|
|
'nome' => $lotacao->usuario->cidadao->nome,
|
|
'cbo' => $lotacao->ocupacao->nome,
|
|
]
|
|
];
|
|
}
|
|
|
|
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
|
}
|
|
|
|
private static function getAfastamentoTexto($modeloId, $dias, $quantidadeHoras, $horarioInicial)
|
|
{
|
|
switch ((int) $modeloId) {
|
|
case AtestadoModelo::PERIODO_MANHA:
|
|
return 'Em decorrencia, devera permanecer em afastamento de suas atividades laborativas no periodo da manha.';
|
|
case AtestadoModelo::PERIODO_TARDE:
|
|
return 'Em decorrencia, devera permanecer em afastamento de suas atividades laborativas no periodo da tarde.';
|
|
case AtestadoModelo::PERIODO_NOITE:
|
|
return 'Em decorrencia, devera permanecer em afastamento de suas atividades laborativas no periodo da noite.';
|
|
case AtestadoModelo::QUANTIDADE_HORAS:
|
|
if (is_null($quantidadeHoras) || is_null($horarioInicial)) {
|
|
return '';
|
|
}
|
|
|
|
$horario = (new DateTime($horarioInicial))->format('H:i');
|
|
$horasPorExtenso = NumericUtil::getPorExtenso($quantidadeHoras);
|
|
|
|
return "Em decorrencia, devera permanecer em afastamento de suas atividades laborativas por um periodo de {$quantidadeHoras} ({$horasPorExtenso}) hora(s), a partir das {$horario} hora(s).";
|
|
default:
|
|
if (is_null($dias)) {
|
|
return '';
|
|
}
|
|
|
|
$diasPorExtenso = NumericUtil::getPorExtenso($dias);
|
|
$sufixoDia = (int) $dias > 1 ? 's' : '';
|
|
|
|
return "Em decorrencia, devera permanecer em afastamento de suas atividades laborativas por um periodo de {$dias} ({$diasPorExtenso}) dia{$sufixoDia} a partir desta data.";
|
|
}
|
|
}
|
|
|
|
public function __invoke($atendimentoId = null)
|
|
{
|
|
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'atestado');
|
|
}
|
|
}
|