This commit is contained in:
@@ -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,
|
||||
]),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user