whereHas('medicamentos') ->whereHas('atendimentoMedico', function($query) use ($atendimentoId) { $query->where('atendimento_id', $atendimentoId); }) ->when(!empty($receitasIds), fn ($q) => $q->whereIn('id', $receitasIds)) ->get() : request()->receitas; $data['receitas'] = []; $data['exibirAssinatura'] = !$paraAssinaturaEletronica; foreach ($receitas as $key => $receita) { if ((is_array($receita) && is_numeric($receita['id'] ?? null)) || $receita instanceof Receita ) { if (!($receita instanceof Receita)) { $receita = Receita::findOrFail($receita['id']); } $paciente = $receita->atendimentoMedico->atendimento->faa->paciente; $enderecoPaciente = $paciente->cidadao->domicilio ? "{$paciente->cidadao->domicilio->endereco->completo} - " . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep) : ''; $data['receitas'][$key] = [ 'isEspecial' => false, 'profissional' => [ 'nome' => $receita->updatedLotacao->usuario->cidadao->nome, 'cbo' => $receita->updatedLotacao->ocupacao->nome, 'documento' => $receita->updatedLotacao->usuario->registro_tipo_id ? ($receita->updatedLotacao->usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO ? $receita->updatedLotacao->usuario->registro_tipo_outro : $receita->updatedLotacao->usuario->registroTipo->sigla ) . ": {$receita->updatedLotacao->usuario->registro_numero}" : 'Conselho profissional: NÃO INFORMADO', ], 'unidade' => [ 'endereco' => $receita->updatedLotacao->infraestrutura->endereco->completo, 'telefone' => MaskUtil::getPhoneMasked($receita->updatedLotacao->infraestrutura->telefone), ], 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nomeSocial' => $paciente->cidadao->nome_social, 'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, 'endereco' => $enderecoPaciente, 'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null), ], 'dataCadastro' => [ 'porExtenso' => $receita->created_at->translatedFormat('d \de F \de Y'), ], 'medicamentos' => [], ]; $medicamentos = $receita->medicamentos->where('medicamento.receita_tipo_id', TipoReceita::COMUM); foreach ($medicamentos as $medicamento) { $data['receitas'][$key]['medicamentos'][] = [ 'nome' => $medicamento->medicamento->nome, 'usoContinuo' => $medicamento->uso_continuo, 'doseUnica' => $medicamento->dose_unica, 'livre' => $medicamento->livre, 'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS ? $medicamento->via_administracao_outras : $medicamento->medicamento->viaAdministracao->nome, 'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia, 'recomendacoes' => $medicamento->recomendacoes ?? '', 'descricao' => $medicamento->descricao ?? '' ]; } $medicamentosManuais = $receita->medicamentos->whereNotNull('medicamento_manual'); foreach ($medicamentosManuais as $medicamentoManual) { $data['receitas'][$key]['medicamentos'][] = [ 'medicamento_manual' => $medicamentoManual->medicamento_manual, 'usoContinuo' => $medicamentoManual->uso_continuo, 'doseUnica' => $medicamentoManual->dose_unica, 'livre' => $medicamentoManual->livre, 'viaAdministracao' => null, 'posologia' => $medicamentoManual->livre ? $medicamentoManual->descricao : $medicamentoManual->posologia, 'recomendacoes' => $medicamentoManual->recomendacoes ?? '', 'descricao' => $medicamentoManual->descricao ?? '' ]; } $prescricoesManuais = $receita->medicamentos->whereNotNull('prescricao_manual'); foreach ($prescricoesManuais as $prescricaoManual) { $data['receitas'][$key]['medicamentos'][] = [ 'prescricao_manual' => $prescricaoManual->prescricao_manual, ]; } } else { $paciente = Paciente::findOrFail(request()->paciente_id); $lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id')); $enderecoPaciente = $paciente->cidadao->domicilio ? "{$paciente->cidadao->domicilio->endereco->completo} - " . MaskUtil::getCepMasked($paciente->cidadao->domicilio->endereco->logradouro->cep) : ''; $data['receitas'][$key] = [ 'isEspecial' => false, 'profissional' => [ 'nome' => $lotacao->usuario->cidadao->nome, 'cbo' => $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', ], 'unidade' => [ 'endereco' => $lotacao->infraestrutura->endereco->completo, 'telefone' => MaskUtil::getPhoneMasked($lotacao->infraestrutura->telefone), ], 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nomeSocial' => $paciente->cidadao->nome_social, 'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, 'endereco' => $enderecoPaciente, 'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null), ], 'dataCadastro' => [ 'porExtenso' => Carbon::now()->translatedFormat('d \de F \de Y'), ], 'medicamentos' => [], ]; foreach ($receita['medicamentos'] as $medicamento) { $medicamento = new ReceitaMedicamento($medicamento); if ($medicamento->medicamento && $medicamento->medicamento->receita_tipo_id === TipoReceita::COMUM) { $data['receitas'][$key]['medicamentos'][] = [ 'nome' => $medicamento->medicamento->nome, 'usoContinuo' => $medicamento->uso_continuo, 'doseUnica' => $medicamento->dose_unica, 'livre' => $medicamento->livre, 'viaAdministracao' => $medicamento->medicamento->via_administracao_id === ViaAdministracao::OUTRAS ? $medicamento->via_administracao_outras : $medicamento->medicamento->viaAdministracao->nome, 'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia, 'recomendacoes' => $medicamento->recomendacoes ?? '', 'descricao' => $medicamento->descricao ?? '' ]; } if ($medicamento->medicamento_manual) { $data['receitas'][$key]['medicamentos'][] = [ 'medicamento_manual' => $medicamento->medicamento_manual, 'usoContinuo' => $medicamento->uso_continuo, 'doseUnica' => $medicamento->dose_unica, 'livre' => $medicamento->livre, 'viaAdministracao' => null, 'posologia' => $medicamento->livre ? $medicamento->descricao : $medicamento->posologia, 'recomendacoes' => $medicamento->recomendacoes ?? '', 'descricao' => $medicamento->descricao ?? '', ]; } if ($medicamento->prescricao_manual) { $data['receitas'][$key]['medicamentos'][] = [ 'prescricao_manual' => $medicamento->prescricao_manual, ]; } } } } return Template::make(self::TITLE, self::TEMPLATE, true)->withData($data)->getHtml(); } public function __invoke($atendimentoId = null) { $pdf = new Pdf(); $pdf->setPaper('A4', 'landscape'); return $pdf->stream(self::getTemplate($atendimentoId, request()->all()), 'receita-medica'); } }