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

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

View File

@@ -0,0 +1,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');
}
}