init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,148 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\Exportacao\Sexo as ExportacaoSexoEnum;
use App\Enums\Cadastro\SujeitoAtencao\Sexo as SexoEnum;
use App\Models\Cadastro\SujeitoAtencao\Sexo;
use App\Utils\DataUtil;
use Carbon\Carbon;
use DOMDocument;
use DOMXPath;
use Exception;
use stdClass;
abstract class Ficha
{
protected $domx;
protected $inconsistenciaModel;
protected $inconsistencias;
protected $ficha;
public function __construct($xmlEnvio, $inconsistenciaModel)
{
$this->setDomx($xmlEnvio);
$this->inconsistenciaModel = $inconsistenciaModel;
$this->inconsistencias = json_decode($inconsistenciaModel->inconsistencia);
$this->ficha = new stdClass;
}
private function setDomx($xml)
{
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadXML($xml);
$this->domx = new DOMXPath($dom);
}
protected function getFirstNodeValue($xmlPath, $context = null)
{
return $this->domx->query($xmlPath, $context)[0]->nodeValue ?? null;
}
protected function getDateString($date)
{
if (is_null($date)) {
return null;
}
return Carbon::createFromTimestamp($date / 1000)->format('d/m/Y');
}
protected function getDateTimeString($date)
{
if (is_null($date)) {
return null;
}
return Carbon::createFromTimestamp($date / 1000)->format('d/m/Y H:i:s');
}
protected function getSimNaoNaoInformado($value)
{
return $value ? DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($value)) : 'Não informado';
}
protected function getSexo($exportacaoSexoId)
{
$sexoId = null;
if ($exportacaoSexoId == ExportacaoSexoEnum::MASCULINO) {
$sexoId = SexoEnum::MASCULINO;
}
else if ($exportacaoSexoId == ExportacaoSexoEnum::FEMININO) {
$sexoId = SexoEnum::FEMININO;
}
else if ($exportacaoSexoId == ExportacaoSexoEnum::INDETERMINADO) {
$sexoId = SexoEnum::INDETERMINADO;
}
else {
return null;
}
return Sexo::find($sexoId)->descricao;
}
protected function getInconsistencias($callbacks)
{
$inconsistencias = [];
foreach ($callbacks as $item) {
$prefix = null;
$inconsistencia = null;
if (is_array($item)) {
$prefix = $item[0];
$inconsistencia = $this->getSafeString($item[1]);
}
else if (is_callable($item)) {
$inconsistencia = $this->getSafeString($item);
}
if (is_null($inconsistencia)) {
continue;
}
if (!is_null($prefix)) {
$inconsistencias[] = "{$prefix}: {$inconsistencia}";
}
else {
$inconsistencias[] = $inconsistencia;
}
}
return $inconsistencias;
}
private function getSafeString($callback)
{
try {
$value = $callback();
if (is_string($value)) {
return $value;
}
}
catch (Exception $_) {
return null;
}
return null;
}
}

View File

@@ -0,0 +1,322 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarCondicaoAvaliada;
use App\Models\AtencaoBasica\AtendimentoDomiciliar\CondutaDesfecho;
use App\Models\AtencaoBasica\AtendimentoIndividual\ModalidadeAtencaoDomiciliar;
use App\Models\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
use App\Models\Geral\Ciap;
use App\Models\Geral\Turno;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use stdClass;
class FichaAtendimentoDomiciliar extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaatendimentodomiciliarmaster');
}
public function __invoke()
{
$path = '//ns4:fichaAtendimentoDomiciliarMasterTransport';
$this->setProfissionalResponsavel($path);
$this->setProfissionalAuxiliar($path);
$this->setAtendimentos($path);
return $this->ficha;
}
private function setProfissionalResponsavel($fichaAtendimentoDomiciliarMasterTransportPath)
{
$headerTransportPath = "{$fichaAtendimentoDomiciliarMasterTransportPath}/headerTransport";
$lotacaoFormPrincipalPath = "{$headerTransportPath}/lotacaoFormPrincipal";
$ocupacao = $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
'profissionalNome' => $this->inconsistenciaModel->atendimentoDomiciliar->usuario->cidadao->nome,
'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/profissionalCNS")),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->ine],
]);
$this->ficha->profissional_responsavel = (object) compact('campos', 'inconsistencias');
}
private function setProfissionalAuxiliar($fichaAtendimentoDomiciliarMasterTransportPath)
{
$headerTransportPath = "{$fichaAtendimentoDomiciliarMasterTransportPath}/headerTransport";
$lotacaoFormAtendimentoCompartilhadoPath = "{$headerTransportPath}/lotacaoFormAtendimentoCompartilhado";
$ocupacao = $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'profissionalNome' => $this->inconsistenciaModel->atendimentoDomiciliar->usuarioAuxiliar->cidadao->nome ?? null,
'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/profissionalCNS")),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->ine],
]);
$this->ficha->profissional_auxiliar = (object) compact('campos', 'inconsistencias');
}
private function setAtendimentos($fichaAtendimentoDomiciliarMasterTransportPath)
{
$path = "{$fichaAtendimentoDomiciliarMasterTransportPath}/atendimentosDomiciliares";
$atendimentos = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$atendimentoModel = $this->inconsistenciaModel->atendimentoDomiciliarAtendimentos()
->wherePivot('posicao', $posicao)
->first();
$inconsistencias = $this->inconsistencias->atendimentosDomiciliares->{$posicao} ?? [];
$atendimento = new stdClass;
$this->setPaciente($atendimento, $context, $atendimentoModel, $inconsistencias);
$this->setCondicoesAvaliadas($atendimento, $context, $inconsistencias);
$this->setProblemasCondicoes($atendimento, $context, $inconsistencias);
$this->setProcedimentos($atendimento, $context, $inconsistencias);
$this->setOutro($atendimento, $context, $inconsistencias);
$this->setIvcf($atendimento, $context, $inconsistencias);
$atendimentos[] = $atendimento;
}
$this->ficha->atendimentos = (object) [
'lista' => $atendimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->atendimentosDomiciliares,
]),
];
}
private function setPaciente($atendimento, $atendimentoDomiciliarContext, $atendimentoModel, $inconsistencias)
{
$campos = (object) [
'nomeCidadao' => $atendimentoModel->paciente->cidadao->nome,
'turno' => $this->getFirstNodeValue('turno', $atendimentoDomiciliarContext)
? Turno::find($this->getFirstNodeValue('turno', $atendimentoDomiciliarContext))->nome
: null,
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $atendimentoDomiciliarContext)),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $atendimentoDomiciliarContext)),
'dataNascimento' => $this->getDateString($this->getFirstNodeValue('dataNascimento', $atendimentoDomiciliarContext)),
'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $atendimentoDomiciliarContext)),
'localAtendimento' => $this->getFirstNodeValue('localAtendimento', $atendimentoDomiciliarContext)
? LocalAtendimento::find($this->getFirstNodeValue('localAtendimento', $atendimentoDomiciliarContext))->descricao
: null,
'atencaoDomiciliarModalidade' => $this->getFirstNodeValue('atencaoDomiciliarModalidade', $atendimentoDomiciliarContext)
? ModalidadeAtencaoDomiciliar::where(
'codigo_esus',
$this->getFirstNodeValue('atencaoDomiciliarModalidade', $atendimentoDomiciliarContext)
)->first()->descricao
: null,
'tipoAtendimento' => $this->getFirstNodeValue('tipoAtendimento', $atendimentoDomiciliarContext)
? TipoAtendimento::where(
'codigo_esus',
$this->getFirstNodeValue('tipoAtendimento', $atendimentoDomiciliarContext)
)->first()->descricao
: null,
];
$inconsistencias = $this->getInconsistencias([
['Turno', fn () => $inconsistencias->turno],
['CNS', fn () => $inconsistencias->cnsCidadao],
['CPF', fn () => $inconsistencias->cpfCidadao],
['Data de nascimento', fn () => $inconsistencias->dataNascimento],
['Sexo', fn () => $inconsistencias->sexo],
['Local de atendimento', fn () => $inconsistencias->localAtendimento],
['Modalidade', fn () => $inconsistencias->atencaoDomiciliarModalidade],
['Tipo de atendimento', fn () => $inconsistencias->tipoAtendimento],
]);
$atendimento->paciente = (object) compact('campos', 'inconsistencias');
}
private function setOutro($atendimento, $atendimentoDomiciliarContext, $inconsistencias)
{
$campos = (object) [
'condutaDesfecho' => $this->getFirstNodeValue('condutaDesfecho', $atendimentoDomiciliarContext)
? trim(CondutaDesfecho::where(
'codigo',
$this->getFirstNodeValue('condutaDesfecho', $atendimentoDomiciliarContext)
)->first()->descricao)
: null,
];
$inconsistencias = $this->getInconsistencias([
['Conduta/Desfecho', fn () => $inconsistencias->condutaDesfecho],
]);
$atendimento->outro = (object) compact('campos', 'inconsistencias');
}
private function setCondicoesAvaliadas($atendimento, $atendimentoDomiciliarContext, $inconsistencias)
{
$condicoesAvaliadas = [];
foreach ($this->domx->query('condicoesAvaliadas', $atendimentoDomiciliarContext) as $context) {
$condicoesAvaliadas[] = trim(AtendimentoDomiciliarCondicaoAvaliada::where('codigo', $context->nodeValue)->first()->nome);
}
$atendimento->condicoesAvaliadas = (object) [
'lista' => $condicoesAvaliadas,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->condicoesAvaliadas,
]),
];
}
private function setProblemasCondicoes($atendimento, $atendimentoDomiciliarContext, $inconsistencias)
{
$problemasCondicoes = [];
foreach ($this->domx->query('problemasCondicoes', $atendimentoDomiciliarContext) as $i => $context) {
$inconsistenciasProblemaCondicao = [];
if (isset($inconsistencias->problemasCondicoes)) {
if (is_array($inconsistencias->problemasCondicoes)) {
$inconsistenciasProblemaCondicao = $inconsistencias->problemasCondicoes[$i] ?? [];
}
else {
$posicao = $i + 1;
$inconsistenciasProblemaCondicao = $inconsistencias->problemasCondicoes->{$posicao} ?? [];
}
}
$ciap = $this->getFirstNodeValue('ciap', $context)
? Ciap::where('codigo', $this->getFirstNodeValue('ciap', $context))->first()
: null;
$cid = $this->getFirstNodeValue('cid10', $context)
? Cid::where('codigo', $this->getFirstNodeValue('cid10', $context))->first()
: null;
$problemasCondicoes[] = (object) [
'campos' => (object) [
'ciap' => $ciap ? "{$ciap->codigo} - {$ciap->descricao}" : null,
'cid10' => $cid ? MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}" : null,
'isAvaliado' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('isAvaliado', $context))),
],
'inconsistencias' => $this->getInconsistencias([
['CIAP', fn () => $inconsistenciasProblemaCondicao->ciap],
['CID', fn () => $inconsistenciasProblemaCondicao->cid10],
['Avaliado', fn () => $inconsistenciasProblemaCondicao->isAvaliado],
]),
];
}
$atendimento->problemasCondicoes = (object) [
'lista' => $problemasCondicoes,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->problemasCondicoes,
]),
];
}
private function setProcedimentos($atendimento, $atendimentoDomiciliarContext, $inconsistencias)
{
$procedimentos = [];
foreach ($this->domx->query('procedimentos', $atendimentoDomiciliarContext) as $context) {
$procedimento = Procedimento::where('codigo', $context->nodeValue)->orderByDesc('competencia_id')->first();
$procedimentos[] = MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}";
}
$atendimento->procedimentos = (object) [
'lista' => $procedimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->procedimentos,
]),
];
}
private function setIvcf($atendimento, $atendimentoDomiciliarContext, $inconsistencias)
{
$campos = (object) [
'resultado' => $this->getFirstNodeValue('ivcf/resultado', $atendimentoDomiciliarContext),
'hasSgIdade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgIdade', $atendimentoDomiciliarContext))),
'hasSgPercepcaoSaude' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgPercepcaoSaude', $atendimentoDomiciliarContext))),
'hasSgAvdInstrumental' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdInstrumental', $atendimentoDomiciliarContext))),
'hasSgAvdBasica' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdBasica', $atendimentoDomiciliarContext))),
'hasSgCognicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCognicao', $atendimentoDomiciliarContext))),
'hasSgHumor' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgHumor', $atendimentoDomiciliarContext))),
'hasSgAlcancePreensaoPinca' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAlcancePreensaoPinca', $atendimentoDomiciliarContext))),
'hasSgCapAerobicaMuscular' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCapAerobicaMuscular', $atendimentoDomiciliarContext))),
'hasSgMarcha' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgMarcha', $atendimentoDomiciliarContext))),
'hasSgContinencia' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgContinencia', $atendimentoDomiciliarContext))),
'hasSgVisao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgVisao', $atendimentoDomiciliarContext))),
'hasSgAudicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAudicao', $atendimentoDomiciliarContext))),
'hasSgComorbidade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgComorbidade', $atendimentoDomiciliarContext))),
'dataResultado' => $this->getFirstNodeValue('ivcf/dataResultado', $atendimentoDomiciliarContext),
];
$inconsistencias = $this->getInconsistencias([
['Resultado', fn () => $inconsistencias->ivcf->resultado],
['Idade', fn () => $inconsistencias->ivcf->hasSgIdade],
['Percepção de saúde', fn () => $inconsistencias->ivcf->hasSgPercepcaoSaude],
['Atividades instrumentais da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdInstrumental],
['Atividades básicas da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdBasica],
['Cognição', fn () => $inconsistencias->ivcf->hasSgCognicao],
['Humor', fn () => $inconsistencias->ivcf->hasSgHumor],
['Alcance preensão pinça', fn () => $inconsistencias->ivcf->hasSgAlcancePreensaoPinca],
['Capacidade aeróbica muscular', fn () => $inconsistencias->ivcf->hasSgCapAerobicaMuscular],
['Marcha', fn () => $inconsistencias->ivcf->hasSgMarcha],
['Continência', fn () => $inconsistencias->ivcf->hasSgContinencia],
['Visão', fn () => $inconsistencias->ivcf->hasSgVisao],
['Audição', fn () => $inconsistencias->ivcf->hasSgAudicao],
['Comorbidade', fn () => $inconsistencias->ivcf->hasSgComorbidade],
['Data do resultado', fn () => $this->getDateString($inconsistencias->ivcf->dataResultado)],
]);
$atendimento->ivcf = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,550 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Models\Ambulatorio\GlicemiaCapilarMomentoColeta;
use App\Models\Ambulatorio\ProblemaCondicaoSituacao;
use App\Models\AtencaoBasica\AtendimentoIndividual\AleitamentoMaterno;
use App\Models\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada;
use App\Models\AtencaoBasica\AtendimentoIndividual\Conduta;
use App\Models\AtencaoBasica\AtendimentoIndividual\DoencaTransmissivel;
use App\Models\AtencaoBasica\AtendimentoIndividual\Encaminhamento;
use App\Models\AtencaoBasica\AtendimentoIndividual\ExameSolicitadoAvaliado;
use App\Models\AtencaoBasica\AtendimentoIndividual\ModalidadeAtencaoDomiciliar;
use App\Models\AtencaoBasica\AtendimentoIndividual\Nasf;
use App\Models\AtencaoBasica\AtendimentoIndividual\RacionalidadeSaude;
use App\Models\AtencaoBasica\AtendimentoIndividual\Rastreamento;
use App\Models\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
use App\Models\Geral\Ciap;
use App\Models\Geral\Turno;
use App\Models\Parametrizacao\Exame\Exame;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Ocupacao;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use stdClass;
class FichaAtendimentoIndividual extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaatendimentoindividualmaster');
}
public function __invoke()
{
$path = '//ns4:fichaAtendimentoIndividualMasterTransport';
$this->setProfissionalResponsavel($path);
$this->setProfissionalAuxiliar($path);
$this->setAtendimentos($path);
return $this->ficha;
}
private function setProfissionalResponsavel($fichaAtendimentoIndividualMasterTransportPath)
{
$headerTransportPath = "{$fichaAtendimentoIndividualMasterTransportPath}/headerTransport";
$lotacaoFormPrincipalPath = "{$headerTransportPath}/lotacaoFormPrincipal";
$ocupacao = $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
'profissionalNome' => $this->inconsistenciaModel->usuario->cidadao->nome,
'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/profissionalCNS")),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->ine],
]);
$this->ficha->profissional_responsavel = (object) compact('campos', 'inconsistencias');
}
private function setProfissionalAuxiliar($fichaAtendimentoIndividualMasterTransportPath)
{
$headerTransportPath = "{$fichaAtendimentoIndividualMasterTransportPath}/headerTransport";
$lotacaoFormAtendimentoCompartilhadoPath = "{$headerTransportPath}/lotacaoFormAtendimentoCompartilhado";
$ocupacao = $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002"))->first()
: null;
$cns = $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/profissionalCNS");
$campos = (object) [
'profissionalNome' => $this->inconsistenciaModel->atendimentosIndividuais()
->whereHas('usuarioAuxiliar', fn ($q) => $q
->whereHas('cidadao', fn ($q) => $q->where('cns', $cns))
)
->first()->usuarioAuxiliar->cidadao->nome ?? null,
'profissionalCNS' => MaskUtil::getCnsMasked($cns),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->ine],
]);
$this->ficha->profissional_auxiliar = (object) compact('campos', 'inconsistencias');
}
private function setAtendimentos($fichaAtendimentoIndividualMasterTransportPath)
{
$path = "{$fichaAtendimentoIndividualMasterTransportPath}/atendimentosIndividuais";
$atendimentos = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$atendimentoIndividualModel = $this->inconsistenciaModel->atendimentosIndividuais()
->wherePivot('posicao', $posicao)
->first();
$inconsistencias = $this->inconsistencias->atendimentosIndividuais->{$posicao} ?? [];
$atendimento = new stdClass;
$this->setPaciente($atendimento, $context, $atendimentoIndividualModel, $inconsistencias);
$this->setAtendimento($atendimento, $context, $inconsistencias);
$this->setMedicoes($atendimento, $context, $inconsistencias);
$this->setGestante($atendimento, $context, $inconsistencias);
$this->setProblemasCondicoes($atendimento, $context, $inconsistencias);
$this->setExames($atendimento, $context, $inconsistencias);
$this->setObservacao($atendimento, $context, $inconsistencias);
$this->setEmulti($atendimento, $context, $inconsistencias);
$this->setConduta($atendimento, $context, $inconsistencias);
$this->setSolicitacoesOci($atendimento, $context, $inconsistencias);
$this->setIvcf($atendimento, $context, $inconsistencias);
$atendimentos[] = $atendimento;
}
$this->ficha->atendimentos = (object) [
'lista' => $atendimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->atendimentosIndividuais,
]),
];
}
private function setPaciente($atendimento, $atendimentoIndividualContext, $atendimentoIndividualModel, $inconsistencias)
{
$campos = (object) [
'is_sexo_feminino' => $atendimentoIndividualModel->paciente->cidadao->sexo_id === Sexo::FEMININO,
'nomeCidadao' => $atendimentoIndividualModel->paciente->cidadao->nome,
'numeroProntuario' => $this->getFirstNodeValue('numeroProntuario', $atendimentoIndividualContext),
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $atendimentoIndividualContext)),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $atendimentoIndividualContext)),
'dataNascimento' => $this->getDateString($this->getFirstNodeValue('dataNascimento', $atendimentoIndividualContext)),
'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $atendimentoIndividualContext)),
];
$inconsistencias = $this->getInconsistencias([
['Prontuário', fn () => $inconsistencias->numeroProntuario],
['CNS', fn () => $inconsistencias->cnsCidadao],
['CPF', fn () => $inconsistencias->cpfCidadao],
['Data de nascimento', fn () => $inconsistencias->dataNascimento],
['Sexo', fn () => $inconsistencias->sexo],
]);
$atendimento->paciente = (object) compact('campos', 'inconsistencias');
}
private function setAtendimento($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$campos = (object) [
'turno' => $this->getFirstNodeValue('turno', $atendimentoIndividualContext)
? Turno::find($this->getFirstNodeValue('turno', $atendimentoIndividualContext))->nome
: null,
'localDeAtendimento' => $this->getFirstNodeValue('localDeAtendimento', $atendimentoIndividualContext)
? LocalAtendimento::find($this->getFirstNodeValue('localDeAtendimento', $atendimentoIndividualContext))->descricao
: null,
'tipoAtendimento' => $this->getFirstNodeValue('tipoAtendimento', $atendimentoIndividualContext)
? TipoAtendimento::where(
'codigo_esus',
$this->getFirstNodeValue('tipoAtendimento', $atendimentoIndividualContext)
)->first()->descricao
: null,
'vacinaEmDia' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('vacinaEmDia', $atendimentoIndividualContext))),
'atencaoDomiciliarModalidade' => $this->getFirstNodeValue('atencaoDomiciliarModalidade', $atendimentoIndividualContext)
? ModalidadeAtencaoDomiciliar::where(
'codigo_esus',
$this->getFirstNodeValue('atencaoDomiciliarModalidade', $atendimentoIndividualContext)
)->first()->descricao
: null,
'aleitamentoMaterno' => $this->getFirstNodeValue('aleitamentoMaterno', $atendimentoIndividualContext)
? AleitamentoMaterno::where(
'codigo_esus',
$this->getFirstNodeValue('aleitamentoMaterno', $atendimentoIndividualContext)
)->first()->descricao
: null,
'racionalidadeSaude' => $this->getFirstNodeValue('racionalidadeSaude', $atendimentoIndividualContext)
? RacionalidadeSaude::where(
'codigo_esus',
$this->getFirstNodeValue('racionalidadeSaude', $atendimentoIndividualContext)
)->first()->descricao
: null,
'dataHoraInicialAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraInicialAtendimento', $atendimentoIndividualContext)),
'dataHoraFinalAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraFinalAtendimento', $atendimentoIndividualContext)),
];
$inconsistencias = $this->getInconsistencias([
['Turno', fn () => $inconsistencias->turno],
['Local de atendimento', fn () => $inconsistencias->localAtendimento],
['Tipo de atendimento', fn () => $inconsistencias->tipoAtendimento],
['Vacinação em dia', fn () => $inconsistencias->vacinaEmDia],
['Atenção domiciliar', fn () => $inconsistencias->atencaoDomiciliarModalidade],
['Criança - Aleitamento materno', fn () => $inconsistencias->aleitamentoMaterno],
['Racionalidade em saúde (Exceto alopatia / convencional)', fn () => $inconsistencias->racionalidadeSaude],
['Data/hora inicial do atendimento', fn () => $inconsistencias->dataHoraInicialAtendimento],
['Data/hora final do atendimento', fn () => $inconsistencias->dataHoraFinalAtendimento],
]);
$atendimento->atendimento = (object) compact('campos', 'inconsistencias');
}
private function setMedicoes($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$medicoes = $this->domx->query('medicoes', $atendimentoIndividualContext);
$medicoesContext = $medicoes->length > 0 ? $medicoes[0] : null;
$campos = (object) [
'circunferenciaAbdominal' => $this->getFirstNodeValue('circunferenciaAbdominal', $medicoesContext),
'perimetroPanturrilha' => $this->getFirstNodeValue('perimetroPanturrilha', $medicoesContext),
'pressaoArterial' => trim($this->getFirstNodeValue('pressaoArterialSistolica', $medicoesContext)
. '/' . $this->getFirstNodeValue('pressaoArterialDiastolica', $medicoesContext), '/'),
'frequenciaRespiratoria' => $this->getFirstNodeValue('frequenciaRespiratoria', $medicoesContext),
'frequenciaCardiaca' => $this->getFirstNodeValue('frequenciaCardiaca', $medicoesContext),
'temperatura' => $this->getFirstNodeValue('temperatura', $medicoesContext),
'saturacaoO2' => $this->getFirstNodeValue('saturacaoO2', $medicoesContext),
'glicemiaCapilar' => $this->getFirstNodeValue('glicemiaCapilar', $medicoesContext),
'tipoGlicemiaCapilar' => !is_null($this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext))
? GlicemiaCapilarMomentoColeta::where(
'codigo_esus',
$this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext)
)->first()->nome
: null,
'peso' => $this->getFirstNodeValue('peso', $medicoesContext),
'altura' => $this->getFirstNodeValue('altura', $medicoesContext),
'perimetroCefalico' => $this->getFirstNodeValue('perimetroCefalico', $medicoesContext),
];
$inconsistencias = $this->getInconsistencias([
fn () => $inconsistencias->medicoes,
['Circunferência abdominal', fn () => $inconsistencias->medicoes->circunferenciaAbdominal],
['Perímetro da panturrilha', fn () => $inconsistencias->medicoes->perimetroPanturrilha],
['Pressão arterial sistólica', fn () => $inconsistencias->medicoes->pressaoArterialSistolica],
['Pressão arterial diastólica', fn () => $inconsistencias->medicoes->pressaoArterialDiastolica],
['Frequência respiratória', fn () => $inconsistencias->medicoes->frequenciaRespiratoria],
['Frequência cardíaca', fn () => $inconsistencias->medicoes->frequenciaCardiaca],
['Temperatura', fn () => $inconsistencias->medicoes->temperatura],
['Saturação de O2', fn () => $inconsistencias->medicoes->saturacaoO2],
['Glicemia capilar', fn () => $inconsistencias->medicoes->glicemiaCapilar],
['Momento da coleta', fn () => $inconsistencias->medicoes->tipoGlicemiaCapilar],
['Peso', fn () => $inconsistencias->medicoes->peso],
['Altura', fn () => $inconsistencias->medicoes->altura],
['Perímetro cefálico', fn () => $inconsistencias->medicoes->perimetroCefalico],
]);
$atendimento->medicoes = (object) compact('campos', 'inconsistencias');
}
private function setGestante($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$campos = (object) [
'dumDaGestante' => $this->getDateString(
$this->getFirstNodeValue('dumDaGestante', $atendimentoIndividualContext)),
'idadeGestacional' => $this->getFirstNodeValue('idadeGestacional', $atendimentoIndividualContext),
'stGravidezPlanejada' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('stGravidezPlanejada', $atendimentoIndividualContext))),
'nuGestasPrevias' => $this->getFirstNodeValue('nuGestasPrevias', $atendimentoIndividualContext),
'nuPartos' => $this->getFirstNodeValue('nuPartos', $atendimentoIndividualContext),
];
$inconsistencias = $this->getInconsistencias([
['DUM', fn () => $inconsistencias->dumDaGestante],
['Idade gestacional', fn () => $inconsistencias->idadeGestacional],
['Gravidez planejada', fn () => $inconsistencias->stGravidezPlanejada],
['Gestações prévias', fn () => $inconsistencias->nuGestasPrevias],
['Partos', fn () => $inconsistencias->nuPartos],
]);
$atendimento->gestante = (object) compact('campos', 'inconsistencias');
}
private function setProblemasCondicoes($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$problemasCondicoes = [];
foreach ($this->domx->query('problemasCondicoes', $atendimentoIndividualContext) as $i => $context) {
$inconsistenciasProblemaCondicao = [];
if (isset($inconsistencias->problemasCondicoes)) {
if (is_array($inconsistencias->problemasCondicoes)) {
$inconsistenciasProblemaCondicao = $inconsistencias->problemasCondicoes[$i] ?? [];
}
else {
$posicao = $i + 1;
$inconsistenciasProblemaCondicao = $inconsistencias->problemasCondicoes->{$posicao} ?? [];
}
}
$ciap = null;
if ($this->getFirstNodeValue('ciap', $context)) {
$codigo = $this->getFirstNodeValue('ciap', $context);
if ($ciap = Ciap::where('codigo', $codigo)->first()) {
$ciap = "{$ciap->codigo} - {$ciap->descricao}";
}
else if ($condicaoAvaliada = CondicaoAvaliada::where('codigo_esus', $codigo)->first()) {
$ciap = $condicaoAvaliada->descricao;
}
else if ($doencaTransmissivel = DoencaTransmissivel::where('codigo_esus', $codigo)->first()) {
$ciap = $doencaTransmissivel->descricao;
}
else if ($rastreamento = Rastreamento::where('codigo_esus', $codigo)->first()) {
$ciap = $rastreamento->descricao;
}
}
$cid = $this->getFirstNodeValue('cid10', $context)
? Cid::where('codigo', $this->getFirstNodeValue('cid10', $context))->first()
: null;
$problemasCondicoes[] = (object) [
'campos' => (object) [
'ciap' => $ciap,
'cid10' => $cid ? MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}" : null,
'situacao' => !is_null($this->getFirstNodeValue('situacao', $context))
? ProblemaCondicaoSituacao::where('codigo_esus', $this->getFirstNodeValue('situacao', $context))->first()->nome
: null,
'dataInicioProblema' => $this->getFirstNodeValue('dataInicioProblema', $context)
? $this->getDateString($this->getFirstNodeValue('dataInicioProblema', $context))
: null,
'dataFimProblema' => $this->getFirstNodeValue('dataFimProblema', $context)
? $this->getDateString($this->getFirstNodeValue('dataFimProblema', $context))
: null,
'isAvaliado' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('isAvaliado', $context))),
],
'inconsistencias' => $this->getInconsistencias([
['CIAP', fn () => $inconsistenciasProblemaCondicao->ciap],
['CID', fn () => $inconsistenciasProblemaCondicao->cid10],
['Situação', fn () => $inconsistenciasProblemaCondicao->situacao],
['Início', fn () => $inconsistenciasProblemaCondicao->dataInicioProblema],
['Fim', fn () => $inconsistenciasProblemaCondicao->dataFimProblema],
['Avaliado', fn () => $inconsistenciasProblemaCondicao->isAvaliado],
]),
];
}
$atendimento->problemas_condicoes = (object) [
'lista' => $problemasCondicoes,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->problemasCondicoes,
]),
];
}
private function setExames($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$exames = [];
foreach ($this->domx->query('exame', $atendimentoIndividualContext) as $context) {
$codigo = $this->getFirstNodeValue('codigoExame', $context);
$exame = (object) [
'is_solicitado' => 'Não',
'is_avaliado' => 'Não',
];
if ($exameSolicitadoAvaliado = ExameSolicitadoAvaliado::where('codigo_esus', $codigo)
->orWhere('codigo_procedimento', $codigo)->first()
) {
$exame->nome = $exameSolicitadoAvaliado->descricao;
}
else {
$parametrizacaoExame = Exame::where('codigo', $codigo)->first();
$exame->nome = $parametrizacaoExame->nome;
}
foreach ($this->domx->query('solicitadoAvaliado', $context) as $contextSolicitadoAvaliado) {
if ($contextSolicitadoAvaliado->nodeValue === 'S') {
$exame->is_solicitado = 'Sim';
}
else if ($contextSolicitadoAvaliado->nodeValue === 'A') {
$exame->is_avaliado = 'Sim';
}
}
$exames[] = $exame;
}
$atendimento->exames = (object) [
'lista' => $exames,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->exame,
]),
];
}
private function setObservacao($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$campos = (object) [
'ficouEmObservacao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('ficouEmObservacao', $atendimentoIndividualContext))),
];
$inconsistencias = $this->getInconsistencias([
fn () => $inconsistencias->ficouEmObservacao,
]);
$atendimento->observacao = (object) compact('campos', 'inconsistencias');
}
private function setEmulti($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$emultis = [];
foreach ($this->domx->query('emultis', $atendimentoIndividualContext) as $context) {
$emultis[] = Nasf::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
$atendimento->emultis = (object) [
'lista' => $emultis,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->emultis,
]),
];
}
private function setConduta($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$condutas = [];
foreach ($this->domx->query('condutas', $atendimentoIndividualContext) as $context) {
if ($conduta = Conduta::where('codigo_esus', $context->nodeValue)->first()) {
$condutas[] = $conduta->descricao;
}
else if ($encaminhamento = Encaminhamento::where('codigo_esus', $context->nodeValue)->first()) {
$condutas[] = $encaminhamento->descricao;
}
}
$atendimento->condutas = (object) [
'lista' => $condutas,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->condutas,
]),
];
}
private function setSolicitacoesOci($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$solicitacoesOci = [];
foreach ($this->domx->query('solicitacoesOci', $atendimentoIndividualContext) as $context) {
$solicitacoesOci[] = (object) [
'codigoSigtap' => MaskUtil::getProcedimentoMasked($this->getFirstNodeValue('codigoSigtap', $context)),
];
}
$atendimento->solicitacoes_oci = (object) [
'lista' => $solicitacoesOci,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->solicitacoesOci,
]),
];
}
private function setIvcf($atendimento, $atendimentoIndividualContext, $inconsistencias)
{
$campos = (object) [
'resultado' => $this->getFirstNodeValue('ivcf/resultado', $atendimentoIndividualContext),
'hasSgIdade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgIdade', $atendimentoIndividualContext))),
'hasSgPercepcaoSaude' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgPercepcaoSaude', $atendimentoIndividualContext))),
'hasSgAvdInstrumental' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdInstrumental', $atendimentoIndividualContext))),
'hasSgAvdBasica' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdBasica', $atendimentoIndividualContext))),
'hasSgCognicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCognicao', $atendimentoIndividualContext))),
'hasSgHumor' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgHumor', $atendimentoIndividualContext))),
'hasSgAlcancePreensaoPinca' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAlcancePreensaoPinca', $atendimentoIndividualContext))),
'hasSgCapAerobicaMuscular' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCapAerobicaMuscular', $atendimentoIndividualContext))),
'hasSgMarcha' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgMarcha', $atendimentoIndividualContext))),
'hasSgContinencia' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgContinencia', $atendimentoIndividualContext))),
'hasSgVisao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgVisao', $atendimentoIndividualContext))),
'hasSgAudicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAudicao', $atendimentoIndividualContext))),
'hasSgComorbidade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgComorbidade', $atendimentoIndividualContext))),
'dataResultado' => $this->getFirstNodeValue('ivcf/dataResultado', $atendimentoIndividualContext),
];
$inconsistencias = $this->getInconsistencias([
['Resultado', fn () => $inconsistencias->ivcf->resultado],
['Idade', fn () => $inconsistencias->ivcf->hasSgIdade],
['Percepção de saúde', fn () => $inconsistencias->ivcf->hasSgPercepcaoSaude],
['Atividades instrumentais da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdInstrumental],
['Atividades básicas da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdBasica],
['Cognição', fn () => $inconsistencias->ivcf->hasSgCognicao],
['Humor', fn () => $inconsistencias->ivcf->hasSgHumor],
['Alcance preensão pinça', fn () => $inconsistencias->ivcf->hasSgAlcancePreensaoPinca],
['Capacidade aeróbica muscular', fn () => $inconsistencias->ivcf->hasSgCapAerobicaMuscular],
['Marcha', fn () => $inconsistencias->ivcf->hasSgMarcha],
['Continência', fn () => $inconsistencias->ivcf->hasSgContinencia],
['Visão', fn () => $inconsistencias->ivcf->hasSgVisao],
['Audição', fn () => $inconsistencias->ivcf->hasSgAudicao],
['Comorbidade', fn () => $inconsistencias->ivcf->hasSgComorbidade],
['Data do resultado', fn () => $this->getDateString($inconsistencias->ivcf->dataResultado)],
]);
$atendimento->ivcf = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,564 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\AtendimentoOdontologico\CondutaEncaminhamento;
use App\Enums\AtencaoBasica\AtendimentoOdontologico\Fornecimento;
use App\Enums\AtencaoBasica\AtendimentoOdontologico\VigilanciaBucal;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Enums\Integracao\Esus\Procedimentos as ProcedimentoEsus;
use App\Models\Ambulatorio\GlicemiaCapilarMomentoColeta;
use App\Models\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
use App\Models\AtencaoBasica\AtendimentoOdontologico\TipoConsulta;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
use App\Models\Geral\Ciap;
use App\Models\Geral\Turno;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use stdClass;
class FichaAtendimentoOdontologico extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaatendimentoodontologicomaster');
}
public function __invoke()
{
$path = '//ns4:fichaAtendimentoOdontologicoMasterTransport';
$this->setProfissionalResponsavel($path);
$this->setProfissionalAuxiliar($path);
$this->setAtendimentos($path);
return $this->ficha;
}
private function setProfissionalResponsavel($fichaAtendimentoOdontologicoMasterTransportPath)
{
$headerTransportPath = "{$fichaAtendimentoOdontologicoMasterTransportPath}/headerTransport";
$lotacaoFormPrincipalPath = "{$headerTransportPath}/lotacaoFormPrincipal";
$ocupacao = $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
'profissionalNome' => $this->inconsistenciaModel->usuario->cidadao->nome,
'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/profissionalCNS")),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->ine],
]);
$this->ficha->profissional_responsavel = (object) compact('campos', 'inconsistencias');
}
private function setProfissionalAuxiliar($fichaAtendimentoOdontologicoMasterTransportPath)
{
$headerTransportPath = "{$fichaAtendimentoOdontologicoMasterTransportPath}/headerTransport";
$lotacaoFormAtendimentoCompartilhadoPath = "{$headerTransportPath}/lotacaoFormAtendimentoCompartilhado";
$ocupacao = $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002"))->first()
: null;
$cns = $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/profissionalCNS");
$campos = (object) [
'profissionalNome' => $this->inconsistenciaModel->atendimentosOdontologicos()
->whereHas('usuarioAuxiliar', fn ($q) => $q
->whereHas('cidadao', fn ($q) => $q->where('cns', $cns))
)
->first()->usuarioAuxiliar->cidadao->nome ?? null,
'profissionalCNS' => MaskUtil::getCnsMasked($cns),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->ine],
]);
$this->ficha->profissional_auxiliar = (object) compact('campos', 'inconsistencias');
}
private function setAtendimentos($fichaAtendimentoOdontologicoMasterTransportPath)
{
$path = "{$fichaAtendimentoOdontologicoMasterTransportPath}/atendimentosOdontologicos";
$atendimentos = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$atendimentoOdontologicoModel = $this->inconsistenciaModel->atendimentosOdontologicos()
->wherePivot('posicao', $posicao)
->first();
$inconsistencias = $this->inconsistencias->atendimentosOdontologicos->{$posicao} ?? [];
$atendimento = new stdClass;
$this->setPaciente($atendimento, $context, $atendimentoOdontologicoModel, $inconsistencias);
$this->setAtendimento($atendimento, $context, $inconsistencias);
$this->setVigilancia($atendimento, $context, $inconsistencias);
$this->setProblemasCondicoes($atendimento, $context, $inconsistencias);
$this->setMedicoes($atendimento, $context, $inconsistencias);
$this->setProcedimentos($atendimento, $context, $inconsistencias);
$this->setFornecimento($atendimento, $context, $inconsistencias);
$this->setConduta($atendimento, $context, $inconsistencias);
$this->setSolicitacoesOci($atendimento, $context, $inconsistencias);
$this->setExames($atendimento, $context, $inconsistencias);
$this->setIvcf($atendimento, $context, $inconsistencias);
$atendimentos[] = $atendimento;
}
$this->ficha->atendimentos = (object) [
'lista' => $atendimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->atendimentosOdontologicos,
]),
];
}
private function setPaciente($atendimento, $atendimentoOdontologicoContext, $atendimentoOdontologicoModel, $inconsistencias)
{
$campos = (object) [
'is_sexo_feminino' => $atendimentoOdontologicoModel->paciente->cidadao->sexo_id === Sexo::FEMININO,
'nomeCidadao' => $atendimentoOdontologicoModel->paciente->cidadao->nome,
'numProntuario' => $this->getFirstNodeValue('numProntuario', $atendimentoOdontologicoContext),
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $atendimentoOdontologicoContext)),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $atendimentoOdontologicoContext)),
'dtNascimento' => $this->getDateString($this->getFirstNodeValue('dtNascimento', $atendimentoOdontologicoContext)),
'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $atendimentoOdontologicoContext)),
];
$inconsistencias = $this->getInconsistencias([
['Prontuário', fn () => $inconsistencias->numProntuario],
['CNS', fn () => $inconsistencias->cnsCidadao],
['CPF', fn () => $inconsistencias->cpfCidadao],
['Data de nascimento', fn () => $inconsistencias->dtNascimento],
['Sexo', fn () => $inconsistencias->sexo],
]);
$atendimento->paciente = (object) compact('campos', 'inconsistencias');
}
private function setAtendimento($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$campos = (object) [
'turno' => $this->getFirstNodeValue('turno', $atendimentoOdontologicoContext)
? Turno::find($this->getFirstNodeValue('turno', $atendimentoOdontologicoContext))->nome
: null,
'localAtendimento' => $this->getFirstNodeValue('localAtendimento', $atendimentoOdontologicoContext)
? LocalAtendimento::find($this->getFirstNodeValue('localAtendimento', $atendimentoOdontologicoContext))->descricao
: null,
'tipoAtendimento' => $this->getFirstNodeValue('tipoAtendimento', $atendimentoOdontologicoContext)
? TipoAtendimento::where(
'codigo_esus',
$this->getFirstNodeValue('tipoAtendimento', $atendimentoOdontologicoContext)
)->first()->descricao
: null,
'tiposConsultaOdonto' => $this->getFirstNodeValue('tiposConsultaOdonto', $atendimentoOdontologicoContext)
? TipoConsulta::where(
'codigo_esus',
$this->getFirstNodeValue('tiposConsultaOdonto', $atendimentoOdontologicoContext)
)->first()->descricao
: null,
'gestante' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('gestante', $atendimentoOdontologicoContext))),
'necessidadesEspeciais' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('necessidadesEspeciais', $atendimentoOdontologicoContext))),
'dataHoraInicialAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraInicialAtendimento', $atendimentoOdontologicoContext)),
'dataHoraFinalAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraFinalAtendimento', $atendimentoOdontologicoContext)),
];
$inconsistencias = $this->getInconsistencias([
['Turno', fn () => $inconsistencias->turno],
['Local de atendimento', fn () => $inconsistencias->localAtendimento],
['Tipo de atendimento', fn () => $inconsistencias->tipoAtendimento],
['Tipo de consulta', fn () => $inconsistencias->tiposConsultaOdonto],
['Gestante', fn () => $inconsistencias->gestante],
['Necessidades especiais', fn () => $inconsistencias->necessidadesEspeciais],
['Data/hora inicial do atendimento', fn () => $inconsistencias->dataHoraInicialAtendimento],
['Data/hora final do atendimento', fn () => $inconsistencias->dataHoraFinalAtendimento],
]);
$atendimento->atendimento = (object) compact('campos', 'inconsistencias');
}
private function setVigilancia($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$vigilancias = [];
$getNome = function ($id) {
switch ($id) {
case VigilanciaBucal::ABSCESSO_DENTO_ALVEOLAR: {
return 'Abscesso Dento Alveolar';
}
case VigilanciaBucal::ALTERACAO_EM_TECIDOS_MOLES: {
return 'Alteração em Tecidos Moles';
}
case VigilanciaBucal::DOR_DE_DENTE: {
return 'Dor De Dente';
}
case VigilanciaBucal::FENDAS_FISSURAS_LABIO_PALATAIS: {
return 'Fendas ou Fissuras Lábio Palatais';
}
case VigilanciaBucal::FLUOROSE_DENTARIA_MODERADA_SEVERA: {
return 'Fluorose Dentária Moderada ou Sevéra';
}
case VigilanciaBucal::TRAUMATISMO_DENTO_ALVEOLAR: {
return 'Traumatismo Dento Alveolar';
}
case VigilanciaBucal::NAO_IDENTIFICADO: {
return 'Não Identificado';
}
}
};
foreach ($this->domx->query('tiposVigilanciaSaudeBucal', $atendimentoOdontologicoContext) as $context) {
$vigilancias[] = $getNome($context->nodeValue);
}
$atendimento->vigilancias = (object) [
'lista' => $vigilancias,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->tiposVigilanciaSaudeBucal,
]),
];
}
private function setProblemasCondicoes($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$problemasCondicoes = [];
foreach ($this->domx->query('problemasCondicoes', $atendimentoOdontologicoContext) as $context) {
$ciap = $this->getFirstNodeValue('ciap', $context)
? Ciap::where('codigo', $this->getFirstNodeValue('ciap', $context))->first()
: null;
$cid = $this->getFirstNodeValue('cid10', $context)
? Cid::where('codigo', $this->getFirstNodeValue('cid10', $context))->first()
: null;
$problemasCondicoes[] = (object) [
'ciap' => $ciap ? "{$ciap->codigo} - {$ciap->descricao}" : null,
'cid10' => $cid ? MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}" : null,
'isAvaliado' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('isAvaliado', $context))),
];
}
$atendimento->problemas_condicoes = (object) [
'lista' => $problemasCondicoes,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->problemasCondicoes,
]),
];
}
private function setMedicoes($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$medicoes = $this->domx->query('medicoes', $atendimentoOdontologicoContext);
$medicoesContext = $medicoes->length > 0 ? $medicoes[0] : null;
$campos = (object) [
'circunferenciaAbdominal' => $this->getFirstNodeValue('circunferenciaAbdominal', $medicoesContext),
'perimetroPanturrilha' => $this->getFirstNodeValue('perimetroPanturrilha', $medicoesContext),
'pressaoArterial' => trim($this->getFirstNodeValue('pressaoArterialSistolica', $medicoesContext)
. '/' . $this->getFirstNodeValue('pressaoArterialDiastolica', $medicoesContext), '/'),
'frequenciaRespiratoria' => $this->getFirstNodeValue('frequenciaRespiratoria', $medicoesContext),
'frequenciaCardiaca' => $this->getFirstNodeValue('frequenciaCardiaca', $medicoesContext),
'temperatura' => $this->getFirstNodeValue('temperatura', $medicoesContext),
'saturacaoO2' => $this->getFirstNodeValue('saturacaoO2', $medicoesContext),
'glicemiaCapilar' => $this->getFirstNodeValue('glicemiaCapilar', $medicoesContext),
'tipoGlicemiaCapilar' => !is_null($this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext))
? GlicemiaCapilarMomentoColeta::where(
'codigo_esus',
$this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext)
)->first()->nome
: null,
'peso' => $this->getFirstNodeValue('peso', $medicoesContext),
'altura' => $this->getFirstNodeValue('altura', $medicoesContext),
'perimetroCefalico' => $this->getFirstNodeValue('perimetroCefalico', $medicoesContext),
];
$inconsistencias = $this->getInconsistencias([
fn () => $inconsistencias->medicoes,
['Circunferência abdominal', fn () => $inconsistencias->medicoes->circunferenciaAbdominal],
['Perímetro da panturrilha', fn () => $inconsistencias->medicoes->perimetroPanturrilha],
['Pressão arterial sistólica', fn () => $inconsistencias->medicoes->pressaoArterialSistolica],
['Pressão arterial diastólica', fn () => $inconsistencias->medicoes->pressaoArterialDiastolica],
['Frequência respiratória', fn () => $inconsistencias->medicoes->frequenciaRespiratoria],
['Frequência cardíaca', fn () => $inconsistencias->medicoes->frequenciaCardiaca],
['Temperatura', fn () => $inconsistencias->medicoes->temperatura],
['Saturação de O2', fn () => $inconsistencias->medicoes->saturacaoO2],
['Glicemia capilar', fn () => $inconsistencias->medicoes->glicemiaCapilar],
['Momento da coleta', fn () => $inconsistencias->medicoes->tipoGlicemiaCapilar],
['Peso', fn () => $inconsistencias->medicoes->peso],
['Altura', fn () => $inconsistencias->medicoes->altura],
['Perímetro cefálico', fn () => $inconsistencias->medicoes->perimetroCefalico],
]);
$atendimento->medicoes = (object) compact('campos', 'inconsistencias');
}
private function setProcedimentos($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$procedimentos = [];
foreach ($this->domx->query('procedimentosRealizados', $atendimentoOdontologicoContext) as $context) {
$codigo = $this->getFirstNodeValue('coMsProcedimento', $context);
if ($codigo === ProcedimentoEsus::ORIENTACAO_EM_SAUDE) {
$descricao = $codigo . " - Orientação Individual em Saúde";
} else {
$procedimento = Procedimento::where('codigo', $codigo)
->orderByDesc('competencia_id')
->first();
$descricao = $procedimento->codigo . " - {$procedimento->nome}";
}
$procedimentos[] = (object) [
'descricao' => $descricao,
'quantidade' => $this->getFirstNodeValue('quantidade', $context),
];
}
$procedimentosCallbacks = [];
$procedimentosRealizados = is_object($inconsistencias) ? ($inconsistencias->procedimentosRealizados ?? null) : null;
if (!empty($procedimentosRealizados)) {
foreach ($procedimentosRealizados as $item) {
foreach ((array) $item as $msg) {
$mensagem = $msg;
$procedimentosCallbacks[] = function () use ($mensagem) {
return $mensagem;
};
}
}
}
$atendimento->procedimentos = (object) [
'lista' => $procedimentos,
'inconsistencias' => $this->getInconsistencias($procedimentosCallbacks),
];
}
private function setFornecimento($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$fornecimentos = [];
$getNome = function ($id) {
switch ($id) {
case Fornecimento::ESCOVA_DENTAL: {
return 'Escova Dental';
}
case Fornecimento::CREME_DENTAL: {
return 'Creme Dental';
}
case Fornecimento::FIO_DENTAL: {
return 'Fio Dental';
}
}
};
foreach ($this->domx->query('tiposFornecimOdonto', $atendimentoOdontologicoContext) as $context) {
$fornecimentos[] = $getNome($context->nodeValue);
}
$atendimento->fornecimentos = (object) [
'lista' => $fornecimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->tiposFornecimOdonto,
]),
];
}
private function setConduta($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$condutas = [];
$getNome = function ($id) {
switch ($id) {
case CondutaEncaminhamento::ALTA_EPISODIO: {
return 'Alta do episódio';
}
case CondutaEncaminhamento::RETORNO_CONSULTA_AGENDADA: {
return 'Retorno para Consulta Agendada';
}
case CondutaEncaminhamento::AGENDAMENTO_OUTROS_PROFISSIONAIS: {
return 'Agendamento para Outros Profissionais AB';
}
case CondutaEncaminhamento::AGENDAMENTO_PARA_E_MULTI: {
return 'Agendamento para eMulti';
}
case CondutaEncaminhamento::AGENDAMENTO_GRUPOS: {
return 'Agendamento para Grupos';
}
case CondutaEncaminhamento::TRATAMENTO_CONCLUIDO: {
return 'Tratamento Concluído';
}
case CondutaEncaminhamento::ATENDIMENTO_PACIENTES_NECESSIDADES_ESPECIAIS: {
return 'Encaminhamento: Atendimento à Pacientes com Necessidades Especiais';
}
case CondutaEncaminhamento::CIRURGIA_BMF: {
return 'Encaminhamento: Cirurgia BMF';
}
case CondutaEncaminhamento::ENDODONTIA: {
return 'Encaminhamento: Endodontia';
}
case CondutaEncaminhamento::ESTOMATOLOGIA: {
return 'Encaminhamento: Estomatologia';
}
case CondutaEncaminhamento::IMPLANTODONTIA: {
return 'Encaminhamento: Implantodontia';
}
case CondutaEncaminhamento::ODONTOPEDIATRIA: {
return 'Encaminhamento: Odontopediatria';
}
case CondutaEncaminhamento::ORTODONTIA_ORTOPEDIA: {
return 'Encaminhamento: Ortodontia/Ortopedia';
}
case CondutaEncaminhamento::PERIDONTIA: {
return 'Encaminhamento: Peridontia';
}
case CondutaEncaminhamento::PROTESE_DENTARIA: {
return 'Encaminhamento: Prótese Dentária';
}
case CondutaEncaminhamento::RADIOLOGIA: {
return 'Encaminhamento: Radiologia';
}
case CondutaEncaminhamento::OUTROS: {
return 'Encaminhamento: Outros';
}
}
};
foreach ($this->domx->query('tiposEncamOdonto', $atendimentoOdontologicoContext) as $context) {
$condutas[] = $getNome($context->nodeValue);
}
$atendimento->condutas = (object) [
'lista' => $condutas,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->tiposEncamOdonto,
]),
];
}
private function setSolicitacoesOci($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$solicitacoesOci = [];
foreach ($this->domx->query('solicitacoesOci', $atendimentoOdontologicoContext) as $context) {
$solicitacoesOci[] = (object) [
'codigoSigtap' => MaskUtil::getProcedimentoMasked($this->getFirstNodeValue('codigoSigtap', $context)),
];
}
$atendimento->solicitacoes_oci = (object) [
'lista' => $solicitacoesOci,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->solicitacoesOci,
]),
];
}
private function setExames($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$exames = [];
foreach ($this->domx->query('exame', $atendimentoOdontologicoContext) as $context) {
$exames[] = (object) [
'codigoExame' => $this->getFirstNodeValue('codigoExame', $context),
'solicitadoAvaliado' => $this->getFirstNodeValue('solicitadoAvaliado', $context) === 'S' ? 'Solicitado' : 'Avaliado',
];
}
$atendimento->exames = (object) [
'lista' => $exames,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->exame,
]),
];
}
private function setIvcf($atendimento, $atendimentoOdontologicoContext, $inconsistencias)
{
$campos = (object) [
'resultado' => $this->getFirstNodeValue('ivcf/resultado', $atendimentoOdontologicoContext),
'hasSgIdade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgIdade', $atendimentoOdontologicoContext))),
'hasSgPercepcaoSaude' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgPercepcaoSaude', $atendimentoOdontologicoContext))),
'hasSgAvdInstrumental' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdInstrumental', $atendimentoOdontologicoContext))),
'hasSgAvdBasica' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdBasica', $atendimentoOdontologicoContext))),
'hasSgCognicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCognicao', $atendimentoOdontologicoContext))),
'hasSgHumor' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgHumor', $atendimentoOdontologicoContext))),
'hasSgAlcancePreensaoPinca' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAlcancePreensaoPinca', $atendimentoOdontologicoContext))),
'hasSgCapAerobicaMuscular' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCapAerobicaMuscular', $atendimentoOdontologicoContext))),
'hasSgMarcha' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgMarcha', $atendimentoOdontologicoContext))),
'hasSgContinencia' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgContinencia', $atendimentoOdontologicoContext))),
'hasSgVisao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgVisao', $atendimentoOdontologicoContext))),
'hasSgAudicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAudicao', $atendimentoOdontologicoContext))),
'hasSgComorbidade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgComorbidade', $atendimentoOdontologicoContext))),
'dataResultado' => $this->getFirstNodeValue('ivcf/dataResultado', $atendimentoOdontologicoContext),
];
$inconsistencias = $this->getInconsistencias([
['Resultado', fn () => $inconsistencias->ivcf->resultado],
['Idade', fn () => $inconsistencias->ivcf->hasSgIdade],
['Percepção de saúde', fn () => $inconsistencias->ivcf->hasSgPercepcaoSaude],
['Atividades instrumentais da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdInstrumental],
['Atividades básicas da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdBasica],
['Cognição', fn () => $inconsistencias->ivcf->hasSgCognicao],
['Humor', fn () => $inconsistencias->ivcf->hasSgHumor],
['Alcance preensão pinça', fn () => $inconsistencias->ivcf->hasSgAlcancePreensaoPinca],
['Capacidade aeróbica muscular', fn () => $inconsistencias->ivcf->hasSgCapAerobicaMuscular],
['Marcha', fn () => $inconsistencias->ivcf->hasSgMarcha],
['Continência', fn () => $inconsistencias->ivcf->hasSgContinencia],
['Visão', fn () => $inconsistencias->ivcf->hasSgVisao],
['Audição', fn () => $inconsistencias->ivcf->hasSgAudicao],
['Comorbidade', fn () => $inconsistencias->ivcf->hasSgComorbidade],
['Data do resultado', fn () => $this->getDateString($inconsistencias->ivcf->dataResultado)],
]);
$atendimento->ivcf = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,310 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\AtividadeColetiva\AtividadeTipo as AtividadeColetivaAtividadeTipo;
use App\Models\AtencaoBasica\AtividadeColetiva\AtividadeTipo;
use App\Models\AtencaoBasica\AtividadeColetiva\Profissional;
use App\Models\AtencaoBasica\AtividadeColetiva\PublicoAlvo;
use App\Models\AtencaoBasica\AtividadeColetiva\ReuniaoTema;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudePratica;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudeTema;
use App\Models\AtencaoBasica\AtividadeColetiva\Turno;
use App\Models\Sigtap\Ocupacao;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
class FichaAtividadeColetiva extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaatividadecoletiva');
}
public function __invoke()
{
$path = '//ns4:fichaAtividadeColetivaTransport';
$this->setCadastro($path);
$this->setProfissionalResponsavel($path);
$this->setOutrosProfissionais($path);
$this->setAtividade($path);
$this->setTemasReuniao($path);
$this->setPublicoAlvo($path);
$this->setTemasSaude($path);
$this->setPraticasSaude($path);
$this->setParticipantes($path);
return $this->ficha;
}
private function setCadastro($fichaAtividadeColetivaTransportPath)
{
$headerTransportPath = "{$fichaAtividadeColetivaTransportPath}/headerTransport";
$campos = (object) [
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'pseEducacao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("$fichaAtividadeColetivaTransportPath/pseEducacao"))),
'pseSaude' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("$fichaAtividadeColetivaTransportPath/pseSaude"))),
'inep' => $this->getFirstNodeValue("$fichaAtividadeColetivaTransportPath/inep"),
'outraLocalidade' => $this->getFirstNodeValue("$fichaAtividadeColetivaTransportPath/outraLocalidade"),
'cnesLocalAtividade' => $this->getFirstNodeValue("$fichaAtividadeColetivaTransportPath/cnesLocalAtividade"),
'turno' => $this->getFirstNodeValue("$fichaAtividadeColetivaTransportPath/turno")
? Turno::find($this->getFirstNodeValue("$fichaAtividadeColetivaTransportPath/turno"))->descricao
: null,
];
$inconsistencias = $this->getInconsistencias([
['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['PSE educação', fn () => $this->inconsistencias->pseEducacao],
['PSE saúde', fn () => $this->inconsistencias->pseSaude],
['INEP', fn () => $this->inconsistencias->inep],
['Outra localidade', fn () => $this->inconsistencias->outraLocalidade],
['CNES', fn () => $this->inconsistencias->cnesLocalAtividade],
['Turno', fn () => $this->inconsistencias->turno],
]);
$this->ficha->cadastro = (object) compact('campos', 'inconsistencias');
}
private function setProfissionalResponsavel($fichaAtividadeColetivaTransportPath)
{
$headerTransportPath = "{$fichaAtividadeColetivaTransportPath}/headerTransport";
$ocupacao = $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
'profissionalNome' => $this->inconsistenciaModel->atividadeColetiva->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"),
];
$profissionalInconsistencia = collect($this->inconsistencias->profissionais ?? [])
->pluck('cnsProfissional')
->filter()
->first();
$inconsistencias = $this->getInconsistencias([
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
['CNS', fn () => $profissionalInconsistencia],
['CBO', fn () => $this->inconsistencias->headerTransport->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->ine],
]);
$this->ficha->profissional_responsavel = (object) compact('campos', 'inconsistencias');
}
private function setOutrosProfissionais($fichaAtividadeColetivaTransportPath)
{
$path = $fichaAtividadeColetivaTransportPath;
$profissionais = [];
foreach ($this->domx->query("{$path}/profissionais") as $context) {
$ocupacao = $this->getFirstNodeValue('codigoCbo2002', $context)
? Ocupacao::where('codigo', $this->getFirstNodeValue('codigoCbo2002', $context))->first()
: null;
$profissionais[] = (object) [
'nomeProfissional' => Profissional::where('atividade_coletiva_id', $this->inconsistenciaModel->atividadeColetiva->id)
->whereHas('usuario', fn ($q) => $q
->whereHas('cidadao', fn ($q) => $q
->where('cns', $this->getFirstNodeValue('cnsProfissional', $context))
)
)
->first()->usuario->cidadao->nome
?? ($this->inconsistenciaModel->atividadeColetiva->usuario->cidadao->cns
=== $this->getFirstNodeValue('cnsProfissional', $context)
? $this->inconsistenciaModel->atividadeColetiva->usuario->cidadao->nome : null),
'cnsProfissional' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsProfissional', $context)),
'codigoCbo2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
];
}
$this->ficha->outros_profissionais = (object) [
'lista' => $profissionais,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->profissionais,
]),
];
}
private function setAtividade($fichaAtividadeColetivaTransportPath)
{
$path = $fichaAtividadeColetivaTransportPath;
$atividadeTipoId = $this->getFirstNodeValue("{$path}/atividadeTipo");
$campos = (object) [
'showTemasReuniao' => collect([
AtividadeColetivaAtividadeTipo::REUNIAO_COM_OUTRAS_EQUIPES_DE_SAUDE,
AtividadeColetivaAtividadeTipo::REUNIAO_DE_EQUIPE,
AtividadeColetivaAtividadeTipo::REUNIAO_INTERSETORIAL_CONSELHO_LOCAL_DE_SAUDE_CONTROLE_SOCIAL,
])->contains($atividadeTipoId),
'showPublicoAlvoTemasSaude' => collect([
AtividadeColetivaAtividadeTipo::EDUCACAO_EM_SAUDE,
AtividadeColetivaAtividadeTipo::ATENDIMENTO_EM_GRUPO,
AtividadeColetivaAtividadeTipo::AVALIACAO_PROCEDIMENTO_COLETIVO,
AtividadeColetivaAtividadeTipo::MOBILIZACAO_SOCIAL,
])->contains($atividadeTipoId),
'showPraticasSaude' => collect([
AtividadeColetivaAtividadeTipo::ATENDIMENTO_EM_GRUPO,
AtividadeColetivaAtividadeTipo::AVALIACAO_PROCEDIMENTO_COLETIVO,
])->contains($atividadeTipoId),
'atividadeTipo' => $atividadeTipoId
? AtividadeTipo::find($atividadeTipoId)->descricao
: null,
'numParticipantes' => $this->getFirstNodeValue("{$path}/numParticipantes"),
'numAvaliacoesAlteradas' => $this->getFirstNodeValue("{$path}/numAvaliacoesAlteradas"),
];
$inconsistencias = $this->getInconsistencias([
['Atividade', fn () => $this->inconsistencias->atividadeTipo],
['Participantes', fn () => $this->inconsistencias->numParticipantes],
['Avaliações alteradas', fn () => $this->inconsistencias->numAvaliacoesAlteradas],
]);
$this->ficha->atividade = (object) compact('campos', 'inconsistencias');
}
private function setTemasReuniao($fichaAtividadeColetivaTransportPath)
{
$path = $fichaAtividadeColetivaTransportPath;
$temas = [];
foreach ($this->domx->query("{$path}/temasParaReuniao") as $context) {
$temas[] = ReuniaoTema::find($context->nodeValue)->descricao;
}
$this->ficha->temas_reuniao = (object) [
'lista' => $temas,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->temasParaReuniao,
]),
];
}
private function setPublicoAlvo($fichaAtividadeColetivaTransportPath)
{
$path = $fichaAtividadeColetivaTransportPath;
$publicosAlvos = [];
foreach ($this->domx->query("{$path}/publicoAlvo") as $context) {
$publicosAlvos[] = PublicoAlvo::find($context->nodeValue)->descricao;
}
$this->ficha->publico_alvo = (object) [
'lista' => $publicosAlvos,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->publicoAlvo,
]),
];
}
private function setTemasSaude($fichaAtividadeColetivaTransportPath)
{
$path = $fichaAtividadeColetivaTransportPath;
$temasSaude = [];
foreach ($this->domx->query("{$path}/temasParaSaude") as $context) {
$temasSaude[] = SaudeTema::find($context->nodeValue)->descricao;
}
$this->ficha->temas_saude = (object) [
'lista' => $temasSaude,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->temasParaSaude,
]),
];
}
private function setPraticasSaude($fichaAtividadeColetivaTransportPath)
{
$path = $fichaAtividadeColetivaTransportPath;
$praticasSaude = [];
foreach ($this->domx->query("{$path}/praticasEmSaude") as $context) {
$praticasSaude[] = SaudePratica::find($context->nodeValue)->descricao;
}
$this->ficha->praticas_saude = (object) [
'lista' => $praticasSaude,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->praticasEmSaude,
]),
];
}
private function setParticipantes($fichaAtividadeColetivaTransportPath)
{
$path = "{$fichaAtividadeColetivaTransportPath}/participantes";
$participantes = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$participanteModel = $this->inconsistenciaModel->atividadeColetivaParticipantes()
->wherePivot('posicao', $posicao)
->first();
$inconsistencias = $this->inconsistencias->participantes->{$posicao} ?? [];
$participantes[] = (object) [
'campos' => (object) [
'nomeParticipante' => $participanteModel->paciente->cidadao->nome,
'cnsParticipante' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsParticipante', $context)),
'cpfParticipante' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfParticipante', $context)),
'dataNascimento' => $this->getDateString($this->getFirstNodeValue('dataNascimento', $context)),
'avaliacaoAlterada' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('avaliacaoAlterada', $context))),
'peso' => $this->getFirstNodeValue('peso', $context),
'altura' => $this->getFirstNodeValue('altura', $context),
'cessouHabitoFumar' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('cessouHabitoFumar', $context))),
'abandonouGrupo' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('abandonouGrupo', $context))),
'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $context)),
],
'inconsistencias' => $this->getInconsistencias([
['CNS', fn () => $inconsistencias->cnsParticipante],
['CPF', fn () => $inconsistencias->cpfParticipante],
['Data de nascimento', fn () => $inconsistencias->dataNascimento],
['Alterada', fn () => $inconsistencias->avaliacaoAlterada],
['Peso', fn () => $inconsistencias->peso],
['Altura', fn () => $inconsistencias->altura],
['Parou de fumar', fn () => $inconsistencias->cessouHabitoFumar],
['Abandonou grupo', fn () => $inconsistencias->abandonouGrupo],
['Sexo', fn () => $inconsistencias->sexo],
]),
];
}
$this->ficha->participantes = (object) [
'lista' => $participantes,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->participantes,
]),
];
}
}

View File

@@ -0,0 +1,311 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\Avaliacao\Conclusao as AvaliacaoConclusao;
use App\Enums\AtencaoBasica\Avaliacao\Cuidador as AvaliacaoCuidador;
use App\Models\AtencaoBasica\Avaliacao\Conclusao;
use App\Models\AtencaoBasica\Avaliacao\CondicaoAvaliada;
use App\Models\AtencaoBasica\Avaliacao\Cuidador;
use App\Models\AtencaoBasica\Avaliacao\JustificativaConclusao;
use App\Models\AtencaoBasica\Avaliacao\Procedencia;
use App\Models\Cadastro\Localizacao\LogradouroTipo;
use App\Models\Cadastro\SujeitoAtencao\EtniaIndigena;
use App\Models\Cadastro\SujeitoAtencao\Nacionalidade;
use App\Models\Cadastro\SujeitoAtencao\RacaCor;
use App\Models\Geral\Turno;
use App\Models\Intranet\Estado;
use App\Models\Intranet\Pais;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Ocupacao;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
class FichaAvaliacao extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaavaliacaoelegibilidade');
}
public function __invoke()
{
$path = '//ns4:fichaAvaliacaoElegibilidadeTransport';
$this->setPaciente($path);
$this->setProfissional($path);
$this->setCondicoesAvalidas($path);
$this->setCid($path);
$this->setConclusao($path);
$this->setCuidador($path);
return $this->ficha;
}
private function setPaciente($fichaAvaliacaoElegibilidadeTransportPath)
{
$path = $fichaAvaliacaoElegibilidadeTransportPath;
$campos = (object) [
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$path}/cnsCidadao")),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue("{$path}/cpfCidadao")),
'dataNascimentoCidadao' => $this->getDateString($this->getFirstNodeValue("{$path}/dataNascimentoCidadao")),
'sexoCidadao' => $this->getSexo($this->getFirstNodeValue("{$path}/sexoCidadao")),
'nomeCidadao' => $this->getFirstNodeValue("{$path}/nomeCidadao"),
'racaCorCidadao' => $this->getFirstNodeValue("{$path}/racaCorCidadao")
? RacaCor::where('codigo_esus', $this->getFirstNodeValue("{$path}/racaCorCidadao"))->first()->descricao
: null,
'nomeSocialCidadao' => $this->getFirstNodeValue("{$path}/nomeSocialCidadao"),
'nomeMaeCidadao' => $this->getFirstNodeValue("{$path}/nomeMaeCidadao"),
'desconheceNomeMae' => DataUtil::getSimOuNao(
DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue("{$path}/desconheceNomeMae"))),
'codigoIbgeMunicipioNascimento' => $this->getFirstNodeValue("{$path}/codigoIbgeMunicipioNascimento"),
'nacionalidadeCidadao' => $this->getFirstNodeValue("{$path}/nacionalidadeCidadao")
? Nacionalidade::where(
'codigo_esus',
$this->getFirstNodeValue("{$path}/nacionalidadeCidadao")
)->first()->descricao
: null,
'emailCidadao' => $this->getFirstNodeValue("{$path}/emailCidadao"),
'numeroNisPisPasep' => $this->getFirstNodeValue("{$path}/numeroNisPisPasep"),
'nomePaiCidadao' => $this->getFirstNodeValue("{$path}/nomePaiCidadao"),
'desconheceNomePai' => DataUtil::getSimOuNao(
DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue("{$path}/desconheceNomePai"))),
'dtNaturalizacao' => $this->getDateString($this->getFirstNodeValue("{$path}/dtNaturalizacao")),
'portariaNaturalizacao' => $this->getFirstNodeValue("{$path}/portariaNaturalizacao"),
'dtEntradaBrasil' => $this->getDateString($this->getFirstNodeValue("{$path}/dtEntradaBrasil")),
'paisNascimento' => $this->getFirstNodeValue("{$path}/paisNascimento")
? Pais::where('codigo_esus', $this->getFirstNodeValue("{$path}/paisNascimento"))->first()->nome
: null,
'etnia' => $this->getFirstNodeValue("{$path}/etnia")
? EtniaIndigena::where('codigo_cadsus', $this->getFirstNodeValue("{$path}/etnia"))->first()->descricao
: null,
];
$inconsistencias = $this->getInconsistencias([
['CNS', fn () => $this->inconsistencias->cnsCidadao],
['CPF', fn () => $this->inconsistencias->cpfCidadao],
['Data de nascimento', fn () => $this->inconsistencias->dataNascimentoCidadao],
['Sexo', fn () => $this->inconsistencias->sexoCidadao],
['Nome', fn () => $this->inconsistencias->nomeCidadao],
['Raça/cor', fn () => $this->inconsistencias->racaCorCidadao],
['Nome social', fn () => $this->inconsistencias->nomeSocialCidadao],
['Nome da mãe', fn () => $this->inconsistencias->nomeMaeCidadao],
['Desconhece mãe', fn () => $this->inconsistencias->desconheceNomeMae],
['IBGE (Nascimento)', fn () => $this->inconsistencias->codigoIbgeMunicipioNascimento],
['Nacionalidade', fn () => $this->inconsistencias->nacionalidadeCidadao],
['E-mail', fn () => $this->inconsistencias->emailCidadao],
['PIS / PASEP | NIS', fn () => $this->inconsistencias->numeroNisPisPasep],
['Nome do pai', fn () => $this->inconsistencias->nomePaiCidadao],
['Desconhece pai', fn () => $this->inconsistencias->desconheceNomePai],
['Data de naturalização', fn () => $this->inconsistencias->dtNaturalizacao],
['Portaria de naturalização', fn () => $this->inconsistencias->portariaNaturalizacao],
['Data de entrada no Brasil', fn () => $this->inconsistencias->dtEntradaBrasil],
['País de nascimento', fn () => $this->inconsistencias->paisNascimento],
['Etnia', fn () => $this->inconsistencias->etnia],
]);
$this->ficha->paciente = (object) compact('campos', 'inconsistencias');
$this->setPacienteEndereco($path);
}
private function setPacienteEndereco($fichaAvaliacaoElegibilidadeTransportPath)
{
$path = "{$fichaAvaliacaoElegibilidadeTransportPath}/endereco";
$campos = (object) [
'bairro' => $this->getFirstNodeValue("{$path}/bairro"),
'cep' => MaskUtil::getCepMasked($this->getFirstNodeValue("{$path}/cep")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$path}/codigoIbgeMunicipio"),
'complemento' => $this->getFirstNodeValue("{$path}/complemento"),
'nomeLogradouro' => $this->getFirstNodeValue("{$path}/nomeLogradouro"),
'numero' => $this->getFirstNodeValue("{$path}/numero"),
'numeroDneUf' => $this->getFirstNodeValue("{$path}/numeroDneUf")
? Estado::where('codigo', $this->getFirstNodeValue("{$path}/numeroDneUf"))->first()->uf
: null,
'telefoneContato' => MaskUtil::getPhoneMasked($this->getFirstNodeValue("{$path}/telefoneContato")),
'tipoLogradouroNumeroDne' => $this->getFirstNodeValue("{$path}/tipoLogradouroNumeroDne")
? LogradouroTipo::where(
'codigo',
$this->getFirstNodeValue("{$path}/tipoLogradouroNumeroDne")
)->first()->descricao
: null,
'stSemNumero' => DataUtil::getSimOuNao(
DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue("{$path}/stSemNumero"))),
'pontoReferencia' => $this->getFirstNodeValue("{$path}/pontoReferencia"),
];
$inconsistencias = $this->getInconsistencias([
fn () => $this->inconsistencias->endereco,
['Bairro', fn () => $this->inconsistencias->endereco->bairro],
['CEP', fn () => $this->inconsistencias->endereco->cep],
['IBGE', fn () => $this->inconsistencias->endereco->codigoIbgeMunicipio],
['Complemento', fn () => $this->inconsistencias->endereco->complemento],
['Logradouro', fn () => $this->inconsistencias->endereco->nomeLogradouro],
['Número', fn () => $this->inconsistencias->endereco->numero],
['UF', fn () => $this->inconsistencias->endereco->numeroDneUf],
['Telefone', fn () => $this->inconsistencias->endereco->telefoneContato],
['Tipo de logradouro', fn () => $this->inconsistencias->endereco->tipoLogradouroNumeroDne],
['Sem número', fn () => $this->inconsistencias->endereco->stSemNumero],
['Ponto de referência', fn () => $this->inconsistencias->endereco->pontoReferencia],
]);
$this->ficha->paciente->campos->endereco = (object) compact('campos', 'inconsistencias');
}
private function setProfissional($fichaAvaliacaoElegibilidadeTransportPath)
{
$headerTransportPath = "{$fichaAvaliacaoElegibilidadeTransportPath}/headerTransport";
$lotacaoFormPrincipalPath = "{$headerTransportPath}/lotacaoFormPrincipal";
$ocupacao = $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'turno' => $this->getFirstNodeValue("{$fichaAvaliacaoElegibilidadeTransportPath}/turno")
? Turno::find($this->getFirstNodeValue("{$fichaAvaliacaoElegibilidadeTransportPath}/turno"))->nome
: null,
'atencaoDomiciliarProcedencia' => $this->getFirstNodeValue("{$fichaAvaliacaoElegibilidadeTransportPath}/atencaoDomiciliarProcedencia")
? Procedencia::find($this->getFirstNodeValue("{$fichaAvaliacaoElegibilidadeTransportPath}/atencaoDomiciliarProcedencia"))->descricao
: null,
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
'profissionalNome' => $this->inconsistenciaModel->avaliacao->usuario->cidadao->nome,
'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/profissionalCNS")),
'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'cnes' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cnes"),
'ine' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/ine"),
];
$inconsistencias = $this->getInconsistencias([
['Turno', fn () => $this->inconsistencias->turno],
['Procedência', fn () => $this->inconsistencias->atencaoDomiciliarProcedencia],
['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->profissionalCNS],
['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cboCodigo_2002],
['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cnes],
['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->ine],
]);
$this->ficha->profissional = (object) compact('campos', 'inconsistencias');
}
private function setCondicoesAvalidas($fichaAvaliacaoElegibilidadeTransportPath)
{
$path = "{$fichaAvaliacaoElegibilidadeTransportPath}/condicoesAvaliadas";
$condicoesAvaliadas = [];
foreach ($this->domx->query($path) as $context) {
$condicoesAvaliadas[] = CondicaoAvaliada::find($context->nodeValue)->descricao;
}
$this->ficha->condicoesAvaliadas = (object) [
'lista' => $condicoesAvaliadas,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->condicoesAvaliadas
]),
];
}
private function setCid($fichaAvaliacaoElegibilidadeTransportPath)
{
$path = $fichaAvaliacaoElegibilidadeTransportPath;
$cidPrincipal = $this->getFirstNodeValue("{$path}/cid10Principal")
? Cid::where('codigo', $this->getFirstNodeValue("{$path}/cid10Principal"))->first()
: null;
$cidSecundarioUm = $this->getFirstNodeValue("{$path}/cid10SecundarioUm")
? Cid::where('codigo', $this->getFirstNodeValue("{$path}/cid10SecundarioUm"))->first()
: null;
$cidSecundarioDois = $this->getFirstNodeValue("{$path}/cid10SecundarioDois")
? Cid::where('codigo', $this->getFirstNodeValue("{$path}/cid10SecundarioDois"))->first()
: null;
$campos = (object) [
'cid10Principal' => $cidPrincipal
? MaskUtil::getCidMasked($cidPrincipal->codigo) . " - {$cidPrincipal->nome}"
: null,
'cid10SecundarioUm' => $cidSecundarioUm
? MaskUtil::getCidMasked($cidSecundarioUm->codigo) . " - {$cidSecundarioUm->nome}"
: null,
'cid10SecundarioDois' => $cidSecundarioDois
? MaskUtil::getCidMasked($cidSecundarioDois->codigo) . " - {$cidSecundarioDois->nome}"
: null,
];
$inconsistencias = $this->getInconsistencias([
['CID Primário', fn () => $this->inconsistencias->cid10Principal],
['CID Secundário', fn () => $this->inconsistencias->cid10SecundarioUm],
['CID Terciário', fn () => $this->inconsistencias->cid10SecundarioDois],
]);
$this->ficha->cid = (object) compact('campos', 'inconsistencias');
}
private function setConclusao($fichaAvaliacaoElegibilidadeTransportPath)
{
$path = $fichaAvaliacaoElegibilidadeTransportPath;
$conclusao = $this->getFirstNodeValue("{$path}/atencaoDomiciliarModalidade")
? Conclusao::find($this->getFirstNodeValue("{$path}/atencaoDomiciliarModalidade"))
: null;
$campos = (object) [
'atencaoDomiciliarModalidade' => $conclusao->descricao ?? null,
'elegivel' => ($conclusao->id ?? null) !== AvaliacaoConclusao::INELEGIVEL,
'conclusaoDestinoInelegivel' => $this->getFirstNodeValue("{$path}/conclusaoDestinoInelegivel")
? JustificativaConclusao::where(
'codigo',
$this->getFirstNodeValue("{$path}/conclusaoDestinoInelegivel")
)->first()->descricao
: null,
'conclusaoDestinoElegivel' => $this->getFirstNodeValue("{$path}/conclusaoDestinoElegivel")
? JustificativaConclusao::where(
'codigo',
$this->getFirstNodeValue("{$path}/conclusaoDestinoElegivel")
)->first()->descricao
: null,
];
$inconsistencias = $this->getInconsistencias([
['Conclusão', fn () => $this->inconsistencias->atencaoDomiciliarModalidade],
fn () => $this->inconsistencias->conclusaoDestinoInelegivel,
fn () => $this->inconsistencias->conclusaoDestinoElegivel,
]);
$this->ficha->conclusao = (object) compact('campos', 'inconsistencias');
}
private function setCuidador($fichaAvaliacaoElegibilidadeTransportPath)
{
$path = $fichaAvaliacaoElegibilidadeTransportPath;
$cuidador = $this->getFirstNodeValue("{$path}/cuidadorCidadao")
? Cuidador::find($this->getFirstNodeValue("{$path}/cuidadorCidadao"))
: null;
$campos = (object) [
'cuidadorCidadao' => $cuidador->descricao ?? null,
'possuiCuidador' => ($cuidador->id ?? null) !== AvaliacaoCuidador::NAO_POSSUI,
'cnsCuidador' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$path}/cnsCuidador")),
'cpfCuidador' => MaskUtil::getCpfMasked($this->getFirstNodeValue("{$path}/cpfCuidador")),
];
$inconsistencias = $this->getInconsistencias([
['Cuidador', fn () => $this->inconsistencias->cuidadorCidadao],
['CNS', fn () => $this->inconsistencias->cnsCuidador],
['CPF', fn () => $this->inconsistencias->cpfCuidador],
]);
$this->ficha->cuidador = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,377 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\CadastroDomiciliar\ImovelTipo as CadastroDomiciliarImovelTipo;
use App\Enums\AtencaoBasica\Exportacao\SalarioMinimo;
use App\Models\AtencaoBasica\CadastroDomiciliar\Abastecimento;
use App\Models\AtencaoBasica\CadastroDomiciliar\Animal;
use App\Models\AtencaoBasica\CadastroDomiciliar\DestinoLixo;
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipo;
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipoAcesso;
use App\Models\AtencaoBasica\CadastroDomiciliar\FormaEscoamento;
use App\Models\AtencaoBasica\CadastroDomiciliar\ImovelTipo;
use App\Models\AtencaoBasica\CadastroDomiciliar\MaterialPredominante;
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoDomicilio;
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoRural;
use App\Models\AtencaoBasica\CadastroDomiciliar\Tratamento;
use App\Models\Cadastro\Localizacao\LogradouroTipo;
use App\Models\Cadastro\Localizacao\Zona;
use App\Models\Intranet\Estado;
use App\Models\Sigtap\Ocupacao;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
class FichaCadastroDomiciliar extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/cadastrodomiciliar');
}
public function __invoke()
{
$path = '//ns4:cadastroDomiciliarTransport';
$this->setEndereco($path);
$this->setRecusaCadastro($path);
$this->setResidencia($path);
$this->setProfissional($path);
$this->setResidentes($path);
$this->setInstituicaoPermanencia($path);
return $this->ficha;
}
private function setEndereco($cadastroDomiciliarTransportPath)
{
$enderecoLocalPermanenciaPath = "{$cadastroDomiciliarTransportPath}/enderecoLocalPermanencia";
$campos = (object) [
'latitude' => $this->getFirstNodeValue("{$cadastroDomiciliarTransportPath}/latitude"),
'longitude' => $this->getFirstNodeValue("{$cadastroDomiciliarTransportPath}/longitude"),
'bairro' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/bairro"),
'cep' => MaskUtil::getCepMasked($this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/cep")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/codigoIbgeMunicipio"),
'complemento' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/complemento"),
'nomeLogradouro' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/nomeLogradouro"),
'numero' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/numero"),
'numeroDneUf' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/numeroDneUf")
? Estado::where('codigo', $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/numeroDneUf"))
->first()->uf
: null,
'telefoneContato' => MaskUtil::getPhoneMasked($this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/telefoneContato")),
'tipoLogradouroNumeroDne' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/tipoLogradouroNumeroDne")
? LogradouroTipo::where('codigo', $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/tipoLogradouroNumeroDne"))
->first()->descricao
: null,
'stSemNumero' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/stSemNumero"))),
'pontoReferencia' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/pontoReferencia"),
'microArea' => $this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/microArea"),
'stForaArea' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$enderecoLocalPermanenciaPath}/stForaArea"))),
];
$inconsistencias = $this->getInconsistencias([
['Latitude', fn () => $this->inconsistencias->latitude],
['Longitude', fn () => $this->inconsistencias->longitude],
['Bairro', fn () => $this->inconsistencias->enderecoLocalPermanencia->bairro],
['CEP', fn () => $this->inconsistencias->enderecoLocalPermanencia->cep],
['IBGE', fn () => $this->inconsistencias->enderecoLocalPermanencia->codigoIbgeMunicipio],
['Complemento', fn () => $this->inconsistencias->enderecoLocalPermanencia->complemento],
['Logradouro', fn () => $this->inconsistencias->enderecoLocalPermanencia->nomeLogradouro],
['Número', fn () => $this->inconsistencias->enderecoLocalPermanencia->numero],
['UF', fn () => $this->inconsistencias->enderecoLocalPermanencia->numeroDneUf],
['Telefone', fn () => $this->inconsistencias->enderecoLocalPermanencia->telefoneContato],
['Tipo de logradouro', fn () => $this->inconsistencias->enderecoLocalPermanencia->tipoLogradouroNumeroDne],
['Sem número', fn () => $this->inconsistencias->enderecoLocalPermanencia->stSemNumero],
['Ponto de referência', fn () => $this->inconsistencias->enderecoLocalPermanencia->pontoReferencia],
['Microárea', fn () => $this->inconsistencias->enderecoLocalPermanencia->microArea],
['Fora de área', fn () => $this->inconsistencias->enderecoLocalPermanencia->stForaArea],
]);
$this->ficha->endereco = (object) compact('campos', 'inconsistencias');
}
private function setRecusaCadastro($cadastroDomiciliarTransportPath)
{
$path = $cadastroDomiciliarTransportPath;
$campos = (object) [
'statusTermoRecusa' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTermoRecusa"))),
];
$inconsistencias = $this->getInconsistencias([
[
'Usuário recusou o cadastro por meio do termo de Recusa do Cadastro',
fn () => $this->inconsistencias->statusTermoRecusa
],
]);
$this->ficha->recusa_cadastro = (object) compact('campos', 'inconsistencias');
}
private function setResidencia($cadastroDomiciliarTransportPath)
{
$condicaoMoradiaPath = "{$cadastroDomiciliarTransportPath}/condicaoMoradia";
$tipoImovel = $this->getFirstNodeValue("{$cadastroDomiciliarTransportPath}/tipoDeImovel")
? ImovelTipo::where('codigo_esus', $this->getFirstNodeValue("{$cadastroDomiciliarTransportPath}/tipoDeImovel"))
->first()
: null;
$campos = (object) [
'showInstituicaoPermanencia' => collect([
CadastroDomiciliarImovelTipo::ABRIGO,
CadastroDomiciliarImovelTipo::INSTITUICAO_LONGA_PERMANENCIA_IDOSOS,
CadastroDomiciliarImovelTipo::UNIDADE_PRISIONAL,
CadastroDomiciliarImovelTipo::UNIDADE_MEDIDA_SOCIO_EDUCATIVA,
CadastroDomiciliarImovelTipo::DELEGACIA
])->contains($tipoImovel->id ?? null),
'showResidentes' => ($tipoImovel->id ?? null) === CadastroDomiciliarImovelTipo::DOMICILIO,
'tipoDeImovel' => $tipoImovel->descricao ?? null,
'quantosAnimaisNoDomicilio' => $this->getFirstNodeValue("{$cadastroDomiciliarTransportPath}/quantosAnimaisNoDomicilio"),
'stAnimaisNoDomicilio' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$cadastroDomiciliarTransportPath}/stAnimaisNoDomicilio"))),
'abastecimentoAgua' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/abastecimentoAgua")
? Abastecimento::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/abastecimentoAgua"))
->first()->descricao
: null,
'areaProducaoRural' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/areaProducaoRural")
? SituacaoRural::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/areaProducaoRural"))
->first()->descricao
: null,
'destinoLixo' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/destinoLixo")
? DestinoLixo::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/destinoLixo"))
->first()->descricao
: null,
'formaEscoamentoBanheiro' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/formaEscoamentoBanheiro")
? FormaEscoamento::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/formaEscoamentoBanheiro"))
->first()->descricao
: null,
'localizacao' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/localizacao")
? Zona::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/localizacao"))->first()->descricao
: null,
'materialPredominanteParedesExtDomicilio' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/materialPredominanteParedesExtDomicilio")
? MaterialPredominante::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/materialPredominanteParedesExtDomicilio"))
->first()->descricao
: null,
'nuComodos' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/nuComodos"),
'nuMoradores' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/nuMoradores"),
'situacaoMoradiaPosseTerra' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/situacaoMoradiaPosseTerra")
? SituacaoDomicilio::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/situacaoMoradiaPosseTerra"))
->first()->descricao
: null,
'stDisponibilidadeEnergiaEletrica' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$condicaoMoradiaPath}/stDisponibilidadeEnergiaEletrica"))),
'tipoAcessoDomicilio' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/tipoAcessoDomicilio")
? DomicilioTipoAcesso::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/tipoAcessoDomicilio"))
->first()->descricao
: null,
'tipoDomicilio' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/tipoDomicilio")
? DomicilioTipo::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/tipoDomicilio"))
->first()->descricao
: null,
'aguaConsumoDomicilio' => $this->getFirstNodeValue("{$condicaoMoradiaPath}/aguaConsumoDomicilio")
? Tratamento::where('codigo_esus', $this->getFirstNodeValue("{$condicaoMoradiaPath}/aguaConsumoDomicilio"))
->first()->descricao
: null,
];
$animaisNoDomicilio = [];
foreach ($this->domx->query("{$cadastroDomiciliarTransportPath}/animaisNoDomicilio") as $context) {
$animaisNoDomicilio[] = Animal::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
$campos->animaisNoDomicilio = collect($animaisNoDomicilio)->join(', ');
$inconsistencias = $this->getInconsistencias([
['Tipo do imóvel', fn () => $this->inconsistencias->tipoDeImovel],
['Animais', fn () => $this->inconsistencias->animaisNoDomicilio],
['Quantidade', fn () => $this->inconsistencias->quantosAnimaisNoDomicilio],
['Possui animais?', fn () => $this->inconsistencias->stAnimaisNoDomicilio],
['Abastecimento de água', fn () => $this->inconsistencias->condicaoMoradia->abastecimentoAgua],
['Situação rural', fn () => $this->inconsistencias->condicaoMoradia->areaProducaoRural],
['Destino do lixo', fn () => $this->inconsistencias->condicaoMoradia->destinoLixo],
['Forma de escoamento sanitário', fn () => $this->inconsistencias->condicaoMoradia->formaEscoamentoBanheiro],
['Zona', fn () => $this->inconsistencias->condicaoMoradia->localizacao],
['Material predominante - paredes externas', fn () => $this->inconsistencias->condicaoMoradia->materialPredominanteParedesExtDomicilio],
['Cômodos', fn () => $this->inconsistencias->condicaoMoradia->nuComodos],
['Moradores', fn () => $this->inconsistencias->condicaoMoradia->nuMoradores],
['Situação', fn () => $this->inconsistencias->condicaoMoradia->situacaoMoradiaPosseTerra],
['Disponibilidade de energia elétrica', fn () => $this->inconsistencias->condicaoMoradia->stDisponibilidadeEnergiaEletrica],
['Tipo de acesso ao domicílio', fn () => $this->inconsistencias->condicaoMoradia->tipoAcessoDomicilio],
['Tipo de domicílio', fn () => $this->inconsistencias->condicaoMoradia->tipoDomicilio],
['Tratamento de água', fn () => $this->inconsistencias->condicaoMoradia->aguaConsumoDomicilio],
]);
$this->ficha->residencia = (object) compact('campos', 'inconsistencias');
}
private function setProfissional($cadastroDomiciliarTransportPath)
{
$headerTransportPath = "{$cadastroDomiciliarTransportPath}/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->cadastroDomiciliar->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', 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->profissional = (object) compact('campos', 'inconsistencias');
}
private function setResidentes($cadastroDomiciliarTransportPath)
{
$path = "{$cadastroDomiciliarTransportPath}/familias";
$residentes = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$paciente = $this->inconsistenciaModel->cadastroDomiciliarPacientes()
->wherePivot('posicao', $posicao)
->first();
$residentes[] = (object) [
'nome' => $paciente->cidadao->nome,
'dataNascimentoResponsavel' => $this->getDateString($this->getFirstNodeValue('dataNascimentoResponsavel', $context)),
'numeroCnsResponsavel' => MaskUtil::getCnsMasked($this->getFirstNodeValue('numeroCnsResponsavel', $context)),
'cpfResponsavel' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfResponsavel', $context)),
'numeroMembrosFamilia' => $this->getFirstNodeValue('numeroMembrosFamilia', $context),
'numeroProntuario' => $this->getFirstNodeValue('numeroProntuario', $context),
'rendaFamiliar' => $this->getRendaFamiliar($this->getFirstNodeValue('rendaFamiliar', $context)),
];
}
$this->ficha->residentes = (object) [
'lista' => $residentes,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->familias,
])
];
}
private function getRendaFamiliar($rendaId)
{
switch ($rendaId) {
case SalarioMinimo::UM_QUARTO_SALARIO_MINIMO: {
return 'Um quarto do salário mínimo';
}
case SalarioMinimo::MEIO_SALARIO_MINIMO: {
return 'Meio salário mínimo';
}
case SalarioMinimo::UM_QUARTO_SALARIO_MINIMO: {
return 'Um quarto do salário mínimo';
}
case SalarioMinimo::DOIS_SALARIO_MINIMO: {
return 'Dois salários mínimos';
}
case SalarioMinimo::TRES_SALARIO_MINIMO: {
return 'Três salários mínimos';
}
case SalarioMinimo::QUATRO_SALARIO_MINIMO: {
return 'Quatro salários mínimos';
}
case SalarioMinimo::ACIMA_QUATRO_SALARIO_MINIMO: {
return 'Acima de quatro salários mínimos';
}
default: {
return null;
}
}
}
private function setInstituicaoPermanencia($cadastroDomiciliarTransportPath)
{
$path = "{$cadastroDomiciliarTransportPath}/instituicaoPermanencia";
$campos = (object) [
'nomeInstituicaoPermanencia' => $this->getFirstNodeValue("{$path}/nomeInstituicaoPermanencia"),
'stOutrosProfissionaisVinculados' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/stOutrosProfissionaisVinculados"))),
];
$inconsistencias = $this->getInconsistencias([
[
'Nome da instituição de permanência',
fn () => $this->inconsistencias->instituicaoPermanencia->nomeInstituicaoPermanencia
],
[
'Existem outros profissionais de saúde vinculados à instituição (não inclui profissionais da rede pública de saúde)?',
fn () => $this->inconsistencias->instituicaoPermanencia->stOutrosProfissionaisVinculados
],
]);
$this->ficha->instituicao_permanencia = (object) compact('campos', 'inconsistencias');
$this->setIdentificacaoResponsavelTecnico($path);
}
private function setIdentificacaoResponsavelTecnico($instituicaoPermanenciaPath)
{
$path = $instituicaoPermanenciaPath;
$campos = (object) [
'nomeResponsavelTecnico' => $this->getFirstNodeValue("{$path}/nomeResponsavelTecnico"),
'cnsResponsavelTecnico' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$path}/cnsResponsavelTecnico")),
'cargoInstituicao' => $this->getFirstNodeValue("{$path}/cargoInstituicao"),
'telefoneResponsavelTecnico' => MaskUtil::getPhoneMasked($this->getFirstNodeValue("{$path}/telefoneResponsavelTecnico")),
];
$inconsistencias = $this->getInconsistencias([
[
'Responsável técnico pela instituição',
fn () => $this->inconsistencias->instituicaoPermanencia->nomeResponsavelTecnico
],
[
'CNS do responsável',
fn () => $this->inconsistencias->instituicaoPermanencia->cnsResponsavelTecnico
],
[
'Cargo na instituição',
fn () => $this->inconsistencias->instituicaoPermanencia->cargoInstituicao
],
[
'Telefone de contato',
fn () => $this->inconsistencias->instituicaoPermanencia->telefoneResponsavelTecnico
],
]);
$this->ficha->instituicao_permanencia->campos->identificacao_responsavel_tecnico = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,644 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\CadastroIndividual\SaidaCidadao as CadastroIndividualSaidaCidadao;
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
use App\Models\AtencaoBasica\CadastroIndividual\AcompanhamentoInfantil;
use App\Models\AtencaoBasica\CadastroIndividual\AlimentacaoDiaria;
use App\Models\AtencaoBasica\CadastroIndividual\ComunidadeTradicional;
use App\Models\AtencaoBasica\CadastroIndividual\Curso;
use App\Models\AtencaoBasica\CadastroIndividual\DoencaCardiaca;
use App\Models\AtencaoBasica\CadastroIndividual\DoencaRespiratoria;
use App\Models\AtencaoBasica\CadastroIndividual\HigienePessoal;
use App\Models\AtencaoBasica\CadastroIndividual\OrientacaoSexual;
use App\Models\AtencaoBasica\CadastroIndividual\OrigemAlimentacao;
use App\Models\AtencaoBasica\CadastroIndividual\Parentesco;
use App\Models\AtencaoBasica\CadastroIndividual\Peso;
use App\Models\AtencaoBasica\CadastroIndividual\ProblemasRins;
use App\Models\AtencaoBasica\CadastroIndividual\SaidaCidadao;
use App\Models\AtencaoBasica\CadastroIndividual\SituacaoMercadoTrabalho;
use App\Models\AtencaoBasica\CadastroIndividual\SituacaoRua;
use App\Models\Cadastro\SujeitoAtencao\DeficienciaBase;
use App\Models\Cadastro\SujeitoAtencao\EtniaIndigena;
use App\Models\Cadastro\SujeitoAtencao\IdentidadeGenero;
use App\Models\Cadastro\SujeitoAtencao\Nacionalidade;
use App\Models\Cadastro\SujeitoAtencao\RacaCor;
use App\Models\Intranet\Pais;
use App\Models\Sigtap\Ocupacao;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
class FichaCadastroIndividual extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/cadastroindividual');
}
public function __invoke()
{
$path = '//ns4:cadastroIndividualTransport';
$this->setProfissional($path);
$this->setPaciente($path);
$this->setInformacaoSociodemografica($path);
$this->setInformacaoSocioeconomica($path);
$this->setRecusaCadastro($path);
$this->setCondicaoSaudeGeral($path);
$this->setSituacaoRua($path);
return $this->ficha;
}
private function setProfissional($cadastroIndividualTransportPath)
{
$headerTransportPath = "{$cadastroIndividualTransportPath}/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->cadastroIndividual->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', 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->profissional = (object) compact('campos', 'inconsistencias');
}
private function setPaciente($cadastroIndividualTransportPath)
{
$path = "{$cadastroIndividualTransportPath}/identificacaoUsuarioCidadao";
$campos = (object) [
'nomeSocial' => $this->getFirstNodeValue("{$path}/nomeSocial"),
'codigoIbgeMunicipioNascimento' => $this->getFirstNodeValue("{$path}/codigoIbgeMunicipioNascimento"),
'dataNascimentoCidadao' => $this->getDateString($this->getFirstNodeValue("{$path}/dataNascimentoCidadao")),
'desconheceNomeMae' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/desconheceNomeMae"))),
'emailCidadao' => $this->getFirstNodeValue("{$path}/emailCidadao"),
'nacionalidadeCidadao' => $this->getFirstNodeValue("{$path}/nacionalidadeCidadao")
? Nacionalidade::where('codigo_esus', $this->getFirstNodeValue("{$path}/nacionalidadeCidadao"))
->first()->descricao
: null,
'nomeCidadao' => $this->getFirstNodeValue("{$path}/nomeCidadao"),
'nomeMaeCidadao' => $this->getFirstNodeValue("{$path}/nomeMaeCidadao"),
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$path}/cnsCidadao")),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue("{$path}/cpfCidadao")),
'telefoneCelular' => MaskUtil::getPhoneMasked($this->getFirstNodeValue("{$path}/telefoneCelular")),
'numeroNisPisPasep' => $this->getFirstNodeValue("{$path}/numeroNisPisPasep"),
'paisNascimento' => $this->getFirstNodeValue("{$path}/paisNascimento")
? Pais::where('codigo_esus', $this->getFirstNodeValue("{$path}/paisNascimento"))->first()->nome
: null,
'racaCorCidadao' => $this->getFirstNodeValue("{$path}/racaCorCidadao")
? RacaCor::where('codigo_esus', $this->getFirstNodeValue("{$path}/racaCorCidadao"))->first()->descricao
: null,
'sexoCidadao' => $this->getSexo($this->getFirstNodeValue("{$path}/sexoCidadao")),
'statusEhResponsavel' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusEhResponsavel"))),
'etnia' => $this->getFirstNodeValue("{$path}/etnia")
? EtniaIndigena::where('codigo_cadsus', $this->getFirstNodeValue("{$path}/etnia"))->first()->descricao
: null,
'nomePaiCidadao' => $this->getFirstNodeValue("{$path}/nomePaiCidadao"),
'desconheceNomePai' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/desconheceNomePai"))),
'dtNaturalizacao' => $this->getDateString($this->getFirstNodeValue("{$path}/dtNaturalizacao")),
'portariaNaturalizacao' => $this->getFirstNodeValue("{$path}/portariaNaturalizacao"),
'dtEntradaBrasil' => $this->getDateString($this->getFirstNodeValue("{$path}/dtEntradaBrasil")),
'microArea' => $this->getFirstNodeValue("{$path}/microArea"),
'stForaArea' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/stForaArea"))),
];
$inconsistencias = $this->getInconsistencias([
['Nome social', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->nomeSocial],
['IBGE (Nascimento)', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->codigoIbgeMunicipioNascimento],
['Data de nascimento', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->dataNascimentoCidadao],
['Desconhece mãe', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->desconheceNomeMae],
['E-mail', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->emailCidadao],
['Nacionalidade', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->nacionalidadeCidadao],
['Nome', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->nomeCidadao],
['Nome da mãe', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->nomeMaeCidadao],
['CNS', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->cnsCidadao],
['CPF', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->cpfCidadao],
['Telefone', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->telefoneCelular],
['PIS / PASEP | NIS', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->numeroNisPisPasep],
['País de nascimento', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->paisNascimento],
['Raça/cor', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->racaCorCidadao],
['Sexo', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->sexoCidadao],
['É responsável', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->statusEhResponsavel],
['Etnia', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->etnia],
['Nome do pai', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->nomePaiCidadao],
['Desconhece pai', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->desconheceNomePai],
['Data de naturalização', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->dtNaturalizacao],
['Portaria de naturalização', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->portariaNaturalizacao],
['Data de entrada no Brasil', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->dtEntradaBrasil],
['Microárea', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->microArea],
['Fora de área', fn () => $this->inconsistencias->identificacaoUsuarioCidadao->stForaArea],
]);
$this->ficha->paciente = (object) compact('campos', 'inconsistencias');
}
private function setInformacaoSociodemografica($cadastroIndividualTransportPath)
{
$path = "{$cadastroIndividualTransportPath}/informacoesSocioDemograficas";
$ocupacao = $this->getFirstNodeValue("{$path}/ocupacaoCodigoCbo2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$path}/ocupacaoCodigoCbo2002"))->first()
: null;
$campos = (object) [
'grauInstrucaoCidadao' => $this->getFirstNodeValue("{$path}/grauInstrucaoCidadao")
? Curso::where('codigo_esus', $this->getFirstNodeValue("{$path}/grauInstrucaoCidadao"))->first()->descricao
: null,
'ocupacaoCodigoCbo2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null,
'orientacaoSexualCidadao' => $this->getFirstNodeValue("{$path}/orientacaoSexualCidadao")
? OrientacaoSexual::where('codigo_esus', $this->getFirstNodeValue("{$path}/orientacaoSexualCidadao"))
->first()->descricao
: null,
'relacaoParentescoCidadao' => $this->getFirstNodeValue("{$path}/relacaoParentescoCidadao")
? Parentesco::where('codigo_esus', $this->getFirstNodeValue("{$path}/relacaoParentescoCidadao"))->first()->descricao
: null,
'situacaoMercadoTrabalhoCidadao' => $this->getFirstNodeValue("{$path}/situacaoMercadoTrabalhoCidadao")
? SituacaoMercadoTrabalho::where('codigo_esus', $this->getFirstNodeValue("{$path}/situacaoMercadoTrabalhoCidadao"))
->first()->descricao
: null,
'statusDesejaInformarOrientacaoSexual' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusDesejaInformarOrientacaoSexual"))),
'statusFrequentaBenzedeira' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusFrequentaBenzedeira"))),
'statusFrequentaEscola' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusFrequentaEscola"))),
'statusMembroPovoComunidadeTradicional' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusMembroPovoComunidadeTradicional"))),
'statusParticipaGrupoComunitario' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusParticipaGrupoComunitario"))),
'statusPossuiPlanoSaudePrivado' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusPossuiPlanoSaudePrivado"))),
'statusTemAlgumaDeficiencia' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemAlgumaDeficiencia"))),
'identidadeGeneroCidadao' => $this->getFirstNodeValue("{$path}/identidadeGeneroCidadao")
? IdentidadeGenero::where('codigo_esus', $this->getFirstNodeValue("{$path}/identidadeGeneroCidadao"))
->first()->descricao
: null,
'statusDesejaInformarIdentidadeGenero' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusDesejaInformarIdentidadeGenero"))),
'coPovoComunidadeTradicional' => $this->getFirstNodeValue("{$path}/coPovoComunidadeTradicional")
? ComunidadeTradicional::where('codigo_esus', $this->getFirstNodeValue("{$path}/coPovoComunidadeTradicional"))
->first()->descricao
: null,
];
$deficienciasCidadao = [];
$responsaveisPorCrianca = [];
foreach ($this->domx->query("{$path}/deficienciasCidadao") as $context) {
$deficienciasCidadao[] = DeficienciaBase::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
foreach ($this->domx->query("{$path}/responsavelPorCrianca") as $context) {
$responsaveisPorCrianca[] = AcompanhamentoInfantil::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
$campos->deficienciasCidadao = collect($deficienciasCidadao)->join(', ');
$campos->responsaveisPorCrianca = collect($responsaveisPorCrianca)->join(', ');
$inconsistencias = $this->getInconsistencias([
[
'Deficiências',
fn () => $this->inconsistencias->informacoesSocioDemograficas->deficienciasCidadao
],
[
'Qual é o curso mais elevado que frequenta ou frequentou?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->grauInstrucaoCidadao
],
[
'Ocupação',
fn () => $this->inconsistencias->informacoesSocioDemograficas->ocupacaoCodigoCbo2002
],
[
'Orientação sexual',
fn () => $this->inconsistencias->informacoesSocioDemograficas->orientacaoSexualCidadao
],
[
'Relação de parentesco com o responsável familiar',
fn () => $this->inconsistencias->informacoesSocioDemograficas->relacaoParentescoCidadao
],
[
'Situação no mercado de trabalho',
fn () => $this->inconsistencias->informacoesSocioDemograficas->situacaoMercadoTrabalhoCidadao
],
[
'Deseja informar orientação sexual?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusDesejaInformarOrientacaoSexual
],
[
'Frequenta cuidador tradicional?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusFrequentaBenzedeira
],
[
'Frequenta escola ou creche?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusFrequentaEscola
],
[
'É membro de povo ou comunidade tradicional?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusMembroPovoComunidadeTradicional
],
[
'Participa de grupo comunitário?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusParticipaGrupoComunitario
],
[
'Possui plano de saúde privado?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusPossuiPlanoSaudePrivado
],
[
'Tem alguma deficiência?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusTemAlgumaDeficiencia
],
[
'Identidade de gênero',
fn () => $this->inconsistencias->informacoesSocioDemograficas->identidadeGeneroCidadao
],
[
'Deseja informar identidade de gênero?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->statusDesejaInformarIdentidadeGenero
],
[
'Crianças de 0 a 9 anos, com quem fica?',
fn () => $this->inconsistencias->informacoesSocioDemograficas->responsavelPorCrianca
],
[
'Povo ou comunidade tradicional',
fn () => $this->inconsistencias->informacoesSocioDemograficas->coPovoComunidadeTradicional
],
]);
$this->ficha->informacao_sociodemografica = (object) compact('campos', 'inconsistencias');
$this->setSaidaCidadaoCadastro($cadastroIndividualTransportPath);
}
private function setSaidaCidadaoCadastro($cadastroIndividualTransportPath)
{
$path = "{$cadastroIndividualTransportPath}/saidaCidadaoCadastro";
$motivo = $this->getFirstNodeValue("{$path}/motivoSaidaCidadao")
? SaidaCidadao::where('codigo_esus', $this->getFirstNodeValue("{$path}/motivoSaidaCidadao"))->first()
: null;
$campos = (object) [
'is_motivo_saida_obito' => ($motivo->id ?? null) === CadastroIndividualSaidaCidadao::OBITO,
'motivoSaidaCidadao' => $motivo->descricao ?? null,
'dataObito' => $this->getDateString($this->getFirstNodeValue("{$path}/dataObito")),
'numeroDO' => $this->getFirstNodeValue("{$path}/numeroDO"),
];
$inconsistencias = $this->getInconsistencias([
['Motivo', fn () => $this->inconsistencias->saidaCidadaoCadastro->motivoSaidaCidadao],
['Data de óbito', fn () => $this->inconsistencias->saidaCidadaoCadastro->dataObito],
['Número da declaração de óbito', fn () => $this->inconsistencias->saidaCidadaoCadastro->numeroDO],
]);
$this->ficha->informacao_sociodemografica->campos->saida_cidadao_cadastro = (object) compact('campos', 'inconsistencias');
}
private function setInformacaoSocioeconomica($cadastroIndividualTransportPath)
{
$path = "{$cadastroIndividualTransportPath}/informacoesSocioEconomicas";
$campos = (object) [
'alimentosAcabaramAntesTerDinheiroComprarMais' => $this->getSimNaoNaoInformado(
$this->getFirstNodeValue("{$path}/alimentosAcabaramAntesTerDinheiroComprarMais")),
'comeuAlgunsAlimentosQueTinhaDinheiroAcabou' => $this->getSimNaoNaoInformado(
$this->getFirstNodeValue("{$path}/comeuAlgunsAlimentosQueTinhaDinheiroAcabou")),
];
$inconsistencias = $this->getInconsistencias([
[
'Nos últimos três meses, os alimentos acabaram antes que você tivesse dinheiro para comprar mais comida?',
fn () => $this->inconsistencias->informacoesSocioEconomicas->alimentosAcabaramAntesTerDinheiroComprarMais
],
[
'Nos últimos três meses, você comeu apenas alguns alimentos que ainda tinha, porque o dinheiro acabou?',
fn () => $this->inconsistencias->informacoesSocioEconomicas->comeuAlgunsAlimentosQueTinhaDinheiroAcabou
],
]);
$this->ficha->informacao_socioeconomica = (object) compact('campos', 'inconsistencias');
}
private function setRecusaCadastro($cadastroIndividualTransportPath)
{
$path = $cadastroIndividualTransportPath;
$campos = (object) [
'statusTermoRecusaCadastroIndividualAtencaoBasica' => DataUtil::getSimOuNao(
DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTermoRecusaCadastroIndividualAtencaoBasica")
)
)
];
$inconsistencias = $this->getInconsistencias([
[
'Usuário recusou o cadastro por meio do termo de Recusa do Cadastro',
fn () => $this->inconsistencias->statusTermoRecusaCadastroIndividualAtencaoBasica
],
]);
$this->ficha->recusa_cadastro = (object) compact('campos', 'inconsistencias');
}
private function setCondicaoSaudeGeral($cadastroIndividualTransportPath)
{
$path = "{$cadastroIndividualTransportPath}/condicoesDeSaude";
$campos = (object) [
'descricaoCausaInternacaoEm12Meses' => $this->getFirstNodeValue("{$path}/descricaoCausaInternacaoEm12Meses"),
'descricaoOutraCondicao1' => $this->getFirstNodeValue("{$path}/descricaoOutraCondicao1"),
'descricaoOutraCondicao2' => $this->getFirstNodeValue("{$path}/descricaoOutraCondicao2"),
'descricaoOutraCondicao3' => $this->getFirstNodeValue("{$path}/descricaoOutraCondicao3"),
'descricaoPlantasMedicinaisUsadas' => $this->getFirstNodeValue("{$path}/descricaoPlantasMedicinaisUsadas"),
'maternidadeDeReferencia' => $this->getFirstNodeValue("{$path}/maternidadeDeReferencia"),
'situacaoPeso' => $this->getFirstNodeValue("{$path}/situacaoPeso")
? Peso::where('codigo_esus', $this->getFirstNodeValue("{$path}/situacaoPeso"))->first()->descricao
: null,
'statusEhDependenteAlcool' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusEhDependenteAlcool"))),
'statusEhDependenteOutrasDrogas' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusEhDependenteOutrasDrogas"))),
'statusEhFumante' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusEhFumante"))),
'statusEhGestante' => $this->inconsistenciaModel->cadastroIndividual->paciente->cidadao->sexo_id === Sexo::FEMININO
? DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusEhGestante")))
: 'Não se aplica',
'statusEstaAcamado' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusEstaAcamado"))),
'statusEstaDomiciliado' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusEstaDomiciliado"))),
'statusTemDiabetes' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemDiabetes"))),
'statusTemDoencaRespiratoria' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemDoencaRespiratoria"))),
'statusTemHanseniase' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemHanseniase"))),
'statusTemHipertensaoArterial' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemHipertensaoArterial"))),
'statusTemTeveCancer' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemTeveCancer"))),
'statusTemTeveDoencasRins' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemTeveDoencasRins"))),
'statusTemTuberculose' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemTuberculose"))),
'statusTeveAvcDerrame' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTeveAvcDerrame"))),
'statusTeveDoencaCardiaca' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTeveDoencaCardiaca"))),
'statusTeveInfarto' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTeveInfarto"))),
'statusTeveInternadoEm12Meses' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTeveInternadoEm12Meses"))),
'statusUsaOutrasPraticasIntegrativasOuComplementares' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusUsaOutrasPraticasIntegrativasOuComplementares"))),
'statusUsaPlantaMedicinais' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusUsaPlantaMedicinais"))),
'statusDiagnosticoMental' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusDiagnosticoMental"))),
];
$doencasCardiacas = [];
$doencasRespiratorias = [];
$doencasRins = [];
foreach ($this->domx->query("{$path}/doencaCardiaca") as $context) {
$doencasCardiacas[] = DoencaCardiaca::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
foreach ($this->domx->query("{$path}/doencaRespiratoria") as $context) {
$doencasRespiratorias[] = DoencaRespiratoria::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
foreach ($this->domx->query("{$path}/doencaRins") as $context) {
$doencasRins[] = ProblemasRins::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
$campos->doencasCardiacas = collect($doencasCardiacas)->join(', ');
$campos->doencasRespiratorias = collect($doencasRespiratorias)->join(', ');
$campos->doencasRins = collect($doencasRins)->join(', ');
$inconsistencias = $this->getInconsistencias([
[
'Motivo internação nos últimos 12 meses',
fn () => $this->inconsistencias->condicoesDeSaude->descricaoCausaInternacaoEm12Meses
],
[
'Outra condição de saúde 1',
fn () => $this->inconsistencias->condicoesDeSaude->descricaoOutraCondicao1
],
[
'Outra condição de saúde 2',
fn () => $this->inconsistencias->condicoesDeSaude->descricaoOutraCondicao2
],
[
'Outra condição de saúde 3',
fn () => $this->inconsistencias->condicoesDeSaude->descricaoOutraCondicao3
],
[
'Quais plantas medicinais?',
fn () => $this->inconsistencias->condicoesDeSaude->descricaoPlantasMedicinaisUsadas
],
[
'Quais doenças cardíacas?',
fn () => $this->inconsistencias->condicoesDeSaude->doencaCardiaca
],
[
'Quais doenças respiratórias?',
fn () => $this->inconsistencias->condicoesDeSaude->doencaRespiratoria
],
[
'Quais problemas nos rins?',
fn () => $this->inconsistencias->condicoesDeSaude->doencaRins
],
[
'Qual é a maternidade de referência?',
fn () => $this->inconsistencias->condicoesDeSaude->maternidadeDeReferencia
],
[
'Peso',
fn () => $this->inconsistencias->condicoesDeSaude->situacaoPeso
],
[
'Usa álcool',
fn () => $this->inconsistencias->condicoesDeSaude->statusEhDependenteAlcool
],
[
'Outras drogas',
fn () => $this->inconsistencias->condicoesDeSaude->statusEhDependenteOutrasDrogas
],
[
'Fumante',
fn () => $this->inconsistencias->condicoesDeSaude->statusEhFumante
],
[
'Gestante',
fn () => $this->inconsistencias->condicoesDeSaude->statusEhGestante
],
[
'Está acamado?',
fn () => $this->inconsistencias->condicoesDeSaude->statusEstaAcamado
],
[
'Está domiciliado?',
fn () => $this->inconsistencias->condicoesDeSaude->statusEstaDomiciliado
],
[
'Diabetes',
fn () => $this->inconsistencias->condicoesDeSaude->statusTemDiabetes
],
[
'Tem doença respiratória/no pulmão?',
fn () => $this->inconsistencias->condicoesDeSaude->statusTemDoencaRespiratoria
],
[
'Está com hanseníase',
fn () => $this->inconsistencias->condicoesDeSaude->statusTemHanseniase
],
[
'Hipertensão',
fn () => $this->inconsistencias->condicoesDeSaude->statusTemHipertensaoArterial
],
[
'Tem ou teve câncer',
fn () => $this->inconsistencias->condicoesDeSaude->statusTemTeveCancer
],
[
'Tem ou teve problemas nos rins?',
fn () => $this->inconsistencias->condicoesDeSaude->statusTemTeveDoencasRins
],
[
'Está com tuberculose',
fn () => $this->inconsistencias->condicoesDeSaude->statusTemTuberculose
],
[
'Teve AVC/Derrame',
fn () => $this->inconsistencias->condicoesDeSaude->statusTeveAvcDerrame
],
[
'Teve doença cardíaca/do coração?',
fn () => $this->inconsistencias->condicoesDeSaude->statusTeveDoencaCardiaca
],
[
'Teve infarto',
fn () => $this->inconsistencias->condicoesDeSaude->statusTeveInfarto
],
[
'Teve internação nos últimos 12 meses?',
fn () => $this->inconsistencias->condicoesDeSaude->statusTeveInternadoEm12Meses
],
[
'Usa práticas integrativas e complementares?',
fn () => $this->inconsistencias->condicoesDeSaude->statusUsaOutrasPraticasIntegrativasOuComplementares
],
[
'Usa plantas medicinais?',
fn () => $this->inconsistencias->condicoesDeSaude->statusUsaPlantaMedicinais
],
[
'Fez ou faz tratamento psiquiátrico ou teve internação por problema de saúde mental?',
fn () => $this->inconsistencias->condicoesDeSaude->statusDiagnosticoMental
],
]);
$this->ficha->condicao_saude_geral = (object) compact('campos', 'inconsistencias');
}
private function setSituacaoRua($cadastroIndividualTransportPath)
{
$path = "{$cadastroIndividualTransportPath}/emSituacaoDeRua";
$campos = (object) [
'grauParentescoFamiliarFrequentado' => $this->getFirstNodeValue("{$path}/grauParentescoFamiliarFrequentado"),
'outraInstituicaoQueAcompanha' => $this->getFirstNodeValue("{$path}/outraInstituicaoQueAcompanha"),
'quantidadeAlimentacoesAoDiaSituacaoRua' => $this->getFirstNodeValue("{$path}/quantidadeAlimentacoesAoDiaSituacaoRua")
? AlimentacaoDiaria::where(
'codigo_esus',
$this->getFirstNodeValue("{$path}/quantidadeAlimentacoesAoDiaSituacaoRua")
)->first()->descricao
: null,
'statusAcompanhadoPorOutraInstituicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusAcompanhadoPorOutraInstituicao"))),
'statusPossuiReferenciaFamiliar' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusPossuiReferenciaFamiliar"))),
'statusRecebeBeneficio' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusRecebeBeneficio"))),
'em_situacao_rua' => !is_null($this->getFirstNodeValue("{$path}/statusSituacaoRua")),
'statusSituacaoRua' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusSituacaoRua"))),
'statusTemAcessoHigienePessoalSituacaoRua' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusTemAcessoHigienePessoalSituacaoRua"))),
'statusVisitaFamiliarFrequentemente' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue("{$path}/statusVisitaFamiliarFrequentemente"))),
'tempoSituacaoRua' => $this->getFirstNodeValue("{$path}/tempoSituacaoRua")
? SituacaoRua::where('codigo_esus', $this->getFirstNodeValue("{$path}/tempoSituacaoRua"))->first()->descricao
: null,
];
$higienePessoal = [];
$origemAlimentos = [];
foreach ($this->domx->query("{$path}/higienePessoalSituacaoRua") as $context) {
$higienePessoal[] = HigienePessoal::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
foreach ($this->domx->query("{$path}/origemAlimentoSituacaoRua") as $context) {
$origemAlimentos[] = OrigemAlimentacao::where('codigo_esus', $context->nodeValue)->first()->descricao;
}
$campos->higienePessoal = collect($higienePessoal)->join(', ');
$campos->origemAlimentos = collect($origemAlimentos)->join(', ');
$inconsistencias = $this->getInconsistencias([
['Parentesco', fn () => $this->inconsistencias->emSituacaoDeRua->grauParentescoFamiliarFrequentado],
['Higiene pessoal', fn () => $this->inconsistencias->emSituacaoDeRua->higienePessoalSituacaoRua],
['Origem da alimentação', fn () => $this->inconsistencias->emSituacaoDeRua->origemAlimentoSituacaoRua],
['Outra instituição', fn () => $this->inconsistencias->emSituacaoDeRua->outraInstituicaoQueAcompanha],
['Alimentação diária', fn () => $this->inconsistencias->emSituacaoDeRua->quantidadeAlimentacoesAoDiaSituacaoRua],
['Acompanhado por outra instituição?', fn () => $this->inconsistencias->emSituacaoDeRua->statusAcompanhadoPorOutraInstituicao],
['Possui referência familiar?', fn () => $this->inconsistencias->emSituacaoDeRua->statusPossuiReferenciaFamiliar],
['Recebe algum benefício?', fn () => $this->inconsistencias->emSituacaoDeRua->statusRecebeBeneficio],
['Em situação de rua?', fn () => $this->inconsistencias->emSituacaoDeRua->statusSituacaoRua],
['Acesso a higiene pessoal?', fn () => $this->inconsistencias->emSituacaoDeRua->statusTemAcessoHigienePessoalSituacaoRua],
['Visita algum familiar com frequência?', fn () => $this->inconsistencias->emSituacaoDeRua->statusVisitaFamiliarFrequentemente],
['Tempo em situação de rua', fn () => $this->inconsistencias->emSituacaoDeRua->tempoSituacaoRua],
]);
$this->ficha->situacao_rua = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,169 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarFundoOlho;
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarRessonanciaMagnetica;
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarTesteOlho;
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarTesteOrelha;
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarTomografiaComputadorizada;
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementarUsTransfontanela;
use App\Models\Geral\Turno;
use App\Models\Sigtap\Ocupacao;
use App\Utils\MaskUtil;
class FichaComplementar extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichacomplementarzikamicrocefalia');
}
public function __invoke()
{
$path = '//ns4:fichaComplementarZikaMicrocefaliaTransport';
$this->setCadastro($path);
$this->setPaciente($path);
$this->setExames($path);
return $this->ficha;
}
private function setCadastro($fichaComplementarZikaMicrocefaliaTransportPath)
{
$headerTransportPath = "{$fichaComplementarZikaMicrocefaliaTransportPath}/headerTransport";
$ocupacao = $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'turno' => $this->getFirstNodeValue("{$fichaComplementarZikaMicrocefaliaTransportPath}/turno")
? Turno::find($this->getFirstNodeValue("{$fichaComplementarZikaMicrocefaliaTransportPath}/turno"))->nome
: null,
'profissionalNome' => $this->inconsistenciaModel->fichaComplementar->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"),
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
];
$inconsistencias = $this->getInconsistencias([
['Turno', fn () => $this->inconsistencias->turno],
['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],
['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
]);
$this->ficha->cadastro = (object) compact('campos', 'inconsistencias');
}
private function setPaciente($fichaComplementarZikaMicrocefaliaTransportPath)
{
$path = $fichaComplementarZikaMicrocefaliaTransportPath;
$campos = (object) [
'nomeCidadao' => $this->inconsistenciaModel->fichaComplementar->paciente->cidadao->nome,
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$path}/cnsCidadao")),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue("{$path}/cpfCidadao")),
'nomeResponsavelFamiliar' => CadastroIndividual::where(
'paciente_id',
$this->inconsistenciaModel->fichaComplementar->paciente_id
)->first()->responsavelCidadao->nome ?? null,
'cnsResponsavelFamiliar' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$path}/cnsResponsavelFamiliar")),
'cpfResponsavelFamiliar' => MaskUtil::getCpfMasked($this->getFirstNodeValue("{$path}/cpfResponsavelFamiliar")),
];
$inconsistencias = $this->getInconsistencias([
['CNS', fn () => $this->inconsistencias->cnsCidadao],
['CPF', fn () => $this->inconsistencias->cpfCidadao],
['CNS (Responsável familiar)', fn () => $this->inconsistencias->cnsResponsavelFamiliar],
['CPF (Responsável familiar)', fn () => $this->inconsistencias->cpfResponsavelFamiliar],
]);
$this->ficha->paciente = (object) compact('campos', 'inconsistencias');
}
private function setExames($fichaComplementarZikaMicrocefaliaTransportPath)
{
$path = $fichaComplementarZikaMicrocefaliaTransportPath;
$campos = (object) [
'dataRealizacaoTesteOlhinho' => $this->getDateString(
$this->getFirstNodeValue("{$path}/dataRealizacaoTesteOlhinho")),
'coResultadoTesteOlhinho' => $this->getFirstNodeValue("{$path}/coResultadoTesteOlhinho")
? FichaComplementarTesteOlho::where(
'codigo',
$this->getFirstNodeValue("{$path}/coResultadoTesteOlhinho")
)->first()->descricao
: null,
'dataRealizacaoExameFundoOlho' => $this->getDateString(
$this->getFirstNodeValue("{$path}/dataRealizacaoExameFundoOlho")),
'coResultadoExameFundoOlho' => $this->getFirstNodeValue("{$path}/coResultadoExameFundoOlho")
? FichaComplementarFundoOlho::where(
'codigo',
$this->getFirstNodeValue("{$path}/coResultadoExameFundoOlho")
)->first()->descricao
: null,
'dataRealizacaoTesteOrelhinha' => $this->getDateString(
$this->getFirstNodeValue("{$path}/dataRealizacaoTesteOrelhinha")),
'coResultadoTesteOrelhinha' => $this->getFirstNodeValue("{$path}/coResultadoTesteOrelhinha")
? FichaComplementarTesteOrelha::where(
'codigo',
$this->getFirstNodeValue("{$path}/coResultadoTesteOrelhinha")
)->first()->descricao
: null,
'dataRealizacaoUSTransfontanela' => $this->getDateString(
$this->getFirstNodeValue("{$path}/dataRealizacaoUSTransfontanela")),
'coResultadoUsTransfontanela' => $this->getFirstNodeValue("{$path}/coResultadoUsTransfontanela")
? FichaComplementarUsTransfontanela::where(
'codigo',
$this->getFirstNodeValue("{$path}/coResultadoUsTransfontanela")
)->first()->descricao
: null,
'dataRealizacaoTomografiaComputadorizada' => $this->getDateString(
$this->getFirstNodeValue("{$path}/dataRealizacaoTomografiaComputadorizada")),
'coResultadoTomografiaComputadorizada' => $this->getFirstNodeValue("{$path}/coResultadoTomografiaComputadorizada")
? FichaComplementarTomografiaComputadorizada::where(
'codigo',
$this->getFirstNodeValue("{$path}/coResultadoTomografiaComputadorizada")
)->first()->descricao
: null,
'dataRealizacaoRessonanciaMagnetica' => $this->getDateString(
$this->getFirstNodeValue("{$path}/dataRealizacaoRessonanciaMagnetica")),
'coResultadoRessonanciaMagnetica' => $this->getFirstNodeValue("{$path}/coResultadoRessonanciaMagnetica")
? FichaComplementarRessonanciaMagnetica::where(
'codigo',
$this->getFirstNodeValue("{$path}/coResultadoRessonanciaMagnetica")
)->first()->descricao
: null,
];
$inconsistencias = $this->getInconsistencias([
fn () => $this->inconsistencias->{"Resultados de exames"},
['Teste do Olhinho', fn () => $this->inconsistencias->dataRealizacaoTesteOlhinho],
['Resultado - Teste do Olhinho', fn () => $this->inconsistencias->coResultadoTesteOlhinho],
['Fundo de olho', fn () => $this->inconsistencias->dataRealizacaoExameFundoOlho],
['Resultado - Fundo de olho', fn () => $this->inconsistencias->coResultadoExameFundoOlho],
['Teste da Orelhinha', fn () => $this->inconsistencias->dataRealizacaoTesteOrelhinha],
['Resultado - Teste da Orelhinha', fn () => $this->inconsistencias->coResultadoTesteOrelhinha],
['US Transfontanela', fn () => $this->inconsistencias->dataRealizacaoUSTransfontanela],
['Resultado - US Transfontanela', fn () => $this->inconsistencias->coResultadoUsTransfontanela],
['Tomografia Computadorizada', fn () => $this->inconsistencias->dataRealizacaoTomografiaComputadorizada],
['Resultado - Tomografia Computadorizada', fn () => $this->inconsistencias->coResultadoTomografiaComputadorizada],
['Ressonância Magnética', fn () => $this->inconsistencias->dataRealizacaoRessonanciaMagnetica],
['Resultado - Ressonância Magnética', fn () => $this->inconsistencias->coResultadoRessonanciaMagnetica],
]);
$this->ficha->exames = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,169 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\MarcadorConsumoAlimentarPergunta;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\MarcadorConsumoAlimentarResposta;
use App\Models\Sigtap\Ocupacao;
use App\Utils\MaskUtil;
class FichaConsumoAlimentar extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaconsumoalimentar');
}
public function __invoke()
{
$path = '//ns4:fichaConsumoAlimentarTransport';
$this->setPaciente($path);
$this->setProfissional($path);
$this->setQuestionario($path);
return $this->ficha;
}
private function setPaciente($fichaConsumoAlimentarTransportPath)
{
$path = $fichaConsumoAlimentarTransportPath;
$campos = (object) [
'nomeCidadao' => $this->inconsistenciaModel->consumoAlimentar->paciente->cidadao->nome,
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$path}/cnsCidadao")),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue("{$path}/cpfCidadao")),
'dataNascimento' => $this->getDateString($this->getFirstNodeValue("{$path}/dataNascimento")),
'sexo' => $this->getSexo($this->getFirstNodeValue("{$path}/sexo")),
];
$inconsistencias = $this->getInconsistencias([
['CNS', fn () => $this->inconsistencias->cnsCidadao],
['CPF', fn () => $this->inconsistencias->cpfCidadao],
['Data de nascimento', fn () => $this->inconsistencias->dataNascimento],
['Sexo', fn () => $this->inconsistencias->sexo],
]);
$this->ficha->paciente = (object) compact('campos', 'inconsistencias');
}
private function setProfissional($fichaConsumoAlimentarTransportPath)
{
$headerTransportPath = "{$fichaConsumoAlimentarTransportPath}/headerTransport";
$ocupacao = $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002")
? Ocupacao::where('codigo', $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002"))->first()
: null;
$campos = (object) [
'localAtendimento' => $this->getFirstNodeValue("{$fichaConsumoAlimentarTransportPath}/localAtendimento")
? LocalAtendimento::find($this->getFirstNodeValue("{$fichaConsumoAlimentarTransportPath}/localAtendimento"))->descricao
: null,
'profissionalNome' => $this->inconsistenciaModel->consumoAlimentar->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"),
'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")),
'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"),
];
$inconsistencias = $this->getInconsistencias([
['Local de atendimento', fn () => $this->inconsistencias->localAtendimento],
['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],
['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento],
['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio],
]);
$this->ficha->profissional = (object) compact('campos', 'inconsistencias');
}
private function setQuestionario($fichaConsumoAlimentarTransportPath)
{
$path = $fichaConsumoAlimentarTransportPath;
$inconsistenciaQuestionario = null;
$titulo = null;
$tituloConsumiu = null;
if ($this->domx->query("{$path}/perguntasQuestionarioCriancasDeSeisVinteTresMeses")->length > 0) {
$path = "{$path}/perguntasQuestionarioCriancasDeSeisVinteTresMeses";
$titulo = 'Crianças de 6 a 23 meses';
$tituloConsumiu = 'Ontem a criança consumiu';
$inconsistenciaQuestionario =
fn () => $this->inconsistencias->perguntasQuestionarioCriancasDeSeisVinteTresMeses;
}
else if ($this->domx->query("{$path}/perguntasQuestionarioCriancasComMaisDoisAnos")->length > 0) {
$path = "{$path}/perguntasQuestionarioCriancasComMaisDoisAnos";
$titulo = 'Crianças com 2 anos ou mais, adolescentes, adultos, gestantes e idosos';
$tituloConsumiu = 'Ontem você consumiu';
$inconsistenciaQuestionario =
fn () => $this->inconsistencias->perguntasQuestionarioCriancasComMaisDoisAnos;
}
else if ($this->domx->query("{$path}/perguntasQuestionarioCriancasMenoresSeisMeses")->length > 0) {
$path = "{$path}/perguntasQuestionarioCriancasMenoresSeisMeses";
$titulo = 'Crianças menores de 6 meses';
$tituloConsumiu = 'Ontem a criança consumiu';
$inconsistenciaQuestionario =
fn () => $this->inconsistencias->perguntasQuestionarioCriancasMenoresSeisMeses;
}
$perguntas = [];
$getResposta = function ($descricaoEsus) {
return MarcadorConsumoAlimentarResposta::where('descricao_esus', $descricaoEsus)
->first()
->descricao;
};
foreach ($this->domx->query($path) as $context) {
$perguntaModel = MarcadorConsumoAlimentarPergunta::where(
'descricao_esus',
$this->getFirstNodeValue('pergunta', $context)
)->first();
$pergunta = (object) [
'pergunta' => $perguntaModel->descricao,
'area_ontem_consumiu' => $perguntaModel->area_ontem_consumiu,
];
if ($resposta = $this->getFirstNodeValue('respostaUnicaEscolha', $context)) {
$pergunta->respostas = [$getResposta($resposta)];
}
else {
$pergunta->respostas = [];
foreach ($this->domx->query('respostaMultiplaEscolha', $context) as $context) {
$pergunta->respostas[] = $getResposta($context->nodeValue);
}
}
$perguntas[] = $pergunta;
}
$this->ficha->questionario = (object) [
'titulo' => $titulo,
'titulo_consumiu' => $tituloConsumiu,
'lista' => $perguntas,
'inconsistencias' => $this->getInconsistencias([
$inconsistenciaQuestionario,
]),
];
}
}

View File

@@ -0,0 +1,247 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Models\Ambulatorio\GlicemiaCapilarMomentoColeta;
use App\Models\AtencaoBasica\MarcadorConsumoAlimentar\LocalAtendimento;
use App\Models\AtencaoBasica\Procedimento\PequenaCirurgia;
use App\Models\AtencaoBasica\Procedimento\TesteRapido;
use App\Models\AtencaoBasica\Procedimento\ViaAdministracao;
use App\Models\Geral\Turno;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use stdClass;
class FichaProcedimento extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaprocedimentomaster');
}
public function __invoke()
{
$path = '//ns4:fichaProcedimentoMasterTransport';
$this->setProfissional($path);
$this->setAtendimentos($path);
$this->setProcedimentosConsolidados($path);
return $this->ficha;
}
private function setProfissional($fichaProcedimentoMasterTransportPath)
{
$headerTransportPath = "{$fichaProcedimentoMasterTransportPath}/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->procedimento->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', 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->profissional = (object) compact('campos', 'inconsistencias');
}
private function setAtendimentos($fichaProcedimentoMasterTransportPath)
{
$path = "{$fichaProcedimentoMasterTransportPath}/atendProcedimentos";
$atendimentos = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$atendimentoModel = $this->inconsistenciaModel->procedimentoAtendimentos()
->wherePivot('posicao', $posicao)
->first();
$inconsistencias = $this->inconsistencias->atendProcedimentos->{$posicao} ?? [];
$atendimento = new stdClass;
$this->setAtendimento($atendimento, $context, $atendimentoModel, $inconsistencias);
$this->setInformacoesGerais($atendimento, $context, $inconsistencias);
$this->setProcedimentos($atendimento, $context, $inconsistencias);
$atendimentos[] = $atendimento;
}
$this->ficha->atendimentos = (object) [
'lista' => $atendimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->atendProcedimentos,
]),
];
}
private function setAtendimento($atendimento, $atendimentoContext, $atendimentoModel, $inconsistencias)
{
$campos = (object) [
'numProntuario' => $this->getFirstNodeValue('numProntuario', $atendimentoContext),
'nomeCidadao' => $atendimentoModel->paciente->cidadao->nome,
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $atendimentoContext)),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $atendimentoContext)),
'dtNascimento' => $this->getDateString($this->getFirstNodeValue('dtNascimento', $atendimentoContext)),
'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $atendimentoContext)),
'localAtendimento' => $this->getFirstNodeValue('localAtendimento', $atendimentoContext)
? LocalAtendimento::find($this->getFirstNodeValue('localAtendimento', $atendimentoContext))->descricao
: null,
'turno' => $this->getFirstNodeValue('turno', $atendimentoContext)
? Turno::find($this->getFirstNodeValue('turno', $atendimentoContext))->nome
: null,
'statusEscutaInicialOrientacao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('statusEscutaInicialOrientacao', $atendimentoContext))),
'dataHoraInicialAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraInicialAtendimento', $atendimentoContext)),
'dataHoraFinalAtendimento' => $this->getDateTimeString(
$this->getFirstNodeValue('dataHoraFinalAtendimento', $atendimentoContext)),
];
$inconsistencias = $this->getInconsistencias([
['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],
['Turno', fn () => $inconsistencias->turno],
['Escuta Inicial/Orientação', fn () => $inconsistencias->statusEscutaInicialOrientacao],
['Data/hora inicial do atendimento', fn () => $inconsistencias->dataHoraInicialAtendimento],
['Data/hora final do atendimento', fn () => $inconsistencias->dataHoraFinalAtendimento],
]);
$atendimento->atendimento = (object) compact('campos', 'inconsistencias');
}
private function setInformacoesGerais($atendimento, $atendimentoContext, $inconsistencias)
{
$medicoes = $this->domx->query('medicoes', $atendimentoContext);
$medicoesContext = $medicoes->length > 0 ? $medicoes[0] : null;
$campos = (object) [
'circunferenciaAbdominal' => $this->getFirstNodeValue('circunferenciaAbdominal', $medicoesContext),
'perimetroPanturrilha' => $this->getFirstNodeValue('perimetroPanturrilha', $medicoesContext),
'pressaoArterial' => trim($this->getFirstNodeValue('pressaoArterialSistolica', $medicoesContext)
. '/' . $this->getFirstNodeValue('pressaoArterialDiastolica', $medicoesContext), '/'),
'frequenciaRespiratoria' => $this->getFirstNodeValue('frequenciaRespiratoria', $medicoesContext),
'frequenciaCardiaca' => $this->getFirstNodeValue('frequenciaCardiaca', $medicoesContext),
'temperatura' => $this->getFirstNodeValue('temperatura', $medicoesContext),
'saturacaoO2' => $this->getFirstNodeValue('saturacaoO2', $medicoesContext),
'glicemiaCapilar' => $this->getFirstNodeValue('glicemiaCapilar', $medicoesContext),
'tipoGlicemiaCapilar' => !is_null($this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext))
? GlicemiaCapilarMomentoColeta::where(
'codigo_esus',
$this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext)
)->first()->nome
: null,
'peso' => $this->getFirstNodeValue('peso', $medicoesContext),
'altura' => $this->getFirstNodeValue('altura', $medicoesContext),
'perimetroCefalico' => $this->getFirstNodeValue('perimetroCefalico', $medicoesContext),
];
$inconsistencias = $this->getInconsistencias([
fn () => $inconsistencias->medicoes,
['Circunferência abdominal', fn () => $inconsistencias->medicoes->circunferenciaAbdominal],
['Perímetro da panturrilha', fn () => $inconsistencias->medicoes->perimetroPanturrilha],
['Pressão arterial sistólica', fn () => $inconsistencias->medicoes->pressaoArterialSistolica],
['Pressão arterial diastólica', fn () => $inconsistencias->medicoes->pressaoArterialDiastolica],
['Frequência respiratória', fn () => $inconsistencias->medicoes->frequenciaRespiratoria],
['Frequência cardíaca', fn () => $inconsistencias->medicoes->frequenciaCardiaca],
['Temperatura', fn () => $inconsistencias->medicoes->temperatura],
['Saturação de O2', fn () => $inconsistencias->medicoes->saturacaoO2],
['Glicemia capilar', fn () => $inconsistencias->medicoes->glicemiaCapilar],
['Momento da coleta', fn () => $inconsistencias->medicoes->tipoGlicemiaCapilar],
['Peso', fn () => $inconsistencias->medicoes->peso],
['Altura', fn () => $inconsistencias->medicoes->altura],
['Perímetro cefálico', fn () => $inconsistencias->medicoes->perimetroCefalico],
]);
$atendimento->informacoes_gerais = (object) compact('campos', 'inconsistencias');
}
private function setProcedimentos($atendimento, $atendimentoContext, $inconsistencias)
{
$procedimentos = [];
foreach ($this->domx->query('procedimentos', $atendimentoContext) as $context) {
$codigo = $context->nodeValue;
if ($pequenaCirurgia = PequenaCirurgia::where('codigo_esus', $codigo)->first()) {
$procedimentos[] = "Pequena cirurgia: {$pequenaCirurgia->descricao}";
}
else if ($testeRapido = TesteRapido::where('codigo_esus', $codigo)->first()) {
$procedimentos[] = "Teste rápido: {$testeRapido->descricao}";
}
else if ($viaAdmnistracao = ViaAdministracao::where('codigo_esus', $codigo)->first()) {
$procedimentos[] = "Administração de medicamento: {$viaAdmnistracao->descricao}";
}
else {
$procedimento = Procedimento::where('codigo', $codigo)->orderByDesc('competencia_id')->first();
$procedimentos[] = MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}";
}
}
$atendimento->procedimentos = (object) [
'lista' => $procedimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->procedimentos,
]),
];
}
private function setProcedimentosConsolidados($fichaProcedimentoMasterTransportPath)
{
$path = $fichaProcedimentoMasterTransportPath;
$campos = (object) [
'numTotalAfericaoPa' => $this->getFirstNodeValue("{$path}/numTotalAfericaoPa"),
'numTotalAfericaoTemperatura' => $this->getFirstNodeValue("{$path}/numTotalAfericaoTemperatura"),
'numTotalCurativoSimples' => $this->getFirstNodeValue("{$path}/numTotalCurativoSimples"),
'numTotalColetaMaterialParaExameLaboratorial' => $this->getFirstNodeValue("{$path}/numTotalColetaMaterialParaExameLaboratorial"),
'numTotalGlicemiaCapilar' => $this->getFirstNodeValue("{$path}/numTotalGlicemiaCapilar"),
'numTotalMedicaoAltura' => $this->getFirstNodeValue("{$path}/numTotalMedicaoAltura"),
'numTotalMedicaoPeso' => $this->getFirstNodeValue("{$path}/numTotalMedicaoPeso"),
];
$inconsistencias = $this->getInconsistencias([
['Aferição de PA', fn () => $this->inconsistencias->numTotalAfericaoPa],
['Temperatura', fn () => $this->inconsistencias->numTotalAfericaoTemperatura],
['Curativo', fn () => $this->inconsistencias->numTotalCurativoSimples],
['Coleta de material para Exame Laboratorial', fn () => $this->inconsistencias->numTotalColetaMaterialParaExameLaboratorial],
['Glicemia Capilar', fn () => $this->inconsistencias->numTotalGlicemiaCapilar],
['Altura', fn () => $this->inconsistencias->numTotalMedicaoAltura],
['Peso', fn () => $this->inconsistencias->numTotalMedicaoPeso],
]);
$this->ficha->procedimentos_consolidados = (object) compact('campos', 'inconsistencias');
}
}

View File

@@ -0,0 +1,272 @@
<?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;
}
}

View File

@@ -0,0 +1,339 @@
<?php
namespace App\Services\Integracao\Esus\GerenciamentoEnvio\Ficha;
use App\Enums\AtencaoBasica\VisitaDomiciliar\MotivoVisita as MotivoVisitaEnum;
use App\Models\AtencaoBasica\CadastroDomiciliar\ImovelTipo;
use App\Models\AtencaoBasica\VisitaDomiciliar\Desfecho;
use App\Models\AtencaoBasica\VisitaDomiciliar\MomentoColeta;
use App\Models\AtencaoBasica\VisitaDomiciliar\MotivoVisita;
use App\Models\Geral\Turno;
use App\Models\Sigtap\Ocupacao;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use stdClass;
class FichaVisitaDomiciliar extends Ficha
{
public function __construct($xmlEnvio, $inconsistenciaModel)
{
parent::__construct($xmlEnvio, $inconsistenciaModel);
$this->domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichavisitadomiciliarmaster');
}
public function __invoke()
{
$path = '//ns4:fichaVisitaDomiciliarMasterTransport';
$this->setProfissional($path);
$this->setAtendimentos($path);
return $this->ficha;
}
private function setProfissional($fichaVisitaDomiciliarMasterTransportPath)
{
$headerTransportPath = "{$fichaVisitaDomiciliarMasterTransportPath}/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->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', 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->profissional = (object) compact('campos', 'inconsistencias');
}
private function setAtendimentos($fichaVisitaDomiciliarMasterTransportPath)
{
$path = "{$fichaVisitaDomiciliarMasterTransportPath}/visitasDomiciliares";
$atendimentos = [];
foreach ($this->domx->query($path) as $i => $context) {
$posicao = $i + 1;
$visitaDomiciliarModel = $this->inconsistenciaModel->visitasDomiciliares()
->wherePivot('posicao', $posicao)
->first();
$inconsistencias = $this->inconsistencias->visitasDomiciliares->{$posicao} ?? [];
$atendimento = new stdClass;
$this->setPaciente($atendimento, $context, $visitaDomiciliarModel, $inconsistencias, $posicao);
$this->setAtendimento($atendimento, $context, $inconsistencias);
$this->setAvaliacaoAntropometriza($atendimento, $context, $inconsistencias);
$this->setMotivosVisita($atendimento, $context, $inconsistencias);
$this->setSinaisVitais($atendimento, $context, $inconsistencias);
$this->setGlicemia($atendimento, $context, $inconsistencias);
$this->setDesfecho($atendimento, $context, $inconsistencias);
$atendimentos[] = $atendimento;
}
$this->ficha->atendimentos = (object) [
'lista' => $atendimentos,
'inconsistencias' => $this->getInconsistencias([
fn () => $this->inconsistencias->visitasDomiciliares,
]),
];
}
private function setPaciente($atendimento, $atendimentoContext, $visitaDomiciliarModel, $inconsistencias, $posicao)
{
$campos = (object) [
'numProntuario' => $this->getFirstNodeValue('numProntuario', $atendimentoContext),
'nomeCidadao' => $visitaDomiciliarModel->paciente->cidadao->nome,
'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $atendimentoContext)),
'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $atendimentoContext)),
'dtNascimento' => $this->getDateString($this->getFirstNodeValue('dtNascimento', $atendimentoContext)),
'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $atendimentoContext)),
'microArea' => $this->getFirstNodeValue('microArea', $atendimentoContext),
'stForaArea' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('stForaArea', $atendimentoContext))),
'posicao' => $posicao
];
$inconsistencias = $this->getInconsistencias([
['Prontuário', fn () => $inconsistencias->numProntuario],
['CNS', fn () => $inconsistencias->cnsCidadao],
['CPF', fn () => $inconsistencias->cpfCidadao],
['Data de nascimento', fn () => $inconsistencias->dtNascimento],
['Sexo', fn () => $inconsistencias->sexo],
['Microárea', fn () => $inconsistencias->microArea],
['Fora de área', fn () => $inconsistencias->stForaArea],
]);
$atendimento->paciente = (object) compact('campos', 'inconsistencias');
}
private function setAtendimento($atendimento, $atendimentoContext, $inconsistencias)
{
$campos = (object) [
'turno' => $this->getFirstNodeValue('turno', $atendimentoContext)
? Turno::find($this->getFirstNodeValue('turno', $atendimentoContext))->nome
: null,
'tipoDeImovel' => $this->getFirstNodeValue('tipoDeImovel', $atendimentoContext)
? ImovelTipo::where(
'codigo_esus',
$this->getFirstNodeValue('tipoDeImovel', $atendimentoContext)
)->first()->descricao
: null,
'latitude' => $this->getFirstNodeValue('latitude', $atendimentoContext),
'longitude' => $this->getFirstNodeValue('longitude', $atendimentoContext),
'statusVisitaCompartilhadaOutroProfissional' => DataUtil::getSimOuNao(
DataUtil::getBooleanValueFromStringBoolean(
$this->getFirstNodeValue('statusVisitaCompartilhadaOutroProfissional', $atendimentoContext)
)
),
];
$inconsistencias = $this->getInconsistencias([
['Turno', fn () => $inconsistencias->turno],
['Tipo de imóvel', fn () => $inconsistencias->tipoDeImovel],
['Latitude', fn () => $inconsistencias->latitude],
['Longitude', fn () => $inconsistencias->longitude],
['Visita compartilhada com outro profissional', fn () => $inconsistencias->statusVisitaCompartilhadaOutroProfissional],
]);
$atendimento->atendimento = (object) compact('campos', 'inconsistencias');
}
private function setAvaliacaoAntropometriza($atendimento, $atendimentoContext, $inconsistencias)
{
$campos = (object) [
'pesoAcompanhamentoNutricional' => $this->getFirstNodeValue('pesoAcompanhamentoNutricional', $atendimentoContext),
'alturaAcompanhamentoNutricional' => $this->getFirstNodeValue('alturaAcompanhamentoNutricional', $atendimentoContext),
];
$inconsistencias = $this->getInconsistencias([
['Peso', fn () => $inconsistencias->pesoAcompanhamentoNutricional],
['Altura', fn () => $inconsistencias->alturaAcompanhamentoNutricional],
]);
$atendimento->avaliacao_antropometrica = (object) compact('campos', 'inconsistencias');
}
private function setMotivosVisita($atendimento, $atendimentoContext, $inconsistencias)
{
$motivosVisita = [];
foreach ($this->domx->query('motivosVisita', $atendimentoContext) as $context) {
$motivoVisita = MotivoVisita::where('codigo_esus', $context->nodeValue)->first();
$descricao = null;
if ($this->isMotivoVisitaTipo($motivoVisita->id)) {
$descricao = 'Tipo de visita';
}
else if ($this->isMotivoVisitaBuscaAtiva($motivoVisita->id)) {
$descricao = 'Busca ativa';
}
else if ($this->isMotivoVisitaControleAmbientalVetorial($motivoVisita->id)) {
$descricao = 'Controle ambiental/vetorial';
}
else if ($this->isMotivoVisitaAcompanhamento($motivoVisita->id)) {
$descricao = 'Acompanhamento';
}
else if ($this->isOutroMotivoVisita($motivoVisita->id)) {
$descricao = 'Outros';
}
$motivosVisita[] = "{$descricao}: {$motivoVisita->descricao}";
}
$atendimento->motivos_visita = (object) [
'lista' => $motivosVisita,
'inconsistencias' => $this->getInconsistencias([
fn () => $inconsistencias->motivosVisita,
]),
];
}
private function isMotivoVisitaTipo($id)
{
return collect([
MotivoVisitaEnum::CADASTRAMENTO_ATUALIZACAO,
MotivoVisitaEnum::VISITA_PERIODICA,
])->contains($id);
}
private function isMotivoVisitaBuscaAtiva($id)
{
return collect([
MotivoVisitaEnum::CONSULTA,
MotivoVisitaEnum::EXAME,
MotivoVisitaEnum::VACINA,
MotivoVisitaEnum::CONDICIONALIDADES_DO_BOLSA_FAMILIA,
])->contains($id);
}
private function isMotivoVisitaControleAmbientalVetorial($id)
{
return collect([
MotivoVisitaEnum::ACAO_EDUCATIVA,
MotivoVisitaEnum::IMOVEL_COM_FOCO,
MotivoVisitaEnum::ACAO_MECANICA,
MotivoVisitaEnum::TRATAMENTO_FOCAL,
])->contains($id);
}
private function isMotivoVisitaAcompanhamento($id)
{
return collect([
MotivoVisitaEnum::GESTANTE,
MotivoVisitaEnum::PUERPERA,
MotivoVisitaEnum::RECEM_NASCIDO,
MotivoVisitaEnum::CRIANCA,
MotivoVisitaEnum::PESSOA_COM_DESNUTRICAO,
MotivoVisitaEnum::PESSOA_EM_REABILITACAO_OU_COM_DEFICIENCIA,
MotivoVisitaEnum::PESSOA_COM_HIPERTENSAO,
MotivoVisitaEnum::PESSOA_COM_DIABETES,
MotivoVisitaEnum::PESSOA_COM_ASMA,
MotivoVisitaEnum::PESSOA_COM_DPOC_ENFISEMA,
MotivoVisitaEnum::PESSOA_COM_CANCER,
MotivoVisitaEnum::PESSOA_COM_OUTRAS_DOENCAS_CRONICAS,
MotivoVisitaEnum::PESSOA_COM_HANSENIASE,
MotivoVisitaEnum::PESSOA_COM_TUBERCULOSE,
MotivoVisitaEnum::SINTOMATICOS_RESPIRATORIOS,
MotivoVisitaEnum::TABAGISTA,
MotivoVisitaEnum::DOMICILIADOS_ACAMADOS,
MotivoVisitaEnum::CONDICOES_DE_VULNERABILIDADE_SOCIAL,
MotivoVisitaEnum::ACOMPANHAMENTO_CONDICIONALIDADES_DO_BOLSA_FAMILIA,
MotivoVisitaEnum::SAUDE_MENTAL,
MotivoVisitaEnum::USUARIO_DE_ALCOOL,
MotivoVisitaEnum::USUARIO_DE_OUTRAS_DROGAS,
])->contains($id);
}
private function isOutroMotivoVisita($id)
{
return collect([
MotivoVisitaEnum::EGRESSO_DE_INTERNACAO,
MotivoVisitaEnum::CONVITE_PARA_ATIVIDADES_COLETIVAS_CAMPANHA_DE_SAUDE,
MotivoVisitaEnum::ORIENTACAO_PREVENCAO,
MotivoVisitaEnum::OUTROS,
])->contains($id);
}
private function setSinaisVitais($atendimento, $atendimentoContext, $inconsistencias)
{
$campos = (object) [
'pressaoArterial' => trim($this->getFirstNodeValue('pressaoSistolica', $atendimentoContext)
. '/' . $this->getFirstNodeValue('pressaoDiastolica', $atendimentoContext), '/'),
'temperatura' => $this->getFirstNodeValue('temperatura', $atendimentoContext),
];
$inconsistencias = $this->getInconsistencias([
['Aferição de PA sistólica', fn () => $inconsistencias->pressaoSistolica],
['Aferição de PA diastólica', fn () => $inconsistencias->pressaoDiastolica],
['Temperatura', fn () => $inconsistencias->temperatura],
]);
$atendimento->sinais_vitais = (object) compact('campos', 'inconsistencias');
}
private function setGlicemia($atendimento, $atendimentoContext, $inconsistencias)
{
$campos = (object) [
'glicemia' => $this->getFirstNodeValue('glicemia', $atendimentoContext),
'tipoGlicemia' => !is_null($this->getFirstNodeValue('tipoGlicemia', $atendimentoContext))
? MomentoColeta::where(
'codigo_esus',
$this->getFirstNodeValue('tipoGlicemia', $atendimentoContext)
)->first()->descricao
: null,
];
$inconsistencias = $this->getInconsistencias([
['Glicemia', fn () => $inconsistencias->glicemia],
['Momento da coleta', fn () => $inconsistencias->tipoGlicemia],
]);
$atendimento->glicemia = (object) compact('campos', 'inconsistencias');
}
private function setDesfecho($atendimento, $atendimentoContext, $inconsistencias)
{
$campos = (object) [
'desfecho' => $this->getFirstNodeValue('desfecho', $atendimentoContext)
? Desfecho::where(
'codigo_esus',
$this->getFirstNodeValue('desfecho', $atendimentoContext)
)->first()->descricao
: null,
];
$inconsistencias = $this->getInconsistencias([
['Desfecho', fn () => $inconsistencias->desfecho],
]);
$atendimento->desfecho = (object) compact('campos', 'inconsistencias');
}
}