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

209 lines
12 KiB
PHP

<?php
namespace App\Http\Controllers\Impressao\ProntoAtendimento\AtendimentoTriagem;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Intranet\Cliente;
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
use App\Models\ProntoAtendimento\Atendimento\Triagem\Encaminhamento;
use App\Utils\MaskUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Str;
class GuiaEncaminhamentoController extends Controller
{
public function __invoke($atendimentoId = null)
{
$cliente = Cliente::where('link', app('config')->get('database.default'))
->where('sistema_id', 1)
->firstOrFail();
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
$encaminhamentos = [];
if (!is_null($atendimentoId)) {
$encaminhamentos = self::getEncaminhamentosByAtendimento($atendimentoId);
} else {
$encaminhamentos = self::getEncaminhamentos(request()->paciente_id);
}
$data = [
'cliente' => [
'nome' => Str::upper($cliente->nome),
'logotipo' => $logotipo,
],
'encaminhamentos' => $encaminhamentos,
];
return SnappyPdf::loadView('impressoes.template.pronto-atendimento.atendimento-triagem.guia-encaminhamento', compact('data'))
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-top', '10')
->setOption('margin-bottom', '10')
->inline();
}
public static function getEncaminhamentosByAtendimento($atendimentoId)
{
$encaminhamentos = [];
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->faa->paciente;
$atendimento->atendimentosTriagem->each(function ($atendimentoTriagem) use ($paciente, &$encaminhamentos) {
$atendimentoTriagem->encaminhamentos->each(function ($encaminhamento) use ($paciente, &$encaminhamentos) {
$lotacaoOrigem = $encaminhamento->createdLotacao;
$infraestruturaOrigem = $lotacaoOrigem->infraestrutura;
$usuarioOrigem = $lotacaoOrigem->usuario;
$infraestruturaDestino = $encaminhamento->infraestrutura;
$instituicao = $infraestruturaDestino->unidade->nome_fantasia;
$endereco = $infraestruturaDestino->endereco->completo;
$encaminhamentos[] = [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'prontuario' => $paciente->prontuario,
'nome_social' => $paciente->cidadao->nome_social,
'idade' => $paciente->cidadao->idade_formatada,
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao,
'data_nascimento' => $paciente->cidadao->data_nascimento
? $paciente->cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
'numero' => $paciente->cidadao->domicilio->endereco->numero,
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero,
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
'cep' => $paciente->cidadao->domicilio
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
: null,
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome,
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
],
'instituicao' => $instituicao,
'endereco' => $endereco,
'unidade_origem' => [
'nome_fantasia' => isset($infraestruturaOrigem->unidade->nome_fantasia)
? substr($infraestruturaOrigem->unidade->nome_fantasia, 0, 40) : null,
'cnes' => $infraestruturaOrigem->unidade->cnes,
'telefone' => $infraestruturaOrigem->telefone ? MaskUtil::getPhoneMasked($infraestruturaOrigem->telefone) : null,
],
'usuario_origem' => [
'nome' => $usuarioOrigem->cidadao->nome ?? null,
'usuario_nome' => $usuarioOrigem->cidadao->nome,
'ocupacao_descricao' => $lotacaoOrigem->ocupacao->codigo . ' - '
. $lotacaoOrigem->ocupacao->nome,
'documento' => $usuarioOrigem->registro_tipo_id
? ($usuarioOrigem->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $usuarioOrigem->registro_tipo_outro
: $usuarioOrigem->registroTipo->sigla
) . ": {$usuarioOrigem->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'data' => Carbon::now()->format('d/m/Y') ?? null,
'horario' => Carbon::now()->format('H:i') ?? null,
'motivo' => $encaminhamento['motivo'] ?? null,
];
});
});
return $encaminhamentos;
}
public static function getEncaminhamentos($pacienteId)
{
$encaminhamentos = [];
$paciente = Paciente::findOrFail($pacienteId);
foreach (request()->encaminhamentos as $encaminhamento) {
$lotacaoOrigem = null;
$infraestruturaDestino = null;
if (isset($encaminhamento['id'])) {
$encaminhamento = Encaminhamento::findOrFail($encaminhamento['id']);
$lotacaoOrigem = $encaminhamento->createdLotacao;
$infraestruturaDestino = $encaminhamento->infraestrutura;
} else {
$lotacaoOrigem = self::getCurrentLotacao();
$infraestruturaDestino = Infraestrutura::findOrFail($encaminhamento['infraestrutura_id']);
}
$infraestruturaOrigem = $lotacaoOrigem->infraestrutura;
$usuarioOrigem = $lotacaoOrigem->usuario;
$instituicao = $infraestruturaDestino->unidade->nome_fantasia;
$endereco = $infraestruturaDestino->endereco->completo;
$encaminhamentos[] = [
'paciente' => [
'nome' => $paciente->cidadao->nome,
'prontuario' => $paciente->prontuario,
'nome_social' => $paciente->cidadao->nome_social,
'idade' => $paciente->cidadao->idade_formatada,
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-',
'sexo' => $paciente->cidadao->sexo->descricao,
'data_nascimento' => $paciente->cidadao->data_nascimento
? $paciente->cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'nome_mae' => $paciente->cidadao->nome_mae ?? 'NÃO INFORMADO',
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null,
'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null,
'logradouro' => $paciente->cidadao->domicilio->endereco->logradouro->nome ?? null,
'numero' => $paciente->cidadao->domicilio->endereco->numero,
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero,
'complemento' => $paciente->cidadao->domicilio->endereco->complemento ?? '',
'cep' => $paciente->cidadao->domicilio
? MaskUtil::getCepMasked( $paciente->cidadao->domicilio->endereco->logradouro->cep)
: null,
'municipio' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome,
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge,
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
],
'instituicao' => $instituicao,
'endereco' => $endereco,
'unidade_origem' => [
'nome_fantasia' => isset($infraestruturaOrigem->unidade->nome_fantasia)
? substr($infraestruturaOrigem->unidade->nome_fantasia, 0, 40) : null,
'cnes' => $infraestruturaOrigem->unidade->cnes,
'telefone' => $infraestruturaOrigem->telefone ? MaskUtil::getPhoneMasked($infraestruturaOrigem->telefone) : null,
],
'usuario_origem' => [
'nome' => $usuarioOrigem->cidadao->nome ?? null,
'usuario_nome' => $usuarioOrigem->cidadao->nome,
'ocupacao_descricao' => $lotacaoOrigem->ocupacao->codigo . ' - '
. $lotacaoOrigem->ocupacao->nome,
'documento' => $usuarioOrigem->registro_tipo_id
? ($usuarioOrigem->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $usuarioOrigem->registro_tipo_outro
: $usuarioOrigem->registroTipo->sigla
) . ": {$usuarioOrigem->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'data' => Carbon::now()->format('d/m/Y') ?? null,
'horario' => Carbon::now()->format('H:i') ?? null,
'motivo' => $encaminhamento['motivo'] ?? null,
];
}
return $encaminhamentos;
}
}