308 lines
17 KiB
PHP
308 lines
17 KiB
PHP
<?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;
|
|
}
|
|
}
|