Files
rkm-conectasus-ci-sandbox/api/app/Services/Integracao/Esus/GerenciamentoEnvio/Ficha/FichaVacinacao.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

273 lines
12 KiB
PHP

<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\Exportacao\EstrategiaVacinacao;
use App\Enums\Imunizacao\Estrategia;
use App\Enums\Imunizacao\ParametrizacaoDescricaoVacina;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
use App\Models\Cadastro\Vacina;
use App\Models\Geral\Turno;
use App\Models\Imunizacao\Dose;
use App\Models\Imunizacao\Estrategia as ImunizacaoEstrategia;
use App\Models\Imunizacao\GrupoAtendimento;
use App\Models\Imunizacao\Parametrizacao;
use App\Models\Sigtap\Ocupacao;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
class FichaVacinacao extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichavacinacaomaster');
}
public function __invoke()
{
$path = '//ns4:fichaVacinacaoMasterTransport';
$this->setCadastro($path);
$this->setVacinacoes($path);
return $this->ficha;
}
private function setCadastro($fichaVacinacaoMasterTransportPath)
{
$headerTransportPath = "{$fichaVacinacaoMasterTransportPath}/headerTransport";
$ocupacao = $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
'profissionalNome' => $this->inconsistenciaModel->fichaVacinacao->usuario->cidadao->nome,
'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$headerTransportPath}/profissionalCNS")),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$headerTransportPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$headerTransportPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['Data da aplicação', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
['CNS', fn () => $this->inconsistencias->headerTransport->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->ine],
]);
$this->ficha->cadastro = (object) compact('campos', 'inconsistencias');
}
private function setVacinacoes($fichaVacinacaoMasterTransportPath)
{
$path = "{$fichaVacinacaoMasterTransportPath}/vacinacoes";
$vacinacoes = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$vacinacaoModel = $this->inconsistenciaModel->fichaVacinacaoPacientes()
->wherePivot('posicao', $posicao)
->first();
$inconsistencias = $this->inconsistencias->vacinacoes->{$posicao} ?? [];
$vacinacao = (object) [
'campos' => (object) [
'turno' => $this->getFirstNodeValue('turno', $context)
? Turno::find($this->getFirstNodeValue('turno', $context))->nome
: null,
'numProntuario' => $this->getFirstNodeValue('numProntuario', $context),
'nomeCidadao' => $vacinacaoModel->paciente->cidadao->nome,
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $context)),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $context)),
'dtNascimento' => $this->getDateString($this->getFirstNodeValue('dtNascimento', $context)),
'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $context)),
'localAtendimento' => $this->getFirstNodeValue('localAtendimento', $context)
? LocalAtendimento::find($this->getFirstNodeValue('localAtendimento', $context))->descricao
: null,
'viajante' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('viajante', $context))),
'comunicanteHanseniase' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('comunicanteHanseniase', $context))),
'gestante' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('gestante', $context))),
'puerpera' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('puerpera', $context))),
'dataHoraInicialAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraInicialAtendimento', $context)),
'dataHoraFinalAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraFinalAtendimento', $context)),
],
'inconsistencias' => $this->getInconsistencias([
['Turno', fn () => $inconsistencias->turno],
['Prontuário', fn () => $inconsistencias->numProntuario],
['CNS', fn () => $inconsistencias->cnsCidadao],
['CPF', fn () => $inconsistencias->cpfCidadao],
['Data de nascimento', fn () => $inconsistencias->dtNascimento],
['Sexo', fn () => $inconsistencias->sexo],
['Local de atendimento', fn () => $inconsistencias->localAtendimento],
['Viajante', fn () => $inconsistencias->viajante],
['Comunicante hanseníase', fn () => $inconsistencias->comunicanteHanseniase],
['Gestante', fn () => $inconsistencias->gestante],
['Puérpera', fn () => $inconsistencias->puerpera],
['Data/hora inicial do atendimento', fn () => $inconsistencias->dataHoraInicialAtendimento],
['Data/hora final do atendimento', fn () => $inconsistencias->dataHoraFinalAtendimento],
]),
];
$this->setVacinas($vacinacao, $context, $inconsistencias);
$vacinacoes[] = $vacinacao;
}
$this->ficha->vacinacoes = (object) [
'lista' => $vacinacoes,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->vacinacoes,
]),
];
}
private function setVacinas($vacinacao, $atendimentoContext, $inconsistencias)
{
$vacinas = [];
foreach ($this->domx->query('vacinas', $atendimentoContext) as $i => $context) {
$inconsistencias = $inconsistencias->vacinas->{$i + 1} ?? [];
$vacinas[] = [
'campos' => (object) [
'imunobiologico' => $this->getFirstNodeValue('imunobiologico', $context)
? $this->getDescricaoVacina(
Vacina::where('codigo', $this->getFirstNodeValue('imunobiologico', $context))->first())
: null,
'estrategiaVacinacao' => $this->getFirstNodeValue('estrategiaVacinacao', $context)
? $this->getEstrategia($this->getFirstNodeValue('estrategiaVacinacao', $context))
: null,
'dose' => $this->getFirstNodeValue('dose', $context)
? Dose::where('codigo_esus', $this->getFirstNodeValue('dose', $context))->first()->nome
: null,
'lote' => $this->getFirstNodeValue('lote', $context),
'fabricante' => $this->getFirstNodeValue('fabricante', $context),
'grupoAtendimento' => $this->getFirstNodeValue('grupoAtendimento', $context)
? GrupoAtendimento::where('codigo_esus', $this->getFirstNodeValue('grupoAtendimento', $context))
->first()->nome
: null,
'stRegistroAnterior' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('stRegistroAnterior', $context))),
'dataRegistroAnterior' => $this->getDateString($this->getFirstNodeValue('dataRegistroAnterior', $context)),
'stAplicadoExterior' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('stAplicadoExterior', $context))),
],
'inconsistencias' => $this->getInconsistencias([
['Imunobiológico', fn () => $inconsistencias->imunobiologico],
['Estratégia', fn () => $inconsistencias->estrategiaVacinacao],
['Dose', fn () => $inconsistencias->dose],
['Lote', fn () => $inconsistencias->lote],
['Fabricante', fn () => $inconsistencias->fabricante],
['Grupo de atendimento', fn () => $inconsistencias->grupoAtendimento],
['Registro Anterior', fn () => $inconsistencias->stRegistroAnterior],
['Data do registro anterior', fn () => $inconsistencias->dataRegistroAnterior],
['Aplicado exterior', fn () => $inconsistencias->stAplicadoExterior],
]),
];
}
$vacinacao->campos->vacinas = (object) [
'lista' => $vacinas,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->vacinas,
]),
];
}
private function getDescricaoVacina($vacina)
{
switch (Parametrizacao::first()->parametrizacao_descricao_vacina_id ?? null) {
case ParametrizacaoDescricaoVacina::DESCRICAO: {
return $vacina->nome;
}
case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: {
return $vacina->abreviacao;
}
case ParametrizacaoDescricaoVacina::SIGLA: {
return $vacina->sigla;
}
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: {
return "$vacina->sigla - $vacina->nome";
}
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: {
return "$vacina->sigla - $vacina->abreviacao";
}
case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: {
return "$vacina->abreviacao - $vacina->nome";
}
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: {
return "$vacina->sigla - $vacina->abreviacao - $vacina->nome";
}
default: {
return $vacina->nome;
}
}
}
private function getEstrategia($exportacaoEstrategiaId)
{
$estrategiaId = null;
switch ($exportacaoEstrategiaId) {
case EstrategiaVacinacao::PESQUISA: {
$exportacaoEstrategiaId = Estrategia::PESQUISA;
break;
}
case EstrategiaVacinacao::PRE_EXPOSICAO: {
$exportacaoEstrategiaId = Estrategia::PRE_EXPOSICAO;
break;
}
case EstrategiaVacinacao::POS_EXPOSICAO: {
$exportacaoEstrategiaId = Estrategia::POS_EXPOSICAO;
break;
}
case EstrategiaVacinacao::REEXPOSICAO: {
$exportacaoEstrategiaId = Estrategia::REEXPOSICAO;
break;
}
default: {
$estrategiaId = $exportacaoEstrategiaId;
}
}
return ImunizacaoEstrategia::find($estrategiaId)->nome;
}
}