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'); } }