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