This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\Aih;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Aih\CausaExterna;
|
||||
use App\Models\ProntoAtendimento\Aih\Internacao;
|
||||
use App\Models\ProntoAtendimento\Aih\VinculoPrevidencia;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class LaudoController extends Controller
|
||||
{
|
||||
private const TITLE = 'LAUDO PARA SOLICITAÇÃO DE AUTORIZAÇÃO DE INTERNAÇÃO HOSPITALAR';
|
||||
private const TEMPLATE = 'pronto-atendimento.aih.laudo';
|
||||
|
||||
public static function getTemplate($id)
|
||||
{
|
||||
$internacao = Internacao::findOrFail($id);
|
||||
|
||||
$data = [
|
||||
'paciente' => self::getPacienteData($internacao->paciente),
|
||||
'internacao' => [
|
||||
'unidade_solicitante' => [
|
||||
'nome' => $internacao->unidadeSolicitante->nome_fantasia,
|
||||
'cnes' => $internacao->unidadeSolicitante->cnes
|
||||
],
|
||||
'unidade_internacao' => [
|
||||
'nome' => $internacao->unidadeInternacao->nome_fantasia,
|
||||
'cnes' => $internacao->unidadeInternacao->cnes
|
||||
],
|
||||
'principais_sinais_sintomas_clinicos' => $internacao->principais_sinais_sintomas_clinicos,
|
||||
'condicoes_que_justificam_internacao' => $internacao->condicoes_que_justificam_internacao,
|
||||
'principais_resultados_de_provas_diagnosticas' => $internacao->principais_resultados_de_provas_diagnosticas,
|
||||
'cid_principal' => [
|
||||
'codigo' => MaskUtil::getCidMasked($internacao->cidPrincipal->codigo),
|
||||
'nome' => $internacao->cidPrincipal->nome
|
||||
],
|
||||
'cid_secundario' => $internacao->cidSecundario
|
||||
? MaskUtil::getCidMasked($internacao->cidSecundario->codigo)
|
||||
: '',
|
||||
'cid_causas_associadas' => $internacao->cidCausasAssociadas
|
||||
? MaskUtil::getCidMasked($internacao->cidCausasAssociadas->codigo)
|
||||
: '',
|
||||
'procedimento' => self::getProcedimentoData($internacao->procedimento),
|
||||
'causa_externa' => self::getCausaExternaData(),
|
||||
]
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
private static function getPacienteData($paciente)
|
||||
{
|
||||
$cidadao = $paciente->cidadao;
|
||||
|
||||
return [
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prefere_nome_social' => $cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => MaskUtil::getCnsMasked($cidadao->cns),
|
||||
'cpf' => MaskUtil::getCpfMasked($cidadao->cpf),
|
||||
'data_nascimento' => $cidadao->data_nascimento ? $cidadao->data_nascimento->format('d/m/Y') : '',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s) "
|
||||
. "{$cidadao->idade['meses']} mês(s) "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: '',
|
||||
'sexo' => $cidadao->sexo->descricao,
|
||||
'raca_cor' => $cidadao->racaCor->descricao ?? '',
|
||||
'etnia_indigena' => $cidadao->etniaIndigena->descricao ?? '',
|
||||
'nome_mae' => $cidadao->nome_mae,
|
||||
'telefone' => MaskUtil::getPhoneMasked($cidadao->telefone_principal->numero ?? ''),
|
||||
'endereco' => [
|
||||
'completo' => $cidadao->domicilio
|
||||
? "{$cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '',
|
||||
'ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getProcedimentoData($procedimento)
|
||||
{
|
||||
return [
|
||||
'procedimento_solicitado' => [
|
||||
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->procedimentoSolicitado->codigo),
|
||||
'nome' => $procedimento->procedimentoSolicitado->nome
|
||||
],
|
||||
'data_solicitacao' => (new Carbon($procedimento->data_solicitacao))->format('d/m/Y'),
|
||||
'clinica' => $procedimento->clinica->nome,
|
||||
'carater_internacao' => $procedimento->caraterInternacao->nome,
|
||||
'profissional_solicitante_assistente' => $procedimento->profissionalSolicitanteAssistente->cidadao->nome,
|
||||
'documento' => [
|
||||
'nome' => $procedimento->documentoTipo->nome,
|
||||
'numero' => MaskUtil::getDocumentMasked(
|
||||
$procedimento->documento_tipo_id,
|
||||
$procedimento->documento_numero
|
||||
)
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getCausaExternaData()
|
||||
{
|
||||
return [
|
||||
'causas_externas' => CausaExterna::pluck('nome'),
|
||||
'vinculos_previdencia' => VinculoPrevidencia::pluck('nome')
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke($id)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($id), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\Aih;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Aih\Internacao;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class TermoResponsabilidadeController extends Controller
|
||||
{
|
||||
private const TITLE = 'TERMO DE RESPONSABILIDADE PARA PROCEDIMENTO MÉDICO';
|
||||
private const TEMPLATE = 'pronto-atendimento.aih.termo-responsabilidade';
|
||||
|
||||
public static function getTemplate($id)
|
||||
{
|
||||
$internacao = Internacao::findOrFail($id);
|
||||
|
||||
$data = [
|
||||
'paciente' => [
|
||||
'nome' => $internacao->paciente->cidadao->nome,
|
||||
'nome_social' => $internacao->paciente->cidadao->nome_social,
|
||||
'prefere_nome_social' => $internacao->paciente->cidadao
|
||||
->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'data_nascimento' => $internacao->paciente->cidadao->data_nascimento
|
||||
? $internacao->paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: '',
|
||||
'idade' => $internacao->paciente->cidadao->data_nascimento
|
||||
? "{$internacao->paciente->cidadao->idade['anos']} ano(s) "
|
||||
. "{$internacao->paciente->cidadao->idade['meses']} mês(s) "
|
||||
. "{$internacao->paciente->cidadao->idade['dias']} dia(s) "
|
||||
: '',
|
||||
'cns' => MaskUtil::getCnsMasked($internacao->paciente->cidadao->cns),
|
||||
'rg' => $internacao->paciente->cidadao->carteiraIdentidade->numero ?? '',
|
||||
'cpf' => MaskUtil::getCpfMasked($internacao->paciente->cidadao->cpf),
|
||||
'nome_mae' => $internacao->paciente->cidadao->nome_mae,
|
||||
'endereco' => $internacao->paciente->cidadao->domicilio
|
||||
? "{$internacao->paciente->cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($internacao->paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '',
|
||||
],
|
||||
'internacao' => [
|
||||
'unidade' => $internacao->unidadeInternacao->nome_fantasia
|
||||
],
|
||||
'horaAtual' => Carbon::now()->format('H:i')
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($id)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($id), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,149 @@
|
||||
<?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');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
<?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 AtestadoController extends Controller
|
||||
{
|
||||
private const TITLE = 'Atestado';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.atestado';
|
||||
|
||||
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,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
],
|
||||
'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,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
],
|
||||
'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');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Enums\ProntoAtendimento\Atendimento\Medico\DeclaracaoComparecimentoTipo;
|
||||
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\DeclaracaoComparecimento;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class DeclaracaoComparecimentoAcompanhanteController extends Controller
|
||||
{
|
||||
private const TITLE = 'Declaração de comparecimento do acompanhante';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.declaracao-comparecimento-acompanhante';
|
||||
|
||||
public static function getTemplate($atendimentoId = null)
|
||||
{
|
||||
$declaracoes = $atendimentoId
|
||||
? DeclaracaoComparecimento::orderByDesc('created_at')
|
||||
->where(function($query) use ($atendimentoId) {
|
||||
$query
|
||||
->whereHas('atendimentoMedico', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('atendimentoEnfermagem', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('pacienteObservacao', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('atendimentoTriagem', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('atendimentoExameImagem', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('recepcao', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
});
|
||||
})
|
||||
->where('tipo_id', DeclaracaoComparecimentoTipo::ACOMPANHANTE)
|
||||
->get()
|
||||
: request()->declaracoes;
|
||||
|
||||
$now = new \DateTime;
|
||||
|
||||
$data['declaracoes'] = [];
|
||||
|
||||
foreach ($declaracoes as $declaracao) {
|
||||
|
||||
if ((is_array($declaracao) && is_numeric($declaracao['id'] ?? null))
|
||||
|| $declaracao instanceof DeclaracaoComparecimento
|
||||
) {
|
||||
|
||||
if (!($declaracao instanceof DeclaracaoComparecimento)) {
|
||||
|
||||
$declaracao = DeclaracaoComparecimento::findOrFail($declaracao['id']);
|
||||
}
|
||||
|
||||
$paciente = self::getPaciente($declaracao);
|
||||
$profissioanal = self::getProfissional($declaracao);
|
||||
|
||||
$data['declaracoes'][] = [
|
||||
'acompanhante' => [
|
||||
'nome' => $declaracao->nome,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'sexoMasculino' => $paciente->cidadao->sexo->id === Sexo::MASCULINO
|
||||
|| $paciente->cidadao->sexo->base_id === Sexo::MASCULINO,
|
||||
],
|
||||
'documento' => [
|
||||
'tipo' => $declaracao->documentoTipo->nome,
|
||||
'numero' => MaskUtil::getDocumentMasked($declaracao->documento_tipo_id, $declaracao->documento_numero),
|
||||
],
|
||||
'unidade' => [
|
||||
'nome' => $declaracao->updatedLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
],
|
||||
'de' => $declaracao->de->format('H:i (d/m/Y)'),
|
||||
'ate' => $declaracao->ate->format('H:i (d/m/Y)'),
|
||||
'motivo' => $declaracao->motivo,
|
||||
'profissional' => [
|
||||
'nome' => $profissioanal->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $profissioanal->updatedLotacao->ocupacao->nome,
|
||||
],
|
||||
];
|
||||
}
|
||||
else {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$documentoTipo = DocumentoTipo::findOrFail($declaracao['documento_tipo_id']);
|
||||
|
||||
$data['declaracoes'][] = [
|
||||
'acompanhante' => [
|
||||
'nome' => $declaracao['nome'],
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'sexoMasculino' => $paciente->cidadao->sexo->id === Sexo::MASCULINO
|
||||
|| $paciente->cidadao->sexo->base_id === Sexo::MASCULINO,
|
||||
],
|
||||
'documento' => [
|
||||
'tipo' => $documentoTipo->nome,
|
||||
'numero' => MaskUtil::getDocumentMasked($documentoTipo->id, $declaracao['documento_numero']),
|
||||
],
|
||||
'unidade' => [
|
||||
'nome' => $lotacao->infraestrutura->unidade->nome_fantasia,
|
||||
],
|
||||
'de' => Carbon::createFromFormat('Y-m-d H:i', $declaracao['de'])->format('H:i (d/m/Y)'),
|
||||
'ate' => Carbon::createFromFormat('Y-m-d H:i', $declaracao['ate'])->format('H:i (d/m/Y)'),
|
||||
'motivo' => $declaracao['motivo'],
|
||||
'profissional' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'cbo' => $lotacao->ocupacao->nome,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
|
||||
public static function getPaciente($declaracao) {
|
||||
|
||||
$paciente = $declaracao->atendimentoMedico
|
||||
? $declaracao->atendimentoMedico->atendimento->faa->paciente
|
||||
: null;
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->atendimentoEnfermagem
|
||||
? $declaracao->atendimentoEnfermagem->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->atendimentoTriagem
|
||||
? $declaracao->atendimentoTriagem->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->pacienteObservacao
|
||||
? $declaracao->pacienteObservacao->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->pacienteObservacao
|
||||
? $declaracao->pacienteObservacao->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->atendimentoExameImagem
|
||||
? $declaracao->atendimentoExameImagem->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->recepcao
|
||||
? $declaracao->recepcao->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
return $paciente;
|
||||
}
|
||||
|
||||
public static function getProfissional($declaracao) {
|
||||
|
||||
$profissional = $declaracao->atendimentoMedico
|
||||
? $declaracao->atendimentoMedico
|
||||
: null;
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->atendimentoEnfermagem
|
||||
? $declaracao->atendimentoEnfermagem
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->atendimentoTriagem
|
||||
? $declaracao->atendimentoTriagem
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->pacienteObservacao
|
||||
? $declaracao->pacienteObservacao
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->atendimentoExameImagem
|
||||
? $declaracao->atendimentoExameImagem
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->recepcao
|
||||
? $declaracao->recepcao
|
||||
: null;
|
||||
}
|
||||
|
||||
return $profissional;
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'declaracao-comparecimento-acompanhante');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Enums\ProntoAtendimento\Atendimento\Medico\DeclaracaoComparecimentoTipo;
|
||||
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\DeclaracaoComparecimento;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class DeclaracaoComparecimentoPacienteController extends Controller
|
||||
{
|
||||
private const TITLE = 'Declaração de comparecimento do paciente';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.declaracao-comparecimento';
|
||||
|
||||
public static function getTemplate($atendimentoId = null)
|
||||
{
|
||||
$declaracoes = $atendimentoId
|
||||
? DeclaracaoComparecimento::orderByDesc('created_at')
|
||||
->where(function($query) use ($atendimentoId) {
|
||||
$query
|
||||
->whereHas('atendimentoMedico', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('atendimentoEnfermagem', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('pacienteObservacao', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('atendimentoTriagem', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('atendimentoExameImagem', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('recepcao', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
});
|
||||
})
|
||||
->where('tipo_id', DeclaracaoComparecimentoTipo::PACIENTE)
|
||||
->get()
|
||||
: request()->declaracoes;
|
||||
|
||||
$now = new \DateTime;
|
||||
|
||||
$data['declaracoes'] = [];
|
||||
|
||||
foreach ($declaracoes as $declaracao) {
|
||||
|
||||
if ((is_array($declaracao) && is_numeric($declaracao['id'] ?? null))
|
||||
|| $declaracao instanceof DeclaracaoComparecimento
|
||||
) {
|
||||
|
||||
if (!($declaracao instanceof DeclaracaoComparecimento)) {
|
||||
|
||||
$declaracao = DeclaracaoComparecimento::findOrFail($declaracao['id']);
|
||||
}
|
||||
|
||||
$paciente = self::getPaciente($declaracao);
|
||||
$profissioanal = self::getProfissional($declaracao);
|
||||
|
||||
$data['declaracoes'][] = [
|
||||
'acompanhante' => [
|
||||
'nome' => $declaracao->nome,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'sexoMasculino' => $paciente->cidadao->sexo->id === Sexo::MASCULINO
|
||||
|| $paciente->cidadao->sexo->base_id === Sexo::MASCULINO,
|
||||
],
|
||||
'documento' => [
|
||||
'tipo' => $declaracao->documentoTipo->nome,
|
||||
'numero' => MaskUtil::getDocumentMasked($declaracao->documento_tipo_id, $declaracao->documento_numero),
|
||||
],
|
||||
'unidade' => [
|
||||
'nome' => $declaracao->updatedLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
],
|
||||
'de' => $declaracao->de->format('H:i (d/m/Y)'),
|
||||
'ate' => $declaracao->ate->format('H:i (d/m/Y)'),
|
||||
'motivo' => $declaracao->motivo,
|
||||
'profissional' => [
|
||||
'nome' => $profissioanal->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $profissioanal->updatedLotacao->ocupacao->nome,
|
||||
],
|
||||
];
|
||||
}
|
||||
else {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
$documentoTipo = DocumentoTipo::findOrFail($declaracao['documento_tipo_id']);
|
||||
|
||||
$data['declaracoes'][] = [
|
||||
'acompanhante' => [
|
||||
'nome' => $declaracao['nome'],
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'sexoMasculino' => $paciente->cidadao->sexo->id === Sexo::MASCULINO
|
||||
|| $paciente->cidadao->sexo->base_id === Sexo::MASCULINO,
|
||||
],
|
||||
'documento' => [
|
||||
'tipo' => $documentoTipo->nome,
|
||||
'numero' => MaskUtil::getDocumentMasked($documentoTipo->id, $declaracao['documento_numero']),
|
||||
],
|
||||
'unidade' => [
|
||||
'nome' => $lotacao->infraestrutura->unidade->nome_fantasia,
|
||||
],
|
||||
'de' => Carbon::createFromFormat('Y-m-d H:i', $declaracao['de'])->format('H:i (d/m/Y)'),
|
||||
'ate' => Carbon::createFromFormat('Y-m-d H:i', $declaracao['ate'])->format('H:i (d/m/Y)'),
|
||||
'motivo' => $declaracao['motivo'],
|
||||
'profissional' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'cbo' => $lotacao->ocupacao->nome,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
|
||||
public static function getPaciente($declaracao) {
|
||||
|
||||
$paciente = $declaracao->atendimentoMedico
|
||||
? $declaracao->atendimentoMedico->atendimento->faa->paciente
|
||||
: null;
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->atendimentoEnfermagem
|
||||
? $declaracao->atendimentoEnfermagem->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->atendimentoTriagem
|
||||
? $declaracao->atendimentoTriagem->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->pacienteObservacao
|
||||
? $declaracao->pacienteObservacao->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->pacienteObservacao
|
||||
? $declaracao->pacienteObservacao->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->atendimentoExameImagem
|
||||
? $declaracao->atendimentoExameImagem->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$paciente) {
|
||||
|
||||
$paciente = $declaracao->recepcao
|
||||
? $declaracao->recepcao->atendimento->faa->paciente
|
||||
: null;
|
||||
}
|
||||
|
||||
return $paciente;
|
||||
}
|
||||
|
||||
public static function getProfissional($declaracao) {
|
||||
|
||||
$profissional = $declaracao->atendimentoMedico
|
||||
? $declaracao->atendimentoMedico
|
||||
: null;
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->atendimentoEnfermagem
|
||||
? $declaracao->atendimentoEnfermagem
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->atendimentoTriagem
|
||||
? $declaracao->atendimentoTriagem
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->pacienteObservacao
|
||||
? $declaracao->pacienteObservacao
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->atendimentoExameImagem
|
||||
? $declaracao->atendimentoExameImagem
|
||||
: null;
|
||||
}
|
||||
|
||||
if (!$profissional) {
|
||||
|
||||
$profissional = $declaracao->recepcao
|
||||
? $declaracao->recepcao
|
||||
: null;
|
||||
}
|
||||
|
||||
return $profissional;
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'declaracao-comparecimento-paciente');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class EncaminhamentoHospitalarController extends Controller
|
||||
{
|
||||
private const TITLE = 'Encaminhamento hospitalar';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.encaminhamento-hospitalar';
|
||||
|
||||
public static function getTemplate(int $atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
|
||||
$atendimentoMedico = $atendimento->atendimentosMedico->last();
|
||||
$paciente = $atendimento->faa->paciente;
|
||||
$encaminhamentoHospitalar = $atendimentoMedico->encaminhamentoHospitalar;
|
||||
|
||||
$data = [
|
||||
'unidade' => [
|
||||
'nome' => $encaminhamentoHospitalar->updatedLotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'idadeCompleta' => $paciente->cidadao->idade_formatada,
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'dataNascimento' => (new \DateTime($paciente->cidadao->data_nascimento))->format('d/m/Y'),
|
||||
'telefone' => $paciente->cidadao->telefone_principal
|
||||
? MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero)
|
||||
: null,
|
||||
'municipioNascimento' => $paciente->cidadao->municipioNascimento
|
||||
? "{$paciente->cidadao->municipioNascimento->nome} / "
|
||||
. $paciente->cidadao->municipioNascimento->estado->uf
|
||||
: '',
|
||||
'nomeMae' => $paciente->cidadao->nome_mae ?? '',
|
||||
],
|
||||
'encaminhamentoHospitalar' => [
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $encaminhamentoHospitalar->created_at->format('d \d\e F \d\e Y'),
|
||||
],
|
||||
'unidade' => $encaminhamentoHospitalar->unidade->nome_fantasia,
|
||||
'quarto' => $encaminhamentoHospitalar->quarto ?? '',
|
||||
'leito' => $encaminhamentoHospitalar->leito ?? '',
|
||||
'medico_hospitalar' => $encaminhamentoHospitalar->medico_hospitalar ?? '',
|
||||
'observacoes' => $encaminhamentoHospitalar->observacoes ?? '',
|
||||
'profissional' => [
|
||||
'nome' => $encaminhamentoHospitalar->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $encaminhamentoHospitalar->updatedLotacao->ocupacao->nome,
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
self::setEvolucoesMedicas($data, $atendimento);
|
||||
self::setEvolucoesEnfermagem($data, $atendimento);
|
||||
|
||||
if (DataUtil::isStringTrue(request()->atendimento_geral)) {
|
||||
|
||||
self::setAtendimentosGerais($data, $atendimento);
|
||||
}
|
||||
else if (is_array(request()->anamnese)) {
|
||||
|
||||
self::setAnamneses($data, $atendimento);
|
||||
}
|
||||
|
||||
if (DataUtil::isStringTrue(request()->imprime_cid)) {
|
||||
|
||||
$data['encaminhamentoHospitalar']['cid'] = $encaminhamentoHospitalar->cid
|
||||
? "{$encaminhamentoHospitalar->cid->codigo} - {$encaminhamentoHospitalar->cid->nome}" : '';
|
||||
}
|
||||
|
||||
self::setPrescricoesInternas($data, $atendimento);
|
||||
|
||||
$data['data_impressao'] = Carbon::now()->format('d/m/Y H:i:s');
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
private static function setEvolucoesMedicas(&$data, $atendimento)
|
||||
{
|
||||
if (request()->evolucao_medica !== 'ultima' && request()->evolucao_medica !== 'todas') {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$atendimentosMedico = $atendimento->atendimentosMedico()
|
||||
->whereNotNull('evolucao')
|
||||
->orderByDesc('created_at');
|
||||
|
||||
if (request()->evolucao_medica === 'ultima') {
|
||||
|
||||
$atendimentosMedico->take(1);
|
||||
}
|
||||
|
||||
$data['evolucoesMedicas'] = $atendimentosMedico->get()->map(fn ($atendimentoMedico) => [
|
||||
'dataHora' => $atendimentoMedico->created_at->format('d/m/Y H:i:s'),
|
||||
'profissional' => [
|
||||
'nome' => $atendimentoMedico->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $atendimentoMedico->createdLotacao->ocupacao->nome,
|
||||
],
|
||||
'evolucao' => $atendimentoMedico->evolucao
|
||||
]);
|
||||
}
|
||||
|
||||
private static function setEvolucoesEnfermagem(&$data, $atendimento)
|
||||
{
|
||||
if (request()->evolucao_enfermagem !== 'ultima' && request()->evolucao_enfermagem !== 'todas') {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$data['evolucoesEnfermagem'] = [];
|
||||
|
||||
// TODO: Adicionar as evoluções de enfermagem.
|
||||
}
|
||||
|
||||
private static function setAtendimentosGerais(&$data, $atendimento)
|
||||
{
|
||||
$atendimentosMedico = $atendimento->atendimentosMedico()->orderBy('created_at');
|
||||
|
||||
$data['atendimentosGerais'] = $atendimentosMedico->pluck('atendimento_geral');
|
||||
}
|
||||
|
||||
private static function setAnamneses(&$data, $atendimento)
|
||||
{
|
||||
$atendimentosMedico = $atendimento->atendimentosMedico()->orderBy('created_at');
|
||||
|
||||
$plurais = [
|
||||
'queixa_principal_duracao' => 'queixasPrincipaisDuracoes',
|
||||
'historia' => 'historias',
|
||||
'exame_fisico' => 'examesFisicos',
|
||||
'diagnostico' => 'diagnosticos',
|
||||
'conduta' => 'condutas',
|
||||
];
|
||||
|
||||
$anamnese = [
|
||||
'queixa_principal_duracao',
|
||||
'historia',
|
||||
'exame_fisico',
|
||||
'diagnostico',
|
||||
'conduta',
|
||||
];
|
||||
|
||||
foreach ($anamnese as $i => $item) {
|
||||
|
||||
if (!in_array($item, request()->anamnese)) {
|
||||
|
||||
unset($anamnese[$i]);
|
||||
}
|
||||
}
|
||||
|
||||
$atendimentosMedico->get()->each(function ($atendimentoMedico) use (&$data, $plurais, $anamnese) {
|
||||
|
||||
foreach ($anamnese as $item) {
|
||||
|
||||
if (empty($atendimentoMedico->{$item})) {
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$data[$plurais[$item]][] = $atendimentoMedico->{$item};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static function setPrescricoesInternas(&$data, $atendimento)
|
||||
{
|
||||
if (request()->prescricao_interna !== 'ultima' && request()->prescricao_interna !== 'todas') {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$prescricoesInternas = new Collection;
|
||||
|
||||
$atendimento->atendimentosMedico()->get()->each(function ($atendimentoMedico) use ($prescricoesInternas) {
|
||||
|
||||
$atendimentoMedico->prescricoesInternas->each(function ($prescricaoInterna) use ($prescricoesInternas) {
|
||||
|
||||
$prescricoesInternas->push($prescricaoInterna);
|
||||
});
|
||||
});
|
||||
|
||||
if (request()->prescricao_interna === 'ultima') {
|
||||
|
||||
$prescricoesInternas = $prescricoesInternas->sortByDesc('created_at')->take(1);
|
||||
}
|
||||
else {
|
||||
|
||||
$prescricoesInternas = $prescricoesInternas->sortBy('created_at');
|
||||
}
|
||||
|
||||
$data['prescricoesInternas'] = $prescricoesInternas->map(function ($prescricaoInterna) {
|
||||
|
||||
$data = [
|
||||
'dataHora' => $prescricaoInterna->updated_at->format('d/m/Y H:i:s'),
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoInterna->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoInterna->updatedLotacao->ocupacao->nome,
|
||||
],
|
||||
'viaAdministracao' => $prescricaoInterna->viaAdministracao->nome,
|
||||
'doseUnica' => $prescricaoInterna->dose_unica,
|
||||
'frequencia' => $prescricaoInterna->frequencia,
|
||||
'observacoes' => $prescricaoInterna->observacoes ?? '',
|
||||
'medicamentos' => [],
|
||||
];
|
||||
|
||||
foreach ($prescricaoInterna->medicamentos as $medicamento) {
|
||||
|
||||
$data['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'quantidade' => $medicamento->quantidade,
|
||||
'formaFarmaceutica' => $medicamento->medicamento->formaFarmaceutica->nome,
|
||||
'administracao' => $medicamento->administracao,
|
||||
'aplicacoes' => $medicamento->aplicacoes->map(function ($aplicacao, $index) {
|
||||
|
||||
return [
|
||||
'aplicacao' => $index + 1,
|
||||
'status' => $aplicacao->status->nome ?? null
|
||||
];
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
return $data;
|
||||
});
|
||||
}
|
||||
|
||||
public function __invoke(int $atendimentoMedicoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoMedicoId), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
|
||||
class EvolucaoAndPrescricaoInternaController extends Controller
|
||||
{
|
||||
private const TITLE = 'Evolução médica/prescrição interna';
|
||||
private const FILE_NAME = 'Evolução médica + prescrição interna';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.evolucao-prescricao';
|
||||
|
||||
public static function getTemplate(int $atendimentoMedicoId, int $prescricaoInternaId)
|
||||
{
|
||||
$templateEvolucaoMedica = EvolucaoController::getTemplate($atendimentoMedicoId, true);
|
||||
$templatePrescricaoInterna = PrescricaoInternaController::getTemplate($prescricaoInternaId, true);
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)
|
||||
->withData(['conteudo' => $templateEvolucaoMedica . $templatePrescricaoInterna])
|
||||
->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke(int $atendimentoMedicoId, int $prescricaoInternaId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoMedicoId, $prescricaoInternaId), self::FILE_NAME);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\AtendimentoMedico;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
|
||||
class EvolucaoController extends Controller
|
||||
{
|
||||
private const TITLE = 'Evolução médica';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.evolucao-medica';
|
||||
|
||||
public static function getTemplate(int $atendimentoMedicoId, bool $onlyContent = false)
|
||||
{
|
||||
$atendimentoMedico = AtendimentoMedico::findOrFail($atendimentoMedicoId);
|
||||
|
||||
$evolucoes = [];
|
||||
|
||||
$atendimentoMedico->atendimento->atendimentosMedico()
|
||||
->whereNotNull('evolucao')
|
||||
->orderByDesc('created_at')
|
||||
->get()
|
||||
->each(function ($atendimentoMedico) use (&$evolucoes) {
|
||||
|
||||
$evolucoes[] = [
|
||||
'dataHora' => $atendimentoMedico->created_at->format('d/m/Y H:i:s'),
|
||||
'profissional' => [
|
||||
'nome' => $atendimentoMedico->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $atendimentoMedico->createdLotacao->ocupacao->nome,
|
||||
],
|
||||
'evolucao' => $atendimentoMedico->evolucao
|
||||
];
|
||||
});
|
||||
|
||||
$template = $onlyContent ? self::TEMPLATE . '-conteudo' : self::TEMPLATE;
|
||||
|
||||
return Template::make(self::TITLE, $template)->withData(compact('evolucoes'))->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke(int $atendimentoMedicoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoMedicoId), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\Encaminhamento;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class GuiaEncaminhamentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'Guia de encaminhamento';
|
||||
private const SUBTITLE = 'Referência';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.guia-encaminhamento';
|
||||
|
||||
public static function getTemplate($atendimentoId = null)
|
||||
{
|
||||
$encaminhamentos = $atendimentoId
|
||||
? Encaminhamento::orderByDesc('created_at')
|
||||
->whereHas('atendimentoMedico', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->get()
|
||||
: request()->encaminhamentos;
|
||||
|
||||
$data['encaminhamentos'] = [];
|
||||
|
||||
foreach ($encaminhamentos as $encaminhamento) {
|
||||
|
||||
if ((is_array($encaminhamento) && is_numeric($encaminhamento['id'] ?? null))
|
||||
|| $encaminhamento instanceof Encaminhamento
|
||||
) {
|
||||
|
||||
if (!($encaminhamento instanceof Encaminhamento)) {
|
||||
|
||||
$encaminhamento = Encaminhamento::findOrFail($encaminhamento['id']);
|
||||
}
|
||||
|
||||
$paciente = $encaminhamento->atendimentoMedico->atendimento->faa->paciente;
|
||||
|
||||
$cid = "{$encaminhamento->atendimentoMedico->cid->cid->codigo} - "
|
||||
. $encaminhamento->atendimentoMedico->cid->cid->nome;
|
||||
|
||||
$data['encaminhamentos'][] = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'idadeCompleta' => $paciente->cidadao->idade_formatada,
|
||||
'dataNascimento' => $paciente->cidadao->data_nascimento
|
||||
? (new \DateTime($paciente->cidadao->data_nascimento))->format('d/m/Y')
|
||||
: null,
|
||||
'telefone' => $paciente->cidadao->telefone_principal
|
||||
? MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero)
|
||||
: null,
|
||||
'prontuarioUnidade' => $paciente->prontuario_unidade,
|
||||
'nomeMae' => $paciente->cidadao->nome_mae,
|
||||
'municipioNascimento' => $paciente->cidadao->municipioNascimento
|
||||
? "{$paciente->cidadao->municipioNascimento->nome} / "
|
||||
. $paciente->cidadao->municipioNascimento->estado->uf
|
||||
: '',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome' => $encaminhamento->updatedLotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => $encaminhamento->updatedLotacao->infraestrutura->unidade->cnes,
|
||||
],
|
||||
'profissional' => [
|
||||
'nome' => $encaminhamento->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $encaminhamento->updatedLotacao->ocupacao->nome,
|
||||
'cns' => $encaminhamento->updatedLotacao->usuario->cidadao->cns,
|
||||
],
|
||||
'cbo' => $encaminhamento->ocupacao->nome,
|
||||
'cid' => $cid,
|
||||
'urgente' => $encaminhamento->urgente,
|
||||
'motivo' => $encaminhamento->motivo,
|
||||
'observacoes' => $encaminhamento->observacoes ?? ''
|
||||
];
|
||||
}
|
||||
else {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
$cid = request()->cid_id ? Cid::findOrFail(request()->cid_id) : null;
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
|
||||
$data['encaminhamentos'][] = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'cns' => $paciente->cidadao->cns,
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'idadeCompleta' => $paciente->cidadao->idade_formatada,
|
||||
'dataNascimento' => $paciente->cidadao->data_nascimento
|
||||
? (new \DateTime($paciente->cidadao->data_nascimento))->format('d/m/Y')
|
||||
: null,
|
||||
'telefone' => $paciente->cidadao->telefone_principal
|
||||
? MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero)
|
||||
: null,
|
||||
'prontuarioUnidade' => $paciente->prontuario_unidade,
|
||||
'nomeMae' => $paciente->cidadao->nome_mae,
|
||||
'municipioNascimento' => $paciente->cidadao->municipioNascimento
|
||||
? "{$paciente->cidadao->municipioNascimento->nome} / "
|
||||
. $paciente->cidadao->municipioNascimento->estado->uf
|
||||
: '',
|
||||
],
|
||||
'unidade' => [
|
||||
'nome' => $lotacao->infraestrutura->unidade->nome_fantasia,
|
||||
'cnes' => $lotacao->infraestrutura->unidade->cnes,
|
||||
],
|
||||
'profissional' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'cbo' => $lotacao->ocupacao->nome,
|
||||
'cns' => $lotacao->usuario->cidadao->cns,
|
||||
],
|
||||
'cbo' => Ocupacao::findOrFail($encaminhamento['ocupacao_id'])->nome,
|
||||
'cid' => $cid ? "{$cid->codigo} - {$cid->nome}" : '',
|
||||
'urgente' => DataUtil::getBooleanValueFromStringBoolean($encaminhamento['urgente']),
|
||||
'motivo' => $encaminhamento['motivo'],
|
||||
'observacoes' => $encaminhamento['observacoes'] ?? ''
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)
|
||||
->withSubtitle(self::SUBTITLE)
|
||||
->withData($data)
|
||||
->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'guia-encaminhamento');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\AtendimentoMedico;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class OrientacoesController extends Controller
|
||||
{
|
||||
private const TITLE = 'Orientações ao paciente';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.orientacoes-medicas';
|
||||
|
||||
public static function getTemplate($atendimentoId = null)
|
||||
{
|
||||
if ($atendimentoId) {
|
||||
|
||||
$atendimentoMedico = AtendimentoMedico::orderByDesc('created_at')
|
||||
->where('atendimento_id', $atendimentoId)
|
||||
->whereNotNull('orientacoes')
|
||||
->firstOrFail();
|
||||
|
||||
$data = [
|
||||
'orientacoes' => $atendimentoMedico->orientacoes,
|
||||
'dataHora' => $atendimentoMedico->updated_at->format('d/m/Y H:i:s'),
|
||||
'profissional' => [
|
||||
'nome' => $atendimentoMedico->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $atendimentoMedico->updatedLotacao->ocupacao->nome,
|
||||
]
|
||||
];
|
||||
}
|
||||
else {
|
||||
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
|
||||
$data = [
|
||||
'orientacoes' => request()->orientacoes,
|
||||
'dataHora' => Carbon::now()->format('d/m/Y H:i:s'),
|
||||
'profissional' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'cbo' => $lotacao->ocupacao->nome,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'orientacoes');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Atendimento\AvaliacaoAntropometrica;
|
||||
use App\Models\ProntoAtendimento\Atendimento\PrescricaoInterna;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class PrescricaoInternaController extends Controller
|
||||
{
|
||||
private const TITLE = 'Prescrição interna';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.prescricao-interna';
|
||||
|
||||
public static function getTemplate($atendimentoId, bool $onlyContent = false)
|
||||
{
|
||||
|
||||
$prescricao = [];
|
||||
|
||||
$prescricao = array_map(function ($atendimento){
|
||||
return $atendimento['id'];
|
||||
}, request()->atendimentos);
|
||||
|
||||
$prescricoesInternas = PrescricaoInterna::orderByDesc('created_at')
|
||||
->whereHas('atendimentoMedico', function ($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->whereIn('atendimento_medico_id', $prescricao)
|
||||
->get();
|
||||
|
||||
$avaliacaoAntropometrica = AvaliacaoAntropometrica::where('atendimento_id', $atendimentoId)
|
||||
->orderByDesc('created_at')
|
||||
->first();
|
||||
|
||||
$massa = empty($avaliacaoAntropometrica->massa ?? null)
|
||||
? ''
|
||||
: "{$avaliacaoAntropometrica->massa} {$avaliacaoAntropometrica->massaUnidadeMedida->sigla}";
|
||||
|
||||
$altura = empty($avaliacaoAntropometrica->altura ?? null)
|
||||
? ''
|
||||
: "{$avaliacaoAntropometrica->altura} {$avaliacaoAntropometrica->alturaUnidadeMedida->sigla}";
|
||||
|
||||
$data['paciente'] = self::getPacienteData(Atendimento::findOrFail($atendimentoId));
|
||||
|
||||
$data['avaliacaoAntropometrica'] = [
|
||||
'massa' => $massa,
|
||||
'altura' => $altura,
|
||||
];
|
||||
|
||||
$data['prescricoesInternas'] = [];
|
||||
|
||||
foreach ($prescricoesInternas as $key => $prescricaoInterna) {
|
||||
$avaliacaoAntropometrica = $prescricaoInterna->atendimentoMedico->avaliacaoAntropometrica;
|
||||
|
||||
$massa = empty($avaliacaoAntropometrica->massa ?? null)
|
||||
? ''
|
||||
: "{$avaliacaoAntropometrica->massa} {$avaliacaoAntropometrica->massaUnidadeMedida->sigla}";
|
||||
|
||||
$data['prescricoesInternas'][$key] = [
|
||||
'massa' => $massa,
|
||||
'dataHora' => $prescricaoInterna->updated_at->format('d/m/Y H:i:s'),
|
||||
'profissional' => [
|
||||
'nome' => $prescricaoInterna->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $prescricaoInterna->updatedLotacao->ocupacao->nome,
|
||||
],
|
||||
'doseUnica' => $prescricaoInterna->dose_unica,
|
||||
'frequencia' => $prescricaoInterna->frequencia,
|
||||
'observacoes' => $prescricaoInterna->observacoes ?? '',
|
||||
'medicamentos' => [],
|
||||
'id' => $prescricaoInterna->id,
|
||||
'atendimento_medico_id' => $prescricaoInterna->atendimento_medico_id,
|
||||
];
|
||||
|
||||
foreach ($prescricaoInterna->medicamentos as $medicamento) {
|
||||
|
||||
$data['prescricoesInternas'][$key]['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'quantidade' => $medicamento->quantidade,
|
||||
'formaFarmaceutica' => $medicamento->medicamento->formaFarmaceutica->nome,
|
||||
'administracao' => $medicamento->administracao,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$template = $onlyContent ? self::TEMPLATE . '-conteudo' : self::TEMPLATE;
|
||||
|
||||
return Template::make(self::TITLE, $template)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
private static function getPacienteData($atendimento)
|
||||
{
|
||||
$paciente = $atendimento->faa->paciente;
|
||||
$cidadao = $paciente->cidadao;
|
||||
$gestacao = $atendimento->gestacoes->sortByDesc('created_at')->first();
|
||||
|
||||
return [
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'sexo' => $cidadao->sexo->descricao,
|
||||
'data_nascimento' => $cidadao->data_nascimento
|
||||
? $cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s), "
|
||||
. "{$cidadao->idade['meses']} mês(es) e "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: 'NÃO INFORMADA',
|
||||
'idade_gestacional' => $gestacao && $gestacao->idade_gestacional
|
||||
? "{$gestacao->idade_gestacional['semanas']} semana(s) e {$gestacao->idade_gestacional['dias']} dia(s)"
|
||||
: null,
|
||||
'nome_mae' => $cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'endereco' => $cidadao->domicilio
|
||||
? "{$cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: 'NÃO INFORMADO',
|
||||
'telefones' => $cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke(int $atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'prescricao-interna');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,227 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\Medicamento\ViaAdministracao;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\Receita;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\ReceitaMedicamento;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaController extends Controller
|
||||
{
|
||||
private const TITLE = 'Receita médica';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.receita-medica';
|
||||
|
||||
public static function getTemplate($atendimentoId = null, $params = [])
|
||||
{
|
||||
$receitasIds = $params['receitas_ids'] ?? [];
|
||||
$params['para_assinatura_eletronica'] = $params['para_assinatura_eletronica'] ?? false;
|
||||
|
||||
$paraAssinaturaEletronica = $params['para_assinatura_eletronica'] === true
|
||||
|| (DataUtil::isStringBoolean($params['para_assinatura_eletronica'])
|
||||
&& DataUtil::isStringTrue($params['para_assinatura_eletronica']));
|
||||
|
||||
$receitas = $atendimentoId
|
||||
? Receita::orderByDesc('created_at')
|
||||
->whereHas('medicamentos')
|
||||
->whereHas('atendimentoMedico', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->when(!empty($receitasIds), fn ($q) => $q->whereIn('id', $receitasIds))
|
||||
->get()
|
||||
: request()->receitas;
|
||||
|
||||
$data['receitas'] = [];
|
||||
$data['exibirAssinatura'] = !$paraAssinaturaEletronica;
|
||||
|
||||
foreach ($receitas as $key => $receita) {
|
||||
|
||||
if ((is_array($receita) && is_numeric($receita['id'] ?? null))
|
||||
|| $receita instanceof Receita
|
||||
) {
|
||||
|
||||
if (!($receita instanceof Receita)) {
|
||||
|
||||
$receita = Receita::findOrFail($receita['id']);
|
||||
}
|
||||
|
||||
$paciente = $receita->atendimentoMedico->atendimento->faa->paciente;
|
||||
|
||||
$enderecoPaciente = $paciente->cidadao->domicilio
|
||||
? "{$paciente->cidadao->domicilio->endereco->completo} - "
|
||||
. MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '';
|
||||
|
||||
$data['receitas'][$key] = [
|
||||
'isEspecial' => false,
|
||||
'profissional' => [
|
||||
'nome' => $receita->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $receita->updatedLotacao->ocupacao->nome,
|
||||
'documento' => $receita->updatedLotacao->usuario->registro_tipo_id
|
||||
? ($receita->updatedLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $receita->updatedLotacao->usuario->registro_tipo_outro
|
||||
: $receita->updatedLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$receita->updatedLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'endereco' => $receita->updatedLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($receita->updatedLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $enderecoPaciente,
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $receita->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => [],
|
||||
];
|
||||
|
||||
$medicamentos = $receita->medicamentos->where('medicamento.receita_tipo_id', TipoReceita::COMUM);
|
||||
|
||||
foreach ($medicamentos as $medicamento) {
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS
|
||||
? $medicamento->via_administracao_outras
|
||||
: $medicamento->medicamento->viaAdministracao->nome,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
$medicamentosManuais = $receita->medicamentos->whereNotNull('medicamento_manual');
|
||||
|
||||
foreach ($medicamentosManuais as $medicamentoManual) {
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'medicamento_manual' => $medicamentoManual->medicamento_manual,
|
||||
'usoContinuo' => $medicamentoManual->uso_continuo,
|
||||
'doseUnica' => $medicamentoManual->dose_unica,
|
||||
'livre' => $medicamentoManual->livre,
|
||||
'viaAdministracao' => null,
|
||||
'posologia' => $medicamentoManual->livre ? $medicamentoManual->descricao : $medicamentoManual->posologia,
|
||||
'recomendacoes' => $medicamentoManual->recomendacoes ?? '',
|
||||
'descricao' => $medicamentoManual->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
$prescricoesManuais = $receita->medicamentos->whereNotNull('prescricao_manual');
|
||||
|
||||
foreach ($prescricoesManuais as $prescricaoManual) {
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'prescricao_manual' => $prescricaoManual->prescricao_manual,
|
||||
];
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
|
||||
$enderecoPaciente = $paciente->cidadao->domicilio
|
||||
? "{$paciente->cidadao->domicilio->endereco->completo} - "
|
||||
. MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '';
|
||||
|
||||
$data['receitas'][$key] = [
|
||||
'isEspecial' => false,
|
||||
'profissional' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'cbo' => $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'endereco' => $lotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($lotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $enderecoPaciente,
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => [],
|
||||
];
|
||||
|
||||
foreach ($receita['medicamentos'] as $medicamento) {
|
||||
|
||||
$medicamento = new ReceitaMedicamento($medicamento);
|
||||
|
||||
if ($medicamento->medicamento && $medicamento->medicamento->receita_tipo_id === TipoReceita::COMUM) {
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS
|
||||
? $medicamento->via_administracao_outras
|
||||
: $medicamento->medicamento->viaAdministracao->nome,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
if ($medicamento->medicamento_manual) {
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'medicamento_manual' => $medicamento->medicamento_manual,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => null,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? '',
|
||||
];
|
||||
}
|
||||
|
||||
if ($medicamento->prescricao_manual) {
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'prescricao_manual' => $medicamento->prescricao_manual,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $pdf->stream(self::getTemplate($atendimentoId, request()->all()), 'receita-medica');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
||||
use App\Enums\Cadastro\Medicamento\ViaAdministracao;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\Receita;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\ReceitaMedicamento;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReceitaEspecialController extends Controller
|
||||
{
|
||||
private const TITLE = 'Receituário controle especial';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.receita-medica';
|
||||
|
||||
public static function getTemplate($atendimentoId = null, $params = [])
|
||||
{
|
||||
$receitasIds = $params['receitas_ids'] ?? [];
|
||||
$params['para_assinatura_eletronica'] = $params['para_assinatura_eletronica'] ?? false;
|
||||
|
||||
$paraAssinaturaEletronica = $params['para_assinatura_eletronica'] === true
|
||||
|| (DataUtil::isStringBoolean($params['para_assinatura_eletronica'])
|
||||
&& DataUtil::isStringTrue($params['para_assinatura_eletronica']));
|
||||
|
||||
$receitas = $atendimentoId
|
||||
? Receita::orderByDesc('created_at')
|
||||
->whereHas('medicamentos')
|
||||
->whereHas('atendimentoMedico', function($query) use ($atendimentoId) {
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->when(!empty($receitasIds), fn ($q) => $q->whereIn('id', $receitasIds))
|
||||
->get()
|
||||
: request()->receitas;
|
||||
|
||||
$data['receitas'] = [];
|
||||
$data['exibirAssinatura'] = !$paraAssinaturaEletronica;
|
||||
|
||||
$tiposEpeciais = collect([
|
||||
TipoReceita::ESPECIAL,
|
||||
TipoReceita::ESPECIAL_AMARELA,
|
||||
TipoReceita::ESPECIAL_AZUL
|
||||
]);
|
||||
|
||||
foreach ($receitas as $key => $receita) {
|
||||
|
||||
if ((is_array($receita) && is_numeric($receita['id'] ?? null))
|
||||
|| $receita instanceof Receita
|
||||
) {
|
||||
|
||||
if (!($receita instanceof Receita)) {
|
||||
|
||||
$receita = Receita::findOrFail($receita['id']);
|
||||
}
|
||||
|
||||
$paciente = $receita->atendimentoMedico->atendimento->faa->paciente;
|
||||
|
||||
$enderecoPaciente = $paciente->cidadao->domicilio
|
||||
? "{$paciente->cidadao->domicilio->endereco->completo} - "
|
||||
. MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '';
|
||||
|
||||
$data['receitas'][$key] = [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $receita->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $receita->updatedLotacao->ocupacao->nome,
|
||||
'documento' => $receita->updatedLotacao->usuario->registro_tipo_id
|
||||
? ($receita->updatedLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $receita->updatedLotacao->usuario->registro_tipo_outro
|
||||
: $receita->updatedLotacao->usuario->registroTipo->sigla
|
||||
) . ": {$receita->updatedLotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'endereco' => $receita->updatedLotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($receita->updatedLotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $enderecoPaciente,
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null,
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => $receita->created_at->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => [],
|
||||
];
|
||||
|
||||
$medicamentos = $receita->medicamentos
|
||||
->whereIn('medicamento.receita_tipo_id', $tiposEpeciais->toArray());
|
||||
|
||||
foreach ($medicamentos as $medicamento) {
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS
|
||||
? $medicamento->via_administracao_outras
|
||||
: $medicamento->medicamento->viaAdministracao->nome,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? ''
|
||||
];
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->paciente_id);
|
||||
$lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id'));
|
||||
|
||||
$enderecoPaciente = $paciente->cidadao->domicilio
|
||||
? "{$paciente->cidadao->domicilio->endereco->completo} - "
|
||||
. MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '';
|
||||
|
||||
$data['receitas'][$key] = [
|
||||
'isEspecial' => true,
|
||||
'profissional' => [
|
||||
'nome' => $lotacao->usuario->cidadao->nome,
|
||||
'cbo' => $lotacao->ocupacao->nome,
|
||||
'documento' => $lotacao->usuario->registro_tipo_id
|
||||
? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $lotacao->usuario->registro_tipo_outro
|
||||
: $lotacao->usuario->registroTipo->sigla
|
||||
) . ": {$lotacao->usuario->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'endereco' => $lotacao->infraestrutura->endereco->completo,
|
||||
'telefone' => MaskUtil::getPhoneMasked($lotacao->infraestrutura->telefone),
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'endereco' => $enderecoPaciente,
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null,
|
||||
'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null),
|
||||
],
|
||||
'dataCadastro' => [
|
||||
'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'),
|
||||
],
|
||||
'medicamentos' => [],
|
||||
];
|
||||
|
||||
foreach ($receita['medicamentos'] as $medicamento) {
|
||||
|
||||
$medicamento = new ReceitaMedicamento($medicamento);
|
||||
|
||||
if (!$medicamento->medicamento || !$tiposEpeciais->contains($medicamento->medicamento->receita_tipo_id)) {
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$data['receitas'][$key]['medicamentos'][] = [
|
||||
'nome' => $medicamento->medicamento->nome,
|
||||
'usoContinuo' => $medicamento->uso_continuo,
|
||||
'doseUnica' => $medicamento->dose_unica,
|
||||
'livre' => $medicamento->livre,
|
||||
'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS
|
||||
? $medicamento->via_administracao_outras
|
||||
: $medicamento->medicamento->viaAdministracao->nome,
|
||||
'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia,
|
||||
'recomendacoes' => $medicamento->recomendacoes ?? '',
|
||||
'descricao' => $medicamento->descricao ?? ''
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
$pdf = new Pdf();
|
||||
$pdf->setPaper('A4', 'landscape');
|
||||
|
||||
return $pdf->stream(self::getTemplate($atendimentoId, request()->all()), 'receita-medica-especial');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Atendimento\ServicoEnfermagem;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
|
||||
class ServicoEnfermagemController extends Controller
|
||||
{
|
||||
private const TITLE = 'Solicitação de Serviços de Enfermagem';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.servicos-enfermagem';
|
||||
|
||||
public function __invoke(int $atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'servicos-enfermagem');
|
||||
}
|
||||
|
||||
public static function getTemplate(int $atendimentoId)
|
||||
{
|
||||
$servicosEnfermagem = ServicoEnfermagem::whereHas('atendimentoMedico', function ($query) use ($atendimentoId) {
|
||||
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('atendimentoEnfermagem', function ($query) use ($atendimentoId) {
|
||||
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->orWhereHas('pacienteObservacao', function ($query) use ($atendimentoId) {
|
||||
|
||||
$query->where('atendimento_id', $atendimentoId);
|
||||
})
|
||||
->get();
|
||||
|
||||
$data['paciente'] = self::getPacienteData(Atendimento::findOrFail($atendimentoId));
|
||||
$data['servicosEnfermagem'] = [];
|
||||
|
||||
foreach ($servicosEnfermagem as $servicoEnfermagem) {
|
||||
$data['servicosEnfermagem'][] = [
|
||||
'data' => $servicoEnfermagem->created_at->format('d/m/Y H:i:s'),
|
||||
'medico' => [
|
||||
'nome' => $servicoEnfermagem->updatedLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $servicoEnfermagem->updatedLotacao->ocupacao->nome,
|
||||
],
|
||||
'procedimentos' => [
|
||||
'nome' => $servicoEnfermagem->procedimento->nome,
|
||||
'codigo' => MaskUtil::getProcedimentoMasked($servicoEnfermagem->procedimento->codigo),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
private static function getPacienteData($atendimento)
|
||||
{
|
||||
$paciente = $atendimento->faa->paciente;
|
||||
$cidadao = $paciente->cidadao;
|
||||
$gestacao = $atendimento->gestacoes->sortByDesc('created_at')->first();
|
||||
|
||||
return [
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'sexo' => $cidadao->sexo->descricao,
|
||||
'data_nascimento' => $cidadao->data_nascimento
|
||||
? $cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s), "
|
||||
. "{$cidadao->idade['meses']} mês(es) e "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: 'NÃO INFORMADA',
|
||||
'idade_gestacional' => $gestacao && $gestacao->idade_gestacional
|
||||
? "{$gestacao->idade_gestacional['semanas']} semana(s) e {$gestacao->idade_gestacional['dias']} dia(s)"
|
||||
: null,
|
||||
'nome_mae' => $cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'endereco' => $cidadao->domicilio
|
||||
? "{$cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: 'NÃO INFORMADO',
|
||||
'telefones' => $cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Parametrizacao\Exame\Tipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\AtendimentoMedico;
|
||||
use App\Models\ProntoAtendimento\PedidoExame\PedidoExame;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class SolicitacaoExameImagemController extends Controller
|
||||
{
|
||||
private const TITLE = 'Solicitação de exames de imagem';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.solicitacao-exames-imagem';
|
||||
|
||||
public function __invoke(int $atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), 'solicitacao-exames-imagem');
|
||||
}
|
||||
|
||||
public static function getTemplate(int $atendimentoId)
|
||||
{
|
||||
$pedidosExames = PedidoExame::orderByDesc('created_at')
|
||||
->where('atendimento_id', $atendimentoId)
|
||||
->get();
|
||||
|
||||
$data['paciente'] = self::getPacienteData(Atendimento::findOrFail($atendimentoId));
|
||||
$data['pedidosExames'] = [];
|
||||
|
||||
foreach ($pedidosExames as $pedidoExame) {
|
||||
|
||||
$data['pedidosExames'][] = [
|
||||
'urgente' => $pedidoExame->urgente,
|
||||
'data' => $pedidoExame->created_at->format('d/m/Y H:i:s'),
|
||||
'justificativa' => $pedidoExame->justificativa,
|
||||
'medico' => [
|
||||
'nome' => $pedidoExame->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $pedidoExame->createdLotacao->ocupacao->nome
|
||||
],
|
||||
'exames' => self::getExames($pedidoExame)
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
private static function getExames($pedidoExme)
|
||||
{
|
||||
$result = [];
|
||||
|
||||
foreach ($pedidoExme['exames'] as $item) {
|
||||
if ($item->exame->tipo_id === Tipo::IMAGEM) {
|
||||
$result[] = [
|
||||
'id' => $item->exame->id,
|
||||
'nome' => $item->exame->nome,
|
||||
'codigo' => $item->exame->codigo,
|
||||
'observacao_medico' => $item->observacao_medico,
|
||||
'observacao_executante' => $item->observacao_executante,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private static function getPacienteData($atendimento)
|
||||
{
|
||||
$paciente = $atendimento->faa->paciente;
|
||||
$cidadao = $paciente->cidadao;
|
||||
$gestacao = $atendimento->gestacoes->sortByDesc('created_at')->first();
|
||||
|
||||
return [
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'sexo' => $cidadao->sexo->descricao,
|
||||
'data_nascimento' => $cidadao->data_nascimento
|
||||
? $cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s), "
|
||||
. "{$cidadao->idade['meses']} mês(es) e "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: 'NÃO INFORMADA',
|
||||
'idade_gestacional' => $gestacao && $gestacao->idade_gestacional
|
||||
? "{$gestacao->idade_gestacional['semanas']} semana(s) e {$gestacao->idade_gestacional['dias']} dia(s)"
|
||||
: null,
|
||||
'nome_mae' => $cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'endereco' => $cidadao->domicilio
|
||||
? "{$cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: 'NÃO INFORMADO',
|
||||
'telefones' => $cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoMedico;
|
||||
|
||||
use App\Enums\Parametrizacao\Exame\Tipo;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Medico\AtendimentoMedico;
|
||||
use App\Models\ProntoAtendimento\PedidoExame\PedidoExame;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class SolicitacaoExameLaboratorialController extends Controller
|
||||
{
|
||||
private const TITLE = 'Solicitação de exames laboratoriais';
|
||||
private const TEMPLATE = 'pronto-atendimento.atendimento-medico.solicitacao-exames-laboratoriais';
|
||||
|
||||
public static function getTemplate(int $atendimentoId)
|
||||
{
|
||||
$pedidosExames = PedidoExame::orderByDesc('created_at')
|
||||
->where('atendimento_id', $atendimentoId)
|
||||
->get();
|
||||
|
||||
$data['paciente'] = self::getPacienteData(Atendimento::findOrFail($atendimentoId));
|
||||
$data['pedidosExames'] = [];
|
||||
|
||||
foreach ($pedidosExames as $pedidoExame) {
|
||||
$data['pedidosExames'][] = [
|
||||
'urgente' => $pedidoExame->urgente,
|
||||
'data' => $pedidoExame->created_at->format('d/m/Y H:i:s'),
|
||||
'justificativa' => $pedidoExame->justificativa,
|
||||
'medico' => [
|
||||
'nome' => $pedidoExame->createdLotacao->usuario->cidadao->nome,
|
||||
'cbo' => $pedidoExame->createdLotacao->ocupacao->nome
|
||||
],
|
||||
'exames' => self::getExames($pedidoExame)
|
||||
];
|
||||
}
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
private static function getExames($pedidoExme)
|
||||
{
|
||||
$result = [];
|
||||
|
||||
foreach ($pedidoExme['exames'] as $item) {
|
||||
if ($item->exame->tipo_id === Tipo::LABORATORIAL) {
|
||||
$result[] = [
|
||||
'id' => $item->exame->id,
|
||||
'nome' => $item->exame->nome,
|
||||
'codigo' => $item->exame->codigo,
|
||||
'observacao_medico' => $item->observacao_medico,
|
||||
'observacao_executante' => $item->observacao_executante,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private static function getPacienteData($atendimento)
|
||||
{
|
||||
$paciente = $atendimento->faa->paciente;
|
||||
$cidadao = $paciente->cidadao;
|
||||
$gestacao = $atendimento->gestacoes->sortByDesc('created_at')->first();
|
||||
|
||||
return [
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'sexo' => $cidadao->sexo->descricao,
|
||||
'data_nascimento' => $cidadao->data_nascimento
|
||||
? $cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'idade' => $cidadao->data_nascimento
|
||||
? "{$cidadao->idade['anos']} ano(s), "
|
||||
. "{$cidadao->idade['meses']} mês(es) e "
|
||||
. "{$cidadao->idade['dias']} dia(s) "
|
||||
: 'NÃO INFORMADA',
|
||||
'idade_gestacional' => $gestacao && $gestacao->idade_gestacional
|
||||
? "{$gestacao->idade_gestacional['semanas']} semana(s) e {$gestacao->idade_gestacional['dias']} dia(s)"
|
||||
: null,
|
||||
'nome_mae' => $cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'endereco' => $cidadao->domicilio
|
||||
? "{$cidadao->domicilio->endereco->completo}, "
|
||||
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: 'NÃO INFORMADO',
|
||||
'telefones' => $cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke(int $pedidoExameId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($pedidoExameId), 'solicitacao-exames-laboratoriais');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoTriagem;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Triagem\Encaminhamento;
|
||||
use App\Utils\MaskUtil;
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class GuiaEncaminhamentoController extends Controller
|
||||
{
|
||||
public function __invoke($atendimentoId = null)
|
||||
{
|
||||
$cliente = Cliente::where('link', app('config')->get('database.default'))
|
||||
->where('sistema_id', 1)
|
||||
->firstOrFail();
|
||||
|
||||
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
|
||||
|
||||
$encaminhamentos = [];
|
||||
|
||||
if (!is_null($atendimentoId)) {
|
||||
$encaminhamentos = self::getEncaminhamentosByAtendimento($atendimentoId);
|
||||
} else {
|
||||
$encaminhamentos = self::getEncaminhamentos(request()->paciente_id);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'cliente' => [
|
||||
'nome' => Str::upper($cliente->nome),
|
||||
'logotipo' => $logotipo,
|
||||
],
|
||||
'encaminhamentos' => $encaminhamentos,
|
||||
];
|
||||
|
||||
return SnappyPdf::loadView('impressoes.template.pronto-atendimento.atendimento-triagem.guia-encaminhamento', compact('data'))
|
||||
->setOption('header-html', '')
|
||||
->setOption('footer-html', '')
|
||||
->setOption('margin-top', '10')
|
||||
->setOption('margin-bottom', '10')
|
||||
->inline();
|
||||
}
|
||||
|
||||
public static function getEncaminhamentosByAtendimento($atendimentoId)
|
||||
{
|
||||
$encaminhamentos = [];
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$paciente = $atendimento->faa->paciente;
|
||||
|
||||
$atendimento->atendimentosTriagem->each(function ($atendimentoTriagem) use ($paciente, &$encaminhamentos) {
|
||||
$atendimentoTriagem->encaminhamentos->each(function ($encaminhamento) use ($paciente, &$encaminhamentos) {
|
||||
$lotacaoOrigem = $encaminhamento->createdLotacao;
|
||||
$infraestruturaOrigem = $lotacaoOrigem->infraestrutura;
|
||||
$usuarioOrigem = $lotacaoOrigem->usuario;
|
||||
$infraestruturaDestino = $encaminhamento->infraestrutura;
|
||||
$instituicao = $infraestruturaDestino->unidade->nome_fantasia;
|
||||
$endereco = $infraestruturaDestino->endereco->completo;
|
||||
|
||||
$encaminhamentos[] = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'idade' => $paciente->cidadao->idade_formatada,
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
||||
'numero' => $paciente->cidadao->domicilio->endereco->numero,
|
||||
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero,
|
||||
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
|
||||
'cep' => $paciente->cidadao->domicilio
|
||||
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: null,
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome,
|
||||
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
|
||||
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
],
|
||||
'instituicao' => $instituicao,
|
||||
'endereco' => $endereco,
|
||||
'unidade_origem' => [
|
||||
'nome_fantasia' => isset($infraestruturaOrigem->unidade->nome_fantasia)
|
||||
? substr($infraestruturaOrigem->unidade->nome_fantasia, 0, 40) : null,
|
||||
'cnes' => $infraestruturaOrigem->unidade->cnes,
|
||||
'telefone' => $infraestruturaOrigem->telefone ? MaskUtil::getPhoneMasked($infraestruturaOrigem->telefone) : null,
|
||||
],
|
||||
'usuario_origem' => [
|
||||
'nome' => $usuarioOrigem->cidadao->nome ?? null,
|
||||
'usuario_nome' => $usuarioOrigem->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacaoOrigem->ocupacao->codigo . ' - '
|
||||
. $lotacaoOrigem->ocupacao->nome,
|
||||
'documento' => $usuarioOrigem->registro_tipo_id
|
||||
? ($usuarioOrigem->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $usuarioOrigem->registro_tipo_outro
|
||||
: $usuarioOrigem->registroTipo->sigla
|
||||
) . ": {$usuarioOrigem->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'data' => Carbon::now()->format('d/m/Y') ?? null,
|
||||
'horario' => Carbon::now()->format('H:i') ?? null,
|
||||
'motivo' => $encaminhamento['motivo'] ?? null,
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
return $encaminhamentos;
|
||||
}
|
||||
|
||||
public static function getEncaminhamentos($pacienteId)
|
||||
{
|
||||
$encaminhamentos = [];
|
||||
|
||||
$paciente = Paciente::findOrFail($pacienteId);
|
||||
|
||||
foreach (request()->encaminhamentos as $encaminhamento) {
|
||||
$lotacaoOrigem = null;
|
||||
$infraestruturaDestino = null;
|
||||
|
||||
if (isset($encaminhamento['id'])) {
|
||||
$encaminhamento = Encaminhamento::findOrFail($encaminhamento['id']);
|
||||
$lotacaoOrigem = $encaminhamento->createdLotacao;
|
||||
$infraestruturaDestino = $encaminhamento->infraestrutura;
|
||||
} else {
|
||||
$lotacaoOrigem = self::getCurrentLotacao();
|
||||
$infraestruturaDestino = Infraestrutura::findOrFail($encaminhamento['infraestrutura_id']);
|
||||
}
|
||||
|
||||
$infraestruturaOrigem = $lotacaoOrigem->infraestrutura;
|
||||
$usuarioOrigem = $lotacaoOrigem->usuario;
|
||||
|
||||
$instituicao = $infraestruturaDestino->unidade->nome_fantasia;
|
||||
$endereco = $infraestruturaDestino->endereco->completo;
|
||||
|
||||
$encaminhamentos[] = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'prontuario' => $paciente->prontuario,
|
||||
'nome_social' => $paciente->cidadao->nome_social,
|
||||
'idade' => $paciente->cidadao->idade_formatada,
|
||||
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
|
||||
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
|
||||
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'data_nascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y')
|
||||
: 'NÃO INFORMADA',
|
||||
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
|
||||
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
|
||||
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
|
||||
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
|
||||
'numero' => $paciente->cidadao->domicilio->endereco->numero,
|
||||
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero,
|
||||
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
|
||||
'cep' => $paciente->cidadao->domicilio
|
||||
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
|
||||
: null,
|
||||
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome,
|
||||
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
|
||||
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
|
||||
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
|
||||
],
|
||||
'instituicao' => $instituicao,
|
||||
'endereco' => $endereco,
|
||||
'unidade_origem' => [
|
||||
'nome_fantasia' => isset($infraestruturaOrigem->unidade->nome_fantasia)
|
||||
? substr($infraestruturaOrigem->unidade->nome_fantasia, 0, 40) : null,
|
||||
'cnes' => $infraestruturaOrigem->unidade->cnes,
|
||||
'telefone' => $infraestruturaOrigem->telefone ? MaskUtil::getPhoneMasked($infraestruturaOrigem->telefone) : null,
|
||||
],
|
||||
'usuario_origem' => [
|
||||
'nome' => $usuarioOrigem->cidadao->nome ?? null,
|
||||
'usuario_nome' => $usuarioOrigem->cidadao->nome,
|
||||
'ocupacao_descricao' => $lotacaoOrigem->ocupacao->codigo . ' - '
|
||||
. $lotacaoOrigem->ocupacao->nome,
|
||||
'documento' => $usuarioOrigem->registro_tipo_id
|
||||
? ($usuarioOrigem->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
||||
? $usuarioOrigem->registro_tipo_outro
|
||||
: $usuarioOrigem->registroTipo->sigla
|
||||
) . ": {$usuarioOrigem->registro_numero}"
|
||||
: 'Conselho profissional: NÃO INFORMADO',
|
||||
],
|
||||
'data' => Carbon::now()->format('d/m/Y') ?? null,
|
||||
'horario' => Carbon::now()->format('H:i') ?? null,
|
||||
'motivo' => $encaminhamento['motivo'] ?? null,
|
||||
];
|
||||
}
|
||||
|
||||
return $encaminhamentos;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Enums\ProntoAtendimento\Raat\CausaAcidente as RaatCausaAcidente;
|
||||
use App\Enums\ProntoAtendimento\Raat\Diagnostico as RaatDiagnostico;
|
||||
use App\Enums\ProntoAtendimento\Raat\ParteCorpoAtingida as RaatParteCorpoAtingida;
|
||||
use App\Enums\ProntoAtendimento\Raat\RegimeTrabalho as RaatRegimeTrabalho;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Cat;
|
||||
use App\Models\ProntoAtendimento\Raat\Agente;
|
||||
use App\Models\ProntoAtendimento\Raat\CausaAcidente;
|
||||
use App\Models\ProntoAtendimento\Raat\ClassificacaoInicial;
|
||||
use App\Models\ProntoAtendimento\Raat\Diagnostico;
|
||||
use App\Models\ProntoAtendimento\Raat\ParteCorpoAtingida;
|
||||
use App\Models\ProntoAtendimento\Raat\RegimeTrabalho;
|
||||
use App\Models\ProntoAtendimento\Raat\TipoAcidente;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class CatController extends Controller
|
||||
{
|
||||
private const TITLE = 'SOLICITAÇÃO PARA EMISSÃO DE COMUNICAÇÃO DE ACIDENTE DE TRABALHO - CAT';
|
||||
private const TEMPLATE = 'pronto-atendimento.cat';
|
||||
|
||||
public static function getTemplate($atendimentoId)
|
||||
{
|
||||
$faa = Atendimento::findOrFail($atendimentoId)->faa;
|
||||
$paciente = $faa->paciente;
|
||||
$raat = $faa->raat;
|
||||
$parecerMedico = $faa->raat ? $faa->raat->pareceresMedico()->orderByDesc('id')->first() : null;
|
||||
$cat = Cat::where('raat_id', $raat->id)->first();
|
||||
|
||||
$tiposAcidentes = TipoAcidente::orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($tipo) => [
|
||||
$tipo->nome,
|
||||
$tipo->id === ($raat->acidente_tipo_id ?? null)
|
||||
]);
|
||||
|
||||
$regimeTrabalho = RegimeTrabalho::orderBy('nome')
|
||||
->get()
|
||||
->first(fn ($regime) => $regime->id === ($raat->regime_trabalho_id ?? null));
|
||||
|
||||
$regimeTrabalho = $regimeTrabalho->id === RaatRegimeTrabalho::OUTRO ? $raat->regime_trabalho_outro : $regimeTrabalho->nome;
|
||||
|
||||
$agentes = Agente::all()
|
||||
->map(fn ($agente) => [
|
||||
$agente->nome,
|
||||
$agente->id === ($parecerMedico->agente_id ?? null)
|
||||
]);
|
||||
|
||||
$partesCorpoAtingidasChecked = $parecerMedico ? $parecerMedico->partesCorpoAtingidas->pluck('id') : collect();
|
||||
|
||||
$partesCorpoAtingidas = ParteCorpoAtingida::orderBy('id')
|
||||
->get()
|
||||
->reject(fn ($parte) => $parte->id === RaatParteCorpoAtingida::OUTROS)
|
||||
->map(fn ($parte) => [
|
||||
$parte->nome,
|
||||
$partesCorpoAtingidasChecked->contains($parte->id)
|
||||
]);
|
||||
|
||||
$causasAcidenteChecked = $parecerMedico ? $parecerMedico->causasAcidente->pluck('id') : collect();
|
||||
|
||||
$causasAcidente = CausaAcidente::all()
|
||||
->reject(fn ($causa) => $causa->id === RaatCausaAcidente::OUTROS)
|
||||
->map(fn ($causa) => [
|
||||
$causa->nome,
|
||||
$causasAcidenteChecked->contains($causa->id)
|
||||
]);
|
||||
|
||||
$diagnosticosChecked = $parecerMedico ? $parecerMedico->diagnosticos->pluck('id') : collect();
|
||||
|
||||
$diagnosticos = Diagnostico::all()
|
||||
->reject(fn ($diagnostico) => $diagnostico->id === RaatDiagnostico::OUTROS)
|
||||
->map(fn ($diagnostico) => [
|
||||
$diagnostico->nome,
|
||||
$diagnosticosChecked->contains($diagnostico->id)
|
||||
]);
|
||||
|
||||
$classificacoesIniciais = ClassificacaoInicial::all()
|
||||
->map(fn ($classificacao) => [
|
||||
$classificacao->nome,
|
||||
$classificacao->id === ($parecerMedico->classificacao_inicial_id ?? null)
|
||||
]);
|
||||
|
||||
$data = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'dataNascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y') : '',
|
||||
],
|
||||
'empresa' => [
|
||||
'nome' => $raat->empresa_nome ?? '',
|
||||
'ramoAtividade' => $raat->empresa_ramo_atividade ?? '',
|
||||
'endereco' => $raat->empresa_endereco ?? '',
|
||||
'telefone' => $raat && $raat->empresa_telefone ? MaskUtil::getPhoneMasked($raat->empresa_telefone) : '',
|
||||
'ocupacaoPaciente' => $cat->empresa_ocupacao_paciente,
|
||||
],
|
||||
'identificacaoAcidente' => [
|
||||
'data' => $raat && $raat->acidente_data ? $raat->acidente_data->format('d/m/Y') : null,
|
||||
'hora' => $raat && $raat->acidente_hora ? $raat->acidente_hora->format('H:i') : null,
|
||||
'tipoAcidente' => self::retonarPrimeiroVerdadeiro($tiposAcidentes),
|
||||
'local' => $raat->acidente_local ?? '',
|
||||
'descricao' => $raat->acidente_descricao ?? '',
|
||||
'regimeTrabalho' => $regimeTrabalho,
|
||||
'regimeTrabalhoOutro' => $raat->regime_trabalho_outro ?? '',
|
||||
],
|
||||
'agente' => self::retonarPrimeiroVerdadeiro($agentes),
|
||||
'partesCorpoAtingidas' => $parecerMedico ? self::retornaElementosInline($partesCorpoAtingidas, $parecerMedico->parte_corpo_atingida_outras) : '',
|
||||
'causasAcidente' => $parecerMedico ? self::retornaElementosInline($causasAcidente, $parecerMedico->causa_acidente_outras) : '',
|
||||
'diagnosticos' => $parecerMedico ? self::retornaElementosInline($diagnosticos, $parecerMedico->diagnostico_outros) : '',
|
||||
'cid' => ($parecerMedico->atendimentoMedico->cid->cid ?? null)
|
||||
? $parecerMedico->atendimentoMedico->cid->cid->codigo
|
||||
. ' - ' . $parecerMedico->atendimentoMedico->cid->cid->nome
|
||||
: '',
|
||||
'observacao' => $parecerMedico->observacao ?? '',
|
||||
'comAfastamento' => $parecerMedico ? ($parecerMedico->afastado === true ? 'SIM' : ($parecerMedico->afastado === false ? 'NÃO' : '')) : '',
|
||||
'classificacoesIniciais' => $classificacoesIniciais,
|
||||
'hasParecerMedico' => !!$parecerMedico,
|
||||
'profissional' => [
|
||||
'nome' => $parecerMedico->updatedLotacao->usuario->cidadao->nome ?? null,
|
||||
'cbo' => $parecerMedico->updatedLotacao->ocupacao->nome ?? null,
|
||||
],
|
||||
'sofreuAcidenteTrabalho' => self::converteBoleanoEmRadio($cat->paciente_sofreu_acidente_trabalho ?? null),
|
||||
'portadorDoencaOcupacional' => self::converteBoleanoEmRadio($cat->paciente_portador_doenca_ocupacional ?? null),
|
||||
'precisaInternacao' => $cat->paciente_precisa_internacao === true ? 'SIM' : ($cat->paciente_precisa_internacao === false ? 'NÃO' : ''),
|
||||
'diasAfastamento' => $cat->dias_afastamento ? $cat->dias_afastamento . ' dias' : '',
|
||||
'confirmacoesMedicas' => self::parecerMedicoOpcoes($cat),
|
||||
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
private static function retornaElementosInline(Collection $arr, ?string $value)
|
||||
{
|
||||
$filteredItems = collect($arr)
|
||||
->filter(fn ($item) => $item[1] === true)
|
||||
->map(fn ($item) => $item[0]);
|
||||
|
||||
if ($value) {
|
||||
$filteredItems->add($value);
|
||||
}
|
||||
|
||||
$count = $filteredItems->count();
|
||||
$result = '';
|
||||
|
||||
if ($count > 1) {
|
||||
$lastItem = $filteredItems->pop();
|
||||
$result = $filteredItems->implode(', ') . ' e ' . $lastItem;
|
||||
}
|
||||
|
||||
if ($count === 1) {
|
||||
$result = $filteredItems->first();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private static function parecerMedicoOpcoes($cat)
|
||||
{
|
||||
return new Collection([
|
||||
[
|
||||
'Ter sofrido Acidente de Trabalho (Art.19 da Lei nº 8.213/1991).',
|
||||
$cat->paciente_sofreu_acidente_trabalho
|
||||
],
|
||||
[
|
||||
'Ser portador de Doença Ocupacional (Art.20 da Lei nº 8.213/1991).',
|
||||
$cat->paciente_portador_doenca_ocupacional,
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
private static function retonarPrimeiroVerdadeiro(Collection $arr)
|
||||
{
|
||||
return $arr->first(fn ($value) => $value[1] === true)[0] ?? null;
|
||||
}
|
||||
|
||||
private static function converteBoleanoEmRadio(?bool $value)
|
||||
{
|
||||
return new Collection([
|
||||
[
|
||||
'Sim',
|
||||
$value
|
||||
],
|
||||
[
|
||||
'Não',
|
||||
$value === false
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Impressao\ProntoAtendimento\FaaSimplificadaController;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class FaaCompletaController extends Controller
|
||||
{
|
||||
private static $TITLE = 'FICHA DE ATENDIMENTO AMBULATORIAL - FAA ';
|
||||
private const TEMPLATE = 'pronto-atendimento.faa-completa';
|
||||
|
||||
public static function getTemplate($atendimentoId)
|
||||
{
|
||||
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$simplificadaData = FaaSimplificadaController::getTemplateData($atendimentoId);
|
||||
|
||||
$data = array_merge([
|
||||
'folha2' => [
|
||||
'paciente' => [
|
||||
'nome' => $atendimento->faa->paciente->cidadao->nome,
|
||||
'nomeSocial' => $atendimento->faa->paciente->cidadao->nome_social,
|
||||
'prefereNomeSocial' => $atendimento->faa->paciente->cidadao
|
||||
->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
||||
'prontuario' => $atendimento->faa->paciente->prontuario,
|
||||
],
|
||||
'recepcao' => [
|
||||
'data' => (new Carbon($atendimento->recepcao->atendido_em))->format('d/m/Y')
|
||||
]
|
||||
]
|
||||
], $simplificadaData);
|
||||
|
||||
self::$TITLE .= $atendimento->faa->numero;
|
||||
|
||||
return Template::make(self::$TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), self::$TITLE);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,573 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco as EnumFatorRisco;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Geral\GlasgowInterpretacaoResultado;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Enfermagem\Historico;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Triagem\FormularioDorToracica;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Triagem\OrigemDorToracica;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Triagem\RelacionadoFormularioDorToracica;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class FaaSimplificadaController extends Controller
|
||||
{
|
||||
private static $TITLE = 'FICHA DE ATENDIMENTO AMBULATORIAL - FAA ';
|
||||
private const TEMPLATE = 'pronto-atendimento.faa-simplificada';
|
||||
|
||||
public static function getTemplate($atendimentoId)
|
||||
{
|
||||
$data = self::getTemplateData($atendimentoId);
|
||||
|
||||
self::$TITLE .= $data['faa']['faa_numero'];
|
||||
|
||||
return Template::make(self::$TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public static function getTemplateData($atendimentoId)
|
||||
{
|
||||
$atendimento = Atendimento::findOrFail($atendimentoId);
|
||||
$faa = $atendimento->faa;
|
||||
$fila = $atendimento->fila;
|
||||
$paciente = $faa->paciente;
|
||||
$recepcao = $atendimento->recepcao;
|
||||
$unidade = $fila
|
||||
? $fila->CentroCusto->infraestrutura->unidade
|
||||
: $faa->createdCentroCusto->infraestrutura->unidade;
|
||||
$origemEntrada = $recepcao->origemEntrada;
|
||||
|
||||
$endereco = '';
|
||||
$enderecoCompleto = 'Não informado';
|
||||
$cep = 'Não informado';
|
||||
|
||||
if ($paciente->cidadao->domicilio_id) {
|
||||
|
||||
$endereco = $paciente->cidadao->domicilio->endereco;
|
||||
$enderecoCompleto = $endereco->completo;
|
||||
|
||||
$cep = MaskUtil::getCepMasked($endereco->logradouro->cep);
|
||||
}
|
||||
|
||||
$verificaMedicoFaa = $faa->where('pronto_atendimento_faa.paciente_id', $faa->paciente_id)->get();
|
||||
|
||||
if($verificaMedicoFaa->first()->desfecho_id != null){
|
||||
|
||||
$ultimasConsultas = $faa->where('pronto_atendimento_faa.paciente_id', $faa->paciente_id)
|
||||
->join('pronto_atendimento_atendimento as atendimento', 'atendimento.faa_id', 'pronto_atendimento_faa.id')
|
||||
->join('pronto_atendimento_atendimento_recepcao as recepcao', 'recepcao.atendimento_id', 'atendimento.id')
|
||||
->join('cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_faa.lotacao_id')
|
||||
->join('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->join('sigtap.ocupacao', 'sigtap.ocupacao.id', 'cadastro_lotacao.ocupacao_id')
|
||||
->join('painel_senha_fila', 'painel_senha_fila.id', 'atendimento.fila_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'painel_senha_fila.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->select(
|
||||
'cadastro_cidadao.nome as nome_medico',
|
||||
'sigtap.ocupacao.nome as nome_ocupacao',
|
||||
'recepcao.atendido_em',
|
||||
'cadastro_unidade.nome_fantasia'
|
||||
)
|
||||
->limit(3)
|
||||
->orderBy('atendimento.created_at', 'desc')
|
||||
->get()
|
||||
->map(fn ($consulta) => [
|
||||
'data' => $consulta->atendido_em
|
||||
? date("d/m/Y", strtotime($consulta->atendido_em)) : '',
|
||||
'horaEntrada' => $consulta->atendido_em
|
||||
? date("H:i:s", strtotime($consulta->atendido_em)) : '',
|
||||
'unidade' => $consulta->nome_fantasia,
|
||||
'medico' => $consulta->nome_medico ?? null,
|
||||
'especialidade' => $consulta->nome_ocupacao ?? null,
|
||||
]);
|
||||
|
||||
} else {
|
||||
|
||||
$ultimasConsultas = $faa->where('pronto_atendimento_faa.paciente_id', $faa->paciente_id)
|
||||
->join('pronto_atendimento_atendimento as atendimento', 'atendimento.faa_id', 'pronto_atendimento_faa.id')
|
||||
->join('pronto_atendimento_atendimento_recepcao as recepcao', 'recepcao.atendimento_id', 'atendimento.id')
|
||||
->join('cadastro_lotacao', 'cadastro_lotacao.id', 'pronto_atendimento_faa.updated_lotacao_id')
|
||||
->join('cadastro_usuario', 'cadastro_usuario.id', 'cadastro_lotacao.usuario_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->join('sigtap.ocupacao', 'sigtap.ocupacao.id', 'cadastro_lotacao.ocupacao_id')
|
||||
->join('painel_senha_fila', 'painel_senha_fila.id', 'atendimento.fila_id')
|
||||
->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'painel_senha_fila.centro_custo_id')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->select(
|
||||
'cadastro_cidadao.nome as nome_medico',
|
||||
'sigtap.ocupacao.nome as nome_ocupacao',
|
||||
'recepcao.atendido_em',
|
||||
'cadastro_unidade.nome_fantasia'
|
||||
)
|
||||
->limit(3)
|
||||
->orderBy('atendimento.created_at', 'desc')
|
||||
->get()
|
||||
->map(fn ($consulta) => [
|
||||
'data' => $consulta->atendido_em
|
||||
? date("d/m/Y", strtotime($consulta->atendido_em)) : '',
|
||||
'horaEntrada' => $consulta->atendido_em
|
||||
? date("H:i:s", strtotime($consulta->atendido_em)) : '',
|
||||
'unidade' => $consulta->nome_fantasia,
|
||||
'medico' => $consulta->nome_medico ?? null,
|
||||
'especialidade' => $consulta->nome_ocupacao ?? null,
|
||||
]);
|
||||
}
|
||||
|
||||
$sinaisVitais = $atendimento->sinaisVitais()
|
||||
->orderBy('created_at')
|
||||
->limit(1)
|
||||
->get()
|
||||
->map(fn ($sinaisVitais) => [
|
||||
'pa' => $sinaisVitais->pa ?? null,
|
||||
'glicemia' => $sinaisVitais->glicemia ?? null,
|
||||
'temperatura' => $sinaisVitais->temperatura ?? null,
|
||||
'pulso' => $sinaisVitais->pulso ?? null,
|
||||
'respiracao' => $sinaisVitais->respiracao ?? null,
|
||||
'saturacao' => $sinaisVitais->saturacao ?? null,
|
||||
'intensidade_dor' => $sinaisVitais->intensidade_dor ?? null,
|
||||
'cintura' => $sinaisVitais->cintura ?? null,
|
||||
'data' => $sinaisVitais->created_at
|
||||
? date("d/m/Y", strtotime($sinaisVitais->created_at)) : null,
|
||||
'horario' => $sinaisVitais->created_at
|
||||
? date("H:i:s", strtotime($sinaisVitais->created_at)) : null,
|
||||
]);
|
||||
|
||||
$medidas = $atendimento->avaliacoesAntropometricas()->orderByDesc('created_at')->first();
|
||||
|
||||
$classificacaoRisco = $atendimento->classificacoesRisco()
|
||||
->where('atendimento_id', $atendimentoId)
|
||||
->orderBy('created_at')
|
||||
->get()
|
||||
->map(fn ($classificacaoRisco) => [
|
||||
'id' => $classificacaoRisco->id ?? null,
|
||||
'classificacaoRiscoId' => $classificacaoRisco->classificacao_risco_id ?? null,
|
||||
'nome' => $classificacaoRisco->classificacaoRisco->nome ?? 'NÃO INFORMADO',
|
||||
'dataAtendimento' => $classificacaoRisco->created_at ?? null
|
||||
? date("d/m/Y", strtotime($classificacaoRisco->created_at)): '',
|
||||
'horaAtendimento' => $classificacaoRisco->created_at ?? null
|
||||
? date("H:i:s", strtotime($classificacaoRisco->created_at)): '',
|
||||
'setor' => $classificacaoRisco->createdCentroCusto->setor->nome ?? null,
|
||||
]);
|
||||
|
||||
$fatoresRisco = collect();
|
||||
|
||||
$latestCreatedAt = DB::table('cadastro_cidadao_fator_risco')
|
||||
->where('cidadao_id', $atendimento->faa->paciente->cidadao->id)
|
||||
->max('created_at');
|
||||
|
||||
$atendimento->faa->paciente->cidadao->fatoresRisco()
|
||||
->wherePivot('created_at', $latestCreatedAt)
|
||||
->get()
|
||||
->each(function ($fatorRiscoAtual) use ($fatoresRisco, $atendimento) {
|
||||
|
||||
$dataHora = $fatorRiscoAtual->cidadaoFatorRisco->created_at->format('d/m/Y H:i:s');
|
||||
$profissional = optional(optional(optional($fatorRiscoAtual->cidadaoFatorRisco->createdLotacao()->withTrashed()->first())->usuario)->cidadao)->nome;
|
||||
$cbo = optional(optional($fatorRiscoAtual->cidadaoFatorRisco->createdLotacao()->withTrashed()->first())->ocupacao)->nome;
|
||||
$setor = optional(optional($fatorRiscoAtual->cidadaoFatorRisco->createdCentroCusto)->setor)->nome;
|
||||
|
||||
$fatorRisco = $fatoresRisco->where('data_hora', $dataHora)
|
||||
->where('profissional', $profissional)
|
||||
->where('cbo', $cbo)
|
||||
->where('setor', $setor)
|
||||
->first();
|
||||
|
||||
$fatorRiscoNome = $fatorRiscoAtual->nome;
|
||||
|
||||
if ($fatorRiscoAtual->id == EnumFatorRisco::OUTRO) {
|
||||
|
||||
$fatorRiscoNome = $fatorRiscoNome .
|
||||
' (' . $atendimento->faa->paciente->cidadao->fator_risco_outro . ')';
|
||||
}
|
||||
|
||||
if ($fatorRisco) {
|
||||
|
||||
$fatorRisco['fatores']->push($fatorRiscoNome);
|
||||
} else {
|
||||
$fatoresRisco->push([
|
||||
'data_hora' => $dataHora,
|
||||
'profissional' => $profissional,
|
||||
'cbo' => $cbo,
|
||||
'setor' => $setor,
|
||||
'fatores' => collect([$fatorRiscoNome])
|
||||
]);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$fatoresRisco->each(fn ($f) => $f['fatores'] = $f['fatores']->sort()->all());
|
||||
$fatoresRisco = $fatoresRisco->sortBy('data_hora')->all();
|
||||
|
||||
$historicoEnfermagem = Historico::where('atendimento_id', $atendimento->id)
|
||||
->orderBy('created_at')
|
||||
->get()
|
||||
->map(function ($historicoEnfermagem) use ($atendimento) {
|
||||
|
||||
return array_merge(
|
||||
self::getBaseHistoricoAreaAtendimento($historicoEnfermagem, $atendimento),
|
||||
[
|
||||
'descricao' => $historicoEnfermagem->descricao,
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
if ($atendimento->dor_toracica == true) {
|
||||
|
||||
$formulario = FormularioDorToracica::where('atendimento_id', $atendimento->id)->get();
|
||||
|
||||
$data_sintoma = null;
|
||||
$hora_sintoma = null;
|
||||
$data_ecg_admissao = null;
|
||||
$hora_ecg_admissao = null;
|
||||
$dispneia = null;
|
||||
|
||||
foreach ($formulario as $registro) {
|
||||
$data_sintoma = $registro->data_sintoma ?? null;
|
||||
$hora_sintoma = $registro->hora_sintoma ?? null;
|
||||
$data_ecg_admissao = $registro->data_ecg_admissao ?? null;
|
||||
$hora_ecg_admissao = $registro->hora_ecg_admissao ?? null;
|
||||
$dispneia = $registro->dispneia ?? null;
|
||||
}
|
||||
|
||||
if (!empty($formulario)) {
|
||||
$formulario_id = $formulario->pluck('id');
|
||||
$formularioRelacionadoDor = RelacionadoFormularioDorToracica::whereIn('formulario_id', $formulario_id)->get();
|
||||
|
||||
$dorToracicaRelacionada = [];
|
||||
|
||||
foreach ($formularioRelacionadoDor as $registroRelacionado) {
|
||||
$dorToracicaRelacionada[] = OrigemDorToracica::where('id', $registroRelacionado->dor_toracica_id)
|
||||
->get()
|
||||
->map(function ($duracao) {
|
||||
return [
|
||||
'id' => $duracao->id,
|
||||
'nome' => $duracao->nome,
|
||||
];
|
||||
})->values();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$glasgowValor = null;
|
||||
|
||||
$atendimentosData = self::getAtendimentosData($atendimento);
|
||||
|
||||
foreach ($atendimentosData as $item) {
|
||||
if (isset($item['glasgow'])) {
|
||||
$glasgowValor = $item['glasgow'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'faa' => [
|
||||
'faa_id' => $faa->id,
|
||||
'faa_numero' => $faa->numero,
|
||||
'dor_toracica' => $atendimento->dor_toracica ?? null,
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'nomeSocial' => $paciente->cidadao->nome_social,
|
||||
'prefereNome' => $paciente->cidadao->preferencia_nome_id ?? null,
|
||||
'prontuarioUnidade' => $paciente->prontuario,
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'cpf' => $paciente->cidadao->cpf ?? 'Não informado',
|
||||
'cns' => $paciente->cidadao->cns ?? 'Não informado',
|
||||
'idade' => $paciente->cidadao->idade ?? [
|
||||
'anos' => 'Não informada',
|
||||
'meses' => 'Não informada',
|
||||
'dias' => 'Não informada',
|
||||
],
|
||||
'nomeMae' => $paciente->cidadao->nome_mae ?? 'Não informado',
|
||||
'endereco' => $enderecoCompleto ?? 'Não informado',
|
||||
'cep' => $cep ?? 'Não informado',
|
||||
'dataNascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y') : 'Não informada',
|
||||
'altura' => $medidas->altura ?? null,
|
||||
'peso' => $medidas->massa ?? null,
|
||||
],
|
||||
'telefones' => $paciente->cidadao->telefones->map(fn ($telefone) => [
|
||||
'numero' => MaskUtil::getPhoneMasked($telefone->numero),
|
||||
'obs' => $telefone->observacao,
|
||||
]),
|
||||
'recepcao' => [
|
||||
'data' => $recepcao->atendido_em
|
||||
? date("d/m/Y", strtotime($recepcao->atendido_em)) : '',
|
||||
'horaEntrada' => $recepcao->atendido_em
|
||||
? date("H:i:s", strtotime($recepcao->atendido_em)) : '',
|
||||
'recepcionista' => $recepcao->createdLotacao->usuario->cidadao->nome ?? null,
|
||||
'especialidade' => $recepcao->ocupacao->nome ?? null,
|
||||
'medicoSamu' => $recepcao->medico_samu ?? 'NÃO INFORMADO',
|
||||
'motivoAtendimento' => $recepcao->motivo_atendimento ?? 'NÃO INFORMADO',
|
||||
],
|
||||
'unidade' => [
|
||||
'nomeFantasia' => $unidade->nome_fantasia ?? '',
|
||||
],
|
||||
'senha' => $fila->senha ?? '',
|
||||
'ultimasConsultas' => $ultimasConsultas,
|
||||
'origemEntrada' => [
|
||||
'nome' => $origemEntrada->nome ?? '',
|
||||
],
|
||||
'sinaisVitais' => $sinaisVitais,
|
||||
'classificacaoRisco' => $classificacaoRisco,
|
||||
'fatoresRisco' => $fatoresRisco,
|
||||
'historicoEnfermagem' => $historicoEnfermagem,
|
||||
'observacoes' => self::getObservacoes($atendimento),
|
||||
'triagemAvaliacoesCondicoes' => self::getOutrasAvaliacoesCondicoes($atendimento),
|
||||
'formularioDorToracica' => [
|
||||
'data_sintoma' => (new Carbon($data_sintoma ?? null))->format('d/m/Y'),
|
||||
'hora_sintoma' => (new Carbon($hora_sintoma ?? null))->format('H:i:s'),
|
||||
'data_ecg_admissao' => (new Carbon($data_ecg_admissao ?? null))->format('d/m/Y'),
|
||||
'hora_ecg_admissao' => (new Carbon($hora_ecg_admissao ?? null))->format('H:i:s'),
|
||||
'dispneia' => $dispneia ?? null,
|
||||
'relacionados' => $dorToracicaRelacionada ?? null,
|
||||
],
|
||||
'glasgow' => $glasgowValor,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
private static function getAtendimentosData($atendimento)
|
||||
{
|
||||
return collect(array_merge(
|
||||
self::getAtendimentosTriagemData($atendimento->atendimentosTriagem),
|
||||
self::getAtendimentosMedicosData($atendimento->atendimentosMedico),
|
||||
self::getAtendimentosEnfermagemData($atendimento->atendimentosEnfermagem),
|
||||
self::getAtendimentosExameImagemData($atendimento->atendimentosExameImagem),
|
||||
self::getAtendimentosObservacaoData($atendimento->pacienteObservacoes),
|
||||
self::getProcedimentosFechamentoData($atendimento),
|
||||
))
|
||||
->sortBy('data_hora')
|
||||
->all();
|
||||
}
|
||||
|
||||
private static function getAtendimentosTriagemData($atendimentosTriagem)
|
||||
{
|
||||
return $atendimentosTriagem->map(function ($atendimento) {
|
||||
$escalas = $atendimento->escalasComaGlasgow->first();
|
||||
$glasgow = self::getResultadoGlasgow($escalas);
|
||||
|
||||
return [
|
||||
'data_hora' => $atendimento->created_at,
|
||||
'glasgow' => $glasgow
|
||||
];
|
||||
})->all();
|
||||
|
||||
}
|
||||
|
||||
private static function getResultadoGlasgow($escala) {
|
||||
if(!$escala) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$pontuacao = $escala->aberturaOcular->pontos
|
||||
+ $escala->respostaVerbal->pontos
|
||||
+ $escala->respostaMotora->pontos
|
||||
- $escala->reatividadePupilar->pontos;
|
||||
|
||||
if ($escala->aberturaOcular->pontos === 0
|
||||
|| $escala->respostaVerbal->pontos === 0
|
||||
|| $escala->respostaMotora->pontos === 0
|
||||
) {
|
||||
|
||||
$resultado = 'A pontuação não pode ser calculada. Um ou mais itens não foram testados.';
|
||||
}
|
||||
else {
|
||||
|
||||
$resultado = (GlasgowInterpretacaoResultado::all()->filter(function ($interpretacao) use ($pontuacao) {
|
||||
|
||||
return $pontuacao >= $interpretacao->min
|
||||
&& $pontuacao <= ($interpretacao->max ?? PHP_INT_MAX);
|
||||
})->first())->descricao;
|
||||
}
|
||||
|
||||
return [
|
||||
'ocular' => $escala->aberturaOcular->pontos,
|
||||
'verbal' => $escala->respostaVerbal->pontos,
|
||||
'motora' => $escala->respostaMotora->pontos,
|
||||
'pupilar' => $escala->reatividadePupilar->pontos * -1,
|
||||
'pontuacao' => $pontuacao,
|
||||
'resultado' => $resultado
|
||||
];
|
||||
}
|
||||
|
||||
private static function getAtendimentosMedicosData($atendimentosMedicos)
|
||||
{
|
||||
return $atendimentosMedicos->map(fn ($atendimento) => [
|
||||
'data_hora' => $atendimento->created_at,
|
||||
])->all();
|
||||
}
|
||||
|
||||
private static function getAtendimentosEnfermagemData($atendimentosEnfermagem)
|
||||
{
|
||||
|
||||
return $atendimentosEnfermagem->map(fn ($atendimento) => [
|
||||
'data_hora' => $atendimento->created_at,
|
||||
])->all();
|
||||
}
|
||||
|
||||
private static function getAtendimentosExameImagemData($atendimentosExameImagem)
|
||||
{
|
||||
return $atendimentosExameImagem->map(fn ($atendimento) => [
|
||||
'data_hora' => $atendimento->created_at,
|
||||
])->all();
|
||||
}
|
||||
|
||||
private static function getAtendimentosObservacaoData($atendimentosObservacao)
|
||||
{
|
||||
return $atendimentosObservacao->map(fn ($atendimento) => [
|
||||
'data_hora' => $atendimento->created_at,
|
||||
])->all();
|
||||
}
|
||||
|
||||
private static function getProcedimentosFechamentoData($atendimento)
|
||||
{
|
||||
$atendimentosProcedimentos = collect();
|
||||
|
||||
$atendimento->procedimentos()
|
||||
->whereNull('atendimento_medico_id')
|
||||
->whereNull('atendimento_triagem_id')
|
||||
->whereNull('atendimento_enfermagem_id')
|
||||
->whereNull('paciente_observacao_id')
|
||||
->whereNull('exame_imagem_id')
|
||||
->get()
|
||||
->each(function ($atendimentoProcedimento) use ($atendimentosProcedimentos) {
|
||||
|
||||
$realizadoEm = Carbon::create(
|
||||
$atendimentoProcedimento->realizado_em->year,
|
||||
$atendimentoProcedimento->realizado_em->month,
|
||||
$atendimentoProcedimento->realizado_em->day,
|
||||
23,
|
||||
59,
|
||||
59
|
||||
);
|
||||
|
||||
$realizadoEmFormatted = $realizadoEm->format('d/m/Y H:i:s');
|
||||
|
||||
$atendimentoProcedimentoProfissional = $atendimentosProcedimentos
|
||||
->where('lotacao_id', $atendimentoProcedimento->lotacao_id)
|
||||
->where('data_hora_formatted', $realizadoEmFormatted)
|
||||
->first();
|
||||
|
||||
if (is_null($atendimentoProcedimentoProfissional)) {
|
||||
|
||||
$atendimentoProcedimentoProfissional = collect([
|
||||
'data_hora_formatted' => $realizadoEmFormatted,
|
||||
'data_hora' => $realizadoEm,
|
||||
]);
|
||||
|
||||
$atendimentosProcedimentos->push($atendimentoProcedimentoProfissional);
|
||||
}
|
||||
});
|
||||
|
||||
return $atendimentosProcedimentos->all();
|
||||
}
|
||||
|
||||
static function getBaseHistoricoAreaAtendimento($model, $atendimento)
|
||||
{
|
||||
$result = [
|
||||
'centro_custo' => [
|
||||
'setor' => [
|
||||
'nome' => $model->createdCentroCusto->setor->nome,
|
||||
],
|
||||
],
|
||||
'lotacao' => [
|
||||
'ocupacao' => [
|
||||
'codigo' => $model->createdLotacao->ocupacao->codigo,
|
||||
'nome' => $model->createdLotacao->ocupacao->nome,
|
||||
],
|
||||
'profissional' => [
|
||||
'nome' => $model->createdLotacao->usuario->cidadao->nome,
|
||||
],
|
||||
],
|
||||
'classificacao_risco' => [
|
||||
'nome' => self::getClassificacaoRisco($atendimento, $model->created_at)['nome'] ?? null
|
||||
],
|
||||
'data_hora' => $model->created_at->format('d/m/Y H:i:s'),
|
||||
];
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
static function getOutrasAvaliacoesCondicoes($atendimento)
|
||||
{
|
||||
return $atendimento->atendimentosTriagem()->whereNotNull('outras_avaliacoes_condicoes')
|
||||
->get()
|
||||
->map(function($query) {
|
||||
return [
|
||||
'centro_custo' => [
|
||||
'setor' => [
|
||||
'nome' => $query->createdCentroCusto->setor->nome ?? null,
|
||||
],
|
||||
],
|
||||
'classificacao_risco' => [
|
||||
'nome' => $query->classificacaoRisco->classificacaoRisco->nome ?? null,
|
||||
],
|
||||
'data_hora' => $query->created_at->format('d/m/Y H:i:s'),
|
||||
'descricao' => $query->outras_avaliacoes_condicoes,
|
||||
'lotacao' => [
|
||||
'ocupacao' => [
|
||||
'nome' => $query->createdLotacao->ocupacao->nome ?? null,
|
||||
],
|
||||
'profissional' => [
|
||||
'nome' => $query->createdLotacao->usuario->cidadao->nome ?? null,
|
||||
],
|
||||
],
|
||||
];
|
||||
})
|
||||
->values();
|
||||
}
|
||||
|
||||
static function getClassificacaoRisco($atendimento, $datetime)
|
||||
{
|
||||
$classificacaoRisco = $atendimento->classificacoesRisco()
|
||||
->where('created_at', '<=', $datetime)
|
||||
->get()
|
||||
->sortByDesc('created_at')
|
||||
->first();
|
||||
|
||||
if ($classificacaoRisco == null)
|
||||
return null;
|
||||
|
||||
return [
|
||||
'id' => $classificacaoRisco->id,
|
||||
'classificacao_risco_id' => $classificacaoRisco->classificacao_risco_id,
|
||||
'nome' => $classificacaoRisco->classificacaoRisco->nome,
|
||||
];
|
||||
}
|
||||
|
||||
static function getObservacoes($atendimento)
|
||||
{
|
||||
return $atendimento->observacoes->map(function($query) {
|
||||
return [
|
||||
'dataHora' => $query->created_at->format('d/m/Y H:i:s'),
|
||||
'centroCusto' => [
|
||||
'setor' => [
|
||||
'nome' => $query->createdCentroCusto->setor->nome ?? null,
|
||||
],
|
||||
],
|
||||
'descricao' => $query->descricao,
|
||||
'lotacao' => [
|
||||
'ocupacao' => [
|
||||
'nome' => $query->createdLotacao->ocupacao->nome ?? null,
|
||||
],
|
||||
'profissional' => [
|
||||
'nome' => $query->createdLotacao->usuario->cidadao->nome ?? null,
|
||||
],
|
||||
],
|
||||
];
|
||||
})->values();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), self::$TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento\Plantao;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\Plantao\RelatorioPlantaoService;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
|
||||
class RelatorioPlantaoController extends Controller
|
||||
{
|
||||
private const TITLE = 'Relatório de plantão';
|
||||
private const TEMPLATE = 'pronto-atendimento.plantao.relatorio-plantao';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$data = [
|
||||
'plantoes' => RelatorioPlantaoService::index(),
|
||||
'params' => request()->all()
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate(), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Enums\ProntoAtendimento\Raat\CausaAcidente as RaatCausaAcidente;
|
||||
use App\Enums\ProntoAtendimento\Raat\Diagnostico as RaatDiagnostico;
|
||||
use App\Enums\ProntoAtendimento\Raat\ParteCorpoAtingida as RaatParteCorpoAtingida;
|
||||
use App\Enums\ProntoAtendimento\Raat\RegimeTrabalho as RaatRegimeTrabalho;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Models\ProntoAtendimento\Raat\Agente;
|
||||
use App\Models\ProntoAtendimento\Raat\CausaAcidente;
|
||||
use App\Models\ProntoAtendimento\Raat\ClassificacaoInicial;
|
||||
use App\Models\ProntoAtendimento\Raat\Diagnostico;
|
||||
use App\Models\ProntoAtendimento\Raat\ParteCorpoAtingida;
|
||||
use App\Models\ProntoAtendimento\Raat\RegimeTrabalho;
|
||||
use App\Models\ProntoAtendimento\Raat\TipoAcidente;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
|
||||
class RaatController extends Controller
|
||||
{
|
||||
private const TITLE = 'RAAT';
|
||||
private const TEMPLATE = 'pronto-atendimento.raat';
|
||||
|
||||
public static function getTemplate($atendimentoId)
|
||||
{
|
||||
$faa = Atendimento::findOrFail($atendimentoId)->faa;
|
||||
$paciente = $faa->paciente;
|
||||
$raat = $faa->raat;
|
||||
$parecerMedico = $faa->raat ? $faa->raat->pareceresMedico()->orderByDesc('id')->first() : null;
|
||||
|
||||
$tiposAcidentes = TipoAcidente::orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($tipo) => [
|
||||
$tipo->nome,
|
||||
$tipo->id === ($raat->acidente_tipo_id ?? null)
|
||||
]);
|
||||
|
||||
$regimesTrabalho = RegimeTrabalho::orderBy('nome')
|
||||
->get()
|
||||
->reject(fn ($regime) => $regime->id === RaatRegimeTrabalho::OUTRO)
|
||||
->map(fn ($regime) => [
|
||||
$regime->nome,
|
||||
$regime->id === ($raat->regime_trabalho_id ?? null)
|
||||
]);
|
||||
|
||||
$agentes = Agente::all()
|
||||
->map(fn ($agente) => [
|
||||
$agente->nome,
|
||||
$agente->id === ($parecerMedico->agente_id ?? null)
|
||||
]);
|
||||
|
||||
$partesCorpoAtingidasChecked = $parecerMedico ? $parecerMedico->partesCorpoAtingidas->pluck('id') : collect();
|
||||
|
||||
$partesCorpoAtingidas = ParteCorpoAtingida::orderBy('id')
|
||||
->get()
|
||||
->reject(fn ($parte) => $parte->id === RaatParteCorpoAtingida::OUTROS)
|
||||
->map(fn ($parte) => [
|
||||
$parte->nome,
|
||||
$partesCorpoAtingidasChecked->contains($parte->id)
|
||||
]);
|
||||
|
||||
$causasAcidenteChecked = $parecerMedico ? $parecerMedico->causasAcidente->pluck('id') : collect();
|
||||
|
||||
$causasAcidente = CausaAcidente::all()
|
||||
->reject(fn ($causa) => $causa->id === RaatCausaAcidente::OUTROS)
|
||||
->map(fn ($causa) => [
|
||||
$causa->nome,
|
||||
$causasAcidenteChecked->contains($causa->id)
|
||||
]);
|
||||
|
||||
$diagnosticosChecked = $parecerMedico ? $parecerMedico->diagnosticos->pluck('id') : collect();
|
||||
|
||||
$diagnosticos = Diagnostico::all()
|
||||
->reject(fn ($diagnostico) => $diagnostico->id === RaatDiagnostico::OUTROS)
|
||||
->map(fn ($diagnostico) => [
|
||||
$diagnostico->nome,
|
||||
$diagnosticosChecked->contains($diagnostico->id)
|
||||
]);
|
||||
|
||||
$classificacoesIniciais = ClassificacaoInicial::all()
|
||||
->map(fn ($classificacao) => [
|
||||
$classificacao->nome,
|
||||
$classificacao->id === ($parecerMedico->classificacao_inicial_id ?? null)
|
||||
]);
|
||||
|
||||
$data = [
|
||||
'paciente' => [
|
||||
'nome' => $paciente->cidadao->nome,
|
||||
'sexo' => $paciente->cidadao->sexo->descricao,
|
||||
'dataNascimento' => $paciente->cidadao->data_nascimento
|
||||
? $paciente->cidadao->data_nascimento->format('d/m/Y') : '',
|
||||
],
|
||||
'empresa' => [
|
||||
'nome' => $raat->empresa_nome ?? '',
|
||||
'ramoAtividade' => $raat->empresa_ramo_atividade ?? '',
|
||||
'endereco' => $raat->empresa_endereco ?? '',
|
||||
'telefone' => $raat && $raat->empresa_telefone ? MaskUtil::getPhoneMasked($raat->empresa_telefone) : '',
|
||||
],
|
||||
'identificacaoAcidente' => [
|
||||
'data' => $raat && $raat->acidente_data ? $raat->acidente_data->format('d/m/Y') : null,
|
||||
'hora' => $raat && $raat->acidente_hora ? $raat->acidente_hora->format('H:i') : null,
|
||||
'tiposAcidente' => $tiposAcidentes,
|
||||
'local' => $raat->acidente_local ?? '',
|
||||
'descricao' => $raat->acidente_descricao ?? '',
|
||||
'regimesTrabalho' => $regimesTrabalho,
|
||||
'regimeTrabalhoOutro' => $raat->regime_trabalho_outro ?? '',
|
||||
],
|
||||
'agentes' => $agentes,
|
||||
'partesCorpoAtingidas' => $partesCorpoAtingidas,
|
||||
'parteCorpoAtingidaOutras' => $parecerMedico->parte_corpo_atingida_outras ?? '',
|
||||
'causasAcidente' => $causasAcidente,
|
||||
'causaAcidenteOutras' => $parecerMedico->causa_acidente_outras ?? '',
|
||||
'diagnosticos' => $diagnosticos,
|
||||
'diagnosticoOutros' => $parecerMedico->diagnostico_outros ?? '',
|
||||
'cid' => ($parecerMedico->atendimentoMedico->cid->cid ?? null)
|
||||
? $parecerMedico->atendimentoMedico->cid->cid->codigo
|
||||
. ' - ' . $parecerMedico->atendimentoMedico->cid->cid->nome
|
||||
: '',
|
||||
'observacao' => $parecerMedico->observacao ?? '',
|
||||
'classificacoesIniciais' => $classificacoesIniciais,
|
||||
'comAfastamento' => [
|
||||
['SIM', $parecerMedico ? $parecerMedico->afastado : false],
|
||||
['NÃO', $parecerMedico ? !$parecerMedico->afastado : false],
|
||||
],
|
||||
'hasParecerMedico' => !!$parecerMedico,
|
||||
'profissional' => [
|
||||
'nome' => $parecerMedico->updatedLotacao->usuario->cidadao->nome ?? null,
|
||||
'cbo' => $parecerMedico->updatedLotacao->ocupacao->nome ?? null,
|
||||
]
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\RelatorioAtendimentoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioAtendimentoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE ATENDIMENTOS';
|
||||
private const TEMPLATE = 'pronto-atendimento.relatorio-atendimento';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
return [
|
||||
'atendimentos' => RelatorioAtendimentoService::index(),
|
||||
'params' => request()->all(),
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
$orientation = isset(request()->orientation) ? request()->orientation : 'portrait';
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate(), $orientation);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\RelatorioClassificacaoRiscoService;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
|
||||
class RelatorioClassificacaoRiscoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE CLASSIFICAÇÃO DE RISCO';
|
||||
private const TEMPLATE = 'pronto-atendimento.relatorio-classificacao-risco';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$data = [
|
||||
'classificacoes_risco' => RelatorioClassificacaoRiscoService::index(),
|
||||
'params' => request()->all(),
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate(), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\RelatorioDocumentoNaoAssinadoService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioDocumentoNaoAssinadoController extends Controller
|
||||
{
|
||||
private const TITLE = 'Relatório de documentos não assinados';
|
||||
private const TEMPLATE = 'pronto-atendimento.relatorio-documento-nao-assinado';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
return RelatorioDocumentoNaoAssinadoService::getPrintExportData();
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\RelatorioExameImagemService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
use App\Utils\Exports\Template;
|
||||
|
||||
class RelatorioExameImagemController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE EXAME DE IMAGEM';
|
||||
private const TEMPLATE = 'pronto-atendimento.relatorio-exame-imagem';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
return [
|
||||
'itens' => RelatorioExameImagemService::index(),
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'params' => request()->all(),
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\RelatorioPrescricaoInternaService;
|
||||
use App\Utils\Exports\Pdf1;
|
||||
|
||||
class RelatorioPrescricaoInternaController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE PRESCRIÇÃO INTERNA';
|
||||
private const TEMPLATE = 'pronto-atendimento.relatorio-prescricao-interna';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
return [
|
||||
'atendimentos' => RelatorioPrescricaoInternaService::index(),
|
||||
'params' => request()->all(),
|
||||
];
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getTemplate());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\RelatorioProducaoMedicoService;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
|
||||
class RelatorioProducaoMedicoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO DE PRODUÇÃO DO MÉDICO';
|
||||
private const TEMPLATE = 'pronto-atendimento.relatorio-producao-medico';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$data = [
|
||||
'atendimentos' => RelatorioProducaoMedicoService::index(),
|
||||
'params' => request()->all(),
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate(), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ProntoAtendimento\RelatorioQuantitativoProducaoService;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
|
||||
class RelatorioQuantitativoProducaoController extends Controller
|
||||
{
|
||||
private const TITLE = 'RELATÓRIO QUANTITATIVO DE PRODUÇÃO';
|
||||
private const TEMPLATE = 'pronto-atendimento.relatorio-quantitativo-producao';
|
||||
|
||||
public static function getTemplate()
|
||||
{
|
||||
$data = [
|
||||
'procedimentos_atendimentos' => RelatorioQuantitativoProducaoService::index(),
|
||||
'params' => request()->all(),
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke()
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate(), self::TITLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
||||
use App\Utils\Exports\Pdf;
|
||||
use App\Utils\Exports\Template;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class TermoCienciaController extends Controller
|
||||
{
|
||||
private const TITLE = 'TERMO DE CIÊNCIA';
|
||||
private const TEMPLATE = 'pronto-atendimento.termo-ciencia';
|
||||
|
||||
public static function getTemplate($atendimentoId)
|
||||
{
|
||||
$faa = Atendimento::findOrFail($atendimentoId)->faa;
|
||||
$now = Carbon::now();
|
||||
|
||||
$data = [
|
||||
'faa' => [
|
||||
'numero' => $faa->numero,
|
||||
'unidade' => [
|
||||
'nome' => $faa->createdCentroCusto->infraestrutura->unidade->nome_fantasia
|
||||
]
|
||||
],
|
||||
'paciente' => [
|
||||
'nome' => $faa->paciente->cidadao->nome,
|
||||
'cns' => $faa->paciente->cidadao->cns ? MaskUtil::getCnsMasked($faa->paciente->cidadao->cns) : '',
|
||||
],
|
||||
'dataHora' => $now->format('H') . ' horas e ' . $now->format('i') . ' minutos'
|
||||
];
|
||||
|
||||
return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml();
|
||||
}
|
||||
|
||||
public function __invoke($atendimentoId)
|
||||
{
|
||||
return (new Pdf)->stream(self::getTemplate($atendimentoId), self::TITLE);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user