has('em_atendimento') && request()->em_atendimento == true) { $receitas[] = self::getReceitasNaoSalvas($atendimentoId); $data = [ 'exibirAssinatura' => true, 'receitas' => $receitas ]; AtendimentoService::saveLogImpressao(request()->atendimento_id, AtendimentoImpressaoTipo::RECEITA_COMUM); } 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->filter(fn ($r) => $r['medicamentos']->count() > 0)->values()->all() ]; } return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml(); } 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); $createdAt = $item->created_at; } else { $currentLotacao = self::getCurrentLotacao(); } $paciente = Paciente::where('id', $pacienteId)->first(); $medicamentos = []; if (request()->has('multiple') && request()->multiple == true) { foreach (request()->medicamentos as $solicitacao) { $medicamentos[] = [ 'nome' => $solicitacao['material']['descricao'], 'usoContinuo' => $solicitacao['is_uso_continuo'] == 'true' ? true : false, 'imprimirSeparado' => isset($solicitacao['is_imprimir_separado']) && $solicitacao['is_imprimir_separado'] == 'true' ? true : false, 'removerImpressao' => isset($solicitacao['is_remover_impressao']) && $solicitacao['is_remover_impressao'] == 'true' ? true : false, 'doseUnica' => $solicitacao['is_dose_unica'] == 'true' ? true : false, 'livre' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']), 'viaAdministracao' => $solicitacao['material']['via_administracao'] ?? '-', 'posologia' => isset($solicitacao['descricao']) && !is_null($solicitacao['descricao']) ? $solicitacao['descricao'] : (isset($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'] ?? '', 'descricao' => $solicitacao['descricao'] ?? '' ]; } } else { $medicamentos[] = [ 'nome' => request()->material['descricao'], 'usoContinuo' => request()->is_uso_continuo == 'true' ? true : false, 'imprimirSeparado' => isset(request()->is_imprimir_separado) && request()->is_imprimir_separado == 'true' ? true : false, 'removerImpressao' => isset(request()->is_remover_impressao) && request()->is_remover_impressao == 'true' ? true : false, 'doseUnica' => request()->is_dose_unica == 'true' ? true : false, 'livre' => isset(request()->descricao) && !is_null(request()->descricao), 'viaAdministracao' => request()->material['via_administracao'] ?? '-', 'posologia' => isset(request()->descricao) && !is_null(request()->descricao) ? request()->descricao : (isset(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)' : ''))) : '', 'recomendacoes' => request()->recomendacoes ?? '', 'descricao' => request()->descricao ?? '' ]; } return [ 'profissional' => [ 'nome' => $currentLotacao->usuario->cidadao->nome, 'cbo' => $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', ], 'unidade' => [ 'nome_fantasia' => $currentLotacao->infraestrutura->unidade->nome_fantasia, 'cnpj' => $currentLotacao->infraestrutura->unidade->cnpj ? MaskUtil::getCnpjMasked($currentLotacao->infraestrutura->unidade->cnpj) : null, 'endereco' => $currentLotacao->infraestrutura->endereco->completo, 'telefone' => MaskUtil::getPhoneMasked($currentLotacao->infraestrutura->telefone), ], 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nomeSocial' => $paciente->cidadao->nome_social, 'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, 'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-', 'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null), 'cns' => $paciente->cidadao->cns, 'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null, 'prontuario' => $paciente->prontuario, ], 'dataCadastro' => [ 'porExtenso' => request()->has('is_duplicated') && request()->is_duplicated == true ? Carbon::parse($createdAt)->translatedFormat('d \de F \de Y') : Carbon::now()->translatedFormat('d \de F \de Y'), ], 'medicamentos' => $medicamentos, ]; } public static function getAtendimento($atendimentoId, $receitas, $dados = []) { $atendimento = Atendimento::findOrFail($atendimentoId); $paciente = $atendimento->paciente; $atendimento->soaps()->where('is_rascunho', false)->get()->each(fn ($soap) => $soap->prescricoesMedicamentos->each(fn ($prescricaoMedicamento) => $receitas ->push([ 'profissional' => [ 'nome' => $prescricaoMedicamento->createdLotacao->usuario->cidadao->nome, 'cbo' => $prescricaoMedicamento->createdLotacao->ocupacao->nome, 'documento' => $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id ? ($prescricaoMedicamento->createdLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO ? $prescricaoMedicamento->createdLotacao->usuario->registro_tipo_outro : $prescricaoMedicamento->createdLotacao->usuario->registroTipo->sigla ) . ": {$prescricaoMedicamento->createdLotacao->usuario->registro_numero}" : 'Conselho profissional: NÃO INFORMADO', ], 'unidade' => [ 'nome_fantasia' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->nome_fantasia, 'cnpj' => $prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj ? MaskUtil::getCnpjMasked($prescricaoMedicamento->createdLotacao->infraestrutura->unidade->cnpj) : null, 'endereco' => $prescricaoMedicamento->createdLotacao->infraestrutura->endereco->completo, 'telefone' => MaskUtil::getPhoneMasked($prescricaoMedicamento->createdLotacao->infraestrutura->telefone), ], 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nomeSocial' => $paciente->cidadao->nome_social, 'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, 'endereco' => $paciente->cidadao->domicilio->endereco->completo ?? '-', 'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null), 'cns' => $paciente->cidadao->cns, 'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : null, 'prontuario' => $paciente->prontuario, ], 'dataCadastro' => [ 'porExtenso' => $prescricaoMedicamento->created_at->translatedFormat('d \de F \de Y'), ], 'medicamentos' => $prescricaoMedicamento->itens ->where('material.receita_tipo_id', TipoReceita::COMUM) ->when(isset($dados['medicamentos']), fn ($q) => $q->filter(fn ($m) => collect($dados['medicamentos'])->contains($m->id))) ->map(fn ($item) => [ 'nome' => $item->material->descricao, 'usoContinuo' => $item->is_uso_continuo, 'imprimirSeparado' => $item->is_imprimir_separado, 'removerImpressao' => $item->is_remover_impressao, 'doseUnica' => $item->is_dose_unica, 'livre' => !is_null($item->descricao), 'viaAdministracao' => $item->material->viaAdministracao->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 ?? '', 'descricao' => $item->descricao ?? '' ]), ]) )); } 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)); } }