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; $tiposEpeciais = collect([ TipoReceita::ESPECIAL, TipoReceita::ESPECIAL_AMARELA, TipoReceita::ESPECIAL_AZUL ]); 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' => true, '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, 'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null, 'telefone' => MaskUtil::getPhoneMasked($paciente->cidadao->telefone_principal->numero ?? null), ], 'dataCadastro' => [ 'porExtenso' => $receita->created_at->translatedFormat('d \de F \de Y'), ], 'medicamentos' => [], ]; $medicamentos = $receita->medicamentos ->whereIn('medicamento.receita_tipo_id', $tiposEpeciais->toArray()); 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 ?? '' ]; } } 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' => true, '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, 'rg' => $paciente->cidadao->carteiraIdentidade->numero ?? null, '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 || !$tiposEpeciais->contains($medicamento->medicamento->receita_tipo_id)) { continue; } $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 ?? '' ]; } } } 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-especial'); } }