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

87 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers\Impressao\Regulacao;
use App\Enums\Parametrizacao\Exame\Tipo;
use App\Http\Controllers\Controller;
use App\Models\Regulacao\Parametrizacao;
use App\Models\Regulacao\Solicitacao;
use App\Utils\Exports\PdfCupom;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Str;
class SolicitacaoController extends Controller
{
private const TITLE = 'SOLICITAÇÃO';
private const TEMPLATE = 'regulacao.solicitacao';
public static function getTemplate($id)
{
$solicitacao = Solicitacao::findOrFail($id);
$parametrizacao = Parametrizacao::first();
$itensExamesLaboratoriais = $solicitacao->itens()
->whereHas('exame', fn ($q) => $q->where('tipo_id', Tipo::LABORATORIAL))
->get();
$exameImagem = $solicitacao->itens()
->whereHas('exame', fn ($q) => $q->where('tipo_id', Tipo::IMAGEM))
->first()->exame ?? null;
$procedimentoCirurgico = $solicitacao->itens()
->whereNotNull('procedimento_cirurgico_id')
->first()->procedimentoCirurgico ?? null;
$especialidade = $solicitacao->itens()->whereNotNull('especialidade_id')->first()->especialidade ?? null;
return [
'solicitou' => Str::ucfirst($solicitacao->created_at->translatedFormat('l, d \de F \de Y, \à\s H:i:s')),
'data_solicitacao' => $solicitacao->data->format('d/m/Y'),
'paciente' => [
'nome' => $solicitacao->paciente->cidadao->nome,
'nome_social' => $solicitacao->paciente->cidadao->nome_social,
'protocolo_cross' => $solicitacao->paciente->protocolo_cross ?? null,
'prontuario' => $solicitacao->paciente->prontuario,
'data_nascimento' => $solicitacao->paciente->cidadao->data_nascimento
? (new Carbon($solicitacao->paciente->cidadao->data_nascimento))->format('d/m/Y')
: null,
],
'peso' => str_replace('.', ',', $solicitacao->peso ?? '') . (is_null($solicitacao->peso) ? '' : ' kg'),
'altura' => str_replace('.', ',', $solicitacao->altura ?? '') . (is_null($solicitacao->altura) ? '' : ' cm'),
'hipoteseDiagnosticaJustificativa' => $solicitacao->hipotese_diagnostica_justificativa,
'solicitante' => [
'usuario' => $solicitacao->usuarioSolicitante->cidadao->nome,
'unidade' => $solicitacao->infraestruturaSolicitante->unidade->nome_fantasia,
'infraestrutura' => $solicitacao->infraestruturaSolicitante->nome,
],
'examesLaboratoriais' => $itensExamesLaboratoriais->isNotEmpty()
? $itensExamesLaboratoriais->map(fn ($i) => (empty($i->exame->codigo)
? ''
: MaskUtil::getProcedimentoMasked($i->exame->codigo) . ' - '
) . $i->exame->nome)->sort()->values()
: collect(),
'exameImagem' => $exameImagem
? (empty($exameImagem->codigo)
? ''
: MaskUtil::getProcedimentoMasked($exameImagem->codigo) . ' - '
) . $exameImagem->nome
: null,
'procedimentoCirurgico' => $procedimentoCirurgico
? (MaskUtil::getProcedimentoMasked($procedimentoCirurgico->procedimento_codigo)
. " - {$procedimentoCirurgico->nome}")
: null,
'especialidade' => $especialidade
? "{$especialidade->ocupacao->codigo} - {$especialidade->nome}"
: null,
'atendente' => $solicitacao->createdLotacao()->withTrashed()->first()->usuario->cidadao->nome,
'mensagemProtocoloSolicitacao' => $parametrizacao->mensagem_protocolo_solicitacao ?? null,
];
}
public function __invoke($id)
{
return PdfCupom::generate(self::TITLE, self::TEMPLATE, self::getTemplate($id));
}
}