1252 lines
56 KiB
PHP
1252 lines
56 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
|
|
|
|
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco as EnumFatorRisco;
|
|
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
|
|
use App\Enums\Cadastro\UnidadeMedida as CadastroUnidadeMedida;
|
|
use App\Enums\Parametrizacao\Exame\Status;
|
|
use App\Enums\Parametrizacao\Exame\Tipo as ExameTipo;
|
|
use App\Enums\ProntoAtendimento\Atendimento\Desfecho;
|
|
use App\Enums\ProntoAtendimento\Atendimento\PacienteTraumaStatus;
|
|
use App\Enums\ProntoAtendimento\Raat\CausaAcidente;
|
|
use App\Enums\ProntoAtendimento\Raat\Diagnostico as DiagnosticoRaat;
|
|
use App\Enums\ProntoAtendimento\Raat\ParteCorpoAtingida;
|
|
use App\Enums\ProntoAtendimento\TipoFormularioAcidenteTrabalho;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
|
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
|
use App\Models\Cadastro\UnidadeMedida;
|
|
use App\Models\Geral\GlasgowInterpretacaoResultado;
|
|
use App\Models\ProntoAtendimento\AssistenciaSocial\AssistenciaSocial;
|
|
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
|
|
use App\Models\ProntoAtendimento\Atendimento\Cat;
|
|
use App\Models\ProntoAtendimento\Atendimento\FaaReabertura;
|
|
use App\Models\ProntoAtendimento\Atendimento\PrescricaoInterna;
|
|
use App\Models\ProntoAtendimento\Atendimento\Triagem\FormularioDorToracica;
|
|
use App\Models\ProntoAtendimento\Atendimento\Triagem\OrigemDorToracica;
|
|
use App\Models\ProntoAtendimento\Atendimento\Triagem\RelacionadoFormularioDorToracica;
|
|
use App\Models\Sigtap\Ocupacao;
|
|
use App\Models\Sigtap\Procedimento;
|
|
use App\Models\Sigtap\Cid;
|
|
use App\Utils\DataUtil;
|
|
use App\Utils\Exports\Pdf;
|
|
use App\Utils\Exports\Template;
|
|
use App\Utils\MaskUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class FaaEletronicaController extends Controller
|
|
{
|
|
private const TITLE = 'FICHA DE ATENDIMENTO AMBULATORIAL';
|
|
private const TEMPLATE = 'pronto-atendimento.faa-eletronica';
|
|
|
|
public static function getTemplate($atendimentoId, $params = [])
|
|
{
|
|
$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']));
|
|
|
|
$atendimentosParaImprimir = collect($params['atendimentos'] ?? []);
|
|
$atendimento = Atendimento::withTrashed()->findOrFail($atendimentoId);
|
|
$recepcao = $atendimento->recepcao;
|
|
$atendimentosData = self::getAtendimentosData($atendimento);
|
|
|
|
if ($atendimentosParaImprimir->isNotEmpty()) {
|
|
|
|
$atendimentosData = collect($atendimentosData)
|
|
->reject(fn ($a) => is_null($atendimentosParaImprimir
|
|
->where('tipo', $a['tipo'])
|
|
->where('id', $a['id'])
|
|
->first())
|
|
)
|
|
->values()
|
|
->all();
|
|
}
|
|
|
|
$lastAtendimentoDateTime = empty($atendimentosData)
|
|
? new Carbon($atendimento->recepcao->created_at)
|
|
: Carbon::createFromFormat(
|
|
'd/m/Y H:i:s',
|
|
$atendimentosData[count($atendimentosData) - 1]['data_hora']
|
|
);
|
|
|
|
$latestCreatedAt = DB::table('cadastro_cidadao_fator_risco')
|
|
->where('cidadao_id', $atendimento->faa->paciente->cidadao->id)
|
|
->max('created_at');
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
|
|
$data = [
|
|
'paraAssinar' => $paraAssinaturaEletronica,
|
|
'unidade' => $atendimento->faa->lotacao->infraestrutura->unidade->nome_fantasia ?? null,
|
|
'dataHoraEntrada' => (new Carbon($atendimento->recepcao->atendido_em))->format('d/m/Y H:i:s'),
|
|
'recepcionista' => $recepcao->createdLotacao->usuario->cidadao->nome ?? 'NÃO INFORMADO',
|
|
'origemEntrada' => $atendimento->recepcao->origemEntrada->nome ?? 'NÃO INFORMADA',
|
|
'especialidade' => $atendimento->recepcao->ocupacao->nome ?? 'NÃO INFORMADA',
|
|
'medicoSamu' => $atendimento->recepcao->medico_samu ?? 'NÃO INFORMADO',
|
|
'senha' => $atendimento->fila->senha ?? null,
|
|
'motivoAtendimento' => $atendimento->recepcao->motivo_atendimento ?? 'NÃO INFORMADO',
|
|
'paciente' => self::getPacienteData($atendimento),
|
|
'raat' => self::getRaatData($atendimento),
|
|
'classificacoesRisco' => self::getClassificacoesRiscoData($atendimento),
|
|
'fatoresRisco' => self::getFatoresRiscoData($atendimento, $latestCreatedAt),
|
|
'alergias' => self::getAlergiasData($atendimento, $lastAtendimentoDateTime),
|
|
'medicamentosUsoContinuo' => self::getMedicamentosUsoContinuoData($atendimento, $lastAtendimentoDateTime),
|
|
'medicamentosEmUso' => self::getMedicamentosEmUsoData($atendimento),
|
|
'atendimentos' => $atendimentosData,
|
|
'desfecho' => self::getDesfechoData($atendimento),
|
|
'assinaturas' => self::getAssinaturasData($atendimentosData),
|
|
'assistenciaSocial' => self::getAssistenciaData($atendimento),
|
|
'dorToracica' => $atendimento->dor_toracica,
|
|
'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,
|
|
],
|
|
'exclusaoFaa'=> self::getFaaCancelada($atendimento),
|
|
];
|
|
|
|
$title = self::TITLE . ' - ' . $atendimento->faa->numero;
|
|
|
|
return Template::make($title, self::TEMPLATE)->withData($data)->getHtml();
|
|
}
|
|
|
|
private static function getFaaCancelada($atendimento)
|
|
{
|
|
|
|
$faa = $atendimento->faa;
|
|
|
|
if (is_null($faa->deleted_at)) {
|
|
|
|
return null;
|
|
}
|
|
|
|
return [
|
|
'data_hora' => $faa->deleted_at
|
|
? (new Carbon($faa->deleted_at))->format('d/m/Y H:i:s')
|
|
: '',
|
|
'profissional' => Lotacao::find($faa->deleted_lotacao_id)->usuario->cidadao->nome ?? '',
|
|
'cbo' => Lotacao::find($faa->deleted_lotacao_id)->ocupacao->nome ?? '',
|
|
];
|
|
}
|
|
|
|
private static function getAssistenciaData($atendimento)
|
|
{
|
|
return $atendimento->assistenciaSocialHistorico()
|
|
->orderBy('created_at', 'desc')
|
|
->get()
|
|
->map(fn ($assistencia) => [
|
|
'data' => (new Carbon($assistencia->created_at))->format('d/m/Y') ?? null,
|
|
'horario' => (new Carbon($assistencia->created_at))->format('H:i:s') ?? null,
|
|
'anotacao' => $assistencia->anotacao,
|
|
'profissional' => [
|
|
'id' => $assistencia->usuario->id,
|
|
'nome' => $assistencia->usuario->cidadao->nome,
|
|
],
|
|
'cbo' => Ocupacao::findOrFail($assistencia['ocupacao_id'])->nome,
|
|
])->all();
|
|
}
|
|
|
|
private static function getAtendimentosData($atendimento)
|
|
{
|
|
$cidAnterior = null;
|
|
$dataHoraEntradaObservacao = null;
|
|
|
|
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),
|
|
self::getAssistenciaSocialData($atendimento->assistenciaSocial),
|
|
self::getFaaReaberturaData($atendimento),
|
|
))
|
|
->sortBy('data_hora')
|
|
->map(function ($atendimento) use (&$cidAnterior, &$dataHoraEntradaObservacao, &$isObservacao) {
|
|
|
|
$atendimento['data_hora'] = $atendimento['data_hora']->format('d/m/Y H:i:s');
|
|
|
|
if ($atendimento['tipo'] === 'medico') {
|
|
|
|
$currentCid = $atendimento['cid'];
|
|
|
|
if ($atendimento['cid'] === $cidAnterior) {
|
|
|
|
$atendimento['cid'] = null;
|
|
}
|
|
|
|
$cidAnterior = $currentCid;
|
|
}
|
|
else if ($atendimento['tipo'] === 'observacao') {
|
|
|
|
if (is_null($dataHoraEntradaObservacao)) {
|
|
|
|
$dataHoraEntradaObservacao = $atendimento['data_hora'];
|
|
}
|
|
|
|
$atendimento['data_hora_entrada'] = $dataHoraEntradaObservacao;
|
|
}
|
|
|
|
return $atendimento;
|
|
})
|
|
->all();
|
|
}
|
|
|
|
private static function getAssistenciaSocialData($assistenciaSocial)
|
|
{
|
|
return $assistenciaSocial->map(fn ($atendimento) => [
|
|
'tipo' => 'assistencia',
|
|
'id' => $atendimento->id,
|
|
'data_hora' => $atendimento->created_at,
|
|
'profissional' => [
|
|
'id' => $atendimento->usuario->id,
|
|
'nome' => $atendimento->usuario->cidadao->nome,
|
|
],
|
|
'cbo' => Ocupacao::findOrFail($atendimento['ocupacao_id'])->nome,
|
|
])->all();
|
|
}
|
|
|
|
private static function getFaaReaberturaData($reabertura)
|
|
{
|
|
|
|
$faaReaberta = FaaReabertura::where('faa_id', $reabertura->faa_id)->get();
|
|
|
|
return $faaReaberta->map(fn ($atendimento) => [
|
|
'tipo' => 'reabertura',
|
|
'id' => $atendimento->id,
|
|
'data_hora' => $atendimento->created_at,
|
|
'profissional' => [
|
|
'id' => $atendimento->createdLotacao->usuario->id,
|
|
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
|
|
],
|
|
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
|
|
])->all();
|
|
}
|
|
|
|
private static function getAtendimentosTriagemData($atendimentosTriagem)
|
|
{
|
|
return $atendimentosTriagem->map(fn ($atendimento) => [
|
|
'tipo' => 'triagem',
|
|
'is_observacao' => false,
|
|
'id' => $atendimento->id,
|
|
'data_hora' => $atendimento->created_at,
|
|
'profissional' => [
|
|
'id' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->id ?? null,
|
|
'nome' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->cidadao->nome ?? null,
|
|
],
|
|
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
|
|
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
|
|
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
|
|
'historico_enfermagem' => $atendimento->historico->descricao ?? null,
|
|
'outras_avaliacoes_condicoes' => $atendimento->outras_avaliacoes_condicoes,
|
|
'observacoes' => $atendimento->observacao->descricao ?? null,
|
|
'procedimentos' => self::getProcedimentosData($atendimento),
|
|
])->all();
|
|
}
|
|
|
|
private static function getAtendimentosMedicosData($atendimentosMedicos)
|
|
{
|
|
return $atendimentosMedicos->map(fn ($atendimento) => [
|
|
'tipo' => 'medico',
|
|
'is_observacao' => $atendimento->is_observacao ?? false,
|
|
'id' => $atendimento->id,
|
|
'data_hora' => $atendimento->created_at,
|
|
'desfecho_id' => $atendimento->desfecho_id,
|
|
'profissional' => [
|
|
'id' => $atendimento->createdLotacao->usuario->id,
|
|
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
|
|
],
|
|
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
|
|
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
|
|
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
|
|
'evolucao' => $atendimento->evolucao,
|
|
'anamnsese' => $atendimento->atendimento_geral,
|
|
'queixa_principal_duracao' => $atendimento->queixa_principal_duracao,
|
|
'historia_paciente' => $atendimento->historia,
|
|
'exame_fisico' => $atendimento->exame_fisico,
|
|
'diagnostico' => $atendimento->diagnostico,
|
|
'conduta' => $atendimento->conduta,
|
|
'observacoes_servicos_enfermagem' => $atendimento->observacoes_enfermagem,
|
|
'observacoes' => $atendimento->observacao->descricao ?? null,
|
|
'servicos_enfermagem' => self::getServicosEnfermagemData($atendimento),
|
|
'exames' => self::getAtendimentoMedicoExamesData($atendimento),
|
|
'prescricoes_internas' => self::getAtendimentoMedicoPrescricoesInternasData($atendimento),
|
|
'procedimentos' => self::getProcedimentosData($atendimento),
|
|
'cid' => $atendimento->cid
|
|
? MaskUtil::getCidMasked($atendimento->cid->cid->codigo) . " - {$atendimento->cid->cid->nome}"
|
|
: null,
|
|
'reavaliacao' => [
|
|
'solicitou' => $atendimento->solicitou_reavaliacao ? 'SIM' : 'NÃO',
|
|
'data_hora' => $atendimento->solicitou_reavaliacao && $atendimento->data_hora_proxima_reavaliacao
|
|
? $atendimento->data_hora_proxima_reavaliacao->format('d/m/Y H:i')
|
|
: null
|
|
]
|
|
])->all();
|
|
}
|
|
|
|
private static function getAtendimentoMedicoExamesData($atendimentoMedico)
|
|
{
|
|
$exames = collect();
|
|
|
|
$atendimentoMedico->pedidosExames()
|
|
->orderBy('created_at')
|
|
->get()
|
|
->each(fn ($pedido) => $pedido->exames
|
|
->each(function ($exame) use ($exames) {
|
|
|
|
$procedimento = Procedimento::where('codigo', $exame->exame->codigo)
|
|
->orderByDesc('competencia_id')
|
|
->first();
|
|
|
|
$exames->push([
|
|
'codigo' => MaskUtil::getProcedimentoMasked($exame->exame->codigo),
|
|
'nome' => $procedimento->nome ?? null,
|
|
'nome_exame' => $exame->exame->nome,
|
|
]);
|
|
})
|
|
);
|
|
|
|
return $exames->all();
|
|
}
|
|
|
|
private static function getAtendimentoMedicoPrescricoesInternasData($atendimentoMedico)
|
|
{
|
|
$medicamentos = collect();
|
|
|
|
$atendimentoMedico->prescricoesInternas()
|
|
->orderBy('created_at')
|
|
->get()
|
|
->each(fn ($prescricao) => $prescricao->medicamentos
|
|
->each(fn ($medicamento) => $medicamentos->push([
|
|
'medicamento' => $medicamento->medicamento->nome,
|
|
'frequencia' => $prescricao->frequencia,
|
|
'quantidade' => $medicamento->quantidade,
|
|
'unidade_medida_sigla' => $medicamento->unidadeMedida->sigla ?? '',
|
|
'administracao' => $medicamento->administracao
|
|
]))
|
|
);
|
|
|
|
return $medicamentos->all();
|
|
}
|
|
|
|
/*
|
|
* Utilizado no AtendimentoEnfermagemController também.
|
|
*/
|
|
public static function getAtendimentosEnfermagemData($atendimentosEnfermagem)
|
|
{
|
|
return $atendimentosEnfermagem->map(function ($atendimento) {
|
|
|
|
$procedimentos = self::getProcedimentosData($atendimento);
|
|
|
|
self::addProfissionalFaturado($procedimentos, $atendimento->created_lotacao_id);
|
|
|
|
$atendimento = [
|
|
'tipo' => 'enfermagem',
|
|
'is_observacao' => false,
|
|
'id' => $atendimento->id,
|
|
'data_hora' => $atendimento->created_at,
|
|
'profissional' => [
|
|
'id' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->id ?? null,
|
|
'nome' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->cidadao->nome ?? null,
|
|
],
|
|
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
|
|
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
|
|
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
|
|
'historico' => $atendimento->historico->descricao ?? null,
|
|
'diagnostico' => $atendimento->diagnostico->descricao ?? null,
|
|
'planejamento' => $atendimento->planejamento->descricao ?? null,
|
|
'implementacao' => $atendimento->implementacao->descricao ?? null,
|
|
'avaliacao' => $atendimento->avaliacao->descricao ?? null,
|
|
'observacoes' => $atendimento->observacao->descricao ?? null,
|
|
'anotacoes_enfermagem' => self::getAtendimentosEnfermagemObservacaoAnotacoesData($atendimento),
|
|
'exames_laboratoriais' => self::getExamesData($atendimento, ExameTipo::LABORATORIAL),
|
|
'exames_imagem' => self::getExamesData($atendimento, ExameTipo::IMAGEM),
|
|
'laudos' => self::getLaudosExamesData($atendimento),
|
|
'servicos_enfermagem' => self::getServicosEnfermagemData($atendimento),
|
|
'prescricoes_internas' => self::getAtendimentoEnfermagemObservacaoPrescricoesInternasData($atendimento),
|
|
'procedimentos' => $procedimentos,
|
|
];
|
|
|
|
$atendimento['nodata'] = is_null($atendimento['avaliacao_antropometrica'])
|
|
&& empty($atendimento['sinais_vitais'])
|
|
&& is_null($atendimento['historico'])
|
|
&& is_null($atendimento['diagnostico'])
|
|
&& is_null($atendimento['planejamento'])
|
|
&& is_null($atendimento['implementacao'])
|
|
&& is_null($atendimento['avaliacao'])
|
|
&& is_null($atendimento['observacoes'])
|
|
&& empty($atendimento['anotacoes_enfermagem'])
|
|
&& empty($atendimento['exames_laboratoriais'])
|
|
&& empty($atendimento['exames_imagem'])
|
|
&& empty($atendimento['laudos'])
|
|
&& empty($atendimento['servicos_enfermagem'])
|
|
&& empty($atendimento['prescricoes_internas'])
|
|
&& empty($atendimento['procedimentos']);
|
|
|
|
return $atendimento;
|
|
|
|
})->all();
|
|
}
|
|
|
|
private static function getAtendimentosExameImagemData($atendimentosExameImagem)
|
|
{
|
|
|
|
return $atendimentosExameImagem->map(function ($atendimento) {
|
|
|
|
$procedimentos = self::getProcedimentosData($atendimento);
|
|
|
|
self::addProfissionalFaturado($procedimentos, $atendimento->created_lotacao_id);
|
|
|
|
return [
|
|
'tipo' => 'exame_imagem',
|
|
'is_observacao' => $atendimento->is_observacao ?? false,
|
|
'id' => $atendimento->id,
|
|
'data_hora' => $atendimento->created_at,
|
|
'profissional' => [
|
|
'id' => $atendimento->createdLotacao->usuario->id,
|
|
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
|
|
],
|
|
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
|
|
'exames_imagem' => self::getExamesData($atendimento, ExameTipo::IMAGEM),
|
|
'laudos' => self::getLaudosExamesData($atendimento),
|
|
'procedimentos' => $procedimentos,
|
|
'observacoes' => $atendimento->observacao->descricao ?? null,
|
|
];
|
|
})->all();
|
|
}
|
|
|
|
private static function addProfissionalFaturado($procedimentos, $atendimentoLotacaoId)
|
|
{
|
|
|
|
collect($procedimentos)->each(function ($procedimento) use ($atendimentoLotacaoId) {
|
|
|
|
if(!$procedimento){
|
|
|
|
if ($procedimento['lotacao_id'] !== $atendimentoLotacaoId) {
|
|
|
|
$lotacao = Lotacao::findOrFail($procedimento['lotacao_id']);
|
|
|
|
$procedimento['nome'] .= " - FATURADO PARA {$lotacao->usuario->cidadao->nome} - "
|
|
. $lotacao->ocupacao->nome;
|
|
}
|
|
};
|
|
});
|
|
}
|
|
|
|
/*
|
|
* Utilizado no PacienteObservacaoController também.
|
|
*/
|
|
public static function getAtendimentosObservacaoData($atendimentosObservacao)
|
|
{
|
|
return $atendimentosObservacao->map(function ($atendimento) {
|
|
|
|
$previousObservacao = $atendimento->atendimento->pacienteObservacoes()
|
|
->where('id', '<', $atendimento->id)
|
|
->orderByDesc('id')
|
|
->first();
|
|
|
|
$atendimento = [
|
|
'tipo' => 'observacao',
|
|
'is_observacao' => false,
|
|
'id' => $atendimento->id,
|
|
'data_hora' => $atendimento->created_at,
|
|
'profissional' => [
|
|
'id' => $atendimento->createdLotacao->usuario->id,
|
|
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
|
|
],
|
|
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
|
|
'quarto' => $atendimento->quarto,
|
|
'leito' => $atendimento->leito,
|
|
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
|
|
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
|
|
'trauma' => [
|
|
'hemorragia_externa_grave' => $atendimento->hemorragiaExternaGrave
|
|
? $atendimento->hemorragiaExternaGrave->nome . (
|
|
$atendimento->hemorragia_externa_grave_trauma_status_id === PacienteTraumaStatus::PRESENTE
|
|
? " ({$atendimento->hemorragia_externa_grave_local})"
|
|
: ''
|
|
)
|
|
: null,
|
|
'vias_aereas' => $atendimento->viasAerias
|
|
? $atendimento->viasAerias->nome . (
|
|
$atendimento->vias_aerias_trauma_status_id === PacienteTraumaStatus::OBSTRUCAO
|
|
? " ({$atendimento->vias_aerias_obstrucao_por})"
|
|
: ''
|
|
)
|
|
: null,
|
|
'oxigenacao_respiracao_ventilacao' => $atendimento->oxigenacaoRespiracaoVentilacao->nome ?? null,
|
|
'circulacao_hemorragias' => [
|
|
'pulso' => $atendimento->pulso->nome ?? null,
|
|
'perfusao' => $atendimento->perfuracao
|
|
? $atendimento->perfuracao->nome . (
|
|
$atendimento->perfuracao_trauma_status_id === PacienteTraumaStatus::LENTIFICADA
|
|
? " ({$atendimento->perfuracao_lentificada} segundos)"
|
|
: ''
|
|
)
|
|
: null,
|
|
'pele' => $atendimento->pele
|
|
? $atendimento->pele->nome . (
|
|
$atendimento->pele_trauma_status_id === PacienteTraumaStatus::ALTERACOES
|
|
? " ({$atendimento->pele_alteracao})"
|
|
: ''
|
|
)
|
|
: null,
|
|
'sangramentos' => $atendimento->sangramento
|
|
? $atendimento->sangramento->nome . (
|
|
$atendimento->sangramento_trauma_status_id === PacienteTraumaStatus::PRESENTE
|
|
? " ({$atendimento->sangramento_local})"
|
|
: ''
|
|
)
|
|
: null,
|
|
],
|
|
'avaliacao_neurologica' => [
|
|
'pupilas' => $atendimento->pupilas->nome ?? null,
|
|
'paresias' => $atendimento->paresias->nome ?? null,
|
|
'plegia' => $atendimento->plegia->nome ?? null
|
|
],
|
|
'exposicao_hipotermia' => $atendimento->exposicaoHipotermia
|
|
? $atendimento->exposicaoHipotermia->nome . (
|
|
$atendimento->exposicao_hipotermia_trauma_status_id === PacienteTraumaStatus::COM_LESOES
|
|
? " ({$atendimento->exposicao_hipotermia_observacao})"
|
|
: ''
|
|
)
|
|
: null,
|
|
],
|
|
'avaliacao_trauma_parte_corpo' => [
|
|
'cabeca_pescoco' => $atendimento->avaliacao_cabeca_pescoco,
|
|
'torax' => $atendimento->avaliacao_torax,
|
|
'abdome' => $atendimento->avaliacao_abdome,
|
|
'mmss_mmii' => $atendimento->avaliacao_mmss_mmii,
|
|
],
|
|
'escalas_glasgow' => self::getAtendimentoObservacaoEscalasGlasgow($atendimento),
|
|
'historico' => $atendimento->historico->descricao ?? null,
|
|
'diagnostico' => $atendimento->diagnostico->descricao ?? null,
|
|
'planejamento' => $atendimento->planejamento->descricao ?? null,
|
|
'implementacao' => $atendimento->implementacao->descricao ?? null,
|
|
'avaliacao' => $atendimento->avaliacao->descricao ?? null,
|
|
'observacoes' => $atendimento->observacao,
|
|
'anotacoes_enfermagem' => self::getAtendimentosEnfermagemObservacaoAnotacoesData($atendimento),
|
|
'exames_laboratoriais' => self::getExamesData($atendimento, ExameTipo::LABORATORIAL),
|
|
'laudos' => self::getLaudosExamesData($atendimento),
|
|
'servicos_enfermagem' => self::getServicosEnfermagemData($atendimento),
|
|
'prescricoes_internas' => self::getAtendimentoEnfermagemObservacaoPrescricoesInternasData(null, $atendimento),
|
|
'procedimentos' => self::getProcedimentosData($atendimento),
|
|
];
|
|
|
|
$atendimento['nodata'] = (is_null($atendimento['quarto'])
|
|
|| is_null($previousObservacao)
|
|
|| $previousObservacao->quarto == $atendimento['quarto']
|
|
)
|
|
&& (is_null($atendimento['leito'])
|
|
|| is_null($previousObservacao)
|
|
|| $previousObservacao->leito == $atendimento['leito']
|
|
)
|
|
&& is_null($atendimento['avaliacao_antropometrica'])
|
|
&& empty($atendimento['sinais_vitais'])
|
|
&& is_null($atendimento['trauma']['hemorragia_externa_grave'])
|
|
&& is_null($atendimento['trauma']['vias_aereas'])
|
|
&& is_null($atendimento['trauma']['oxigenacao_respiracao_ventilacao'])
|
|
&& is_null($atendimento['trauma']['circulacao_hemorragias']['pulso'])
|
|
&& is_null($atendimento['trauma']['circulacao_hemorragias']['perfusao'])
|
|
&& is_null($atendimento['trauma']['circulacao_hemorragias']['pele'])
|
|
&& is_null($atendimento['trauma']['circulacao_hemorragias']['sangramentos'])
|
|
&& is_null($atendimento['trauma']['avaliacao_neurologica']['pupilas'])
|
|
&& is_null($atendimento['trauma']['avaliacao_neurologica']['plegia'])
|
|
&& is_null($atendimento['trauma']['exposicao_hipotermia'])
|
|
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['cabeca_pescoco'])
|
|
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['torax'])
|
|
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['abdome'])
|
|
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['mmss_mmii'])
|
|
&& empty($atendimento['escalas_glasgow']['ocular'])
|
|
&& is_null($atendimento['historico'])
|
|
&& is_null($atendimento['diagnostico'])
|
|
&& is_null($atendimento['planejamento'])
|
|
&& is_null($atendimento['implementacao'])
|
|
&& is_null($atendimento['avaliacao'])
|
|
&& is_null($atendimento['observacoes'])
|
|
&& empty($atendimento['anotacoes_enfermagem'])
|
|
&& empty($atendimento['exames_laboratoriais'])
|
|
&& empty($atendimento['laudos'])
|
|
&& empty($atendimento['servicos_enfermagem'])
|
|
&& empty($atendimento['prescricoes_internas'])
|
|
&& empty($atendimento['procedimentos']);
|
|
|
|
return $atendimento;
|
|
|
|
})->all();
|
|
}
|
|
|
|
private static function getAtendimentoObservacaoEscalasGlasgow($atendimentoObservacao)
|
|
{
|
|
return $atendimentoObservacao->escalasComaGlasgow()->orderBy('created_at')->get()->map(function ($escala) {
|
|
|
|
$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,
|
|
'pontuacao' => $pontuacao,
|
|
'resultado' => $resultado
|
|
];
|
|
})->all();
|
|
}
|
|
|
|
private static function getAtendimentosEnfermagemObservacaoAnotacoesData($atendimento)
|
|
{
|
|
return $atendimento->anotacoes()->orderBy('created_at')->get()->map(fn ($anotacao) => [
|
|
'data_hora' => $anotacao->anotado_em->format('d/m/Y H:i'),
|
|
'descricao' => $anotacao->descricao
|
|
])->all();
|
|
}
|
|
|
|
private static function getAtendimentoEnfermagemObservacaoPrescricoesInternasData(
|
|
$atendimentoEnfermagem = null,
|
|
$atendimentoObservacao = null
|
|
) {
|
|
$medicamentos = collect();
|
|
|
|
PrescricaoInterna::whereHas('medicamentos',
|
|
function ($query) use ($atendimentoEnfermagem, $atendimentoObservacao) {
|
|
|
|
$query->whereHas('aplicacoes', function ($query) use ($atendimentoEnfermagem, $atendimentoObservacao) {
|
|
|
|
$query
|
|
->when($atendimentoEnfermagem, function ($query, $atendimentoEnfermagem) {
|
|
|
|
$query->where('atendimento_enfermagem_id', $atendimentoEnfermagem->id);
|
|
})
|
|
->when($atendimentoObservacao, function ($query, $atendimentoObservacao) {
|
|
|
|
$query->where('paciente_observacao_id', $atendimentoObservacao->id);
|
|
});
|
|
});
|
|
}
|
|
)
|
|
->orderBy('created_at')
|
|
->get()
|
|
->each(fn ($prescricao) => $prescricao->medicamentos()
|
|
->whereHas('aplicacoes', function ($query) use ($atendimentoEnfermagem, $atendimentoObservacao) {
|
|
|
|
$query
|
|
->when($atendimentoEnfermagem, function ($query, $atendimentoEnfermagem) {
|
|
|
|
$query->where('atendimento_enfermagem_id', $atendimentoEnfermagem->id);
|
|
})
|
|
->when($atendimentoObservacao, function ($query, $atendimentoObservacao) {
|
|
|
|
$query->where('paciente_observacao_id', $atendimentoObservacao->id);
|
|
});
|
|
})
|
|
->get()
|
|
->each(fn ($medicamento) => $medicamentos->push([
|
|
'medicamento' => $medicamento->medicamento->nome,
|
|
'frequencia' => $prescricao->frequencia,
|
|
'quantidade' => $medicamento->quantidade,
|
|
'unidade_medida_sigla' => $medicamento->unidadeMedida->sigla ?? '',
|
|
'administracao' => $medicamento->administracao,
|
|
'aplicacoes' => ($atendimentoEnfermagem->automatico ?? false)
|
|
? []
|
|
: $medicamento->aplicacoes->map(fn ($aplicacao, $i) => [
|
|
'numero' => $i + 1,
|
|
'status' => $aplicacao->status->nome . ($aplicacao->status->id === Status::REALIZADO
|
|
? ' às ' . (new Carbon($aplicacao->horario_aplicacao))->format('H:i') . ' h'
|
|
: ''
|
|
)
|
|
])->all()
|
|
]))
|
|
);
|
|
|
|
return $medicamentos->all();
|
|
}
|
|
|
|
private static function getAvaliacaoAntropometricaData($atendimento)
|
|
{
|
|
$avaliacao = $atendimento->avaliacaoAntropometrica;
|
|
|
|
if (is_null($avaliacao)) {
|
|
|
|
return null;
|
|
}
|
|
|
|
return [
|
|
'peso' => $avaliacao->massa
|
|
? str_replace('.', ',', "{$avaliacao->massa} {$avaliacao->massaUnidadeMedida->sigla}")
|
|
: null,
|
|
'altura' => $avaliacao->altura
|
|
? str_replace('.', ',', "{$avaliacao->altura} {$avaliacao->alturaUnidadeMedida->sigla}")
|
|
: null
|
|
];
|
|
}
|
|
|
|
private static function getSinaisVitaisData($atendimento)
|
|
{
|
|
$getSigla = fn ($id) => UnidadeMedida::findOrFail($id)->sigla;
|
|
|
|
return $atendimento->sinaisVitais()->orderBy('created_at')->get()->map(fn ($sinal) => [
|
|
'pa' => $sinal->pa
|
|
? "{$sinal->pa} {$sinal->paUnidadeMedida->sigla}"
|
|
: null,
|
|
'glicemia' => $sinal->glicemia
|
|
? "{$sinal->glicemia} " . $getSigla(CadastroUnidadeMedida::MILIGRAMAS_POR_DECILITRO)
|
|
: null,
|
|
'temperatura' => $sinal->temperatura
|
|
? str_replace('.', ',', "{$sinal->temperatura} " . $getSigla(CadastroUnidadeMedida::CELSIUS))
|
|
: null,
|
|
'pulso' => $sinal->pulso
|
|
? "{$sinal->pulso} " . $getSigla(CadastroUnidadeMedida::BATIMENTOS_POR_MINUTO)
|
|
: null,
|
|
'respiracao' => $sinal->respiracao
|
|
? "{$sinal->respiracao} " . $getSigla(CadastroUnidadeMedida::MOVIMENTOS_POR_MINUTO)
|
|
: null,
|
|
'saturacao' => $sinal->saturacao
|
|
? "{$sinal->saturacao} " . $getSigla(CadastroUnidadeMedida::PORCENTAGEM)
|
|
: null,
|
|
'intensidade_dor' => $sinal->intensidade_dor,
|
|
'cintura' => $sinal->cintura
|
|
? "{$sinal->cintura} " . $getSigla(CadastroUnidadeMedida::CENTIMETROS)
|
|
: null,
|
|
])->all();
|
|
}
|
|
|
|
private static function getProcedimentosData($atendimento)
|
|
{
|
|
return $atendimento->procedimentos()->orderBy('created_at')->get()->map(fn($procedimento) => $procedimento->procedimento
|
|
? collect([
|
|
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->procedimento->codigo),
|
|
'nome' => $procedimento->procedimento->nome,
|
|
'lotacao_id' => $procedimento->lotacao_id ?? null,
|
|
]) : null
|
|
)
|
|
->filter()
|
|
->values()
|
|
->all();
|
|
}
|
|
|
|
private static function getServicosEnfermagemData($atendimento)
|
|
{
|
|
return $atendimento->servicosEnfermagem()->orderBy('created_at')->get()->map(fn ($servico) => [
|
|
'codigo' => MaskUtil::getProcedimentoMasked($servico->procedimento->codigo),
|
|
'nome' => $servico->procedimento->nome,
|
|
'observacoes' => $servico->observacoes,
|
|
'status' => $servico->status->nome . ($servico->status->id === Status::REALIZADO
|
|
? ' às ' . (new Carbon($servico->horario_realizacao))->format('H:i') . ' h'
|
|
: ''
|
|
)
|
|
])->all();
|
|
}
|
|
|
|
private static function getExamesData($atendimento, $tipoId)
|
|
{
|
|
|
|
return $atendimento->pedidoExameItems()
|
|
->whereHas('exame', fn ($q) => $q->where('tipo_id', $tipoId))
|
|
->orderBy('created_at')
|
|
->get()
|
|
->map(function ($exame) {
|
|
$procedimento = Procedimento::where('codigo', $exame->exame->codigo)
|
|
->orderByDesc('competencia_id')
|
|
->first();
|
|
|
|
return [
|
|
'codigo' => MaskUtil::getProcedimentoMasked($exame->exame->codigo),
|
|
'nome' => $procedimento->nome ?? null,
|
|
'nome_exame' => $exame->exame->nome,
|
|
'status' => $exame->status->nome
|
|
. ($exame->status->id === Status::REALIZADO && $exame->horario_realizacao
|
|
? ' às ' . (new Carbon($exame->horario_realizacao))->format('H:i') . ' h'
|
|
: '')
|
|
];
|
|
})
|
|
->all();
|
|
}
|
|
|
|
private static function getLaudosExamesData($atendimento)
|
|
{
|
|
return $atendimento->pedidoExameLaudos()
|
|
->orderBy('created_at')
|
|
->get()
|
|
->map(fn ($laudo) => ['nome' => $laudo->nome])
|
|
->all();
|
|
}
|
|
|
|
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,
|
|
'prefereNome' => $cidadao->preferencia_nome_id ?? null,
|
|
'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(),
|
|
];
|
|
}
|
|
|
|
private static function getRaatData($atendimento)
|
|
{
|
|
$raat = $atendimento->faa->raat;
|
|
|
|
if (!$raat) {
|
|
|
|
return null;
|
|
}
|
|
|
|
$titulo = '';
|
|
|
|
switch ($raat->tipo_formulario_acidente_trabalho) {
|
|
case TipoFormularioAcidenteTrabalho::RAAT:
|
|
$titulo = 'Raat Aberta';
|
|
break;
|
|
case TipoFormularioAcidenteTrabalho::CAT:
|
|
$titulo = 'Cat Aberta';
|
|
break;
|
|
default:
|
|
$titulo = 'Cat/Raat Aberta';
|
|
}
|
|
|
|
$formularioTemCat = $raat->tipo_formulario_acidente_trabalho != TipoFormularioAcidenteTrabalho::RAAT;
|
|
|
|
$cat = Cat::where('raat_id', $raat->id)->first();
|
|
|
|
$parecerMedico = $raat->pareceresMedico()->orderByDesc('created_at')->first();
|
|
|
|
if ($parecerMedico) {
|
|
|
|
$parecerMedico = [
|
|
'agente' => $parecerMedico->agente->nome,
|
|
'causas_acidente' => $parecerMedico->causasAcidente->map(
|
|
function ($causa) use ($parecerMedico) {
|
|
|
|
if ($causa->id === CausaAcidente::OUTROS) {
|
|
|
|
$causa->nome .= is_null($parecerMedico->causa_acidente_outras)
|
|
? " (NÃO INFORMADA)"
|
|
: " ({$parecerMedico->causa_acidente_outras})";
|
|
}
|
|
|
|
return $causa->nome;
|
|
}
|
|
)->all(),
|
|
'partes_corpo_atingidas' => $parecerMedico->partesCorpoAtingidas->map(
|
|
function ($parte) use ($parecerMedico) {
|
|
|
|
if ($parte->id === ParteCorpoAtingida::OUTROS) {
|
|
|
|
$parte->nome .= is_null($parecerMedico->parte_corpo_atingida_outras)
|
|
? " (NÃO INFORMADO)"
|
|
: " ({$parecerMedico->parte_corpo_atingida_outras})";
|
|
}
|
|
|
|
return $parte->nome;
|
|
}
|
|
)->all(),
|
|
'diagnosticos' => $parecerMedico->diagnosticos->map(
|
|
function ($diagnostico) use ($parecerMedico) {
|
|
|
|
if ($diagnostico->id === DiagnosticoRaat::OUTROS) {
|
|
|
|
$diagnostico->nome .= is_null($parecerMedico->diagnostico_outros)
|
|
? " (NÃO INFORMADO)"
|
|
: " ({$parecerMedico->diagnostico_outros})";
|
|
}
|
|
|
|
return $diagnostico->nome;
|
|
}
|
|
)->all(),
|
|
'cid' => ($parecerMedico->atendimentoMedico->cid->cid ?? null)
|
|
? $parecerMedico->atendimentoMedico->cid->cid->codigo
|
|
. ' - ' . $parecerMedico->atendimentoMedico->cid->cid->nome
|
|
: '',
|
|
'observacao' => $parecerMedico->observacao ?? null,
|
|
'classificacao_inicial' => $parecerMedico->classificacaoInicial->nome,
|
|
'com_afastamento' => $parecerMedico->afastado ? 'SIM' : 'NÃO',
|
|
'sofreu_acidente_trabalho' => $cat && $formularioTemCat ? ($cat->paciente_sofreu_acidente_trabalho ? 'SIM' : 'NÃO') : null,
|
|
'portador_doenca_ocupacional' => $cat && $formularioTemCat ? ($cat->paciente_portador_doenca_ocupacional ? 'SIM' : 'NÃO') : null,
|
|
'precisa_internacao' => $cat && $formularioTemCat ? ($cat->paciente_precisa_internacao ? 'SIM' : 'NÃO') : null,
|
|
'dias_afastamento' => $cat && $formularioTemCat ? ($cat->dias_afastamento ?? 'NÃO INFORMADO') : null,
|
|
];
|
|
}
|
|
|
|
return [
|
|
'titulo_formulario'=> $titulo,
|
|
'empresa' => [
|
|
'nome' => $raat->empresa_nome,
|
|
'ramo_atividade' => $raat->empresa_ramo_atividade,
|
|
'telefone' => $raat->empresa_telefone
|
|
? MaskUtil::getPhoneMasked($raat->empresa_telefone)
|
|
: null,
|
|
'endereco' => $raat->empresa_endereco,
|
|
'ocupacao_paciente' => $cat && $formularioTemCat ? $cat->empresa_ocupacao_paciente : null
|
|
],
|
|
'acidente' => [
|
|
'data' => $raat->acidente_data->format('d/m/Y'),
|
|
'hora' => $raat->acidente_hora ? $raat->acidente_hora->format('H:i') : null,
|
|
'tipo' => $raat->tipoAcidente->nome ?? null,
|
|
'regime_trabalho' => $raat->regimeTrabalho->nome ?? null,
|
|
'regime_trabalho_outro' => $raat->regimeTrabalho
|
|
? ($raat->regime_trabalho_outro ?? 'NÃO INFORMADO')
|
|
: '',
|
|
'local' => $raat->acidente_local,
|
|
'descricao' => $raat->acidente_descricao,
|
|
],
|
|
'parecer_medico' => $parecerMedico
|
|
];
|
|
}
|
|
|
|
private static function getClassificacoesRiscoData($atendimento)
|
|
{
|
|
$classificacoes = collect();
|
|
$previousClassificacaoId = null;
|
|
|
|
$atendimento->classificacoesRisco()
|
|
->orderBy('created_at')
|
|
->get()
|
|
->each(function ($classificacao) use (&$previousClassificacaoId, $classificacoes) {
|
|
|
|
if ($classificacao->classificacao_risco_id !== $previousClassificacaoId) {
|
|
|
|
$classificacoes->push([
|
|
'data_hora' => $classificacao->created_at->format('d/m/Y H:i:s'),
|
|
'nome' => $classificacao->classificacaoRisco->nome,
|
|
'profissional' => $classificacao->createdLotacao->usuario->cidadao->nome ?? null,
|
|
'cbo' => $classificacao->createdLotacao->ocupacao->nome,
|
|
'setor' => $classificacao->createdCentroCusto->setor->nome,
|
|
]);
|
|
}
|
|
|
|
$previousClassificacaoId = $classificacao->classificacao_risco_id;
|
|
});
|
|
|
|
return $classificacoes->all();
|
|
}
|
|
|
|
private static function getFatoresRiscoData($atendimento, $until)
|
|
{
|
|
if (is_null($until)) {
|
|
|
|
return [];
|
|
}
|
|
|
|
return $atendimento->faa->paciente->cidadao->fatoresRisco()
|
|
->wherePivot('created_at', '<=', $until)
|
|
->get()
|
|
->map(fn ($fatorRisco) => [
|
|
'data_hora' => $fatorRisco->cidadaoFatorRisco->created_at->format('d/m/Y H:i:s'),
|
|
'nome' => $fatorRisco->id == EnumFatorRisco::OUTRO
|
|
? $fatorRisco->nome .' (' . $atendimento->faa->paciente->cidadao->fator_risco_outro . ')'
|
|
: $fatorRisco->nome,
|
|
'profissional' => $fatorRisco->cidadaoFatorRisco->createdLotacao->usuario->cidadao->nome ?? null,
|
|
'cbo' => $fatorRisco->cidadaoFatorRisco->createdLotacao->ocupacao->nome ?? null,
|
|
'setor' => $fatorRisco->cidadaoFatorRisco->createdCentroCusto->setor->nome ?? null,
|
|
])
|
|
->sortBy('data_hora')
|
|
->all();
|
|
}
|
|
|
|
private static function getAlergiasData($atendimento, $until)
|
|
{
|
|
if (is_null($until)) {
|
|
|
|
return [];
|
|
}
|
|
|
|
return $atendimento->faa->paciente->cidadao->alergias()
|
|
->wherePivot('created_at', '<=', $until)
|
|
->get()
|
|
->map(fn ($alergia) => [
|
|
'data_hora' => $alergia->cidadaoAlergia->created_at->format('d/m/Y H:i:s'),
|
|
'nome' => $alergia->agente_substancia_especifica,
|
|
'profissional' => $alergia->cidadaoAlergia->createdLotacao->usuario->cidadao->nome ?? null,
|
|
'cbo' => $alergia->cidadaoAlergia->createdLotacao->ocupacao->nome,
|
|
'setor' => $alergia->cidadaoAlergia->createdCentroCusto->setor->nome,
|
|
])
|
|
->sortBy('data_hora')
|
|
->all();
|
|
}
|
|
|
|
private static function getMedicamentosUsoContinuoData($atendimento, $until)
|
|
{
|
|
|
|
if (is_null($until)) {
|
|
|
|
return [];
|
|
}
|
|
|
|
return $atendimento->faa->paciente->cidadao->medicamentosUsoContinuo()
|
|
->wherePivot('created_at', '<=', $until)
|
|
->get()
|
|
->map(fn ($medicamento) => [
|
|
'data_hora' => $medicamento->CidadaoMedicamentoUsoContinuo->created_at->format('d/m/Y H:i:s'),
|
|
'nome' => $medicamento->nome,
|
|
'profissional' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->usuario->cidadao->nome,
|
|
'cbo' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->nome,
|
|
'setor' => $medicamento->CidadaoMedicamentoUsoContinuo->createdCentroCusto->setor->nome,
|
|
])
|
|
->sortBy('data_hora')
|
|
->all();
|
|
}
|
|
|
|
private static function getMedicamentosEmUsoData($atendimento)
|
|
{
|
|
return $atendimento->medicamentosUso()->orderBy('created_at')->get()->map(fn ($medicamento) => [
|
|
'data_hora' => $medicamento->created_at->format('d/m/Y H:i:s'),
|
|
'descricao' => $medicamento->descricao,
|
|
'profissional' => $medicamento->createdLotacao->usuario->cidadao->nome,
|
|
'cbo' => $medicamento->createdLotacao->ocupacao->nome,
|
|
'setor' => $medicamento->createdCentroCusto->setor->nome,
|
|
])->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([
|
|
'tipo' => 'fechamento',
|
|
'is_observacao' => false,
|
|
'id' => null,
|
|
'lotacao_id' => $atendimentoProcedimento->lotacao_id,
|
|
'profissional' => [
|
|
'id' => $atendimentoProcedimento->lotacao->usuario->id,
|
|
'nome' => $atendimentoProcedimento->lotacao->usuario->cidadao->nome,
|
|
],
|
|
'cbo' => $atendimentoProcedimento->lotacao->ocupacao->nome,
|
|
'data_hora_formatted' => $realizadoEmFormatted,
|
|
'data_hora' => $realizadoEm,
|
|
'cid' => null,
|
|
'procedimentos' => collect(),
|
|
]);
|
|
|
|
$atendimentosProcedimentos->push($atendimentoProcedimentoProfissional);
|
|
}
|
|
|
|
if ($atendimentoProcedimento->is_parametrizado) {
|
|
|
|
if ($atendimentoProcedimento->cidPrincipalId) {
|
|
|
|
$cid = Cid::find($atendimentoProcedimento->cidPrincipalId, ['codigo', 'nome']);
|
|
|
|
$atendimentoProcedimentoProfissional['cid'] = MaskUtil::getCidMasked(
|
|
$cid->codigo)
|
|
. " - {$cid->nome}";
|
|
}
|
|
}
|
|
|
|
$procedimento = Procedimento::find($atendimentoProcedimento->procedimento_id, ['codigo', 'nome']);
|
|
|
|
if($procedimento){
|
|
|
|
$atendimentoProcedimentoProfissional['procedimentos']->push(collect([
|
|
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->codigo),
|
|
'nome' => $procedimento->nome
|
|
]));
|
|
}
|
|
});
|
|
|
|
return $atendimentosProcedimentos->all();
|
|
}
|
|
|
|
private static function getDesfechoData($atendimento)
|
|
{
|
|
$faa = $atendimento->faa;
|
|
|
|
if (is_null($faa->desfecho_id)) {
|
|
|
|
return null;
|
|
}
|
|
|
|
$evasao = null;
|
|
$encaminhamentoHospitalar = null;
|
|
$obito = null;
|
|
|
|
if ($faa->desfecho->id === Desfecho::EVASAO) {
|
|
|
|
$evasao = [
|
|
'motivo' => $atendimento->fila->motivo_evasao ?? null
|
|
];
|
|
}
|
|
else if ($faa->desfecho->id === Desfecho::ENCAMINHAMENTO_HOSPITALAR) {
|
|
|
|
$lastEncaminhamento = $atendimento->encaminhamentosHospitalar()->orderByDesc('created_at')->first();
|
|
|
|
$encaminhamentoHospitalar = [
|
|
'unidade_encaminhamento' => $lastEncaminhamento->unidade->nome_fantasia
|
|
?? $lastEncaminhamento->unidade_nome,
|
|
'quarto' => $lastEncaminhamento->quarto ?? 'NÃO INFORMADO',
|
|
'leito' => $lastEncaminhamento->leito ?? 'NÃO INFORMADO',
|
|
'medico_hospitalar' => $lastEncaminhamento->medico_hospitalar ?? 'NÃO INFORMADO',
|
|
'cid' => "{$lastEncaminhamento->cid->codigo} - {$lastEncaminhamento->cid->nome}",
|
|
'observacoes' => $lastEncaminhamento->observacoes ?? 'NÃO INFORMADO'
|
|
];
|
|
}
|
|
else if ($faa->desfecho->id === Desfecho::OBITO) {
|
|
|
|
$obito = [
|
|
'data' => (new Carbon($faa->paciente->cidadao->obito->obito_em))->format('d/m/Y'),
|
|
'hora' => (new Carbon($faa->paciente->cidadao->obito->obito_em))->format('H:i'),
|
|
'numero_declaracao' => $faa->paciente->cidadao->obito->declaracao,
|
|
'cid' => "{$faa->paciente->cidadao->obito->cid->codigo} - {$faa->paciente->cidadao->obito->cid->nome}",
|
|
'causa' => $faa->paciente->cidadao->obito->causa
|
|
];
|
|
}
|
|
|
|
return [
|
|
'data_hora' => $faa->data_hora_desfecho
|
|
? (new Carbon($faa->data_hora_desfecho))->format('d/m/Y H:i:s')
|
|
: '',
|
|
'profissional' => $faa->usuario->cidadao->nome ?? '',
|
|
'cbo' => $faa->lotacao->ocupacao->nome ?? '',
|
|
'nome' => $atendimento->faa->desfecho->nome,
|
|
'evasao' => $evasao,
|
|
'encaminhamento_hospitalar' =>$encaminhamentoHospitalar,
|
|
'obito' => $obito
|
|
|
|
];
|
|
}
|
|
|
|
private static function getAssinaturasData($atendimentos)
|
|
{
|
|
$assinaturas = [];
|
|
$idsProfissinais = [];
|
|
|
|
foreach ($atendimentos as $atendimento) {
|
|
|
|
if (!in_array($atendimento['profissional']['id'], $idsProfissinais)) {
|
|
|
|
$usuario = Usuario::withTrashed()->findOrFail($atendimento['profissional']['id']);
|
|
|
|
$assinaturas[] = [
|
|
'profissional' => $atendimento['profissional']['nome'],
|
|
'documento' => $usuario->registro_tipo_id
|
|
? ($usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
|
|
? $usuario->registro_tipo_outro
|
|
: $usuario->registroTipo->sigla
|
|
) . ": {$usuario->registro_numero}"
|
|
: 'Conselho profissional: NÃO INFORMADO',
|
|
'cbo' => $atendimento['cbo']
|
|
];
|
|
|
|
$idsProfissinais[] = $atendimento['profissional']['id'];
|
|
}
|
|
}
|
|
|
|
return $assinaturas;
|
|
}
|
|
|
|
public function __invoke($atendimentoId)
|
|
{
|
|
return (new Pdf)->stream(self::getTemplate($atendimentoId, request()->all()), self::TITLE);
|
|
}
|
|
}
|