has('em_atendimento') && request()->em_atendimento == true) { $receitas = self::getReceitasNaoSalvas($atendimentoId); $data = [ 'exibirAssinatura' => true, 'receitas' => $receitas ]; AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_ESPECIAL_AMARELA); } else { self::getAtendimento($atendimentoId, $receitas, $dados); $paraAssinaturaEletronica = request()->para_assinatura_eletronica === true || (DataUtil::isStringBoolean(request()->para_assinatura_eletronica) && DataUtil::isStringTrue(request()->para_assinatura_eletronica)); $data = [ 'exibirAssinatura' => !$paraAssinaturaEletronica, 'receitas' => $receitas->values()->all() ]; } return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml(); } public function __invoke($atendimentoId, $output = null, $dados = []) { $pdf = new Pdf(); $pdf->setPaper('A4', 'landscape'); return $output ? $pdf->output(self::getTemplate($atendimentoId, $dados)) : $pdf->stream(self::getTemplate($atendimentoId, $dados)); } public static function getAtendimento($atendimentoId, &$receitas, $dados = []) { $atendimento = Atendimento::findOrFail($atendimentoId); $paciente = $atendimento->paciente; $atendimento->soaps() ->where('is_rascunho', false) ->get() ->each(function($soap) use (&$receitas, $paciente, $dados) { $soap->prescricoesMedicamentos->each(function ($prescricaoMedicamentos) use (&$receitas, $paciente, $dados) { $prescricaoMedicamentos->itens ->where('material.receita_tipo_id', TipoReceita::ESPECIAL_AMARELA) ->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id))) ->each(function($item) use (&$receitas, $paciente, $prescricaoMedicamentos) { $lotacao = $item->createdLotacao; $receitas[] = [ 'removerImpressao' => $item->is_remover_impressao, 'infraestrutura' => [ 'unidade' => [ 'nome_fantasia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->nome_fantasia ?? null, 'cnes' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnes ?? null, 'cnpj' => $prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj ? MaskUtil::getCnpjMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->unidade->cnpj) : null, ], 'endereco' => [ 'logradouro' => [ 'municipio' => [ 'estado' => [ 'uf' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null, ], 'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null, ], 'bairro' => [ 'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null, ], 'tipo' => [ 'descricao' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null, ], 'nome' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->nome ?? null, 'cep' => MaskUtil::getCepMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->logradouro->cep) ?? null, ], 'numero' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->numero ?? null, 'referencia' => $prescricaoMedicamentos->createdLotacao->infraestrutura->endereco->referencia ?? null, ], 'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamentos->createdLotacao->infraestrutura->telefone) ?? null, ], 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nome_social' => $paciente->cidadao->nome_social ?? null, 'endereco' => isset($paciente->cidadao->domicilio->endereco->completo) ? $paciente->cidadao->domicilio->endereco->completo . (isset($paciente->cidadao->domicilio->endereco->logradouro->cep) ? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)) : '') : '-', 'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null, 'prontuario' => $paciente->prontuario, ], 'material' => [ 'descricao' => $item->material->descricao, 'quantidade' => $item->material->quantidade, 'dose' => $item->dose ?? '-', 'via_administracao' => $item->material->viaAdministracao->nome ?? '-', 'forma_farmaceutica' => $item->material->formaFarmaceutica->nome ?? '-', 'apresentacao' => $item->material->apresentacao->nome ?? '-', 'posologia' => !is_null($item->descricao) ? $item->descricao : $item->posologia, 'duracao' => !is_null($item->duracao) ? $item->duracao : '', 'duracaoMedida' => !is_null($item->duracao_medida_tempo_id) ? ($item->duracao_medida_tempo_id == 3 ? 'Dia(s)' : ($item->duracao_medida_tempo_id == 4 ? 'Semana(s)' : ($item->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '', ], 'recomendacoes' => $item->recomendacoes ?? '', 'informacoes_administrativas' => [ 'usuario_nome' => $lotacao->usuario->cidadao->nome, 'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $lotacao->ocupacao->nome, 'documento' => $lotacao->usuario->registro_tipo_id ? ($lotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO ? $lotacao->usuario->registro_tipo_outro : $lotacao->usuario->registroTipo->sigla ) . ": {$lotacao->usuario->registro_numero}" : 'Conselho profissional: NÃO INFORMADO', ], ]; }); }); }); } public static function getReceitasNaoSalvas($pacienteId) { if (request()->has('is_duplicated') && request()->is_duplicated == true) { $medicamentos = request()->medicamentos; $item = AtendimentoSoapPrescricaoMedicamentoItem::whereHas('prescricaoMedicamento', function ($query) { $query ->whereHas('soap', function ($query) { $query->where('atendimento_id', request()->atendimento_id); }); }) ->where('ambulatorio_atendimento_soap_prescricao_medicamento_item.id', $medicamentos[0]['id']) ->first(); $currentLotacao = Lotacao::findOrFail($item->lotacao->id); } else { $currentLotacao = self::getCurrentLotacao(); } $paciente = Paciente::where('id', $pacienteId)->first(); if (request()->has('multiple') && request()->multiple == true) { foreach (request()->medicamentos as $solicitacao) { $receitas[] = [ 'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false, 'infraestrutura' => [ 'unidade' => [ 'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null, 'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null, 'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj ? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj) : null, ], 'endereco' => [ 'logradouro' => [ 'municipio' => [ 'estado' => [ 'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null, ], 'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null, ], 'bairro' => [ 'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null, ], 'tipo' => [ 'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null, ], 'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null, 'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null, ], 'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null, 'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null, ], 'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null, ], 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nome_social' => $paciente->cidadao->nome_social, 'endereco' => isset($paciente->cidadao->domicilio->endereco->completo) ? $paciente->cidadao->domicilio->endereco->completo . (isset($paciente->cidadao->domicilio->endereco->logradouro->cep) ? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)) : '') : '-', 'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null, 'prontuario' => $paciente->prontuario, ], 'material' => [ 'descricao' => $solicitacao['material']['descricao'], 'quantidade' => $solicitacao['material']['quantidade'], 'apresentacao' => $solicitacao['material']['apresentacao'] ??null, 'dose' => $solicitacao['dose'] ?? '-', 'via_administracao' => $solicitacao['material']['via_administracao'] ?? '-', 'forma_farmaceutica' => $solicitacao['unidade_medida'] ?? '-', 'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset( $solicitacao['posologia']) && $solicitacao['posologia'] ? $solicitacao['posologia'] : null), 'duracao' => !is_null($solicitacao['duracao']) ? $solicitacao['duracao'] : '', 'duracaoMedida' => !is_null($solicitacao['duracao_medida_tempo_id']) ? ($solicitacao['duracao_medida_tempo_id'] == 3 ? 'Dia(s)' : ($solicitacao['duracao_medida_tempo_id'] == 4 ? 'Semana(s)' : ($solicitacao['duracao_medida_tempo_id'] == 5 ? 'Mês(es)' : ''))) : '', ], 'recomendacoes' => $solicitacao['recomendacoes'] ?? '', '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 $receitas; } else { $receitas[] = [ 'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false, 'infraestrutura' => [ 'unidade' => [ 'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia ?? null, 'cnes' => $currentLotacao->infraestrutura->unidade->cnes ?? null, 'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj ? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj) : null, ], 'endereco' => [ 'logradouro' => [ 'municipio' => [ 'estado' => [ 'uf' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->estado->uf ?? null, ], 'nome' => $currentLotacao->infraestrutura->endereco->logradouro->municipio->nome ?? null, ], 'bairro' => [ 'nome' => $currentLotacao->infraestrutura->endereco->logradouro->bairro->nome ?? null, ], 'tipo' => [ 'descricao' => $currentLotacao->infraestrutura->endereco->logradouro->tipo->descricao ?? null, ], 'nome' => $currentLotacao->infraestrutura->endereco->logradouro->nome ?? null, 'cep' => MaskUtil::getCepMasked($currentLotacao->infraestrutura->endereco->logradouro->cep) ?? null, ], 'numero' => $currentLotacao->infraestrutura->endereco->numero ?? null, 'referencia' => $currentLotacao->infraestrutura->endereco->referencia ?? null, ], 'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone) ?? null, ], 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nome_social' => $paciente->cidadao->nome_social, 'endereco' => isset($paciente->cidadao->domicilio->endereco->completo) ? $paciente->cidadao->domicilio->endereco->completo . (isset($paciente->cidadao->domicilio->endereco->logradouro->cep) ? (' - ' . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep)) : '') : '-', 'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null, 'prontuario' => $paciente->prontuario, ], 'material' => [ 'descricao' => request()->material['descricao'], 'quantidade' => request()->material['quantidade'], 'dose' => request()->dose ?? '-', 'via_administracao' => request()->material['via_administracao'] ?? '-', 'forma_farmaceutica' => request()->unidade_medida ?? '-', 'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(request()->posologia) && request()->posologia ? request()->posologia : null), 'duracao' => !is_null(request()->duracao) ? request()->duracao : '', 'duracaoMedida' => !is_null(request()->duracao_medida_tempo_id) ? (request()->duracao_medida_tempo_id == 3 ? 'Dia(s)' : (request()->duracao_medida_tempo_id == 4 ? 'Semana(s)' : (request()->duracao_medida_tempo_id == 5 ? 'Mês(es)' : ''))) : '', 'apresentacao' => request()->material['apresentacao'] ?? '-', ], 'recomendacoes' => request()->recomendacoes ?? '', '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 $receitas; } } }