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') ]; } }