init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,307 @@
<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\AtendimentoImpressaoTipo;
use App\Enums\AtencaoBasica\AtendimentoIndividual\Encaminhamento;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
use App\Models\Cadastro\SujeitoAtencao\Paciente;
use App\Models\Geral\Ciap;
use App\Models\Intranet\Cliente;
use App\Models\Regulacao\Solicitacao as RegulacaoSolicitacao;
use App\Models\Sigtap\Cid;
use App\Services\Ambulatorio\AtendimentoService;
use App\Utils\MaskUtil;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Str;
class EncaminhamentoController extends Controller
{
public function __invoke($atendimentoId)
{
$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 (request()->has('em_atendimento') && request()->em_atendimento == true) {
$encaminhamentos[] = self::getDadosNaoSalvos($atendimentoId);
AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::ENCAMINHAMENTO);
} else {
self::getAtendimento($atendimentoId, $encaminhamentos);
}
$data = [
'cliente' => [
'nome' => Str::upper($cliente->nome),
'logotipo' => $logotipo,
],
'encaminhamentos' => $encaminhamentos,
];
return SnappyPdf::loadView('impressoes.template.ambulatorio.encaminhamento', compact('data'))
->setOption('header-html', '')
->setOption('footer-html', '')
->setOption('margin-top', '10')
->setOption('margin-bottom', '10')
->inline();
}
public static function getAtendimento($atendimentoId, &$encaminhamentos) {
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$encaminhamentos = [];
$regulacaoData = self::getRegulacaoData();
$atendimento->soaps()
->where('is_rascunho', false)
->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id))
->get()
->each(function($soap) use (&$encaminhamentos, $paciente, $regulacaoData) {
$soap->encaminhamentos()
->when($regulacaoData['especialidade_id'], fn ($q, $id) => $q->where('servico_especializado_especialidade_id', $id))
->get()
->each(function($encaminhamento) use (&$encaminhamentos, $paciente) {
$cid = Cid::find($encaminhamento->servico_especializado_cid_id);
$ciap = Ciap::find($encaminhamento->servico_especializado_ciap_id);
$intersetorialInfraestrutura = $encaminhamento->intersetorialInfraestrutura;
$infraestrutura = $encaminhamento->createdCentroCusto->infraestrutura;
$usuario = $encaminhamento->createdLotacao->usuario;
$instituicao = null;
$endereco = null;
$pa = false;
$consulta = false;
$programa = null;
$internacao = false;
$outros = null;
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_INTERSETORIAL) {
$instituicao = $intersetorialInfraestrutura->unidade->nome_fantasia;
$endereco = $intersetorialInfraestrutura->endereco->completo;
$outros = 'Intersetorial';
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_CAPS) {
$programa = 'Encaminhamento para CAPS';
}
else if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_DE_ATENCAO_DOMICILIAR) {
$programa = 'Encaminhamento para serviço de atenção domiciliar';
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR) {
$internacao = true;
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_ESPECIALIZADO) {
$consulta = true;
}
if ($encaminhamento->tipo_id === Encaminhamento::ENCAMINHAMENTO_PARA_URGENCIA) {
$pa = true;
}
$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 ?? null,
'sem_numero' => $paciente->cidadao->domicilio->endereco->sem_numero ?? null,
'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 ?? null,
'ibge' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null,
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
],
'instituicao' => $instituicao,
'endereco' => $endereco,
'especialidade' => $encaminhamento->servicoEspecializadoEspecialidade->nome ?? null,
'classificacao_risco' => $encaminhamento->servicoEspecializadoClassificacaoRisco->descricao_encaminhamento ?? null,
'pa' => $pa,
'consulta' => $consulta,
'programa' => $programa,
'internacao' => $internacao,
'outros' => $outros,
'unidade_origem' => [
'nome_fantasia' => isset($infraestrutura->unidade->nome_fantasia)
? substr($infraestrutura->unidade->nome_fantasia, 0, 40) : null,
'cnes' => $infraestrutura->unidade->cnes,
'telefone' => $infraestrutura->telefone ? MaskUtil::getPhoneMasked($infraestrutura->telefone) : null,
],
'usuario_origem' => [
'nome' => $usuario->cidadao->nome ?? null,
'usuario_nome' => $encaminhamento->createdLotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $encaminhamento->createdLotacao->ocupacao->codigo . ' - '
. $encaminhamento->createdLotacao->ocupacao->nome,
'documento' => $encaminhamento->createdLotacao->usuario->registro_tipo_id
? ($encaminhamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $encaminhamento->createdLotacao->usuario->registro_tipo_outro
: $encaminhamento->createdLotacao->usuario->registroTipo->sigla
) . ": {$encaminhamento->createdLotacao->usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'data' => $encaminhamento->created_at->format('d/m/Y') ?? null,
'horario' => $encaminhamento->created_at->format('H:i') ?? null,
'motivo' => $encaminhamento->servico_especializado_motivo ?? null,
'cid' => $encaminhamento->servico_especializado_cid_id ? $cid->codigo.' - '.$cid->nome : null,
'ciap' => $encaminhamento->servico_especializado_ciap_id ? $ciap->codigo.' - '.$ciap->descricao : null,
];
});
});
}
public static function getDadosNaoSalvos($pacienteId) {
$currentLotacao = self::getCurrentLotacao();
$paciente = Paciente::where('id', $pacienteId)->first();
$infraestrutura = $currentLotacao->infraestrutura;
$usuario = $currentLotacao->usuario;
$instituicao = null;
$endereco = null;
$pa = false;
$consulta = false;
$programa = null;
$internacao = false;
$outros = null;
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_INTERSETORIAL) {
$intersetorialInfraestrutura = Infraestrutura::where('id', request()->infraestrutura['id'])->first();
$instituicao = $intersetorialInfraestrutura->unidade->nome_fantasia;
$endereco = $intersetorialInfraestrutura->endereco->completo;
$outros = 'Intersetorial';
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_CAPS) {
$programa = 'Encaminhamento para CAPS';
}
else if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_DE_ATENCAO_DOMICILIAR) {
$programa = 'Encaminhamento para serviço de atenção domiciliar';
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR) {
$internacao = true;
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_SERVICO_ESPECIALIZADO) {
$consulta = true;
}
if (request()->tipo['id'] == Encaminhamento::ENCAMINHAMENTO_PARA_URGENCIA) {
$pa = true;
}
return [
'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' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->nome,
'numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->numero,
'sem_numero' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->sem_numero,
'complemento' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->complemento ?? '',
'cep' => optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep
? MaskUtil::getCepMasked(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->cep)
: null,
'municipio' => optional(optional(optional(optional(optional($paciente->cidadao)->domicilio)->endereco)->logradouro)->municipio)->nome,
'ibge' => optional(optional(optional(optional(optional($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,
'especialidade' => request()->especialidade ? request()->especialidade['descricao'] : null,
'classificacao_risco' => request()->classificacaoRisco ? request()->classificacaoRisco['descricaoEncaminhamento'] : null,
'pa' => $pa,
'consulta' => $consulta,
'programa' => $programa,
'internacao' => $internacao,
'outros' => $outros,
'unidade_origem' => [
'nome_fantasia' => isset($infraestrutura->unidade->nome_fantasia)
? substr($infraestrutura->unidade->nome_fantasia, 0, 40) : null,
'cnes' => $infraestrutura->unidade->cnes,
'telefone' => $infraestrutura->telefone ? MaskUtil::getPhoneMasked($infraestrutura->telefone) : null,
],
'usuario_origem' => [
'nome' => $usuario->cidadao->nome ?? null,
'usuario_nome' => $usuario->cidadao->nome,
'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - '
. $currentLotacao->ocupacao->nome,
'documento' => $usuario->registro_tipo_id
? ($usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $usuario->registro_tipo_outro
: $usuario->registroTipo->sigla
) . ": {$usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
],
'data' => Carbon::now()->format('d/m/Y') ?? null,
'horario' => Carbon::now()->format('H:i') ?? null,
'motivo' => request()->motivo ?? null,
'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : null,
'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : null,
];
}
private static function getRegulacaoData()
{
$regulacaoData = [
'soap_id' => null,
'especialidade_id' => null,
];
if (request()->regulacao_solicitacao_id) {
$regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id);
$regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id;
$regulacaoData['especialidade_id'] = $regulacaoSolicitacao->itens()->first('especialidade_id')->especialidade_id;
}
return $regulacaoData;
}
}