Files
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

102 lines
4.0 KiB
PHP

<?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(),
];
}
}