444 lines
22 KiB
PHP
444 lines
22 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Impressao\Ambulatorio;
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\Encaminhamento as EncaminhamentoEnum;
|
|
use App\Enums\Cadastro\SujeitoAtencao\PreferenciaNome;
|
|
use App\Enums\Intranet\Sistema;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoCaraterInternacao;
|
|
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoClinica;
|
|
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoCausaExterna;
|
|
use App\Models\Ambulatorio\AmbulatorioEncaminhamentoVinculoPrevidencia;
|
|
use App\Models\Ambulatorio\Atendimento;
|
|
use App\Models\Ambulatorio\AtendimentoSoap;
|
|
use App\Models\Cadastro\Estabelecimento\CentroCusto;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
|
use App\Models\Geral\DocumentoTipo;
|
|
use App\Models\Intranet\Cliente;
|
|
use App\Models\Sigtap\Cid;
|
|
use App\Utils\MaskUtil;
|
|
use Barryvdh\Snappy\Facades\SnappyPdf;
|
|
use Carbon\Carbon;
|
|
|
|
|
|
class EncaminhamentoHospitalarController extends Controller
|
|
{
|
|
private const TITLE = 'LAUDO PARA SOLICITAÇÃO DE AUTORIZAÇÃO DE INTERNAÇÃO HOSPITALAR';
|
|
private const TEMPLATE = 'impressoes.template.ambulatorio.encaminhamento-hospitalar';
|
|
|
|
public function __invoke($atendimentoId)
|
|
{
|
|
if (request()->has('em_atendimento') && request()->em_atendimento == true) {
|
|
return SnappyPdf::loadView(self::TEMPLATE, [
|
|
'title' => self::TITLE,
|
|
'paciente' => self::getPacienteDataPacienteId($atendimentoId),
|
|
'internacao' => self::getInternacaoDataRascunho(),
|
|
'cliente' => self::getClienteData(),
|
|
'causa_externa' => self::getCausaExternaOptions(),
|
|
'usuario' => self::getUsuarioData(),
|
|
])
|
|
->setOption('header-html', '')
|
|
->setOption('footer-html', '')
|
|
->setOption('margin-top', '10')
|
|
->setOption('margin-bottom', '10')
|
|
->setOption('zoom', 0.8)
|
|
->inline();
|
|
}
|
|
|
|
return SnappyPdf::loadView(self::TEMPLATE, [
|
|
'title' => self::TITLE,
|
|
'paciente' => self::getPacienteData(request()->atendimento_id ?? $atendimentoId),
|
|
'internacao' => self::getInternacaoData(request()->atendimento_id ?? $atendimentoId),
|
|
'cliente' => self::getClienteData(),
|
|
'causa_externa' => self::getCausaExternaOptions(),
|
|
'usuario'=> self::getUsuarioData()
|
|
])
|
|
->setOption('header-html', '')
|
|
->setOption('footer-html', '')
|
|
->setOption('margin-top', '10')
|
|
->setOption('margin-bottom', '10')
|
|
->setOption('zoom', 0.8)
|
|
->inline();
|
|
}
|
|
|
|
private static function getClienteData(){
|
|
$cliente = Cliente::where('link', app('config')->get('database.default'))
|
|
->where('sistema_id', Sistema::CONECTASUS)
|
|
->firstOrFail();
|
|
|
|
$logotipo = $cliente->logotipo ? base64_encode(file_get_contents(storage_path('app/intranet/cliente/logotipo/' . $cliente->logotipo))) : null;
|
|
$ramoAtividade = $cliente->sistema->ramoAtividade;
|
|
$infraestruturaLogada = CentroCusto::findOrFail(auth()->payload()->get('centro_custo_id'))->infraestrutura;
|
|
|
|
return [
|
|
'logotipo' => $logotipo,
|
|
'nome' => $cliente->nome,
|
|
'ramoAtividade' => $ramoAtividade->nome,
|
|
'infraestrutura' => [
|
|
'nomeUnidade' => $infraestruturaLogada->unidade->nome_fantasia,
|
|
'telefone' => $infraestruturaLogada->telefone,
|
|
'endereco' => [
|
|
'logradouroNome' => $infraestruturaLogada->endereco->logradouro->nome,
|
|
'tipo' => $infraestruturaLogada->endereco->logradouro->tipo->descricao,
|
|
'numero' => $infraestruturaLogada->endereco->numero,
|
|
'referencia' => $infraestruturaLogada->endereco->referencia,
|
|
'bairro' => $infraestruturaLogada->endereco->logradouro->bairro->nome,
|
|
'cep'=> $infraestruturaLogada->endereco->logradouro->cep,
|
|
'municipio' => $infraestruturaLogada->endereco->logradouro->municipio->nome,
|
|
'uf'=> $infraestruturaLogada->endereco->logradouro->municipio->estado->uf
|
|
]
|
|
]
|
|
];
|
|
}
|
|
private static function getInternacaoData($atendimentoId)
|
|
{
|
|
$atendimentoSoap = AtendimentoSoap::where('atendimento_id', $atendimentoId)->first();
|
|
|
|
if (!$atendimentoSoap) {
|
|
return request()->has('internacaoHospitalar')
|
|
? self::getInternacaoDataRascunho()
|
|
: self::getInternacaoDataVazia();
|
|
}
|
|
|
|
$internacao = $atendimentoSoap->encaminhamentos
|
|
->where('tipo_id', EncaminhamentoEnum::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR)
|
|
->first();
|
|
|
|
if (!$internacao) {
|
|
return request()->has('internacaoHospitalar')
|
|
? self::getInternacaoDataRascunho()
|
|
: self::getInternacaoDataVazia();
|
|
}
|
|
|
|
return [
|
|
'unidade_solicitante' => [
|
|
'nome' => $internacao->internacaoHospitalarUnidadeSolicitante->nome_fantasia,
|
|
'cnes' => $internacao->internacaoHospitalarUnidadeSolicitante->cnes
|
|
],
|
|
'unidade_internacao' =>[
|
|
'nome'=> null,
|
|
'cnes'=> null
|
|
],
|
|
'principais_sinais_sintomas_clinicos' => $internacao->internacao_hosp_principais_sinais_sintomas_clinicos,
|
|
'condicoes_que_justificam_internacao' => $internacao->internacao_hosp_condicoes_que_justificam_internacao,
|
|
'principais_resultados_de_provas_diagnosticas' => $internacao->internacao_hosp_principais_resultados_de_provas_diagnosticas,
|
|
'cid_principal' => [
|
|
'codigo' => MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidPrincipal->codigo),
|
|
'nome' => $internacao->InternacaoHospitalarCidPrincipal->nome
|
|
],
|
|
'cid_secundario' => $internacao->internacao_hospitalar_cid_secundario_id
|
|
? MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidSecundario->codigo)
|
|
: '',
|
|
'cid_causas_associadas' => $internacao->internacao_hospitalar_cid_causas_associadas_id
|
|
? MaskUtil::getCidMasked($internacao->InternacaoHospitalarCidCausasAssociadas->codigo)
|
|
: '',
|
|
'procedimento' => self::getProcedimentoData($internacao),
|
|
'causas_externas' => [
|
|
'causa_externa' => $internacao->internacao_hospitalar_causa_externa_id,
|
|
'vinculo_previdencia' => $internacao->internacao_hospitalar_vinculo_previdencia_id,
|
|
'cnpj_seguradora' => $internacao->internacao_hospitalar_cnpj_seguradora,
|
|
'numero_bilhete' => $internacao->internacao_hospitalar_numero_bilhete,
|
|
'serie' => $internacao->internacao_hospitalar_serie,
|
|
'cnpj_empresa' => $internacao->internacao_hospitalar_cnpj_empresa,
|
|
'cnae_empresa' => $internacao->internacao_hospitalar_cnae_empresa,
|
|
'cbor' => $internacao->internacao_hospitalar_cbor,
|
|
],
|
|
'autorizacao' => self::getAutorizacaoData($internacao)
|
|
];
|
|
}
|
|
|
|
private static function getInternacaoDataVazia()
|
|
{
|
|
return [
|
|
'unidade_solicitante' => [
|
|
'nome' => null,
|
|
'cnes' => null,
|
|
],
|
|
'unidade_internacao' => [
|
|
'nome' => null,
|
|
'cnes' => null,
|
|
],
|
|
'principais_sinais_sintomas_clinicos' => null,
|
|
'condicoes_que_justificam_internacao' => null,
|
|
'principais_resultados_de_provas_diagnosticas' => null,
|
|
'cid_principal' => null,
|
|
'cid_secundario' => '',
|
|
'cid_causas_associadas' => '',
|
|
'procedimento' => [
|
|
'procedimento_solicitado' => null,
|
|
'data_solicitacao' => null,
|
|
'clinica' => null,
|
|
'carater_internacao' => null,
|
|
'profissional_solicitante_assistente' => null,
|
|
'profissional_assistente_documento' => [
|
|
'nome' => null,
|
|
'numero' => null,
|
|
],
|
|
],
|
|
'causas_externas' => [
|
|
'causa_externa' => null,
|
|
'vinculo_previdencia' => null,
|
|
'cnpj_seguradora' => null,
|
|
'numero_bilhete' => null,
|
|
'serie' => null,
|
|
'cnpj_empresa' => null,
|
|
'cnae_empresa' => null,
|
|
'cbor' => null,
|
|
],
|
|
'autorizacao' => [
|
|
'profissional_autorizador' => null,
|
|
'orgao_codigo_emissor' => null,
|
|
'profissional_autorizador_documento' => [
|
|
'nome' => null,
|
|
'numero' => null,
|
|
],
|
|
'documento_numero' => null,
|
|
'data_autorizacao' => null,
|
|
],
|
|
];
|
|
}
|
|
private static function getUsuarioData(){
|
|
$lotacaoLogada = self::getCurrentLotacao();
|
|
return [
|
|
'nome' => $lotacaoLogada->usuario->cidadao->nome,
|
|
'unidade' => $lotacaoLogada->infraestrutura->unidade->nome_fantasia,
|
|
'data_hora_impressao' => Carbon::now()->format('d/m/Y H:i')
|
|
];
|
|
}
|
|
|
|
private static function getPacienteDataPacienteId($pacienteId)
|
|
{
|
|
$paciente = Paciente::findOrFail($pacienteId);
|
|
$cidadao = $paciente->cidadao;
|
|
|
|
return [
|
|
'nome' => $cidadao->nome,
|
|
'nome_social' => $cidadao->nome_social,
|
|
'prefere_nome_social' => $cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
|
'prontuario' => $paciente->prontuario,
|
|
'cns' => MaskUtil::getCnsMasked($cidadao->cns),
|
|
'cpf' => MaskUtil::getCpfMasked($cidadao->cpf),
|
|
'data_nascimento' => $cidadao->data_nascimento ? $cidadao->data_nascimento->format('d/m/Y') : '',
|
|
'idade' => $cidadao->data_nascimento
|
|
? "{$cidadao->idade['anos']} ano(s) "
|
|
. "{$cidadao->idade['meses']} mês(s) "
|
|
. "{$cidadao->idade['dias']} dia(s) "
|
|
: '',
|
|
'sexo' => $cidadao->sexo->descricao,
|
|
'raca_cor' => $cidadao->racaCor->descricao ?? '',
|
|
'etnia_indigena' => $cidadao->etniaIndigena->descricao ?? '',
|
|
'nome_mae' => $cidadao->nome_mae,
|
|
'telefone' => MaskUtil::getPhoneMasked($cidadao->telefone_principal->numero ?? ''),
|
|
'endereco' => [
|
|
'completo' => $cidadao->domicilio
|
|
? "{$cidadao->domicilio->endereco->completo}, "
|
|
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
|
: '',
|
|
'ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? '',
|
|
],
|
|
];
|
|
}
|
|
|
|
private static function getInternacaoDataRascunho()
|
|
{
|
|
$internacao = request()->internacaoHospitalar ?? [];
|
|
$procedimento = $internacao['procedimento'] ?? [];
|
|
$causasExternas = $internacao['causasExternas'] ?? [];
|
|
$autorizacao = $internacao['autorizacao'] ?? [];
|
|
|
|
$cidPrincipal = $internacao['cidPrincipal'] ?? null;
|
|
$cidSecundarioData = $internacao['cidSecundario'] ?? null;
|
|
$cidCausasAssociadasData = $internacao['cidCausasAssociadas'] ?? null;
|
|
|
|
$cidSecundarioCodigo = null;
|
|
if ($cidSecundarioData) {
|
|
if (isset($cidSecundarioData['codigo'])) {
|
|
$cidSecundarioCodigo = $cidSecundarioData['codigo'];
|
|
} elseif (isset($cidSecundarioData['id'])) {
|
|
$cid = Cid::find($cidSecundarioData['id']);
|
|
$cidSecundarioCodigo = $cid->codigo ?? null;
|
|
}
|
|
}
|
|
|
|
$cidCausasAssociadasCodigo = null;
|
|
if ($cidCausasAssociadasData) {
|
|
if (isset($cidCausasAssociadasData['codigo'])) {
|
|
$cidCausasAssociadasCodigo = $cidCausasAssociadasData['codigo'];
|
|
} elseif (isset($cidCausasAssociadasData['id'])) {
|
|
$cid = Cid::find($cidCausasAssociadasData['id']);
|
|
$cidCausasAssociadasCodigo = $cid->codigo ?? null;
|
|
}
|
|
}
|
|
|
|
$unidadeSolicitante = !empty($internacao['unidadeSolicitanteId'])
|
|
? Unidade::find($internacao['unidadeSolicitanteId'])
|
|
: null;
|
|
|
|
$clinica = !empty($procedimento['clinicaId'])
|
|
? AmbulatorioEncaminhamentoClinica::find($procedimento['clinicaId'])
|
|
: null;
|
|
$caraterInternacao = !empty($procedimento['caraterInternacaoId'])
|
|
? AmbulatorioEncaminhamentoCaraterInternacao::find($procedimento['caraterInternacaoId'])
|
|
: null;
|
|
$documentoTipo = !empty($procedimento['profissionalSolicitanteDocumentoTipoId'])
|
|
? DocumentoTipo::find($procedimento['profissionalSolicitanteDocumentoTipoId'])
|
|
: null;
|
|
$autorizadorDocumentoTipo = !empty($autorizacao['profissionalAutorizadorDocumentoTipoId'])
|
|
? DocumentoTipo::find($autorizacao['profissionalAutorizadorDocumentoTipoId'])
|
|
: null;
|
|
|
|
$procedimentoSolicitado = $procedimento['procedimentoSolicitado'] ?? null;
|
|
$profissionalSolicitante = $procedimento['profissionalSolicitanteAssistente'] ?? null;
|
|
$profissionalAutorizador = $autorizacao['profissionalAutorizador'] ?? null;
|
|
|
|
return [
|
|
'unidade_solicitante' => [
|
|
'nome' => $unidadeSolicitante->nome_fantasia ?? null,
|
|
'cnes' => $unidadeSolicitante->cnes ?? null,
|
|
],
|
|
'unidade_internacao' => [
|
|
'nome' => null,
|
|
'cnes' => null,
|
|
],
|
|
'principais_sinais_sintomas_clinicos' => $internacao['principaisSinaisSintomasClinicos'] ?? null,
|
|
'condicoes_que_justificam_internacao' => $internacao['condicoesQueJustificamInternacao'] ?? null,
|
|
'principais_resultados_de_provas_diagnosticas' => $internacao['principaisResultadosDeProvasDiagnosticas'] ?? null,
|
|
'cid_principal' => $cidPrincipal ? [
|
|
'codigo' => MaskUtil::getCidMasked($cidPrincipal['codigo']),
|
|
'nome' => $cidPrincipal['nome'],
|
|
] : null,
|
|
'cid_secundario' => $cidSecundarioCodigo ? MaskUtil::getCidMasked($cidSecundarioCodigo) : '',
|
|
'cid_causas_associadas' => $cidCausasAssociadasCodigo ? MaskUtil::getCidMasked($cidCausasAssociadasCodigo) : '',
|
|
'procedimento' => [
|
|
'procedimento_solicitado' => $procedimentoSolicitado ? [
|
|
'codigo' => MaskUtil::getProcedimentoMasked($procedimentoSolicitado['codigo']),
|
|
'nome' => $procedimentoSolicitado['nome'],
|
|
] : null,
|
|
'data_solicitacao' => !empty($procedimento['dataSolicitacao'])
|
|
? Carbon::parse($procedimento['dataSolicitacao'])->format('d/m/Y')
|
|
: null,
|
|
'clinica' => $clinica->nome ?? null,
|
|
'carater_internacao' => $caraterInternacao->nome ?? null,
|
|
'profissional_solicitante_assistente' => $profissionalSolicitante['cidadaoNome'] ?? null,
|
|
'profissional_assistente_documento' => [
|
|
'nome' => $documentoTipo->nome ?? null,
|
|
'numero' => ($documentoTipo && !empty($procedimento['profissionalSolicitanteDocumentoNumero']))
|
|
? MaskUtil::getDocumentMasked(
|
|
$procedimento['profissionalSolicitanteDocumentoTipoId'],
|
|
$procedimento['profissionalSolicitanteDocumentoNumero']
|
|
)
|
|
: null,
|
|
],
|
|
],
|
|
'causas_externas' => [
|
|
'causa_externa' => $causasExternas['causaExternaId'] ?? null,
|
|
'vinculo_previdencia' => $causasExternas['vinculoPrevidenciaId'] ?? null,
|
|
'cnpj_seguradora' => $causasExternas['cnpjSeguradora'] ?? null,
|
|
'numero_bilhete' => $causasExternas['numeroBilhete'] ?? null,
|
|
'serie' => $causasExternas['serie'] ?? null,
|
|
'cnpj_empresa' => $causasExternas['cnpjEmpresa'] ?? null,
|
|
'cnae_empresa' => $causasExternas['cnaeEmpresa'] ?? null,
|
|
'cbor' => $causasExternas['cbor'] ?? null,
|
|
],
|
|
'autorizacao' => [
|
|
'profissional_autorizador' => $profissionalAutorizador['cidadaoNome'] ?? null,
|
|
'orgao_codigo_emissor' => $autorizacao['codigoOrgaoEmissor'] ?? null,
|
|
'profissional_autorizador_documento' => [
|
|
'nome' => $autorizadorDocumentoTipo->nome ?? null,
|
|
'numero' => ($autorizadorDocumentoTipo && !empty($autorizacao['profissionalAutorizadorDocumentoNumero']))
|
|
? MaskUtil::getDocumentMasked(
|
|
$autorizacao['profissionalAutorizadorDocumentoTipoId'],
|
|
$autorizacao['profissionalAutorizadorDocumentoNumero']
|
|
)
|
|
: null,
|
|
],
|
|
'documento_numero' => null,
|
|
'data_autorizacao' => !empty($autorizacao['dataAutorizacao'])
|
|
? Carbon::parse($autorizacao['dataAutorizacao'])->format('d/m/Y')
|
|
: null,
|
|
],
|
|
];
|
|
}
|
|
private static function getPacienteData($atendimentoId)
|
|
{
|
|
$atendimento = Atendimento::findOrFail($atendimentoId);
|
|
$cidadao = $atendimento->paciente->cidadao;
|
|
|
|
return [
|
|
'nome' => $cidadao->nome,
|
|
'nome_social' => $cidadao->nome_social,
|
|
'prefere_nome_social' => $cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL,
|
|
'prontuario' => $atendimento->paciente->prontuario,
|
|
'cns' => MaskUtil::getCnsMasked($cidadao->cns),
|
|
'cpf' => MaskUtil::getCpfMasked($cidadao->cpf),
|
|
'data_nascimento' => $cidadao->data_nascimento ? $cidadao->data_nascimento->format('d/m/Y') : '',
|
|
'idade' => $cidadao->data_nascimento
|
|
? "{$cidadao->idade['anos']} ano(s) "
|
|
. "{$cidadao->idade['meses']} mês(s) "
|
|
. "{$cidadao->idade['dias']} dia(s) "
|
|
: '',
|
|
'sexo' => $cidadao->sexo->descricao,
|
|
'raca_cor' => $cidadao->racaCor->descricao ?? '',
|
|
'etnia_indigena' => $cidadao->etniaIndigena->descricao ?? '',
|
|
'nome_mae' => $cidadao->nome_mae,
|
|
'telefone' => MaskUtil::getPhoneMasked($cidadao->telefone_principal->numero ?? ''),
|
|
'endereco' => [
|
|
'completo' => $cidadao->domicilio
|
|
? "{$cidadao->domicilio->endereco->completo}, "
|
|
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
|
: '',
|
|
'ibge' => $cidadao->domicilio->endereco->logradouro->municipio->ibge ?? ''
|
|
]
|
|
];
|
|
}
|
|
|
|
private static function getProcedimentoData($internacao)
|
|
{
|
|
$procedimento = $internacao->internacaoHospitalarProcedimentoSolicitado;
|
|
return [
|
|
'procedimento_solicitado' => [
|
|
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->codigo),
|
|
'nome' => $procedimento->nome
|
|
],
|
|
'data_solicitacao' => (new Carbon($internacao->internacao_hospitalar_data_solicitacao))->format('d/m/Y'),
|
|
'clinica' => $internacao->InternacaoHospitalarClinica->nome,
|
|
'carater_internacao' => $internacao->InternacaoHospitalarCaraterInternacao->nome,
|
|
'profissional_solicitante_assistente' => $internacao->internacaoHospitalarProfissionalSolicitanteAssistente->cidadao->nome,
|
|
'profissional_assistente_documento' => [
|
|
'nome' => $internacao->internacaoHospitalarProfissionalSolicitanteDocumentoTipo->nome,
|
|
'numero' => MaskUtil::getDocumentMasked(
|
|
$internacao->internacao_hospitalar_profissional_solicitante_documento_tipo_id,
|
|
$internacao->internacao_hospitalar_profissional_solicitante_documento_numero
|
|
)
|
|
]
|
|
];
|
|
}
|
|
private static function getAutorizacaoData($internacao){
|
|
return [
|
|
'profissional_autorizador' => optional(optional($internacao->internacaoHospitalarProfissionalAutorizador)->cidadao)->nome,
|
|
'orgao_codigo_emissor' => $internacao->internacao_hospitalar_codigo_orgao_emissor,
|
|
'profissional_autorizador_documento'=>[
|
|
'nome' => optional($internacao->internacaoHospitalarProfissionalAutorizadorDocumentoTipo)->nome,
|
|
'numero'=> $internacao->internacao_hospitalar_profissional_autorizador_documento_numero
|
|
? MaskUtil::getDocumentMasked(
|
|
$internacao->internacao_hospitalar_profissional_autorizador_documento_tipo_id,
|
|
$internacao->internacao_hospitalar_profissional_autorizador_documento_numero
|
|
)
|
|
: null
|
|
],
|
|
'documento_numero' => $internacao->internacao_hospitalar_documento_numero,
|
|
'data_autorizacao' => $internacao->internacao_hospitalar_data_autorizacao
|
|
? Carbon::parse($internacao->internacao_hospitalar_data_autorizacao)->format('d/m/Y')
|
|
: null
|
|
];
|
|
}
|
|
private static function getCausaExternaOptions()
|
|
{
|
|
return [
|
|
'causas_externas' => AmbulatorioEncaminhamentoCausaExterna::pluck('nome','id'),
|
|
'vinculos_previdencia' => AmbulatorioEncaminhamentoVinculoPrevidencia::pluck('nome', 'id')
|
|
];
|
|
}
|
|
}
|