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