Files
rkm-conectasus-ci-sandbox/api/app/Services/Integracao/Esus/GerenciamentoEnvio/Ficha/FichaConsumoAlimentar.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

170 lines
7.1 KiB
PHP

<?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,
]),
];
}
}