273 lines
12 KiB
PHP
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;
|
|
}
|
|
}
|