where('atendimento_id', $atendimentoId) ->has('atestado') ->firstOrFail(); $recepcao = Recepcao::orderByDesc('atendido_em') ->where('atendimento_id', $atendimentoId) ->firstOrFail(); $atestado = $atendimentoMedico->atestado; $paciente = $atendimentoMedico->atendimento->faa->paciente; $atendido_em = new DateTime($recepcao->atendido_em); $data = [ 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nomeSocial' => $paciente->cidadao->nome_social, 'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, ], 'documento' => [ 'tipo' => $atestado->documentoTipo->nome, 'numero' => MaskUtil::getDocumentMasked($atestado->documento_tipo_id, $atestado->documento_numero), ], 'unidade' => [ 'nome' => $atestado->updatedLotacao->infraestrutura->unidade->nome_fantasia, ], 'data' => $atendido_em->format('d/m/Y'), 'hora' => $atendido_em->format('H:i:s'), 'cid' => $atestado->imprime_cid ? $atendimentoMedico->cid->cid->codigo : '', 'afastamento_texto' => self::getAfastamentoTexto( $atestado->modelo_id ?? AtestadoModelo::PADRAO, $atestado->dias, $atestado->quantidade_horas, $atestado->horario_inicial, ), 'profissional' => [ 'nome' => $atestado->updatedLotacao->usuario->cidadao->nome, 'cbo' => $atestado->updatedLotacao->ocupacao->nome, ] ]; } else { $paciente = Paciente::findOrFail(request()->paciente_id); $documentoTipo = DocumentoTipo::findOrFail(request()->documento_tipo_id); $lotacao = Lotacao::findOrFail(auth()->payload()->get('lotacao_id')); $atendido_em = new DateTime(request()->atendido_em); $data = [ 'paciente' => [ 'nome' => $paciente->cidadao->nome, 'nomeSocial' => $paciente->cidadao->nome_social, 'prefereNomeSocial' => $paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, ], 'documento' => [ 'tipo' => $documentoTipo->nome, 'numero' => MaskUtil::getDocumentMasked($documentoTipo->id, request()->documento_numero), ], 'unidade' => [ 'nome' => $lotacao->infraestrutura->unidade->nome_fantasia, ], 'data' => $atendido_em->format('d/m/Y'), 'hora' => $atendido_em->format('H:i:s'), 'cid' => DataUtil::isStringTrue(request()->imprime_cid) && request()->cid_id ? Cid::findOrFail(request()->cid_id)->codigo : '', 'afastamento_texto' => self::getAfastamentoTexto( request()->modelo_id ?? AtestadoModelo::PADRAO, request()->dias, request()->quantidade_horas, request()->horario_inicial, ), 'profissional' => [ 'nome' => $lotacao->usuario->cidadao->nome, 'cbo' => $lotacao->ocupacao->nome, ] ]; } return Template::make(self::TITLE, self::TEMPLATE)->withData($data)->getHtml(); } private static function getAfastamentoTexto($modeloId, $dias, $quantidadeHoras, $horarioInicial) { switch ((int) $modeloId) { case AtestadoModelo::PERIODO_MANHA: return 'Em decorrencia, devera permanecer em afastamento de suas atividades laborativas no periodo da manha.'; case AtestadoModelo::PERIODO_TARDE: return 'Em decorrencia, devera permanecer em afastamento de suas atividades laborativas no periodo da tarde.'; case AtestadoModelo::PERIODO_NOITE: return 'Em decorrencia, devera permanecer em afastamento de suas atividades laborativas no periodo da noite.'; case AtestadoModelo::QUANTIDADE_HORAS: if (is_null($quantidadeHoras) || is_null($horarioInicial)) { return ''; } $horario = (new DateTime($horarioInicial))->format('H:i'); $horasPorExtenso = NumericUtil::getPorExtenso($quantidadeHoras); return "Em decorrencia, devera permanecer em afastamento de suas atividades laborativas por um periodo de {$quantidadeHoras} ({$horasPorExtenso}) hora(s), a partir das {$horario} hora(s)."; default: if (is_null($dias)) { return ''; } $diasPorExtenso = NumericUtil::getPorExtenso($dias); $sufixoDia = (int) $dias > 1 ? 's' : ''; return "Em decorrencia, devera permanecer em afastamento de suas atividades laborativas por um periodo de {$dias} ({$diasPorExtenso}) dia{$sufixoDia} a partir desta data."; } } public function __invoke($atendimentoId = null) { return (new Pdf)->stream(self::getTemplate($atendimentoId), 'atestado'); } }