has('em_atendimento') && request()->em_atendimento == true) { $dadosNaoSalvos = self::getDadosNaoSalvos($atendimentoId); AtendimentoService::saveLogImpressao( request()->atendimento_id, AtendimentoImpressaoTipo::SERVICO_DE_ANALISES_DIAGNOSTICOS_E_TERAPIA_SOLICITACAO_DE_EXAMES_SADAT ); return Pdf1::generate(self::TITLE, self::TEMPLATE, $dadosNaoSalvos); } else { return Pdf1::generate(self::TITLE, self::TEMPLATE, self::getAtendimento($atendimentoId, $dados)); } } public static function getDadosNaoSalvos($pacienteId) { $currentLotacao = self::getCurrentLotacao(); $paciente = Paciente::where('id', $pacienteId)->first(); $solicitacoesExames = collect(); foreach (request()->exames as $solicitacao) { $itens[] = [ 'exame' => [ 'codigo' => $solicitacao['codigo'], 'nome' => $solicitacao['nome'], ], ]; }; $solicitacoesExames->push([ 'data' =>Carbon::now()->format('d/m/Y') ?? null, 'cid' => request()->cid ? request()->cid['codigo'] .' - '. request()->cid['nome'] : '-', 'ciap' => request()->ciap ? request()->ciap['codigo'] .' - '. request()->ciap['descricao'] : '-', 'classificacao_risco' => ClassificacaoRisco::findOrFail(request()->classificacao_risco_id)->descricao_encaminhamento, 'justificativa' => request()->justificativa, 'observacao' => request()->observacao, 'itens' => $itens, 'informacoes_administrativas' => [ 'usuario_nome' => $currentLotacao->usuario->cidadao->nome, 'ocupacao_descricao' => $currentLotacao->ocupacao->codigo . ' - ' . $currentLotacao->ocupacao->nome, 'documento' => $currentLotacao->usuario->registro_tipo_id ? ($currentLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO ? $currentLotacao->usuario->registro_tipo_outro : $currentLotacao->usuario->registroTipo->sigla ) . ": {$currentLotacao->usuario->registro_numero}" : 'Conselho profissional: NÃO INFORMADO', ], ]); return [ 'paraAssinar' => false, 'requisitante' => [ 'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia, 'cnes' => $currentLotacao->infraestrutura->unidade->cnes, ], 'paciente' => [ 'prontuario' => $paciente->prontuario, 'nome' => $paciente->cidadao->nome, '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', 'uf' => $paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null, 'bairro' => $paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null, 'endereco' => optional(optional(optional($paciente->cidadao)->domicilio)->endereco), '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, ], 'solicitacoes' => $solicitacoesExames, ]; } public static function getAtendimento($atendimentoId, $dados = []) { $atendimento = Atendimento::findOrFail($atendimentoId); $solicitacoesExames = collect(); $regulacaoData = self::getRegulacaoData(); $paraAssinaturaEletronica = request()->para_assinatura_eletronica === true || (DataUtil::isStringBoolean(request()->para_assinatura_eletronica) && DataUtil::isStringTrue(request()->para_assinatura_eletronica)); if (!isset($dados['itens'])) { $dados['itens'] = request()->itens; } $solicitacoesItensIds = isset($dados['itens']) ? collect($dados['itens'])->where('tipo_solicitacao', 'padrao')->pluck('id') : null; $atendimento->soaps() ->where('is_rascunho', false) ->when($regulacaoData['soap_id'], fn ($q, $id) => $q->where('id', $id)) ->get() ->each(function ($soap) use ($solicitacoesExames, $regulacaoData, $solicitacoesItensIds) { $soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames, $regulacaoData, $solicitacoesItensIds) { $itens = $solicitacao->itens() ->when(isset(request()->solicitacao_exame_item_id), fn ($q) => $q->where('id', request()->solicitacao_exame_item_id)) ->when(isset($solicitacoesItensIds), fn ($q) => $q->whereIn('id', $solicitacoesItensIds)) ->whereHas('exame', fn ($q) => $q->where('tipo_id', Tipo::LABORATORIAL)) ->when($regulacaoData['exames_ids'], fn ($q, $ids) => $q->whereIn('exame_id', $ids)) ->get() ->map(fn ($item) => [ 'exame' => [ 'codigo' => MaskUtil::getProcedimentoMasked($item->exame->codigo), 'nome' => $item->exame->nome, ], ]); if ($itens->isNotEmpty()) { $cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null; $ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null; $solicitacoesExames->push([ 'data' => $solicitacao->created_at->format('d/m/Y'), 'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-', 'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-', 'classificacao_risco' => $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null, 'justificativa' => $solicitacao->justificativa, 'observacao' => $solicitacao->observacao, 'itens' => $itens, 'informacoes_administrativas' => [ 'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome, 'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - ' . $solicitacao->createdLotacao->ocupacao->nome, 'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id ? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO ? $solicitacao->createdLotacao->usuario->registro_tipo_outro : $solicitacao->createdLotacao->usuario->registroTipo->sigla ) . ": {$solicitacao->createdLotacao->usuario->registro_numero}" : 'Conselho profissional: NÃO INFORMADO', ], ]); } }); }); if (!isset(request()->solicitacao_exame_item_id)) { $solicitacoesPredefinidos = isset($dados['itens']) ? collect($dados['itens'])->where('tipo_solicitacao', 'predefinido') : null; AtendimentoSoapExameSolicitado::whereHas('soap', function ($q) use ($atendimento) { $q->where('is_rascunho', false)->where('atendimento_id', $atendimento->id); }) ->get() ->map(function ($solicitacao) use ($solicitacoesExames, $solicitacoesPredefinidos) { $itens = $solicitacao->examesSolicitados() ->when(isset($solicitacoesPredefinidos), fn ($q) => $q ->whereIn('id', $solicitacoesPredefinidos->where('solicitacao_id', $solicitacao->id)->pluck('exame_id')) ) ->get() ->map(fn ($item) => [ 'exame' => [ 'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento), 'nome' => $item->descricao, ], ]); if ($itens->isNotEmpty()) { $cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null; $ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null; $solicitacoesExames->push([ 'data' => $solicitacao->created_at->format('d/m/Y'), 'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-', 'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-', 'classificacao' => null, 'justificativa' => $solicitacao->justificativa, 'observacao' => $solicitacao->observacao, 'itens' => $itens, 'informacoes_administrativas' => [ 'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome, 'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - ' . $solicitacao->createdLotacao->ocupacao->nome, 'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id ? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO ? $solicitacao->createdLotacao->usuario->registro_tipo_outro : $solicitacao->createdLotacao->usuario->registroTipo->sigla ) . ": {$solicitacao->createdLotacao->usuario->registro_numero}" : 'Conselho profissional: NÃO INFORMADO', ], ]); } }); $solicitacoesPredefinidos = isset($dados['itens']) ? collect($dados['itens'])->where('tipo_solicitacao', 'triagem_neonatal') : null; AtendimentoSoapTriagemNeonatalSolicitado::whereHas('soap', function ($q) use ($atendimento) { $q->where('is_rascunho', false)->where('atendimento_id', $atendimento->id); }) ->get() ->map(function ($solicitacao) use ($solicitacoesExames, $solicitacoesPredefinidos) { $itens = $solicitacao->triagensNeonatalSolicitados() ->when(isset($solicitacoesPredefinidos), fn ($q) => $q ->whereIn('id', $solicitacoesPredefinidos->where('solicitacao_id', $solicitacao->id)->pluck('exame_id')) ) ->get() ->map(fn ($item) => [ 'exame' => [ 'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento), 'nome' => $item->descricao, ], ]); if ($itens->isNotEmpty()) { $cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null; $ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null; $solicitacoesExames->push([ 'data' => $solicitacao->created_at->format('d/m/Y'), 'cid' => $cid ? $cid->codigo .' - '. $cid->nome : '-', 'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : '-', 'classificacao' => null, 'justificativa' => $solicitacao->justificativa, 'observacao' => $solicitacao->observacao, 'itens' => $itens, 'informacoes_administrativas' => [ 'usuario_nome' => $solicitacao->createdLotacao->usuario->cidadao->nome, 'ocupacao_descricao' => $solicitacao->createdLotacao->ocupacao->codigo . ' - ' . $solicitacao->createdLotacao->ocupacao->nome, 'documento' => $solicitacao->createdLotacao->usuario->registro_tipo_id ? ($solicitacao->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO ? $solicitacao->createdLotacao->usuario->registro_tipo_outro : $solicitacao->createdLotacao->usuario->registroTipo->sigla ) . ": {$solicitacao->createdLotacao->usuario->registro_numero}" : 'Conselho profissional: NÃO INFORMADO', ], ]); } }); } return [ 'paraAssinar' => $paraAssinaturaEletronica, 'requisitante' => [ 'unidade' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->nome_fantasia, 'cnes' => $atendimento->createdLotacao()->withTrashed()->first()->infraestrutura->unidade->cnes, ], 'paciente' => [ 'prontuario' => $atendimento->paciente->prontuario, 'nome' => $atendimento->paciente->cidadao->nome, 'nome_social' => $atendimento->paciente->cidadao->nome_social, 'idade' => $atendimento->paciente->cidadao->idade_formatada, 'cns' => $atendimento->paciente->cidadao->cns ? MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns) : 'NÃO INFORMADO', 'cpf' => $atendimento->paciente->cidadao->cpf ? MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf) : 'NÃO INFORMADO', 'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? '-', 'sexo' => $atendimento->paciente->cidadao->sexo->descricao, 'data_nascimento' => $atendimento->paciente->cidadao->data_nascimento ? $atendimento->paciente->cidadao->data_nascimento->format('d/m/Y') : 'NÃO INFORMADA', 'nome_mae' => $atendimento->paciente->cidadao->nome_mae ?? 'NÃO INFORMADO', 'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null, 'uf' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf ?? null, 'bairro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null, 'logradouro' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->nome ?? null, 'numero' => $atendimento->paciente->cidadao->domicilio->endereco->numero ?? null, 'sem_numero' => $atendimento->paciente->cidadao->domicilio->endereco->sem_numero ?? null, 'complemento' => $atendimento->paciente->cidadao->domicilio->endereco->complemento ?? '', 'cep' => $atendimento->paciente->cidadao->domicilio ? MaskUtil::getCepMasked( $atendimento->paciente->cidadao->domicilio->endereco->logradouro->cep) : null, 'municipio' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->nome ?? null, 'ibge' => $atendimento->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null, 'telefones' => $atendimento->paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(), 'unidade_referencia' => $atendimento->paciente->unidade->nome_fantasia ?? null, ], 'solicitacoes' => $solicitacoesExames, ]; } private static function getRegulacaoData() { $regulacaoData = [ 'soap_id' => null, 'exames_ids' => null, ]; if (request()->regulacao_solicitacao_id) { $regulacaoSolicitacao = RegulacaoSolicitacao::findOrFail(request()->regulacao_solicitacao_id); $regulacaoData['soap_id'] = $regulacaoSolicitacao->ambulatorio_atendimento_soap_id; $regulacaoData['exames_ids'] = $regulacaoSolicitacao->itens()->pluck('exame_id'); } return $regulacaoData; } }