Files
rkm-conectasus-ci-sandbox/api/app/Http/Controllers/Impressao/Ambulatorio/AtendimentoController.php
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

1606 lines
62 KiB
PHP

<?php
namespace App\Http\Controllers\Impressao\Ambulatorio;
use App\Enums\Ambulatorio\ArcadaDentaria;
use App\Enums\Cadastro\SujeitoAtencao\TipoRegistroUsuario;
use App\Enums\Cadastro\UnidadeMedida;
use App\Http\Controllers\Controller;
use App\Models\Ambulatorio\Atendimento;
use App\Models\Ambulatorio\AtendimentoPreAtendimento;
use App\Models\Ambulatorio\AtendimentoSoapExameSolicitado;
use App\Models\Ambulatorio\AtendimentoSoapProblemaCondicao;
use App\Models\Ambulatorio\AtendimentoSoapProcedimentoEmad;
use App\Models\Ambulatorio\AtendimentoSoapTriagemNeonatalSolicitado;
use App\Models\Ambulatorio\Dente;
use App\Models\Ambulatorio\PuericulturaAlteracaoFenotipica;
use App\Models\Ambulatorio\PuericulturaFatorRisco;
use App\Models\Ambulatorio\PuericulturaMarcoDesenvolvimento;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\MarcadorConsumoAlimentar;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\MarcadorConsumoAlimentarPerguntaResposta;
use App\Models\Geral\Ciap;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Procedimento;
use App\Services\Ambulatorio\AtendimentoService;
use App\Services\Geral\AgeService;
use App\Services\Geral\ImcService;
use App\Utils\DataUtil;
use App\Utils\Exports\PdfAtendimento;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class AtendimentoController extends Controller
{
private const TEMPLATE = 'ambulatorio.atendimento';
public function __invoke($atendimentoId)
{
$atendimento = Atendimento::findOrFail($atendimentoId);
$paciente = $atendimento->paciente;
$paraAssinaturaEletronica = request()->para_assinatura_eletronica === true
|| (DataUtil::isStringBoolean(request()->para_assinatura_eletronica)
&& DataUtil::isStringTrue(request()->para_assinatura_eletronica));
$title = 'CONSULTA';
$soaps = [];
$atendimento->soaps()
->where('is_rascunho', false)
->get()
->each(function ($soap) use (&$soaps, $paciente, &$title) {
$lotacao = $soap->createdLotacao;
$infraestrutura = $soap->createdCentroCusto->infraestrutura;
$dataNascimento = Carbon::parse($paciente->cidadao->data_nascimento);
$dataCriacao = Carbon::parse($soap->created_at);
$diferenca = $dataNascimento->diff($dataCriacao);
$idade = [];
if ($diferenca->y > 0) {
$idade[] = $diferenca->y . ' ' . ($diferenca->y === 1 ? 'ano' : 'anos');
}
if ($diferenca->m > 0) {
$idade[] = $diferenca->m . ' ' . ($diferenca->m === 1 ? 'mês' : 'meses');
}
if ($diferenca->d > 0) {
$idade[] = $diferenca->d . ' ' . ($diferenca->d === 1 ? 'dia' : 'dias');
}
$idadeGestacional = ['semanas' => null, 'dias' => null];
$dataInicioGravidez = $soap->dum ? $soap->dum->format('d/m/Y') : null;
if (!is_null($dataInicioGravidez)) {
$interval = Carbon::today()->diff(Carbon::createFromFormat('d/m/Y', $dataInicioGravidez));
$idadeGestacional['semanas'] = (int) floor($interval->days / 7);
$idadeGestacional['dias'] = $interval->days % 7;
}
if ($soap->is_atendimento_saude_bucal) {
$title = 'CONSULTA ODONTOLÓGICA';
} else if ($soap->is_atendimento_pre_natal) {
$title = 'PRÉ-NATAL';
} else if ($soap->is_atendimento_puericultura) {
$title = 'PUERICULTURA';
}
$idadeAnos = null;
if ($soap->atendimento->paciente->cidadao->data_nascimento) {
$idadeAnos = AgeService::getAge(
(new Carbon($soap->atendimento->paciente->cidadao->data_nascimento)),
$soap->created_at->toDateTime()
)->years;
}
$soaps[] = [
'dataHora' => self::trataData($soap),
'local_atendimento' => $soap->atencaoBasicaLocalAtendimento->descricao ?? null,
'is_atendimento_saude_bucal' => $soap->is_atendimento_saude_bucal,
'is_atendimento_pre_natal' => $soap->is_atendimento_pre_natal,
'is_atendimento_puericultura' => $soap->is_atendimento_puericultura,
'is_atendimento_idoso' => $soap->is_atendimento_idoso,
'subjetivo' => [
'descricao' => $soap->subjetivo_descricao,
'motivos' => self::getAtendimentoMotivos($soap),
],
'antecedente' => self::getAtendimentoAntecedente($soap),
'avaliacao' => [
'descricao' => $soap->avaliacao_descricao,
'condicoes_avaliadas' => $soap->condicoesAvaliadas->pluck('descricao'),
'doencas_transmissiveis' => $soap->doencasTransmissiveis->pluck('descricao'),
'rastreamentos' => $soap->rastreamentos->pluck('descricao'),
'problemas_condicoes' => self::getAtendimentoProblemasCondicoes($soap),
'alergias' => self::getAlergias($soap),
'condicoes_emad' => self::getAtendimentoCondicoesEmad($soap),
],
'plano' => [
'descricao' => $soap->plano_descricao,
'intervencoes' => self::getAtendimentoIntervencoes($soap),
'procedimentos_clinicos' => self::getAtendimentoProcedimentosClinicos($soap),
'prescricoes_medicamentos' => self::getAtendimentoPrescricoesMedicamentos($soap),
'solicitacoes_exames' => self::getAtendimentoSolicitacoesExames($soap),
'testes_rapidos' => self::getAtendimentoTestesRapidos($soap),
'atestados' => $soap->atestados ? $soap->atestados->count() : null,
'declaracoes_comparecimento' => self::getAtendimentoDeclaracoesComparecimento($soap),
'orientacoes' => self::getAtendimentoOrientacoes($soap),
'encaminhamentos' => self::getAtendimentoEncaminhamentos($soap),
'compartilhamentos_cuidado' => self::getAtendimentoCompartilhamentosCuidado($soap),
'procedimentos_emad' => self::getAtendimentoProcedimentosEmad($soap),
],
'objetivo' => [
'descricao' => $soap->objetivo_descricao,
'dum' => $soap->dum ? $soap->dum->format('d/m/Y') : null,
'antropometria' => self::getAtendimentoObjetivoAntropometria($soap),
'sinal_vital' => self::getAtendimentoObjetivoSinalVital($soap),
'glicemia_capilar' => self::getAtendimentoObjetivoGlicemiaCapilar($soap),
'marcador_consumo_alimentar' => self::getAtendimentoMarcadorConsumoAlimentar($soap),
'tria' => self::getAtendimentoObjetivoTria($soap),
'vacinacao_em_dia' => $soap->vacinacao_em_dia,
'paciente_com_necessidade_especial' => $soap->paciente_com_necessidade_especial,
'resultados_exames' => self::getAtendimentoResultadosExames($soap),
],
'finalizacao' => [
'procedimentos_administrativos' => self::getAtendimentoProcedimentosAdministrativos($soap),
'racionalidade_saude' => self::getAtendimentoRacionalidadeSaude($soap),
'condutas' => self::getAtendimentoCondutas($soap),
'emad_tipo_atendimento' => optional($soap->emadTipoAtendimento)->descricao,
'emad_modalidade' => optional($soap->emadModalidade)->descricao,
'emad_conduta_desfecho' => optional($soap->emadCondutaDesfecho)->descricao,
'emad_procedencia' => optional($soap->emadProcedencia)->descricao,
'emad_cuidador' => optional($soap->emadCuidador)->descricao,
'emad_conclusao' => optional($soap->emadConclusao)->descricao,
'emad_cid_primario' => $soap->emad_cid_primario_id ? Cid::where('id', $soap->emad_cid_primario_id)->first() : null,
'emad_cns_cuidador' => $soap->emad_cns_cuidador ? MaskUtil::getCnsMasked($soap->emad_cns_cuidador) : null,
'emad_cpf_cuidador' => $soap->emad_cpf_cuidador ? MaskUtil::getCpfMasked($soap->emad_cpf_cuidador) : null,
'emad_justificativa' => optional($soap->justificativaEmad->first())->descricao,
],
'saude_bucal' => [
'vigilancias' => self::getAtendimentoSaudeBucalVigilancias($soap),
'necessidade_protese_inferior_superior' => $soap->saude_bucal_necessidade_protese_inferior_superior,
'odontograma' => self::getAtendimentoOdontograma($soap),
'consulta_tipo' => self::getAtendimentoSaudeBucalConsultaTipo($soap),
'fornecimentos' => self::getAtendimentoSaudeBucalFornecimentos($soap),
],
'pre_natal' => [
'is_gravidez_alto_risco' => self::isGravidezAltoRisco($soap),
'gravidez_tipo' => self::getAtendimentoPreNatalGravidezTipo($soap),
'altura_uterina' => $soap->pre_natal_altura_uterina,
'edema' => self::getAtendimentoPreNatalEdema($soap),
'movimentacao_fetal' => $soap->pre_natal_movimentacao_fetal ? 'Sim' : 'Não',
'batimento_cardiaco_fetal' => $soap->pre_natal_batimento_cardiaco_fetal,
'desfecho_em' => $soap->pre_natal_desfecho_em ? $soap->pre_natal_desfecho_em->format('d/m/Y') : null,
'idade_gestacional_semanas' => $idadeGestacional['semanas'],
'idade_gestacional_dias' => $idadeGestacional['dias'],
],
'puericultura' => [
'alteracoes_fenotipicas' => self::getAtendimentoPuericulturaAlteracoesFenotipicas($soap),
'fatores_risco' => self::getAtendimentoPuericulturaFatoresRisco($soap),
'marcos_desenvolvimento' => self::getAtendimentoPuericulturaMarcosDesenvolvimento($soap),
],
'usuario' => [
'nome' => $lotacao->usuario->cidadao->nome,
'registro_tipo' => $lotacao->usuario->registroTipo->sigla ?? null,
'registro_numero' => $lotacao->usuario->registro_numero ?? '-',
'unidade' => [
'nome' => $infraestrutura->unidade->nome_fantasia ?? '-',
'endereco' => $infraestrutura->endereco->completo ?? '-',
'telefone' => MaskUtil::getPhoneMasked($infraestrutura->telefone),
],
],
'paciente' => [
'nome' => $paciente->cidadao->nome,
'nome_social' => $paciente->cidadao->nome_social ?? null,
'nome_mae' => $paciente->cidadao->nome_mae ? $paciente->cidadao->nome_mae : 'NÃO INFORMADO',
'data_nascimento' => $paciente->cidadao->data_nascimento
? $paciente->cidadao->data_nascimento->format('d/m/Y')
: 'NÃO INFORMADA',
'idade' => implode(', ', $idade),
'unidade' => $paciente->unidade->nomeFantasia ?? '-',
'cpf' => $paciente->cidadao->cpf ? MaskUtil::getCpfMasked($paciente->cidadao->cpf) : 'NÃO INFORMADO',
'cns' => $paciente->cidadao->cns ? MaskUtil::getCnsMasked($paciente->cidadao->cns) : 'NÃO INFORMADO',
'telefones' => $paciente->cidadao->telefones->map(fn ($t) => MaskUtil::getPhoneMasked($t->numero))->all(),
'municipio' => isset($paciente->cidadao->domicilio->endereco->logradouro->municipio)
? $paciente->cidadao->domicilio->endereco->logradouro->municipio->nome . ' / ' .
$paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->uf
: null,
'prontuario' => $paciente->prontuario,
'raca_cor' => $paciente->cidadao->racaCor->descricao,
'unidade_referencia' => $paciente->unidade->nome_fantasia ?? null,
],
'informacoes_administrativas' => [
'usuario_nome' => $lotacao->usuario->cidadao->nome,
'ocupacao_descricao' => $lotacao->ocupacao->codigo . ' - ' . $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',
],
];
});
$data = [
'soaps' => $soaps,
'paraAssinar' => $paraAssinaturaEletronica,
'unidade_nome_fantasia' => $atendimento->infraestrutura->unidade->nome_fantasia ?? null,
];
return PdfAtendimento::generate($title, self::TEMPLATE, $data);
}
private static function getAtendimentoCondicoesEmad($soap)
{
return $soap->condicoesEmad()->pluck('nome');
}
private static function getAtendimentoProcedimentosEmad($soap)
{
$procedimentos = AtendimentoSoapProcedimentoEmad::where('soap_id', $soap->id)->get();
$dadosProcedimentos = [];
foreach ($procedimentos as $item) {
$proc = Procedimento::where('codigo', $item->codigo_procedimento)->orderByDesc('competencia_id')->first();
if ($proc) {
$dadosProcedimentos[] = [
'nome' => $proc->nome,
'codigo' => $proc->codigo,
];
}
}
return $dadosProcedimentos;
}
private static function getAtendimentoIntervencoes($soap)
{
$intervencoes = $soap->intervencoes()
->with('ciap:id,codigo,descricao')
->get(['ciap_id', 'observacao']);
$intervencoes->each(function ($intervencao) {
$intervencao->makeHidden('ciap_id');
$intervencao->ciap->makeHidden('id');
});
return $intervencoes;
}
private static function isGravidezAltoRisco($soap)
{
if (!$soap->is_atendimento_pre_natal) {
return false;
}
$problemaCondicaoGravidez = $soap->problemasCondicoes()
->whereNotNull('paciente_gestacao_id')
->first(['paciente_gestacao_id']);
if (!$problemaCondicaoGravidez) {
return false;
}
$soapsGravidez = AtendimentoSoapProblemaCondicao::whereHas('soap', fn ($q) => $q
->where('is_rascunho', false)
)->where(
'paciente_gestacao_id',
$problemaCondicaoGravidez->paciente_gestacao_id
)
->where('soap_id', '<=', $soap->id)
->pluck('soap_id');
if (!$soapsGravidez) {
return false;
}
return DB::table('ambulatorio_atendimento_soap_problema_condicao as problema_condicao')
->whereIn('problema_condicao.soap_id', $soapsGravidez)
->where(
fn($q) => $q
->whereExists(
fn($q) => $q
->select(DB::raw(1))
->from('geral_ciap as ciap')
->whereColumn('ciap.id', 'problema_condicao.ciap_id')
->whereIn('ciap.codigo', AtendimentoService::CIAPS_GRAVIDEZ_ALTO_RISCO)
)
->orWhereExists(
fn($q) => $q
->select(DB::raw(1))
->from('sigtap.cid as cid')
->whereColumn('cid.id', 'problema_condicao.cid_id')
->whereIn('cid.codigo', AtendimentoService::CIDS_GRAVIDEZ_ALTO_RISCO)
)
)
->exists();
}
private static function getAtendimentoSaudeBucalVigilancias($soap)
{
return $soap->saudeBucalVigilancias()->orderBy('nome')->pluck('nome');
}
private static function getAtendimentoPreNatalGravidezTipo($soap)
{
return $soap->preNatalGravidezTipo()->first(['nome']);
}
private static function getAtendimentoPreNatalEdema($soap)
{
return $soap->preNatalEdema()->first(['nome']);
}
private static function getAtendimentoSaudeBucalFornecimentos($soap)
{
return $soap->saudeBucalFornecimentos()->orderBy('nome')->pluck('nome');
}
private static function getAtendimentoSaudeBucalConsultaTipo($soap)
{
return $soap->saudeBucalConsultaTipo()->first(['descricao']);
}
private static function getAtendimentoOdontograma($soap)
{
if (!$soap->is_atendimento_saude_bucal) {
return null;
}
$procedimentos = collect();
$odontograma = $soap->odontograma;
$arcadaSuperior = $odontograma->odontogramaArcadas()
->where('arcada_id', ArcadaDentaria::SUPERIOR)
->first();
$arcadaInferior = $odontograma->odontogramaArcadas()
->where('arcada_id', ArcadaDentaria::INFERIOR)
->first();
$getDentesData = function ($arcadaId, $dente) use ($arcadaSuperior, $arcadaInferior) {
$arcada = $arcadaId === ArcadaDentaria::SUPERIOR ? $arcadaSuperior : $arcadaInferior;
$odontogramaArcadaDente = $arcada->odontogramaArcadaDentes()
->where('dente_id', $dente->id)
->first();
return [
'numero' => $dente->numero,
'fragmentos' => [
'esquerda' => ['is_tratado' => $odontogramaArcadaDente->is_fragmento_esquerda_tratado],
'cima' => ['is_tratado' => $odontogramaArcadaDente->is_fragmento_cima_tratado],
'direita' => ['is_tratado' => $odontogramaArcadaDente->is_fragmento_direita_tratado],
'baixo' => ['is_tratado' => $odontogramaArcadaDente->is_fragmento_baixo_tratado],
'centro' => ['is_tratado' => $odontogramaArcadaDente->is_fragmento_centro_tratado],
],
'problemas_condicoes' => $odontogramaArcadaDente->problemasCondicoes()
->orderBy('nome')
->pluck('nome'),
];
};
$protesesTotais = collect();
if ($arcadaSuperior->possui_protese_total) {
$protesesTotais->push('Total superior');
}
if ($arcadaInferior->possui_protese_total) {
$protesesTotais->push('Total inferior');
}
$setProcedimentoData = function ($model, $local) use ($procedimentos) {
$data = (object) array_merge(self::getLogData($model), [
'local' => $local,
'procedimentos' => collect(),
'observacao' => $model->observacao,
]);
$model->atendimentoProcedimentos
->each(function ($atendimentoProcedimento) use ($data) {
$procedimento = $atendimentoProcedimento->atendimentoProcedimento->procedimento;
$codigo = MaskUtil::getProcedimentoMasked($procedimento->codigo);
$data->procedimentos->push([
'codigo' => $codigo,
'nome' => $procedimento->nome,
'quantidade' => $atendimentoProcedimento->atendimentoProcedimento->quantidade,
]);
});
$procedimentos->push($data);
};
$odontograma->odontogramaArcadas
->each(function ($odontogramaArcada) use ($setProcedimentoData) {
if ($odontogramaArcada->atendimentoProcedimentos->isNotEmpty()) {
$setProcedimentoData(
$odontogramaArcada,
$odontogramaArcada->arcada_id === ArcadaDentaria::SUPERIOR
? 'Arcada superior' : 'Arcada inferior'
);
}
$odontogramaArcada->odontogramaArcadaDentes()
->whereHas('atendimentoProcedimentos')
->get()
->each(fn($odontogramaArcadaDente) => $setProcedimentoData(
$odontogramaArcadaDente,
"Dente {$odontogramaArcadaDente->dente->numero}"
));
});
$odontograma->dentesSupranumerarios->each(fn($dente) => $setProcedimentoData($dente, $dente->local));
return [
'mostrar_dentes_deciduos' => false,
'possui_aparelho' => $odontograma->possui_aparelho,
'possui_contencao' => $odontograma->possui_contencao,
'proteses_totais' => $protesesTotais,
'possui_protese_total_superior' => $arcadaSuperior->possui_protese_total,
'possui_protese_total_inferior' => $arcadaInferior->possui_protese_total,
'proteses_totais' => $protesesTotais,
'arcadas' => [
'superior' => [
'dentes' => [
'permanentes' => Dente::where('arcada_id', ArcadaDentaria::SUPERIOR)
->where('is_deciduo', false)
->orderBy('ordem')
->get()
->map(fn($dente) => $getDentesData(ArcadaDentaria::SUPERIOR, $dente)),
'deciduos' => Dente::where('arcada_id', ArcadaDentaria::SUPERIOR)
->where('is_deciduo', true)
->orderBy('ordem')
->get()
->map(fn($dente) => $getDentesData(ArcadaDentaria::SUPERIOR, $dente)),
],
],
'inferior' => [
'dentes' => [
'permanentes' => Dente::where('arcada_id', ArcadaDentaria::INFERIOR)
->where('is_deciduo', false)
->orderBy('ordem')
->get()
->map(fn($dente) => $getDentesData(ArcadaDentaria::INFERIOR, $dente)),
'deciduos' => Dente::where('arcada_id', ArcadaDentaria::INFERIOR)
->where('is_deciduo', true)
->orderBy('ordem')
->get()
->map(fn($dente) => $getDentesData(ArcadaDentaria::INFERIOR, $dente)),
],
],
],
'procedimentos' => $procedimentos->sort()->values()
];
}
private static function getLogData($model)
{
return [
'tipo' => $model instanceof AtendimentoPreAtendimento ? 'pre-atendimento' : 'atendimento',
'data_hora' => $model->created_at,
'lotacao' => [
'ocupacao' => [
'codigo' => $model->createdLotacao->ocupacao->codigo,
'nome' => $model->createdLotacao->ocupacao->nome,
],
'profissional' => [
'nome' => $model->createdLotacao->usuario->cidadao->nome,
],
],
'centro_custo' => [
'setor' => [
'nome' => $model->createdCentroCusto->setor->nome,
],
],
];
}
private static function getAtendimentoProblemasCondicoes($soap)
{
$problemasCondicoes = $soap->problemasCondicoes()
->with([
'ciap:id,codigo,descricao',
'cid:id,codigo,nome',
'situacao:id,nome',
])
->get([
'ciap_id',
'cid_id',
'situacao_id',
'inicio',
'fim',
'observacao',
'resolvido_automaticamente',
]);
$problemasCondicoes->each(function ($problemaCondicao) {
$problemaCondicao->makeHidden(['ciap_id', 'cid_id']);
if (!is_null($problemaCondicao->ciap)) {
$problemaCondicao->ciap->makeHidden('id');
}
if (!is_null($problemaCondicao->cid)) {
$problemaCondicao->cid->makeHidden('id');
}
if (!is_null($problemaCondicao->situacao)) {
$problemaCondicao->situacao->makeHidden('id');
}
});
return $problemasCondicoes;
}
private static function getAlergias($soap)
{
return $soap->alergias
->map(fn($alergia) => [
'data' => Carbon::parse($alergia->created_at)->format('d/m/Y'),
'agente_substancia_especifica' => $alergia->alergia->agente_substancia_especifica,
'tipo' => $alergia->alergia->tipo,
'criticidade' => $alergia->criticidade,
'reacoes_observacoes' => $alergia->reacoes_observacoes,
]);
}
private static function getAtendimentoPuericulturaAlteracoesFenotipicas($soap)
{
$getResposta = function ($alteracaoId) use ($soap) {
$resposta = (object) ['is_presente' => null];
$alteracao = $soap->puericulturaAlteracoesFenotipicas()
->where('alteracao_fenotipica_id', $alteracaoId)
->first();
if (!is_null($alteracao) && $alteracao->is_presente !== $resposta->is_presente) {
$resposta->is_presente = $alteracao->is_presente;
}
return $resposta;
};
$presente = '';
$ausente = '';
PuericulturaAlteracaoFenotipica::orderBy('id')
->get()
->each(function ($alteracao) use ($getResposta, &$presente, &$ausente) {
$resposta = $getResposta($alteracao->id);
if ($resposta->is_presente === true) {
$presente .= $alteracao->descricao . ' | ';
} elseif ($resposta->is_presente === false) {
$ausente .= $alteracao->descricao . ' | ';
}
});
$presente = rtrim($presente, ' | ');
$ausente = rtrim($ausente, ' | ');
return [
'presente' => $presente,
'ausente' => $ausente,
];
}
private static function getAtendimentoPuericulturaFatoresRisco($soap)
{
$getResposta = function ($fatorId) use ($soap) {
$resposta = (object) ['is_presente' => null];
$fator = $soap->puericulturaFatoresRisco()
->where('fator_risco_id', $fatorId)
->first();
if (!is_null($fator) && $fator->is_presente !== $resposta->is_presente) {
$resposta->is_presente = $fator->is_presente;
}
return $resposta;
};
$presente = '';
$ausente = '';
PuericulturaFatorRisco::orderBy('id')
->get()
->each(function ($fator) use ($getResposta, &$presente, &$ausente) {
$resposta = $getResposta($fator->id);
if ($resposta->is_presente === true) {
$presente .= $fator->descricao . ' | ';
} elseif ($resposta->is_presente === false) {
$ausente .= $fator->descricao . ' | ';
}
});
$presente = rtrim($presente, ' | ');
$ausente = rtrim($ausente, ' | ');
return [
'presente' => $presente,
'ausente' => $ausente,
];
}
private static function getAtendimentoPuericulturaMarcosDesenvolvimento($soap)
{
$dataNascimento = $soap->atendimento->paciente->cidadao->data_nascimento;
if (is_null($dataNascimento)) {
return [];
}
$getResposta = function ($marcoId) use ($soap) {
$resposta = (object) [
'is_presente' => null,
'alcancado_com_anos' => null,
'alcancado_com_meses' => null,
];
$marco = $soap->puericulturaMarcosDesenvolvimento()
->where('marco_desenvolvimento_id', $marcoId)
->first();
if (!is_null($marco)) {
if ($marco->is_presente !== $resposta->is_presente) {
$resposta->is_presente = $marco->is_presente;
if (
$marco->is_presente
&& (!is_null($marco->alcancado_com_anos) || !is_null($marco->alcancado_com_meses))
) {
$resposta->alcancado_com_anos = $marco->alcancado_com_anos;
$resposta->alcancado_com_meses = $marco->alcancado_com_meses;
} else {
$resposta->alcancado_com_anos = null;
$resposta->alcancado_com_meses = null;
}
} else if (
$marco->is_presente
&& $resposta->is_presente
&& ($marco->alcancado_com_anos !== $resposta->alcancado_com_anos
|| $marco->alcancado_com_meses !== $resposta->alcancado_com_meses
)
) {
$resposta->alcancado_com_anos = $marco->alcancado_com_anos;
$resposta->alcancado_com_meses = $marco->alcancado_com_meses;
}
}
return $resposta;
};
$marcos = collect();
$idadeEmMeses = ceil($soap->created_at->diffInDays($dataNascimento) / 31);
PuericulturaMarcoDesenvolvimento::orderBy('faixa_etaria_dias_fim')
->get()
->each(function ($marco) use ($marcos, $idadeEmMeses, $getResposta) {
$faixaEtariaEmMeses = floor($marco->faixa_etaria_dias_fim / 31);
if ($faixaEtariaEmMeses <= $idadeEmMeses) {
$marcoFaixaEtaria = $marcos->where('descricao', $marco->faixa_etaria_descricao)->first();
if (is_null($marcoFaixaEtaria)) {
$marcoFaixaEtaria = (object) [
'descricao' => $marco->faixa_etaria_descricao,
'perguntas' => collect(),
'show_alcancado_com' => $marco->faixa_etaria_dias_fim > 15,
'meses_final' => $faixaEtariaEmMeses,
];
$marcos->push($marcoFaixaEtaria);
}
$resposta = $getResposta($marco->id);
$marcoFaixaEtaria->perguntas->push((object) [
'id' => $marco->id,
'descricao' => $marco->descricao,
'is_presente' => $resposta->is_presente,
'alcancado_com_anos' => $resposta->alcancado_com_anos,
'alcancado_com_meses' => $resposta->alcancado_com_meses,
]);
}
});
$presente = '';
$presenteComAtraso = '';
$ausente = '';
$marcos->each(function ($marco) use (&$presente, &$presenteComAtraso, &$ausente) {
$marco->perguntas->each(function ($pergunta) use ($marco, &$presente, &$presenteComAtraso, &$ausente) {
if (!is_null($pergunta->is_presente)) {
$meses = ($pergunta->alcancado_com_anos * 12) + $pergunta->alcancado_com_meses;
if (
$pergunta->is_presente
&& $marco->meses_final > 0
&& $meses > $marco->meses_final
) {
$presenteComAtraso .= $pergunta->descricao . ' | ';
} else {
if ($pergunta->is_presente === true) {
$presente .= $pergunta->descricao . ' | ';
} elseif ($pergunta->is_presente === false) {
$ausente .= $pergunta->descricao . ' | ';
}
}
}
});
});
$presente = rtrim($presente, ' | ');
$presenteComAtraso = rtrim($presenteComAtraso, ' | ');
$ausente = rtrim($ausente, ' | ');
return [
'presente' => $presente,
'presente_com_atraso' => $presenteComAtraso,
'ausente' => $ausente,
];
}
private static function getAtendimentoRacionalidadeSaude($soap)
{
return $soap->racionalidadeSaude()->first(['descricao']);
}
private static function getAtendimentoEncaminhamentos($soap)
{
$encaminhamentos = $soap->encaminhamentos()
->with([
'tipo:id,descricao',
'servicoEspecializadoEspecialidade:id,nome,ocupacao_id',
'servicoEspecializadoEspecialidade.ocupacao:id,codigo,nome',
'servicoEspecializadoCid:id,codigo,nome',
'servicoEspecializadoClassificacaoRisco:id,nome',
])
->get([
'tipo_id',
'servico_especializado_especialidade_id',
'servico_especializado_complemento',
'servico_especializado_cid_id',
'servico_especializado_classificacao_risco_id',
'servico_especializado_motivo',
'servico_especializado_observacao',
'intersetorial_infraestrutura_id',
]);
$encaminhamentos->each(function ($encaminhamento) {
$encaminhamento->makeHidden([
'servico_especializado_especialidade_id',
'servico_especializado_classificacao_risco_id',
'intersetorial_infraestrutura_id',
]);
if (!is_null($encaminhamento->servicoEspecializadoEspecialidade)) {
$encaminhamento->servicoEspecializadoEspecialidade->makeHidden(['id', 'ocupacao_id']);
$encaminhamento->servicoEspecializadoEspecialidade->ocupacao->makeHidden('id');
}
if (!is_null($encaminhamento->servicoEspecializadoCid)) {
$encaminhamento->servicoEspecializadoCid->makeHidden('id');
}
if (!is_null($encaminhamento->servicoEspecializadoClassificacaoRisco)) {
$encaminhamento->servicoEspecializadoClassificacaoRisco->makeHidden('id');
}
if (is_null($encaminhamento->intersetorial_infraestrutura_id)) {
$encaminhamento->intersetorial_infraestrutura = null;
} else {
$intersetorialInfraestrutura = $encaminhamento->intersetorialInfraestrutura()
->setEagerLoads([])
->first(['id', 'nome', 'principal', 'unidade_id']);
$encaminhamento->intersetorial_infraestrutura = (object) [
'nome' => $intersetorialInfraestrutura->nome,
'unidade' => (object) [
'nome_fantasia' => $intersetorialInfraestrutura->unidade()
->first('nome_fantasia')
->nome_fantasia
]
];
}
});
return $encaminhamentos;
}
private static function getAtendimentoOrientacoes($soap)
{
return $soap->orientacoes()->get(['descricao']);
}
private static function getAtendimentoSolicitacoesExames($soap)
{
$solicitacoesExames = collect();
$soap->solicitacoesExames->each(function ($solicitacao) use ($solicitacoesExames) {
$itens = $solicitacao->itens()
->get()
->map(fn ($item) => [
'exame' => [
'codigo' => MaskUtil::getProcedimentoMasked($item->exame->codigo),
'nome' => $item->exame->nome,
],
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$solicitacoesExames->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : null,
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : null,
'classificacao_risco' => $solicitacao->classificacaoRisco->descricao_encaminhamento ?? null,
'justificativa' => $solicitacao->justificativa,
'observacao' => $solicitacao->observacao,
'itens' => $itens,
]);
}
});
AtendimentoSoapExameSolicitado::where('soap_id', $soap->id)
->get()
->map(function ($solicitacao) use ($solicitacoesExames) {
$itens = $solicitacao->examesSolicitados()
->get()
->map(fn ($item) => [
'exame' => [
'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento),
'nome' => $item->descricao,
],
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$solicitacoesExames->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : null,
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : null,
'classificacao' => null,
'justificativa' => $solicitacao->justificativa,
'observacao' => $solicitacao->observacao,
'itens' => $itens,
]);
}
});
AtendimentoSoapTriagemNeonatalSolicitado::where('soap_id', $soap->id)
->get()
->map(function ($solicitacao) use ($solicitacoesExames) {
$itens = $solicitacao->triagensNeonatalSolicitados()
->get()
->map(fn ($item) => [
'exame' => [
'codigo' => MaskUtil::getProcedimentoMasked($item->codigo_procedimento),
'nome' => $item->descricao,
],
]);
if ($itens->isNotEmpty()) {
$cid = $solicitacao->cid_id ? Cid::where('id', $solicitacao->cid_id)->first() : null;
$ciap = $solicitacao->ciap_id ? Ciap::where('id', $solicitacao->ciap_id)->first() : null;
$solicitacoesExames->push([
'data' => $solicitacao->created_at->format('d/m/Y'),
'cid' => $cid ? $cid->codigo .' - '. $cid->nome : null,
'ciap' => $ciap ? $ciap->codigo .' - '. $ciap->descricao : null,
'classificacao' => null,
'justificativa' => $solicitacao->justificativa,
'observacao' => $solicitacao->observacao,
'itens' => $itens,
]);
}
});
return $solicitacoesExames;
}
private static function getAtendimentoProcedimentosAdministrativos($soap)
{
return $soap->procedimentosAdministrativos()
->get(['atendimento_procedimento_id'])
->map(function ($procedimentoAdministrativo) {
$atendimentoProcedimento = $procedimentoAdministrativo->atendimentoProcedimento()->first([
'procedimento_id',
'quantidade',
'automatico',
'cid_id',
]);
if (!$atendimentoProcedimento) {
return [];
}
return (object) [
'procedimento' => self::getProcedimento($atendimentoProcedimento->procedimento_id),
'quantidade' => $atendimentoProcedimento->quantidade,
'automatico' => $atendimentoProcedimento->automatico,
'cid' => self::getCid($atendimentoProcedimento->cid_id),
];
});
}
private static function getAtendimentoProcedimentosClinicos($soap)
{
return $soap->procedimentosClinicos()
->get([
'atendimento_procedimento_id',
'observacao',
])
->map(function ($procedimentoClinico) {
$atendimentoProcedimento = $procedimentoClinico->atendimentoProcedimento()->first([
'procedimento_id',
'cid_id',
'quantidade',
'automatico',
]);
return (object) [
'procedimento' => self::getProcedimento($atendimentoProcedimento->procedimento_id),
'cid' => self::getCid($atendimentoProcedimento->cid_id),
'quantidade' => $atendimentoProcedimento->quantidade,
'automatico' => $atendimentoProcedimento->automatico,
'observacao' => $procedimentoClinico->observacao,
];
});
}
private static function getProcedimento($procedimentoId)
{
return DB::table('sigtap.procedimento')
->where('id', $procedimentoId)
->select(
'codigo',
'nome'
)
->first();
}
private static function getCid($cidId)
{
return DB::table('sigtap.cid')
->where('id', $cidId)
->select(
'codigo',
'nome'
)
->first();
}
private static function getAtendimentoTestesRapidos($soap)
{
return DB::table('ambulatorio_atendimento_soap_teste_rapido as pivot')
->join('ambulatorio_atendimento_soap as soap', 'soap.id', 'pivot.soap_id')
->join('ambulatorio_teste_rapido as teste_rapido', 'teste_rapido.id', 'pivot.teste_rapido_id')
->where('soap.is_rascunho', false)
->where('soap.atendimento_id', $soap->atendimento_id)
->select(DB::raw("
teste_rapido.id,
teste_rapido.nome,
pivot.resultado
"))
->orderBy('nome')
->get();
}
private static function getAtendimentoCondutas($soap)
{
return $soap->condutas()->orderBy('descricao')->pluck('descricao');
}
private static function getAtendimentoCompartilhamentosCuidado($soap)
{
$compartilhamentosCuidado = $soap->compartilhamentosCuidado()
->with([
'especialidade:id,nome,ocupacao_id',
'especialidade.ocupacao:id,codigo,nome',
'ciap:id,codigo,descricao',
'cid:id,codigo,nome',
'classificacaoRisco:id,nome',
])
->get([
'especialidade_id',
'usuario_id',
'ciap_id',
'cid_id',
'classificacao_risco_id',
'discussao_caso_clinico',
]);
$compartilhamentosCuidado->each(function ($compartilhamentoCuidado) {
$compartilhamentoCuidado->usuario = (object) [
'nome' => $compartilhamentoCuidado->usuario()
->setEagerLoads([])
->first(['cidadao_id'])
->cidadao()
->setEagerLoads([])
->first(['nome'])
->nome,
];
$compartilhamentoCuidado->makeHidden([
'especialidade_id',
'usuario_id',
'ciap_id',
'cid_id',
'classificacao_risco_id',
]);
if (!is_null($compartilhamentoCuidado->especialidade)) {
$compartilhamentoCuidado->especialidade->makeHidden('id');
$compartilhamentoCuidado->especialidade->ocupacao->makeHidden('id');
}
if (!is_null($compartilhamentoCuidado->ciap)) {
$compartilhamentoCuidado->ciap->makeHidden('id');
}
if (!is_null($compartilhamentoCuidado->cid)) {
$compartilhamentoCuidado->cid->makeHidden('id');
}
$compartilhamentoCuidado->classificacaoRisco->makeHidden('id');
});
return $compartilhamentosCuidado;
}
private static function getAtendimentoAntecedente($soap)
{
$antecedente = $soap->antecedente()
->with([
'problemasCondicoes:antecedente_id,ciap_id,cid_id,situacao_id,inicio,fim,observacao',
'problemasCondicoes.ciap:id,codigo,descricao',
'problemasCondicoes.cid:id,codigo,nome',
'problemasCondicoes.situacao:id,nome',
'cirurgiasInternacoes:antecedente_id,descricao,realizada_em,observacao',
'problemasFamiliares:antecedente_id,ciap_id,observacao',
'problemasFamiliares.ciap:id,codigo,descricao',
])
->first([
'id',
'descricao',
'gestas_previas',
'abortos',
'desfecho_gestacao_aconteceu_menos_um_ano',
'partos_realizados',
'partos_vaginais',
'partos_cesareas',
'partos_domiciliares',
'nascidos_vivos',
'nascidos_mortos',
'recem_nascidos_com_menos2500_gramas',
'recem_nascidos_com_mais4500_gramas',
'nascidos_vivos_vivem',
'nascidos_vivos_mortos_primeira_semana',
'nascidos_vivos_mortos_depois_primeira_semana',
]);
if (!is_null($antecedente)) {
$antecedente->makeHidden('id');
$antecedente->problemasCondicoes->each(function ($problemaCondicao) {
$problemaCondicao->makeHidden([
'antecedente_id',
'ciap_id',
'cid_id',
'situacao_id',
]);
if (!is_null($problemaCondicao->ciap)) {
$problemaCondicao->ciap->makeHidden('id');
}
if (!is_null($problemaCondicao->cid)) {
$problemaCondicao->cid->makeHidden('id');
}
$problemaCondicao->situacao->makeHidden('id');
});
$antecedente->cirurgiasInternacoes->makeHidden('antecedente_id');
$antecedente->problemasFamiliares->each(function ($problemaFamiliar) {
$problemaFamiliar->makeHidden([
'antecedente_id',
'ciap_id',
]);
$problemaFamiliar->ciap->makeHidden('id');
});
}
return $antecedente;
}
private static function getAtendimentoMotivos($soap)
{
$motivos = $soap->motivos()
->with('ciap:id,codigo,descricao')
->with('cid:id,codigo,nome')
->get(['ciap_id','cid_id','observacao']);
$motivos->each(function ($motivo) {
$motivo->makeHidden('ciap_id', 'cid_id');
if ($motivo->ciap) {
$motivo->ciap->makeHidden('id');
}
if ($motivo->cid) {
$motivo->cid->makeHidden('id');
}
});
return $motivos;
}
private static function trataData($soap)
{
$hora = null;
if($soap->atendimento->agendamento_id){
$dataCriacao = Carbon::parse($soap->atendimento->agendamento->jornada->data);
$hora = Carbon::parse($soap->atendimento->agendamento->horario);
}
if($soap->atendimento->demanda_espontanea_id){
$dataCriacao = Carbon::parse($soap->atendimento->demandaEspontanea->data);
}
$meses = [
1 => 'janeiro',
2 => 'fevereiro',
3 => 'março',
4 => 'abril',
5 => 'maio',
6 => 'junho',
7 => 'julho',
8 => 'agosto',
9 => 'setembro',
10 => 'outubro',
11 => 'novembro',
12 => 'dezembro'
];
$dia = $dataCriacao->format('d');
$mes = $meses[intval($dataCriacao->format('m'))];
$ano = $dataCriacao->format('Y');
if ($hora) {
$horaFormatada = $hora->format('H:i');
return "{$dia} de {$mes} de {$ano} às {$horaFormatada}";
}
return "{$dia} de {$mes} de {$ano}";
}
private static function getAtendimentoObjetivoAntropometria($soap)
{
$antropometria = $soap->objetivoAntropometria()
->with('atendimentoAntropometria:id,peso,altura,perimetro_cefalico,circunferencia_abdominal,perimetro_panturrilha,comprimento_pe_direito,largura_pe_direito,circunferencia_pe_direito,comprimento_pe_esquerdo,largura_pe_esquerdo,circunferencia_pe_esquerdo')
->first(['atendimento_antropometria_id']);
if (!is_null($antropometria)) {
$antropometria->atendimentoAntropometria->imc = !is_null($antropometria->atendimentoAntropometria->peso)
&& !is_null($antropometria->atendimentoAntropometria->altura)
? ImcService::calculate(
UnidadeMedida::QUILOGRAMAS,
$antropometria->atendimentoAntropometria->peso,
UnidadeMedida::CENTIMETROS,
$antropometria->atendimentoAntropometria->altura
)
: null;
$antropometria->atendimentoAntropometria->makeHidden('id');
return $antropometria->atendimentoAntropometria;
}
return $antropometria;
}
private static function getAtendimentoObjetivoSinalVital($soap)
{
$sinalVital = $soap->objetivoSinalVital()
->with('atendimentoSinalVital:id,pressao_arterial,frequencia_respiratoria,frequencia_cardiaca,temperatura,saturacao_o2')
->first(['atendimento_sinal_vital_id']);
if (!is_null($sinalVital)) {
$sinalVital->atendimentoSinalVital->makeHidden('id');
return $sinalVital->atendimentoSinalVital;
}
return $sinalVital;
}
private static function getAtendimentoDeclaracoesComparecimento($soap)
{
$declaracoesComparecimento = $soap->declaracoesComparecimento()
->with('turno:id,nome')
->get([
'nome_acompanhante',
'turno_id',
'entrada',
'saida',
]);
$declaracoesComparecimento->each(function ($declaracaoComparecimento) {
$declaracaoComparecimento->makeHidden('turno_id');
if (!is_null($declaracaoComparecimento->turno)) {
$declaracaoComparecimento->turno->makeHidden('id');
}
});
return $declaracoesComparecimento;
}
private static function getAtendimentoObjetivoGlicemiaCapilar($soap)
{
$glicemiaCapilar = $soap->objetivoGlicemiaCapilar()
->with([
'atendimentoGlicemiaCapilar:id,momento_coleta_id,valor',
'atendimentoGlicemiaCapilar.momentoColeta:id,nome',
])
->first(['atendimento_glicemia_capilar_id']);
if (!is_null($glicemiaCapilar)) {
$glicemiaCapilar->atendimentoGlicemiaCapilar->makeHidden('momento_coleta_id');
$glicemiaCapilar->atendimentoGlicemiaCapilar->momentoColeta->makeHidden('id');
return $glicemiaCapilar->atendimentoGlicemiaCapilar;
}
return $glicemiaCapilar;
}
private static function getAtendimentoObjetivoTria($soap)
{
$triaHistorio = $soap->triaHistorio()
->where('soap_id', $soap->id)
->first([
'alimentos_acabaram',
'comeu_alguns_alimentos',
'data_atualizacao_tria',
]);
if (is_null($triaHistorio)) {
return null;
}
return [
'alimentos_acabaram' => $triaHistorio->alimentos_acabaram,
'comeu_alguns_alimentos' => $triaHistorio->comeu_alguns_alimentos,
'data_atualizacao_tria' => $triaHistorio->data_atualizacao_tria
? $triaHistorio->data_atualizacao_tria->format('d/m/Y')
: null,
];
}
private static function getAtendimentoPrescricoesMedicamentos($soap)
{
return $soap->prescricoesMedicamentos->map(fn($prescricao) => [
'medicamentos' => $prescricao->itens()
->with([
'turno:id,nome',
'unidadeMedida:id,nome',
'intervaloMedidaTempo:id,nome',
'duracaoMedidaTempo:id,nome',
])
->get([
'descricao',
'justificativa',
'material_id',
'dose',
'is_dose_unica',
'is_uso_continuo',
'frequencia_vezes',
'turno_id',
'unidade_medida_id',
'intervalo',
'intervalo_medida_tempo_id',
'inicio',
'duracao',
'duracao_medida_tempo_id',
'recomendacoes',
'tratamento_interrompido_em',
'tratamento_interrompido_justificativa',
])
->map(function ($item) {
$material = $item->material()
->with([
'apresentacao:id,nome',
'apresentacaoUnidadeMedida:id,nome',
'viaAdministracao:id,nome',
])
->first([
'descricao',
'apresentacao_id',
'quantidade',
'apresentacao_unidade_medida_id',
'via_administracao_id',
]);
return (object) [
'is_manual' => $item->is_manual,
'descricao' => $item->descricao,
'justificativa' => $item->justificativa ?? null,
'material' => is_null($material) ? null : [
'descricao' => $material->descricao,
'via_administracao' => [
'nome' => $material->viaAdministracao->nome ?? null
]
],
'is_dose_unica' => $item->is_dose_unica,
'is_uso_continuo' => $item->is_uso_continuo,
'posologia' => $item->posologia,
'inicio' => is_null($item->inicio) ? null : $item->inicio->format('d/m/Y'),
'duracao' => $item->duracao,
'duracao_medida_tempo' => is_null($item->duracaoMedidaTempo) ? null : [
'nome' => $item->duracaoMedidaTempo->nome,
],
'conclusao' => is_null($item->conclusao) ? null : $item->conclusao->format('d/m/Y'),
'recomendacoes' => $item->recomendacoes,
'is_tratamento_concluido' => $item->is_tratamento_concluido,
'is_tratamento_interrompido' => $item->is_tratamento_interrompido,
'tratamento_interrompido_em' => is_null($item->tratamento_interrompido_em)
? null : $item->tratamento_interrompido_em->format('d/m/Y'),
'tratamento_interrompido_justificativa' => $item->tratamento_interrompido_justificativa,
];
})
]);
}
private static function getAtendimentoMarcadorConsumoAlimentar($soap)
{
$marcadorConsumoAlimentar = MarcadorConsumoAlimentar::where('soap_id', $soap->id)->first(['id']);
$marcador = [];
if ($marcadorConsumoAlimentar) {
$marcador = MarcadorConsumoAlimentarPerguntaResposta::where('marcador_consumo_alimentar_id', $marcadorConsumoAlimentar->id)
->get()
->map(fn($modulo) => [
'pergunta_id' => $modulo->pergunta_id,
'resposta_id' => $modulo->resposta_id,
'pergunta' => $modulo->pergunta->descricao,
'resposta' => $modulo->resposta->descricao,
]);
$marcador = $marcador->groupBy('pergunta');
}
return $marcador;
}
private static function getAtendimentoResultadosExames($soap)
{
$resultadosExames = $soap->resultadosExames()
->with('resultadoTipo:id,nome')
->get([
'exame_id',
'solicitado_em',
'realizado_em',
'resultado_em',
'resultado',
'percentual',
'idade_gestacional_semanas_eco',
'idade_gestacional_dias_eco',
'dpp_eco',
'resultado_tipo_id',
]);
$resultados = collect();
$resultadosExames->each(function ($resultadoExame) use (&$resultados) {
$exame = self::getExame($resultadoExame->exame_id);
$data = (object)[
'solicitado_em' => $resultadoExame->solicitado_em
? $resultadoExame->solicitado_em->format('d/m/Y') : null,
'realizado_em' => $resultadoExame->realizado_em
? $resultadoExame->realizado_em->format('d/m/Y') : null,
'resultado_em' => $resultadoExame->resultado_em
? $resultadoExame->resultado_em->format('d/m/Y') : null,
'resultado' => $resultadoExame->resultado,
'exame' => [
'nome' => $exame->nome,
'codigo' => $exame->codigo,
],
];
$resultados->push($data);
});
$examesAvaliados = self::getExamesAvaliados($soap);
$triagemNeonatal = self::getTriagensNeonatal($soap);
$resultadoExames = [];
for ($i = 0; $i < count($examesAvaliados); $i++) {
$resultadoExames[] = $examesAvaliados[$i];
}
for ($j = 0; $j < count($resultados); $j++) {
$resultadoExames[] = $resultados[$j];
}
for ($j = 0; $j < count($triagemNeonatal); $j++) {
$resultadoExames[] = $triagemNeonatal[$j];
}
return $resultadoExames;
}
private static function getExame($exameId)
{
return DB::table('parametrizacao_exame')
->where('id', $exameId)
->select(
'codigo',
'nome'
)
->first();
}
private static function getExamesAvaliados($soap)
{
$resultadosExames = $soap->examesAvaliados;
$procedimentos = collect();
$resultadosExames->each(function ($resultadoExame) use (&$procedimentos) {
$data = (object)[
'solicitado_em' => $resultadoExame->soapExameAvaliado->solicitado_em
? Carbon::parse($resultadoExame->soapExameAvaliado->solicitado_em)->format('d/m/Y') : null,
'realizado_em' => $resultadoExame->soapExameAvaliado->realizado_em
? Carbon::parse($resultadoExame->soapExameAvaliado->realizado_em)->format('d/m/Y') : null,
'resultado_em' => $resultadoExame->soapExameAvaliado->resultado_em
? Carbon::parse($resultadoExame->soapExameAvaliado->resultado_em)->format('d/m/Y') : null,
'resultado' => $resultadoExame->soapExameAvaliado->resultado,
'exame' => [
'nome' => $resultadoExame->descricao,
'codigo' => $resultadoExame->codigo_procedimento,
],
];
$procedimentos->push($data);
});
return $procedimentos;
}
private static function getTriagensNeonatal($soap)
{
$resultadosExames = $soap->triagensNeonatal;
$procedimentos = collect();
$resultadosExames->each(function ($resultadoExame) use (&$procedimentos) {
$data = (object)[
'solicitado_em' => $resultadoExame->soapTriagemNeonatal->solicitado_em
? Carbon::parse($resultadoExame->soapTriagemNeonatal->solicitado_em)->format('d/m/Y') : null,
'realizado_em' => $resultadoExame->soapTriagemNeonatal->realizado_em
? Carbon::parse($resultadoExame->soapTriagemNeonatal->realizado_em)->format('d/m/Y') : null,
'resultado_em' => $resultadoExame->soapTriagemNeonatal->resultado_em
? Carbon::parse($resultadoExame->soapTriagemNeonatal->resultado_em)->format('d/m/Y') : null,
'resultado' => $resultadoExame->soapTriagemNeonatal->resultado,
'exame' => [
'nome' => $resultadoExame->descricao,
'codigo' => $resultadoExame->codigo_procedimento,
],
];
$procedimentos->push($data);
});
return $procedimentos;
}
}