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); } }