170 lines
7.1 KiB
PHP
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,
|
|
]),
|
|
];
|
|
}
|
|
}
|