Files
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

1252 lines
56 KiB
PHP

<?php
namespace App\Http\Controllers\Impressao\ProntoAtendimento;
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco as EnumFatorRisco;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Enums\Cadastro\UnidadeMedida as CadastroUnidadeMedida;
use App\Enums\Parametrizacao\Exame\Status;
use App\Enums\Parametrizacao\Exame\Tipo as ExameTipo;
use App\Enums\ProntoAtendimento\Atendimento\Desfecho;
use App\Enums\ProntoAtendimento\Atendimento\PacienteTraumaStatus;
use App\Enums\ProntoAtendimento\Raat\CausaAcidente;
use App\Enums\ProntoAtendimento\Raat\Diagnostico as DiagnosticoRaat;
use App\Enums\ProntoAtendimento\Raat\ParteCorpoAtingida;
use App\Enums\ProntoAtendimento\TipoFormularioAcidenteTrabalho;
use App\Http\Controllers\Controller;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Cadastro\UnidadeMedida;
use App\Models\Geral\GlasgowInterpretacaoResultado;
use App\Models\ProntoAtendimento\AssistenciaSocial\AssistenciaSocial;
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
use App\Models\ProntoAtendimento\Atendimento\Cat;
use App\Models\ProntoAtendimento\Atendimento\FaaReabertura;
use App\Models\ProntoAtendimento\Atendimento\PrescricaoInterna;
use App\Models\ProntoAtendimento\Atendimento\Triagem\FormularioDorToracica;
use App\Models\ProntoAtendimento\Atendimento\Triagem\OrigemDorToracica;
use App\Models\ProntoAtendimento\Atendimento\Triagem\RelacionadoFormularioDorToracica;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Models\Sigtap\Cid;
use App\Utils\DataUtil;
use App\Utils\Exports\Pdf;
use App\Utils\Exports\Template;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class FaaEletronicaController extends Controller
{
private const TITLE = 'FICHA DE ATENDIMENTO AMBULATORIAL';
private const TEMPLATE = 'pronto-atendimento.faa-eletronica';
public static function getTemplate($atendimentoId, $params = [])
{
$params['para_assinatura_eletronica'] = $params['para_assinatura_eletronica'] ?? false;
$paraAssinaturaEletronica = $params['para_assinatura_eletronica'] === true
|| (DataUtil::isStringBoolean($params['para_assinatura_eletronica'])
&& DataUtil::isStringTrue($params['para_assinatura_eletronica']));
$atendimentosParaImprimir = collect($params['atendimentos'] ?? []);
$atendimento = Atendimento::withTrashed()->findOrFail($atendimentoId);
$recepcao = $atendimento->recepcao;
$atendimentosData = self::getAtendimentosData($atendimento);
if ($atendimentosParaImprimir->isNotEmpty()) {
$atendimentosData = collect($atendimentosData)
->reject(fn ($a) => is_null($atendimentosParaImprimir
->where('tipo', $a['tipo'])
->where('id', $a['id'])
->first())
)
->values()
->all();
}
$lastAtendimentoDateTime = empty($atendimentosData)
? new Carbon($atendimento->recepcao->created_at)
: Carbon::createFromFormat(
'd/m/Y H:i:s',
$atendimentosData[count($atendimentosData) - 1]['data_hora']
);
$latestCreatedAt = DB::table('cadastro_cidadao_fator_risco')
->where('cidadao_id', $atendimento->faa->paciente->cidadao->id)
->max('created_at');
if ($atendimento->dor_toracica == true) {
$formulario = FormularioDorToracica::where('atendimento_id', $atendimento->id)->get();
$data_sintoma = null;
$hora_sintoma = null;
$data_ecg_admissao = null;
$hora_ecg_admissao = null;
$dispneia = null;
foreach ($formulario as $registro) {
$data_sintoma = $registro->data_sintoma ?? null;
$hora_sintoma = $registro->hora_sintoma ?? null;
$data_ecg_admissao = $registro->data_ecg_admissao ?? null;
$hora_ecg_admissao = $registro->hora_ecg_admissao ?? null;
$dispneia = $registro->dispneia ?? null;
}
if (!empty($formulario)) {
$formulario_id = $formulario->pluck('id');
$formularioRelacionadoDor = RelacionadoFormularioDorToracica::whereIn('formulario_id', $formulario_id)->get();
$dorToracicaRelacionada = [];
foreach ($formularioRelacionadoDor as $registroRelacionado) {
$dorToracicaRelacionada[] = OrigemDorToracica::where('id', $registroRelacionado->dor_toracica_id)
->get()
->map(function ($duracao) {
return [
'id' => $duracao->id,
'nome' => $duracao->nome,
];
})->values();
}
}
}
$data = [
'paraAssinar' => $paraAssinaturaEletronica,
'unidade' => $atendimento->faa->lotacao->infraestrutura->unidade->nome_fantasia ?? null,
'dataHoraEntrada' => (new Carbon($atendimento->recepcao->atendido_em))->format('d/m/Y H:i:s'),
'recepcionista' => $recepcao->createdLotacao->usuario->cidadao->nome ?? 'NÃO INFORMADO',
'origemEntrada' => $atendimento->recepcao->origemEntrada->nome ?? 'NÃO INFORMADA',
'especialidade' => $atendimento->recepcao->ocupacao->nome ?? 'NÃO INFORMADA',
'medicoSamu' => $atendimento->recepcao->medico_samu ?? 'NÃO INFORMADO',
'senha' => $atendimento->fila->senha ?? null,
'motivoAtendimento' => $atendimento->recepcao->motivo_atendimento ?? 'NÃO INFORMADO',
'paciente' => self::getPacienteData($atendimento),
'raat' => self::getRaatData($atendimento),
'classificacoesRisco' => self::getClassificacoesRiscoData($atendimento),
'fatoresRisco' => self::getFatoresRiscoData($atendimento, $latestCreatedAt),
'alergias' => self::getAlergiasData($atendimento, $lastAtendimentoDateTime),
'medicamentosUsoContinuo' => self::getMedicamentosUsoContinuoData($atendimento, $lastAtendimentoDateTime),
'medicamentosEmUso' => self::getMedicamentosEmUsoData($atendimento),
'atendimentos' => $atendimentosData,
'desfecho' => self::getDesfechoData($atendimento),
'assinaturas' => self::getAssinaturasData($atendimentosData),
'assistenciaSocial' => self::getAssistenciaData($atendimento),
'dorToracica' => $atendimento->dor_toracica,
'formularioDorToracica' => [
'data_sintoma' => (new Carbon($data_sintoma?? null))->format('d/m/Y'),
'hora_sintoma' => (new Carbon($hora_sintoma ?? null ))->format('H:i:s'),
'data_ecg_admissao' => (new Carbon($data_ecg_admissao ?? null))->format('d/m/Y'),
'hora_ecg_admissao' => (new Carbon($hora_ecg_admissao ?? null))->format('H:i:s'),
'dispneia' => $dispneia ?? null,
'relacionados' => $dorToracicaRelacionada ?? null,
],
'exclusaoFaa'=> self::getFaaCancelada($atendimento),
];
$title = self::TITLE . ' - ' . $atendimento->faa->numero;
return Template::make($title, self::TEMPLATE)->withData($data)->getHtml();
}
private static function getFaaCancelada($atendimento)
{
$faa = $atendimento->faa;
if (is_null($faa->deleted_at)) {
return null;
}
return [
'data_hora' => $faa->deleted_at
? (new Carbon($faa->deleted_at))->format('d/m/Y H:i:s')
: '',
'profissional' => Lotacao::find($faa->deleted_lotacao_id)->usuario->cidadao->nome ?? '',
'cbo' => Lotacao::find($faa->deleted_lotacao_id)->ocupacao->nome ?? '',
];
}
private static function getAssistenciaData($atendimento)
{
return $atendimento->assistenciaSocialHistorico()
->orderBy('created_at', 'desc')
->get()
->map(fn ($assistencia) => [
'data' => (new Carbon($assistencia->created_at))->format('d/m/Y') ?? null,
'horario' => (new Carbon($assistencia->created_at))->format('H:i:s') ?? null,
'anotacao' => $assistencia->anotacao,
'profissional' => [
'id' => $assistencia->usuario->id,
'nome' => $assistencia->usuario->cidadao->nome,
],
'cbo' => Ocupacao::findOrFail($assistencia['ocupacao_id'])->nome,
])->all();
}
private static function getAtendimentosData($atendimento)
{
$cidAnterior = null;
$dataHoraEntradaObservacao = null;
return collect(array_merge(
self::getAtendimentosTriagemData($atendimento->atendimentosTriagem),
self::getAtendimentosMedicosData($atendimento->atendimentosMedico),
self::getAtendimentosEnfermagemData($atendimento->atendimentosEnfermagem),
self::getAtendimentosExameImagemData($atendimento->atendimentosExameImagem),
self::getAtendimentosObservacaoData($atendimento->pacienteObservacoes),
self::getProcedimentosFechamentoData($atendimento),
self::getAssistenciaSocialData($atendimento->assistenciaSocial),
self::getFaaReaberturaData($atendimento),
))
->sortBy('data_hora')
->map(function ($atendimento) use (&$cidAnterior, &$dataHoraEntradaObservacao, &$isObservacao) {
$atendimento['data_hora'] = $atendimento['data_hora']->format('d/m/Y H:i:s');
if ($atendimento['tipo'] === 'medico') {
$currentCid = $atendimento['cid'];
if ($atendimento['cid'] === $cidAnterior) {
$atendimento['cid'] = null;
}
$cidAnterior = $currentCid;
}
else if ($atendimento['tipo'] === 'observacao') {
if (is_null($dataHoraEntradaObservacao)) {
$dataHoraEntradaObservacao = $atendimento['data_hora'];
}
$atendimento['data_hora_entrada'] = $dataHoraEntradaObservacao;
}
return $atendimento;
})
->all();
}
private static function getAssistenciaSocialData($assistenciaSocial)
{
return $assistenciaSocial->map(fn ($atendimento) => [
'tipo' => 'assistencia',
'id' => $atendimento->id,
'data_hora' => $atendimento->created_at,
'profissional' => [
'id' => $atendimento->usuario->id,
'nome' => $atendimento->usuario->cidadao->nome,
],
'cbo' => Ocupacao::findOrFail($atendimento['ocupacao_id'])->nome,
])->all();
}
private static function getFaaReaberturaData($reabertura)
{
$faaReaberta = FaaReabertura::where('faa_id', $reabertura->faa_id)->get();
return $faaReaberta->map(fn ($atendimento) => [
'tipo' => 'reabertura',
'id' => $atendimento->id,
'data_hora' => $atendimento->created_at,
'profissional' => [
'id' => $atendimento->createdLotacao->usuario->id,
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
],
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
])->all();
}
private static function getAtendimentosTriagemData($atendimentosTriagem)
{
return $atendimentosTriagem->map(fn ($atendimento) => [
'tipo' => 'triagem',
'is_observacao' => false,
'id' => $atendimento->id,
'data_hora' => $atendimento->created_at,
'profissional' => [
'id' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->id ?? null,
'nome' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->cidadao->nome ?? null,
],
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
'historico_enfermagem' => $atendimento->historico->descricao ?? null,
'outras_avaliacoes_condicoes' => $atendimento->outras_avaliacoes_condicoes,
'observacoes' => $atendimento->observacao->descricao ?? null,
'procedimentos' => self::getProcedimentosData($atendimento),
])->all();
}
private static function getAtendimentosMedicosData($atendimentosMedicos)
{
return $atendimentosMedicos->map(fn ($atendimento) => [
'tipo' => 'medico',
'is_observacao' => $atendimento->is_observacao ?? false,
'id' => $atendimento->id,
'data_hora' => $atendimento->created_at,
'desfecho_id' => $atendimento->desfecho_id,
'profissional' => [
'id' => $atendimento->createdLotacao->usuario->id,
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
],
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
'evolucao' => $atendimento->evolucao,
'anamnsese' => $atendimento->atendimento_geral,
'queixa_principal_duracao' => $atendimento->queixa_principal_duracao,
'historia_paciente' => $atendimento->historia,
'exame_fisico' => $atendimento->exame_fisico,
'diagnostico' => $atendimento->diagnostico,
'conduta' => $atendimento->conduta,
'observacoes_servicos_enfermagem' => $atendimento->observacoes_enfermagem,
'observacoes' => $atendimento->observacao->descricao ?? null,
'servicos_enfermagem' => self::getServicosEnfermagemData($atendimento),
'exames' => self::getAtendimentoMedicoExamesData($atendimento),
'prescricoes_internas' => self::getAtendimentoMedicoPrescricoesInternasData($atendimento),
'procedimentos' => self::getProcedimentosData($atendimento),
'cid' => $atendimento->cid
? MaskUtil::getCidMasked($atendimento->cid->cid->codigo) . " - {$atendimento->cid->cid->nome}"
: null,
'reavaliacao' => [
'solicitou' => $atendimento->solicitou_reavaliacao ? 'SIM' : 'NÃO',
'data_hora' => $atendimento->solicitou_reavaliacao && $atendimento->data_hora_proxima_reavaliacao
? $atendimento->data_hora_proxima_reavaliacao->format('d/m/Y H:i')
: null
]
])->all();
}
private static function getAtendimentoMedicoExamesData($atendimentoMedico)
{
$exames = collect();
$atendimentoMedico->pedidosExames()
->orderBy('created_at')
->get()
->each(fn ($pedido) => $pedido->exames
->each(function ($exame) use ($exames) {
$procedimento = Procedimento::where('codigo', $exame->exame->codigo)
->orderByDesc('competencia_id')
->first();
$exames->push([
'codigo' => MaskUtil::getProcedimentoMasked($exame->exame->codigo),
'nome' => $procedimento->nome ?? null,
'nome_exame' => $exame->exame->nome,
]);
})
);
return $exames->all();
}
private static function getAtendimentoMedicoPrescricoesInternasData($atendimentoMedico)
{
$medicamentos = collect();
$atendimentoMedico->prescricoesInternas()
->orderBy('created_at')
->get()
->each(fn ($prescricao) => $prescricao->medicamentos
->each(fn ($medicamento) => $medicamentos->push([
'medicamento' => $medicamento->medicamento->nome,
'frequencia' => $prescricao->frequencia,
'quantidade' => $medicamento->quantidade,
'unidade_medida_sigla' => $medicamento->unidadeMedida->sigla ?? '',
'administracao' => $medicamento->administracao
]))
);
return $medicamentos->all();
}
/*
* Utilizado no AtendimentoEnfermagemController também.
*/
public static function getAtendimentosEnfermagemData($atendimentosEnfermagem)
{
return $atendimentosEnfermagem->map(function ($atendimento) {
$procedimentos = self::getProcedimentosData($atendimento);
self::addProfissionalFaturado($procedimentos, $atendimento->created_lotacao_id);
$atendimento = [
'tipo' => 'enfermagem',
'is_observacao' => false,
'id' => $atendimento->id,
'data_hora' => $atendimento->created_at,
'profissional' => [
'id' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->id ?? null,
'nome' => Usuario::withTrashed()->find(Lotacao::find($atendimento->created_lotacao_id)->usuario_id)->cidadao->nome ?? null,
],
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
'historico' => $atendimento->historico->descricao ?? null,
'diagnostico' => $atendimento->diagnostico->descricao ?? null,
'planejamento' => $atendimento->planejamento->descricao ?? null,
'implementacao' => $atendimento->implementacao->descricao ?? null,
'avaliacao' => $atendimento->avaliacao->descricao ?? null,
'observacoes' => $atendimento->observacao->descricao ?? null,
'anotacoes_enfermagem' => self::getAtendimentosEnfermagemObservacaoAnotacoesData($atendimento),
'exames_laboratoriais' => self::getExamesData($atendimento, ExameTipo::LABORATORIAL),
'exames_imagem' => self::getExamesData($atendimento, ExameTipo::IMAGEM),
'laudos' => self::getLaudosExamesData($atendimento),
'servicos_enfermagem' => self::getServicosEnfermagemData($atendimento),
'prescricoes_internas' => self::getAtendimentoEnfermagemObservacaoPrescricoesInternasData($atendimento),
'procedimentos' => $procedimentos,
];
$atendimento['nodata'] = is_null($atendimento['avaliacao_antropometrica'])
&& empty($atendimento['sinais_vitais'])
&& is_null($atendimento['historico'])
&& is_null($atendimento['diagnostico'])
&& is_null($atendimento['planejamento'])
&& is_null($atendimento['implementacao'])
&& is_null($atendimento['avaliacao'])
&& is_null($atendimento['observacoes'])
&& empty($atendimento['anotacoes_enfermagem'])
&& empty($atendimento['exames_laboratoriais'])
&& empty($atendimento['exames_imagem'])
&& empty($atendimento['laudos'])
&& empty($atendimento['servicos_enfermagem'])
&& empty($atendimento['prescricoes_internas'])
&& empty($atendimento['procedimentos']);
return $atendimento;
})->all();
}
private static function getAtendimentosExameImagemData($atendimentosExameImagem)
{
return $atendimentosExameImagem->map(function ($atendimento) {
$procedimentos = self::getProcedimentosData($atendimento);
self::addProfissionalFaturado($procedimentos, $atendimento->created_lotacao_id);
return [
'tipo' => 'exame_imagem',
'is_observacao' => $atendimento->is_observacao ?? false,
'id' => $atendimento->id,
'data_hora' => $atendimento->created_at,
'profissional' => [
'id' => $atendimento->createdLotacao->usuario->id,
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
],
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
'exames_imagem' => self::getExamesData($atendimento, ExameTipo::IMAGEM),
'laudos' => self::getLaudosExamesData($atendimento),
'procedimentos' => $procedimentos,
'observacoes' => $atendimento->observacao->descricao ?? null,
];
})->all();
}
private static function addProfissionalFaturado($procedimentos, $atendimentoLotacaoId)
{
collect($procedimentos)->each(function ($procedimento) use ($atendimentoLotacaoId) {
if(!$procedimento){
if ($procedimento['lotacao_id'] !== $atendimentoLotacaoId) {
$lotacao = Lotacao::findOrFail($procedimento['lotacao_id']);
$procedimento['nome'] .= " - FATURADO PARA {$lotacao->usuario->cidadao->nome} - "
. $lotacao->ocupacao->nome;
}
};
});
}
/*
* Utilizado no PacienteObservacaoController também.
*/
public static function getAtendimentosObservacaoData($atendimentosObservacao)
{
return $atendimentosObservacao->map(function ($atendimento) {
$previousObservacao = $atendimento->atendimento->pacienteObservacoes()
->where('id', '<', $atendimento->id)
->orderByDesc('id')
->first();
$atendimento = [
'tipo' => 'observacao',
'is_observacao' => false,
'id' => $atendimento->id,
'data_hora' => $atendimento->created_at,
'profissional' => [
'id' => $atendimento->createdLotacao->usuario->id,
'nome' => $atendimento->createdLotacao->usuario->cidadao->nome,
],
'cbo' => $atendimento->createdLotacao->ocupacao->nome,
'quarto' => $atendimento->quarto,
'leito' => $atendimento->leito,
'avaliacao_antropometrica' => self::getAvaliacaoAntropometricaData($atendimento),
'sinais_vitais' => self::getSinaisVitaisData($atendimento),
'trauma' => [
'hemorragia_externa_grave' => $atendimento->hemorragiaExternaGrave
? $atendimento->hemorragiaExternaGrave->nome . (
$atendimento->hemorragia_externa_grave_trauma_status_id === PacienteTraumaStatus::PRESENTE
? " ({$atendimento->hemorragia_externa_grave_local})"
: ''
)
: null,
'vias_aereas' => $atendimento->viasAerias
? $atendimento->viasAerias->nome . (
$atendimento->vias_aerias_trauma_status_id === PacienteTraumaStatus::OBSTRUCAO
? " ({$atendimento->vias_aerias_obstrucao_por})"
: ''
)
: null,
'oxigenacao_respiracao_ventilacao' => $atendimento->oxigenacaoRespiracaoVentilacao->nome ?? null,
'circulacao_hemorragias' => [
'pulso' => $atendimento->pulso->nome ?? null,
'perfusao' => $atendimento->perfuracao
? $atendimento->perfuracao->nome . (
$atendimento->perfuracao_trauma_status_id === PacienteTraumaStatus::LENTIFICADA
? " ({$atendimento->perfuracao_lentificada} segundos)"
: ''
)
: null,
'pele' => $atendimento->pele
? $atendimento->pele->nome . (
$atendimento->pele_trauma_status_id === PacienteTraumaStatus::ALTERACOES
? " ({$atendimento->pele_alteracao})"
: ''
)
: null,
'sangramentos' => $atendimento->sangramento
? $atendimento->sangramento->nome . (
$atendimento->sangramento_trauma_status_id === PacienteTraumaStatus::PRESENTE
? " ({$atendimento->sangramento_local})"
: ''
)
: null,
],
'avaliacao_neurologica' => [
'pupilas' => $atendimento->pupilas->nome ?? null,
'paresias' => $atendimento->paresias->nome ?? null,
'plegia' => $atendimento->plegia->nome ?? null
],
'exposicao_hipotermia' => $atendimento->exposicaoHipotermia
? $atendimento->exposicaoHipotermia->nome . (
$atendimento->exposicao_hipotermia_trauma_status_id === PacienteTraumaStatus::COM_LESOES
? " ({$atendimento->exposicao_hipotermia_observacao})"
: ''
)
: null,
],
'avaliacao_trauma_parte_corpo' => [
'cabeca_pescoco' => $atendimento->avaliacao_cabeca_pescoco,
'torax' => $atendimento->avaliacao_torax,
'abdome' => $atendimento->avaliacao_abdome,
'mmss_mmii' => $atendimento->avaliacao_mmss_mmii,
],
'escalas_glasgow' => self::getAtendimentoObservacaoEscalasGlasgow($atendimento),
'historico' => $atendimento->historico->descricao ?? null,
'diagnostico' => $atendimento->diagnostico->descricao ?? null,
'planejamento' => $atendimento->planejamento->descricao ?? null,
'implementacao' => $atendimento->implementacao->descricao ?? null,
'avaliacao' => $atendimento->avaliacao->descricao ?? null,
'observacoes' => $atendimento->observacao,
'anotacoes_enfermagem' => self::getAtendimentosEnfermagemObservacaoAnotacoesData($atendimento),
'exames_laboratoriais' => self::getExamesData($atendimento, ExameTipo::LABORATORIAL),
'laudos' => self::getLaudosExamesData($atendimento),
'servicos_enfermagem' => self::getServicosEnfermagemData($atendimento),
'prescricoes_internas' => self::getAtendimentoEnfermagemObservacaoPrescricoesInternasData(null, $atendimento),
'procedimentos' => self::getProcedimentosData($atendimento),
];
$atendimento['nodata'] = (is_null($atendimento['quarto'])
|| is_null($previousObservacao)
|| $previousObservacao->quarto == $atendimento['quarto']
)
&& (is_null($atendimento['leito'])
|| is_null($previousObservacao)
|| $previousObservacao->leito == $atendimento['leito']
)
&& is_null($atendimento['avaliacao_antropometrica'])
&& empty($atendimento['sinais_vitais'])
&& is_null($atendimento['trauma']['hemorragia_externa_grave'])
&& is_null($atendimento['trauma']['vias_aereas'])
&& is_null($atendimento['trauma']['oxigenacao_respiracao_ventilacao'])
&& is_null($atendimento['trauma']['circulacao_hemorragias']['pulso'])
&& is_null($atendimento['trauma']['circulacao_hemorragias']['perfusao'])
&& is_null($atendimento['trauma']['circulacao_hemorragias']['pele'])
&& is_null($atendimento['trauma']['circulacao_hemorragias']['sangramentos'])
&& is_null($atendimento['trauma']['avaliacao_neurologica']['pupilas'])
&& is_null($atendimento['trauma']['avaliacao_neurologica']['plegia'])
&& is_null($atendimento['trauma']['exposicao_hipotermia'])
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['cabeca_pescoco'])
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['torax'])
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['abdome'])
&& is_null($atendimento['avaliacao_trauma_parte_corpo']['mmss_mmii'])
&& empty($atendimento['escalas_glasgow']['ocular'])
&& is_null($atendimento['historico'])
&& is_null($atendimento['diagnostico'])
&& is_null($atendimento['planejamento'])
&& is_null($atendimento['implementacao'])
&& is_null($atendimento['avaliacao'])
&& is_null($atendimento['observacoes'])
&& empty($atendimento['anotacoes_enfermagem'])
&& empty($atendimento['exames_laboratoriais'])
&& empty($atendimento['laudos'])
&& empty($atendimento['servicos_enfermagem'])
&& empty($atendimento['prescricoes_internas'])
&& empty($atendimento['procedimentos']);
return $atendimento;
})->all();
}
private static function getAtendimentoObservacaoEscalasGlasgow($atendimentoObservacao)
{
return $atendimentoObservacao->escalasComaGlasgow()->orderBy('created_at')->get()->map(function ($escala) {
$pontuacao = $escala->aberturaOcular->pontos
+ $escala->respostaVerbal->pontos
+ $escala->respostaMotora->pontos
- $escala->reatividadePupilar->pontos;
if ($escala->aberturaOcular->pontos === 0
|| $escala->respostaVerbal->pontos === 0
|| $escala->respostaMotora->pontos === 0
) {
$resultado = 'A pontuação não pode ser calculada. Um ou mais itens não foram testados.';
}
else {
$resultado = (GlasgowInterpretacaoResultado::all()->filter(function ($interpretacao) use ($pontuacao) {
return $pontuacao >= $interpretacao->min
&& $pontuacao <= ($interpretacao->max ?? PHP_INT_MAX);
})->first())->descricao;
}
return [
'ocular' => $escala->aberturaOcular->pontos,
'verbal' => $escala->respostaVerbal->pontos,
'motora' => $escala->respostaMotora->pontos,
'pupilar' => $escala->reatividadePupilar->pontos,
'pontuacao' => $pontuacao,
'resultado' => $resultado
];
})->all();
}
private static function getAtendimentosEnfermagemObservacaoAnotacoesData($atendimento)
{
return $atendimento->anotacoes()->orderBy('created_at')->get()->map(fn ($anotacao) => [
'data_hora' => $anotacao->anotado_em->format('d/m/Y H:i'),
'descricao' => $anotacao->descricao
])->all();
}
private static function getAtendimentoEnfermagemObservacaoPrescricoesInternasData(
$atendimentoEnfermagem = null,
$atendimentoObservacao = null
) {
$medicamentos = collect();
PrescricaoInterna::whereHas('medicamentos',
function ($query) use ($atendimentoEnfermagem, $atendimentoObservacao) {
$query->whereHas('aplicacoes', function ($query) use ($atendimentoEnfermagem, $atendimentoObservacao) {
$query
->when($atendimentoEnfermagem, function ($query, $atendimentoEnfermagem) {
$query->where('atendimento_enfermagem_id', $atendimentoEnfermagem->id);
})
->when($atendimentoObservacao, function ($query, $atendimentoObservacao) {
$query->where('paciente_observacao_id', $atendimentoObservacao->id);
});
});
}
)
->orderBy('created_at')
->get()
->each(fn ($prescricao) => $prescricao->medicamentos()
->whereHas('aplicacoes', function ($query) use ($atendimentoEnfermagem, $atendimentoObservacao) {
$query
->when($atendimentoEnfermagem, function ($query, $atendimentoEnfermagem) {
$query->where('atendimento_enfermagem_id', $atendimentoEnfermagem->id);
})
->when($atendimentoObservacao, function ($query, $atendimentoObservacao) {
$query->where('paciente_observacao_id', $atendimentoObservacao->id);
});
})
->get()
->each(fn ($medicamento) => $medicamentos->push([
'medicamento' => $medicamento->medicamento->nome,
'frequencia' => $prescricao->frequencia,
'quantidade' => $medicamento->quantidade,
'unidade_medida_sigla' => $medicamento->unidadeMedida->sigla ?? '',
'administracao' => $medicamento->administracao,
'aplicacoes' => ($atendimentoEnfermagem->automatico ?? false)
? []
: $medicamento->aplicacoes->map(fn ($aplicacao, $i) => [
'numero' => $i + 1,
'status' => $aplicacao->status->nome . ($aplicacao->status->id === Status::REALIZADO
? ' às ' . (new Carbon($aplicacao->horario_aplicacao))->format('H:i') . ' h'
: ''
)
])->all()
]))
);
return $medicamentos->all();
}
private static function getAvaliacaoAntropometricaData($atendimento)
{
$avaliacao = $atendimento->avaliacaoAntropometrica;
if (is_null($avaliacao)) {
return null;
}
return [
'peso' => $avaliacao->massa
? str_replace('.', ',', "{$avaliacao->massa} {$avaliacao->massaUnidadeMedida->sigla}")
: null,
'altura' => $avaliacao->altura
? str_replace('.', ',', "{$avaliacao->altura} {$avaliacao->alturaUnidadeMedida->sigla}")
: null
];
}
private static function getSinaisVitaisData($atendimento)
{
$getSigla = fn ($id) => UnidadeMedida::findOrFail($id)->sigla;
return $atendimento->sinaisVitais()->orderBy('created_at')->get()->map(fn ($sinal) => [
'pa' => $sinal->pa
? "{$sinal->pa} {$sinal->paUnidadeMedida->sigla}"
: null,
'glicemia' => $sinal->glicemia
? "{$sinal->glicemia} " . $getSigla(CadastroUnidadeMedida::MILIGRAMAS_POR_DECILITRO)
: null,
'temperatura' => $sinal->temperatura
? str_replace('.', ',', "{$sinal->temperatura} " . $getSigla(CadastroUnidadeMedida::CELSIUS))
: null,
'pulso' => $sinal->pulso
? "{$sinal->pulso} " . $getSigla(CadastroUnidadeMedida::BATIMENTOS_POR_MINUTO)
: null,
'respiracao' => $sinal->respiracao
? "{$sinal->respiracao} " . $getSigla(CadastroUnidadeMedida::MOVIMENTOS_POR_MINUTO)
: null,
'saturacao' => $sinal->saturacao
? "{$sinal->saturacao} " . $getSigla(CadastroUnidadeMedida::PORCENTAGEM)
: null,
'intensidade_dor' => $sinal->intensidade_dor,
'cintura' => $sinal->cintura
? "{$sinal->cintura} " . $getSigla(CadastroUnidadeMedida::CENTIMETROS)
: null,
])->all();
}
private static function getProcedimentosData($atendimento)
{
return $atendimento->procedimentos()->orderBy('created_at')->get()->map(fn($procedimento) => $procedimento->procedimento
? collect([
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->procedimento->codigo),
'nome' => $procedimento->procedimento->nome,
'lotacao_id' => $procedimento->lotacao_id ?? null,
]) : null
)
->filter()
->values()
->all();
}
private static function getServicosEnfermagemData($atendimento)
{
return $atendimento->servicosEnfermagem()->orderBy('created_at')->get()->map(fn ($servico) => [
'codigo' => MaskUtil::getProcedimentoMasked($servico->procedimento->codigo),
'nome' => $servico->procedimento->nome,
'observacoes' => $servico->observacoes,
'status' => $servico->status->nome . ($servico->status->id === Status::REALIZADO
? ' às ' . (new Carbon($servico->horario_realizacao))->format('H:i') . ' h'
: ''
)
])->all();
}
private static function getExamesData($atendimento, $tipoId)
{
return $atendimento->pedidoExameItems()
->whereHas('exame', fn ($q) => $q->where('tipo_id', $tipoId))
->orderBy('created_at')
->get()
->map(function ($exame) {
$procedimento = Procedimento::where('codigo', $exame->exame->codigo)
->orderByDesc('competencia_id')
->first();
return [
'codigo' => MaskUtil::getProcedimentoMasked($exame->exame->codigo),
'nome' => $procedimento->nome ?? null,
'nome_exame' => $exame->exame->nome,
'status' => $exame->status->nome
. ($exame->status->id === Status::REALIZADO && $exame->horario_realizacao
? ' às ' . (new Carbon($exame->horario_realizacao))->format('H:i') . ' h'
: '')
];
})
->all();
}
private static function getLaudosExamesData($atendimento)
{
return $atendimento->pedidoExameLaudos()
->orderBy('created_at')
->get()
->map(fn ($laudo) => ['nome' => $laudo->nome])
->all();
}
private static function getPacienteData($atendimento)
{
$paciente = $atendimento->faa->paciente;
$cidadao = $paciente->cidadao;
$gestacao = $atendimento->gestacoes->sortByDesc('created_at')->first();
return [
'nome' => $cidadao->nome,
'nome_social' => $cidadao->nome_social,
'prefereNome' => $cidadao->preferencia_nome_id ?? null,
'prontuario' => $paciente->prontuario,
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : 'NÃO INFORMADO',
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : 'NÃO INFORMADO',
'sexo' => $cidadao->sexo->descricao,
'data_nascimento' => $cidadao->data_nascimento
? $cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'idade' => $cidadao->data_nascimento
? "{$cidadao->idade['anos']} ano(s), "
. "{$cidadao->idade['meses']} mês(es) e "
. "{$cidadao->idade['dias']} dia(s) "
: 'NÃO INFORMADA',
'idade_gestacional' => $gestacao && $gestacao->idade_gestacional
? "{$gestacao->idade_gestacional['semanas']} semana(s) e {$gestacao->idade_gestacional['dias']} dia(s)"
: null,
'nome_mae' => $cidadao->nome_mae ?? 'NÃO INFORMADO',
'endereco' => $cidadao->domicilio
? "{$cidadao->domicilio->endereco->completo}, "
. MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
: 'NÃO INFORMADO',
'telefones' => $cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
];
}
private static function getRaatData($atendimento)
{
$raat = $atendimento->faa->raat;
if (!$raat) {
return null;
}
$titulo = '';
switch ($raat->tipo_formulario_acidente_trabalho) {
case TipoFormularioAcidenteTrabalho::RAAT:
$titulo = 'Raat Aberta';
break;
case TipoFormularioAcidenteTrabalho::CAT:
$titulo = 'Cat Aberta';
break;
default:
$titulo = 'Cat/Raat Aberta';
}
$formularioTemCat = $raat->tipo_formulario_acidente_trabalho != TipoFormularioAcidenteTrabalho::RAAT;
$cat = Cat::where('raat_id', $raat->id)->first();
$parecerMedico = $raat->pareceresMedico()->orderByDesc('created_at')->first();
if ($parecerMedico) {
$parecerMedico = [
'agente' => $parecerMedico->agente->nome,
'causas_acidente' => $parecerMedico->causasAcidente->map(
function ($causa) use ($parecerMedico) {
if ($causa->id === CausaAcidente::OUTROS) {
$causa->nome .= is_null($parecerMedico->causa_acidente_outras)
? " (NÃO INFORMADA)"
: " ({$parecerMedico->causa_acidente_outras})";
}
return $causa->nome;
}
)->all(),
'partes_corpo_atingidas' => $parecerMedico->partesCorpoAtingidas->map(
function ($parte) use ($parecerMedico) {
if ($parte->id === ParteCorpoAtingida::OUTROS) {
$parte->nome .= is_null($parecerMedico->parte_corpo_atingida_outras)
? " (NÃO INFORMADO)"
: " ({$parecerMedico->parte_corpo_atingida_outras})";
}
return $parte->nome;
}
)->all(),
'diagnosticos' => $parecerMedico->diagnosticos->map(
function ($diagnostico) use ($parecerMedico) {
if ($diagnostico->id === DiagnosticoRaat::OUTROS) {
$diagnostico->nome .= is_null($parecerMedico->diagnostico_outros)
? " (NÃO INFORMADO)"
: " ({$parecerMedico->diagnostico_outros})";
}
return $diagnostico->nome;
}
)->all(),
'cid' => ($parecerMedico->atendimentoMedico->cid->cid ?? null)
? $parecerMedico->atendimentoMedico->cid->cid->codigo
. ' - ' . $parecerMedico->atendimentoMedico->cid->cid->nome
: '',
'observacao' => $parecerMedico->observacao ?? null,
'classificacao_inicial' => $parecerMedico->classificacaoInicial->nome,
'com_afastamento' => $parecerMedico->afastado ? 'SIM' : 'NÃO',
'sofreu_acidente_trabalho' => $cat && $formularioTemCat ? ($cat->paciente_sofreu_acidente_trabalho ? 'SIM' : 'NÃO') : null,
'portador_doenca_ocupacional' => $cat && $formularioTemCat ? ($cat->paciente_portador_doenca_ocupacional ? 'SIM' : 'NÃO') : null,
'precisa_internacao' => $cat && $formularioTemCat ? ($cat->paciente_precisa_internacao ? 'SIM' : 'NÃO') : null,
'dias_afastamento' => $cat && $formularioTemCat ? ($cat->dias_afastamento ?? 'NÃO INFORMADO') : null,
];
}
return [
'titulo_formulario'=> $titulo,
'empresa' => [
'nome' => $raat->empresa_nome,
'ramo_atividade' => $raat->empresa_ramo_atividade,
'telefone' => $raat->empresa_telefone
? MaskUtil::getPhoneMasked($raat->empresa_telefone)
: null,
'endereco' => $raat->empresa_endereco,
'ocupacao_paciente' => $cat && $formularioTemCat ? $cat->empresa_ocupacao_paciente : null
],
'acidente' => [
'data' => $raat->acidente_data->format('d/m/Y'),
'hora' => $raat->acidente_hora ? $raat->acidente_hora->format('H:i') : null,
'tipo' => $raat->tipoAcidente->nome ?? null,
'regime_trabalho' => $raat->regimeTrabalho->nome ?? null,
'regime_trabalho_outro' => $raat->regimeTrabalho
? ($raat->regime_trabalho_outro ?? 'NÃO INFORMADO')
: '',
'local' => $raat->acidente_local,
'descricao' => $raat->acidente_descricao,
],
'parecer_medico' => $parecerMedico
];
}
private static function getClassificacoesRiscoData($atendimento)
{
$classificacoes = collect();
$previousClassificacaoId = null;
$atendimento->classificacoesRisco()
->orderBy('created_at')
->get()
->each(function ($classificacao) use (&$previousClassificacaoId, $classificacoes) {
if ($classificacao->classificacao_risco_id !== $previousClassificacaoId) {
$classificacoes->push([
'data_hora' => $classificacao->created_at->format('d/m/Y H:i:s'),
'nome' => $classificacao->classificacaoRisco->nome,
'profissional' => $classificacao->createdLotacao->usuario->cidadao->nome ?? null,
'cbo' => $classificacao->createdLotacao->ocupacao->nome,
'setor' => $classificacao->createdCentroCusto->setor->nome,
]);
}
$previousClassificacaoId = $classificacao->classificacao_risco_id;
});
return $classificacoes->all();
}
private static function getFatoresRiscoData($atendimento, $until)
{
if (is_null($until)) {
return [];
}
return $atendimento->faa->paciente->cidadao->fatoresRisco()
->wherePivot('created_at', '<=', $until)
->get()
->map(fn ($fatorRisco) => [
'data_hora' => $fatorRisco->cidadaoFatorRisco->created_at->format('d/m/Y H:i:s'),
'nome' => $fatorRisco->id == EnumFatorRisco::OUTRO
? $fatorRisco->nome .' (' . $atendimento->faa->paciente->cidadao->fator_risco_outro . ')'
: $fatorRisco->nome,
'profissional' => $fatorRisco->cidadaoFatorRisco->createdLotacao->usuario->cidadao->nome ?? null,
'cbo' => $fatorRisco->cidadaoFatorRisco->createdLotacao->ocupacao->nome ?? null,
'setor' => $fatorRisco->cidadaoFatorRisco->createdCentroCusto->setor->nome ?? null,
])
->sortBy('data_hora')
->all();
}
private static function getAlergiasData($atendimento, $until)
{
if (is_null($until)) {
return [];
}
return $atendimento->faa->paciente->cidadao->alergias()
->wherePivot('created_at', '<=', $until)
->get()
->map(fn ($alergia) => [
'data_hora' => $alergia->cidadaoAlergia->created_at->format('d/m/Y H:i:s'),
'nome' => $alergia->agente_substancia_especifica,
'profissional' => $alergia->cidadaoAlergia->createdLotacao->usuario->cidadao->nome ?? null,
'cbo' => $alergia->cidadaoAlergia->createdLotacao->ocupacao->nome,
'setor' => $alergia->cidadaoAlergia->createdCentroCusto->setor->nome,
])
->sortBy('data_hora')
->all();
}
private static function getMedicamentosUsoContinuoData($atendimento, $until)
{
if (is_null($until)) {
return [];
}
return $atendimento->faa->paciente->cidadao->medicamentosUsoContinuo()
->wherePivot('created_at', '<=', $until)
->get()
->map(fn ($medicamento) => [
'data_hora' => $medicamento->CidadaoMedicamentoUsoContinuo->created_at->format('d/m/Y H:i:s'),
'nome' => $medicamento->nome,
'profissional' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->usuario->cidadao->nome,
'cbo' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->nome,
'setor' => $medicamento->CidadaoMedicamentoUsoContinuo->createdCentroCusto->setor->nome,
])
->sortBy('data_hora')
->all();
}
private static function getMedicamentosEmUsoData($atendimento)
{
return $atendimento->medicamentosUso()->orderBy('created_at')->get()->map(fn ($medicamento) => [
'data_hora' => $medicamento->created_at->format('d/m/Y H:i:s'),
'descricao' => $medicamento->descricao,
'profissional' => $medicamento->createdLotacao->usuario->cidadao->nome,
'cbo' => $medicamento->createdLotacao->ocupacao->nome,
'setor' => $medicamento->createdCentroCusto->setor->nome,
])->all();
}
private static function getProcedimentosFechamentoData($atendimento)
{
$atendimentosProcedimentos = collect();
$atendimento->procedimentos()
->whereNull('atendimento_medico_id')
->whereNull('atendimento_triagem_id')
->whereNull('atendimento_enfermagem_id')
->whereNull('paciente_observacao_id')
->whereNull('exame_imagem_id')
->get()
->each(function ($atendimentoProcedimento) use ($atendimentosProcedimentos) {
$realizadoEm = Carbon::create(
$atendimentoProcedimento->realizado_em->year,
$atendimentoProcedimento->realizado_em->month,
$atendimentoProcedimento->realizado_em->day,
23,
59,
59
);
$realizadoEmFormatted = $realizadoEm->format('d/m/Y H:i:s');
$atendimentoProcedimentoProfissional = $atendimentosProcedimentos
->where('lotacao_id', $atendimentoProcedimento->lotacao_id)
->where('data_hora_formatted', $realizadoEmFormatted)
->first();
if (is_null($atendimentoProcedimentoProfissional)) {
$atendimentoProcedimentoProfissional = collect([
'tipo' => 'fechamento',
'is_observacao' => false,
'id' => null,
'lotacao_id' => $atendimentoProcedimento->lotacao_id,
'profissional' => [
'id' => $atendimentoProcedimento->lotacao->usuario->id,
'nome' => $atendimentoProcedimento->lotacao->usuario->cidadao->nome,
],
'cbo' => $atendimentoProcedimento->lotacao->ocupacao->nome,
'data_hora_formatted' => $realizadoEmFormatted,
'data_hora' => $realizadoEm,
'cid' => null,
'procedimentos' => collect(),
]);
$atendimentosProcedimentos->push($atendimentoProcedimentoProfissional);
}
if ($atendimentoProcedimento->is_parametrizado) {
if ($atendimentoProcedimento->cidPrincipalId) {
$cid = Cid::find($atendimentoProcedimento->cidPrincipalId, ['codigo', 'nome']);
$atendimentoProcedimentoProfissional['cid'] = MaskUtil::getCidMasked(
$cid->codigo)
. " - {$cid->nome}";
}
}
$procedimento = Procedimento::find($atendimentoProcedimento->procedimento_id, ['codigo', 'nome']);
if($procedimento){
$atendimentoProcedimentoProfissional['procedimentos']->push(collect([
'codigo' => MaskUtil::getProcedimentoMasked($procedimento->codigo),
'nome' => $procedimento->nome
]));
}
});
return $atendimentosProcedimentos->all();
}
private static function getDesfechoData($atendimento)
{
$faa = $atendimento->faa;
if (is_null($faa->desfecho_id)) {
return null;
}
$evasao = null;
$encaminhamentoHospitalar = null;
$obito = null;
if ($faa->desfecho->id === Desfecho::EVASAO) {
$evasao = [
'motivo' => $atendimento->fila->motivo_evasao ?? null
];
}
else if ($faa->desfecho->id === Desfecho::ENCAMINHAMENTO_HOSPITALAR) {
$lastEncaminhamento = $atendimento->encaminhamentosHospitalar()->orderByDesc('created_at')->first();
$encaminhamentoHospitalar = [
'unidade_encaminhamento' => $lastEncaminhamento->unidade->nome_fantasia
?? $lastEncaminhamento->unidade_nome,
'quarto' => $lastEncaminhamento->quarto ?? 'NÃO INFORMADO',
'leito' => $lastEncaminhamento->leito ?? 'NÃO INFORMADO',
'medico_hospitalar' => $lastEncaminhamento->medico_hospitalar ?? 'NÃO INFORMADO',
'cid' => "{$lastEncaminhamento->cid->codigo} - {$lastEncaminhamento->cid->nome}",
'observacoes' => $lastEncaminhamento->observacoes ?? 'NÃO INFORMADO'
];
}
else if ($faa->desfecho->id === Desfecho::OBITO) {
$obito = [
'data' => (new Carbon($faa->paciente->cidadao->obito->obito_em))->format('d/m/Y'),
'hora' => (new Carbon($faa->paciente->cidadao->obito->obito_em))->format('H:i'),
'numero_declaracao' => $faa->paciente->cidadao->obito->declaracao,
'cid' => "{$faa->paciente->cidadao->obito->cid->codigo} - {$faa->paciente->cidadao->obito->cid->nome}",
'causa' => $faa->paciente->cidadao->obito->causa
];
}
return [
'data_hora' => $faa->data_hora_desfecho
? (new Carbon($faa->data_hora_desfecho))->format('d/m/Y H:i:s')
: '',
'profissional' => $faa->usuario->cidadao->nome ?? '',
'cbo' => $faa->lotacao->ocupacao->nome ?? '',
'nome' => $atendimento->faa->desfecho->nome,
'evasao' => $evasao,
'encaminhamento_hospitalar' =>$encaminhamentoHospitalar,
'obito' => $obito
];
}
private static function getAssinaturasData($atendimentos)
{
$assinaturas = [];
$idsProfissinais = [];
foreach ($atendimentos as $atendimento) {
if (!in_array($atendimento['profissional']['id'], $idsProfissinais)) {
$usuario = Usuario::withTrashed()->findOrFail($atendimento['profissional']['id']);
$assinaturas[] = [
'profissional' => $atendimento['profissional']['nome'],
'documento' => $usuario->registro_tipo_id
? ($usuario->registro_tipo_id === TipoRegistroUsuario::OUTRO
? $usuario->registro_tipo_outro
: $usuario->registroTipo->sigla
) . ": {$usuario->registro_numero}"
: 'Conselho profissional: NÃO INFORMADO',
'cbo' => $atendimento['cbo']
];
$idsProfissinais[] = $atendimento['profissional']['id'];
}
}
return $assinaturas;
}
public function __invoke($atendimentoId)
{
return (new Pdf)->stream(self::getTemplate($atendimentoId, request()->all()), self::TITLE);
}
}