920 lines
45 KiB
PHP
920 lines
45 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica\Exportacao;
|
|
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada;
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\DoencaTransmissivel;
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\Rastreamento;
|
|
use App\Enums\AtencaoBasica\Exportacao\Sexo as ExportacaoSexo;
|
|
use App\Enums\AtencaoBasica\Procedimento\TipoDadoSerializado;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
|
use App\Enums\Geral\CiapCondicaoAvaliada;
|
|
use App\Enums\Sigtap\Procedimento as ProcedimentoEnum;
|
|
use App\Models\AtencaoBasica\AtendimentoOdontologico\AtendimentoOdontologico;
|
|
use App\Models\AtencaoBasica\AtendimentoOdontologico\AtendimentoOdontologicoIvcf;
|
|
use App\Models\AtencaoBasica\Exportacao\Exportacao;
|
|
use App\Models\Geral\Ciap;
|
|
use App\Models\Sigtap\Cid;
|
|
use App\Rules\Cns;
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
use DOMDocument;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use ZipArchive;
|
|
|
|
class FichaAtendimentoOdontologicoService extends Service
|
|
{
|
|
|
|
public static function create($arquivo_caminho, $arquivo_nome, $exportacaoArquivoId, $usuarioId = null)
|
|
{
|
|
$mes_ano = request()->mes_ano;
|
|
|
|
foreach (self::getFichasProfissional($mes_ano) as $fichaProfissional) {
|
|
|
|
$iteracoes = self::getIteracoesCount($fichaProfissional);
|
|
|
|
for ($i = 0; $i < $iteracoes; $i++) {
|
|
|
|
$dadosExportacao = self::getDadosExportacao($fichaProfissional, $exportacaoArquivoId, $usuarioId);
|
|
|
|
if ($dadosExportacao === null) {
|
|
continue;
|
|
}
|
|
|
|
$xmlPath = Storage::path($arquivo_caminho . 'xml_temp.xml');
|
|
|
|
$dadosExportacao['dom']->save($xmlPath);
|
|
$zip = new ZipArchive;
|
|
$zip->open(Storage::path($arquivo_caminho . $arquivo_nome), ZipArchive::CREATE);
|
|
$zip->addFile($xmlPath, 'AO_' . $dadosExportacao['exportacao']->uuid . '.esus.xml');
|
|
$zip->close();
|
|
|
|
unlink($xmlPath);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function gerarExportacoes($mesAnoInicial)
|
|
{
|
|
$exportacoes = collect();
|
|
|
|
foreach (self::getFichasProfissional($mesAnoInicial, false) as $fichaProfissional) {
|
|
|
|
$iteracoes = self::getIteracoesCount($fichaProfissional);
|
|
|
|
for ($i = 0; $i < $iteracoes; $i++) {
|
|
|
|
$dadosExportacao = self::getDadosExportacao($fichaProfissional);
|
|
|
|
if ($dadosExportacao === null) {
|
|
continue;
|
|
}
|
|
|
|
$exportacoes->push([
|
|
'exportacao_id' => $dadosExportacao['exportacao']->id,
|
|
'data_atendimento' => $fichaProfissional->data_atendimento,
|
|
'usuario_id' => $fichaProfissional->usuario->id,
|
|
'ocupacao_id' => $fichaProfissional->ocupacao->id,
|
|
'equipe_id' => $fichaProfissional->equipe->id,
|
|
'atendimentos_odontologicos' => $dadosExportacao['atendimentos_odontologicos'],
|
|
'xml' => [
|
|
'nome_arquivo' => 'AO_' . $dadosExportacao['exportacao']->uuid . '.esus.xml',
|
|
'conteudo' => $dadosExportacao['dom']->saveXml(),
|
|
]
|
|
]);
|
|
}
|
|
}
|
|
|
|
return $exportacoes;
|
|
}
|
|
|
|
private static function getFichasProfissional($mes_ano, $somenteMesAno = true)
|
|
{
|
|
return AtendimentoOdontologico::whereNull('exportacao_id')
|
|
->when($somenteMesAno,
|
|
fn ($q) => $q->whereYear('data_atendimento', substr($mes_ano, 2))
|
|
->whereMonth('data_atendimento', substr($mes_ano, 0, 2)),
|
|
fn ($q) => $q->where(function ($q) use ($mes_ano) {
|
|
$q->whereYear('data_atendimento', '>', substr($mes_ano, 2))
|
|
->orWhere(function ($q) use ($mes_ano) {
|
|
$q->whereYear('data_atendimento', substr($mes_ano, 2))
|
|
->whereMonth('data_atendimento', '>=', substr($mes_ano, 0, 2));
|
|
});
|
|
})
|
|
)
|
|
->groupBy([
|
|
'usuario_id',
|
|
'equipe_id',
|
|
'ocupacao_id',
|
|
'data_atendimento',
|
|
])
|
|
->get();
|
|
}
|
|
|
|
private static function getIteracoesCount($fichaProfissional, $mes_ano = null)
|
|
{
|
|
$count = AtendimentoOdontologico::when($mes_ano, fn ($q) => $q
|
|
->whereYear('data_atendimento', substr($mes_ano, 2))
|
|
->whereMonth('data_atendimento', substr($mes_ano, 0, 2))
|
|
)
|
|
->where('usuario_id', $fichaProfissional->usuario_id)
|
|
->where('equipe_id', $fichaProfissional->equipe_id)
|
|
->where('ocupacao_id', $fichaProfissional->ocupacao_id)
|
|
->whereNull('exportacao_id')
|
|
->count();
|
|
|
|
return ceil($count / 99);
|
|
}
|
|
|
|
private static function getDadosExportacao($fichaProfissional, $exportacaoArquivoId = null, $usuarioId = null)
|
|
{
|
|
$atendimentosOdontologicosPosicoes = collect();
|
|
|
|
$uuid = ExportacaoService::getUuid($fichaProfissional->equipe->unidade->cnes);
|
|
|
|
$exportacao = new Exportacao();
|
|
$exportacao->uuid = $uuid;
|
|
$exportacao->exportacao_arquivo_id = $exportacaoArquivoId;
|
|
$exportacao->save();
|
|
|
|
$dom = new DOMDocument('1.0', 'UTF-8');
|
|
$dadoTransporteTransportXml = $dom->createElementNS('http://esus.ufsc.br/dadotransporte', 'ns3:dadoTransporteTransportXml');
|
|
$dadoTransporteTransportXml->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns2', 'http://esus.ufsc.br/dadoinstalacao');
|
|
$dadoTransporteTransportXml->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns3', 'http://esus.ufsc.br/dadotransporte');
|
|
$dadoTransporteTransportXml->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns4', 'http://esus.ufsc.br/fichaatendimentoodontologicomaster');
|
|
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid));
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::ATENDIMENTO_ODONTOLOGICO));
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaProfissional->equipe->infraestrutura->endereco->logradouro->municipio->ibge));
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaProfissional->equipe->unidade->cnes));
|
|
|
|
if($fichaProfissional->equipe->area->numero_ine){
|
|
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaProfissional->equipe->area->numero_ine));
|
|
}
|
|
|
|
$fichaAtendimentoOdontologicoMasterTransport = $dom->createElement('ns4:fichaAtendimentoOdontologicoMasterTransport');
|
|
$dadoTransporteTransportXml->appendChild($fichaAtendimentoOdontologicoMasterTransport);
|
|
|
|
$fichaAtendimentoOdontologicoMasterTransport->appendChild($dom->createElement('uuidFicha', $uuid));
|
|
$fichaAtendimentoOdontologicoMasterTransport->appendChild($dom->createElement('tpCdsOrigem', '3'));
|
|
|
|
$fichasAtendimentoOdontologico = AtendimentoOdontologico::whereNull('exportacao_id')
|
|
->where('usuario_id', $fichaProfissional->usuario_id)
|
|
->where('equipe_id', $fichaProfissional->equipe_id)
|
|
->where('ocupacao_id', $fichaProfissional->ocupacao_id)
|
|
->where('data_atendimento', $fichaProfissional->data_atendimento)
|
|
->take(99)
|
|
->get();
|
|
|
|
if ($fichasAtendimentoOdontologico->isEmpty()) {
|
|
$exportacao->delete();
|
|
return null;
|
|
}
|
|
|
|
foreach ($fichasAtendimentoOdontologico as $i => $fichaAtendimentoOdontologico) {
|
|
|
|
$atendimentosOdontologicosPosicoes->push([
|
|
'posicao' => $i + 1,
|
|
'id' => $fichaAtendimentoOdontologico->id,
|
|
]);
|
|
|
|
$atendimentosOdontologicos = $dom->createElement('atendimentosOdontologicos');
|
|
$fichaAtendimentoOdontologicoMasterTransport->appendChild($atendimentosOdontologicos);
|
|
|
|
if($fichaAtendimentoOdontologico->paciente->prontuario){
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('numProntuario', $fichaAtendimentoOdontologico->paciente->prontuario));
|
|
}
|
|
|
|
if (Cns::isValid($fichaAtendimentoOdontologico->paciente->cidadao->cns)) {
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('cnsCidadao', $fichaAtendimentoOdontologico->paciente->cidadao->cns ?? ''));
|
|
}
|
|
|
|
if (!Cns::isValid($fichaAtendimentoOdontologico->paciente->cidadao->cns)) {
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('cpfCidadao', $fichaAtendimentoOdontologico->paciente->cidadao->cpf ?? ''));
|
|
}
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('dtNascimento', strtotime($fichaAtendimentoOdontologico->paciente->cidadao->data_nascimento->format('Y-m-d')) * 1000));
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('localAtendimento', $fichaAtendimentoOdontologico->local_atendimento_id));
|
|
|
|
if($fichaAtendimentoOdontologico->paciente->cidadao->sexo->id === Sexo::FEMININO){
|
|
|
|
if($fichaAtendimentoOdontologico->gestante){
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('gestante', $fichaAtendimentoOdontologico->gestante ? 'true' : 'false'));
|
|
}
|
|
}
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('necessidadesEspeciais', $fichaAtendimentoOdontologico->necessidades_especiais ? 'true' : 'false'));
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('tipoAtendimento', $fichaAtendimentoOdontologico->tipoAtendimento->codigo_esus));
|
|
|
|
if (count($fichaAtendimentoOdontologico->condutaEncaminhamento) > 0) {
|
|
|
|
foreach ($fichaAtendimentoOdontologico->condutaEncaminhamento as $condutaEncaminhamento) {
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('tiposEncamOdonto', $condutaEncaminhamento->conduta_encaminhamento_id));
|
|
}
|
|
}
|
|
|
|
if (count($fichaAtendimentoOdontologico->fornecimento) > 0) {
|
|
|
|
foreach ($fichaAtendimentoOdontologico->fornecimento as $fornecimento) {
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('tiposFornecimOdonto', $fornecimento->fornecimento_id));
|
|
}
|
|
}
|
|
|
|
if (count($fichaAtendimentoOdontologico->vigilancia) > 0) {
|
|
|
|
foreach ($fichaAtendimentoOdontologico->vigilancia as $vigilancia) {
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('tiposVigilanciaSaudeBucal', $vigilancia->vigilancia_bucal_id));
|
|
}
|
|
}
|
|
|
|
if ($fichaAtendimentoOdontologico->tipoConsulta) {
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('tiposConsultaOdonto', $fichaAtendimentoOdontologico->tipoConsulta->codigo_esus));
|
|
}
|
|
|
|
$procedimentos = $fichaAtendimentoOdontologico->procedimento()
|
|
->select('codigo_procedimento', 'quantidade')
|
|
->where('codigo_procedimento', 'NOT LIKE', '09%')
|
|
->get();
|
|
|
|
$procedimentosOci = $fichaAtendimentoOdontologico->procedimento()
|
|
->select('codigo_procedimento')
|
|
->where('codigo_procedimento', 'LIKE', '09%')
|
|
->get();
|
|
|
|
if ($procedimentos->count() > 0) {
|
|
$listaDeProcedimentosEsus = [
|
|
ProcedimentoEnum::RADIOGRAFIA_OCLUSAL,
|
|
ProcedimentoEnum::COLOCACAO_DE_PLACA_DE_MORDIDA,
|
|
ProcedimentoEnum::MANUTENCAO_CONSERTO_DE_APARELHO_ORTODONTICO_ORTOPEDICO,
|
|
ProcedimentoEnum::MOLDAGEM_DENTO_GENGIVAL_COM_FINALIDADE_ORTODONTICA,
|
|
ProcedimentoEnum::EXERESE_DE_CISTO_ODONTOGENICO_E_NAO_ODONTOGENICO,
|
|
ProcedimentoEnum::TRATAMENTO_CIRURGICO_DE_FISTULA_INTRA_EXTRAORAL,
|
|
ProcedimentoEnum::CORRECAO_DE_BRIDAS_MUSCULARES,
|
|
ProcedimentoEnum::CORRECAO_DE_IRREGULARIDADES_DE_REBORDO_ALVEOLAR,
|
|
ProcedimentoEnum::REMOCAO_DE_TORUS_E_EXOSTOSES,
|
|
ProcedimentoEnum::CONTENCAO_DE_DENTES_POR_SPLINTAGEM,
|
|
ProcedimentoEnum::REDUCAO_DE_LUXACAO_TEMPORO_MANDIBULAR,
|
|
ProcedimentoEnum::RETIRADA_DE_MATERIAL_DE_SINTESE_OSSEA_DENTARIA,
|
|
ProcedimentoEnum::MANTENEDOR_DE_ESPACO,
|
|
ProcedimentoEnum::PLACA_OCLUSAL,
|
|
ProcedimentoEnum::PLANO_INCLINADO,
|
|
ProcedimentoEnum::PROTESE_PARCIAL_MANDIBULAR_REMOVIVEL,
|
|
ProcedimentoEnum::PROTESE_PARCIAL_MAXILAR_REMOVIVEL,
|
|
ProcedimentoEnum::PROTESE_TEMPORARIA,
|
|
ProcedimentoEnum::PROTESE_TOTAL_MANDIBULAR,
|
|
ProcedimentoEnum::PROTESE_TOTAL_MAXILAR,
|
|
ProcedimentoEnum::APARELHO_FIXO_BILATERAL_PARA_FECHAMENTO_DE_DIASTEMA,
|
|
ProcedimentoEnum::APARELHO_ORTODONTICO_FIXO,
|
|
ProcedimentoEnum::APARELHO_ORTOPEDICO_E_ORTODONTICO_REMOVIVEL,
|
|
ProcedimentoEnum::APARELHO_ORTOPEDICO_FIXO,
|
|
ProcedimentoEnum::APARELHO_P_BLOQUEIO_MAXILO_MANDIBULAR,
|
|
ProcedimentoEnum::APLICACAO_DE_CARIOSTATICO_POR_DENTE,
|
|
ProcedimentoEnum::APLICACAO_DE_SELANTE_POR_DENTE,
|
|
ProcedimentoEnum::SELAMENTO_PROVISORIO_DE_CAVIDADE_DENTARIA,
|
|
ProcedimentoEnum::RADIOGRAFIA_INTERPROXIMAL_BITE_WING,
|
|
ProcedimentoEnum::RADIOGRAFIA_PERIAPICAL,
|
|
ProcedimentoEnum::CAPEAMENTO_PULPAR,
|
|
ProcedimentoEnum::RESTAURACAO_DE_DENTE_PERMANENTE_ANTERIOR_COM_RESINA_COMPOSTA,
|
|
ProcedimentoEnum::TRATAMENTO_INICIAL_DO_DENTE_TRAUMATIZADO,
|
|
ProcedimentoEnum::TRATAMENTO_RESTAURADOR_ATRAUMATICO_TRA_ART,
|
|
ProcedimentoEnum::RESTAURACAO_DE_DENTE_DECIDUO_POSTERIOR_COM_RESINA_COMPOSTA,
|
|
ProcedimentoEnum::RESTAURACAO_DE_DENTE_DECIDUO_POSTERIOR_COM_AMALGAMA,
|
|
ProcedimentoEnum::RESTAURACAO_DE_DENTE_DECIDUO_POSTERIOR_COM_IONOMERO_DE_VIDRO,
|
|
ProcedimentoEnum::RESTAURACAO_DE_DENTE_DECIDUO_ANTERIOR_COM_RESINA_COMPOSTA,
|
|
ProcedimentoEnum::RESTAURACAO_DE_DENTE_PERMANENTE_POSTERIOR_COM_RESINA_COMPOSTA,
|
|
ProcedimentoEnum::RESTAURACAO_DE_DENTE_PERMANENTE_POSTERIOR_COM_AMALGAMA,
|
|
ProcedimentoEnum::ACESSO_A_POLPA_DENTARIA_E_MEDICACAO_POR_DENTE,
|
|
ProcedimentoEnum::CURATIVO_DE_DEMORA_C_OU_S_PREPARO_BIOMECANICO,
|
|
ProcedimentoEnum::TRATAMENTO_ENDODONTICO_DE_DENTE_DECIDUO,
|
|
ProcedimentoEnum::TRATAMENTO_ENDODONTICO_DE_DENTE_PERMANENTE_BIRRADICULAR,
|
|
ProcedimentoEnum::TRATAMENTO_ENDODONTICO_DE_DENTE_PERMANENTE_COM_TRES_OU_MAIS_RAIZES,
|
|
ProcedimentoEnum::TRATAMENTO_ENDODONTICO_DE_DENTE_PERMANENTE_UNIRRADICULAR,
|
|
ProcedimentoEnum::PULPOTOMIA_DENTARIA,
|
|
ProcedimentoEnum::RETRATAMENTO_ENDODONTICO_EM_DENTE_PERMANENTE_BI_RADICULAR,
|
|
ProcedimentoEnum::RETRATAMENTO_ENDODONTICO_EM_DENTE_PERMANENTE_COM_3_OU_MAIS_RAIZES,
|
|
ProcedimentoEnum::RETRATAMENTO_ENDODONTICO_EM_DENTE_PERMANENTE_UNI_RADICULAR,
|
|
ProcedimentoEnum::SELAMENTO_DE_PERFURACAO_RADICULAR,
|
|
ProcedimentoEnum::MOLDAGEM_DENTO_GENGIVAL_P_CONSTRUCAO_DE_PROTESE_DENTARIA,
|
|
ProcedimentoEnum::REEMBASAMENTO_E_CONSERTO_DE_PROTESE_DENTARIA,
|
|
ProcedimentoEnum::CIMENTACAO_DE_PROTESE_DENTARIA,
|
|
ProcedimentoEnum::ADAPTACAO_DE_PROTESE_DENTARIA,
|
|
ProcedimentoEnum::AJUSTE_OCLUSAL,
|
|
ProcedimentoEnum::INSTALACAO_DE_PROTESE_DENTARIA,
|
|
ProcedimentoEnum::APICECTOMIA_COM_OU_SEM_OBTURACAO_RETROGRADA,
|
|
ProcedimentoEnum::CURETAGEM_PERIAPICAL,
|
|
ProcedimentoEnum::EXODONTIA_DE_DENTE_DECIDUO,
|
|
ProcedimentoEnum::EXODONTIA_DE_DENTE_PERMANENTE,
|
|
ProcedimentoEnum::ODONTOSECCAO_RADILECTOMIA_TUNELIZACAO,
|
|
ProcedimentoEnum::REIMPLANTE_E_TRANSPLANTE_DENTAL_POR_ELEMENTO,
|
|
ProcedimentoEnum::REMOCAO_DE_DENTE_RETIDO_INCLUSO_IMPACTADO,
|
|
ProcedimentoEnum::TRATAMENTO_CIRURGICO_PARA_TRACIONAMENTO_DENTAL,
|
|
ProcedimentoEnum::TRATAMENTO_DE_ALVEOLITE,
|
|
ProcedimentoEnum::ULOTOMIA_ULECTOMIA,
|
|
ProcedimentoEnum::COROA_PROVISORIA,
|
|
ProcedimentoEnum::PROTESES_CORONARIAS_INTRA_RADICULARES_FIXAS_ADESIVAS_POR_ELEMENTO,
|
|
ProcedimentoEnum::COROA_DE_ACO_E_POLICARBOXILATO,
|
|
ProcedimentoEnum::PROTESE_DENTARIA_SOBRE_IMPLANTE,
|
|
ProcedimentoEnum::RASPAGEM_ALISAMENTO_SUBGENGIVAIS_POR_SEXTANTE,
|
|
ProcedimentoEnum::RASPAGEM_CORONO_RADICULAR_POR_SEXTANTE,
|
|
ProcedimentoEnum::RASPAGEM_ALISAMENTO_E_POLIMENTO_SUPRAGENGIVAIS_POR_SEXTANTE,
|
|
ProcedimentoEnum::APROFUNDAMENTO_DE_VESTIBULO_ORAL_POR_SEXTANTE,
|
|
ProcedimentoEnum::GENGIVECTOMIA_POR_SEXTANTE,
|
|
ProcedimentoEnum::EXODONTIA_MULTIPLA_COM_ALVEOLOPLASTIA_POR_SEXTANTE,
|
|
ProcedimentoEnum::GENGIVOPLASTIA_POR_SEXTANTE,
|
|
ProcedimentoEnum::TRATAMENTO_CIRURGICO_PERIODONTAL_POR_SEXTANTE,
|
|
];
|
|
|
|
$procedimentosComQuantidadeLimitada = [
|
|
ProcedimentoEnum::PRIMEIRA_CONSULTA_ODONTOLOGICA_PROGRAMATICA,
|
|
ProcedimentoEnum::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO,
|
|
ProcedimentoEnum::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_ESPECIALIZADA_EXCETO_MEDICO,
|
|
ProcedimentoEnum::ATENDIMENTO_DE_URGENCIA_EM_ATENCAO_ESPECIALIZADA,
|
|
ProcedimentoEnum::ATENDIMENTO_DE_URGENCIA_EM_ATENCAO_PRIMARIA,
|
|
ProcedimentoEnum::RETIRADA_DE_PONTOS_DE_CIRURGIAS_POR_PACIENTE,
|
|
ProcedimentoEnum::PROFILAXIA_REMOCAO_DA_PLACA_BACTERIANA,
|
|
ProcedimentoEnum::ORIENTACAO_DE_HIGIENE_BUCAL,
|
|
ProcedimentoEnum::APLICACAO_TOPICA_DE_FLUOR_INDIVIDUAL_POR_SESSAO,
|
|
ProcedimentoEnum::DRENAGEM_DE_ABSCESSO_DA_BOCA_E_ANEXOS,
|
|
];
|
|
|
|
$procedimentosComLimiteDeSeis = [
|
|
ProcedimentoEnum::RASPAGEM_ALISAMENTO_SUBGENGIVAIS_POR_SEXTANTE,
|
|
ProcedimentoEnum::RASPAGEM_CORONO_RADICULAR_POR_SEXTANTE,
|
|
ProcedimentoEnum::RASPAGEM_ALISAMENTO_E_POLIMENTO_SUPRAGENGIVAIS_POR_SEXTANTE,
|
|
ProcedimentoEnum::APROFUNDAMENTO_DE_VESTÍBULO_ORAL_POR_SEXTANTE,
|
|
ProcedimentoEnum::GENGIVECTOMIA_POR_SEXTANTE,
|
|
ProcedimentoEnum::EXODONTIA_MÚLTIPLA_COM_ALVEOLOPLASTIA_POR_SEXTANTE,
|
|
ProcedimentoEnum::GENGIVOPLASTIA_POR_SEXTANTE,
|
|
ProcedimentoEnum::TRATAMENTO_CIRÚRGICO_PERIODONTAL_POR_SEXTANTE,
|
|
];
|
|
|
|
$procedimentosAgrupados = [];
|
|
|
|
foreach ($procedimentos as $procedimento) {
|
|
$codigo = $procedimento->codigo_procedimento;
|
|
$quantidade = $procedimento->quantidade;
|
|
|
|
if (in_array($codigo, $procedimentosComQuantidadeLimitada) || !in_array($codigo, $listaDeProcedimentosEsus)) {
|
|
|
|
$procedimentosAgrupados[$codigo] = 1;
|
|
} elseif (in_array($codigo, $procedimentosComLimiteDeSeis)) {
|
|
if (isset($procedimentosAgrupados[$codigo])) {
|
|
$procedimentosAgrupados[$codigo] += $quantidade;
|
|
} else {
|
|
$procedimentosAgrupados[$codigo] = $quantidade;
|
|
}
|
|
}
|
|
else {
|
|
|
|
if (isset($procedimentosAgrupados[$codigo])) {
|
|
$procedimentosAgrupados[$codigo] += $quantidade;
|
|
} else {
|
|
$procedimentosAgrupados[$codigo] = $quantidade;
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($procedimentosAgrupados as $codigo => &$quantidade) {
|
|
if (in_array($codigo, $procedimentosComLimiteDeSeis)) {
|
|
$quantidade = (int) ceil($quantidade / 6);
|
|
}
|
|
}
|
|
|
|
unset($quantidade);
|
|
|
|
foreach ($procedimentosAgrupados as $codigo => $quantidade) {
|
|
$procedimentosRealizados = $dom->createElement('procedimentosRealizados');
|
|
$atendimentosOdontologicos->appendChild($procedimentosRealizados);
|
|
$procedimentosRealizados->appendChild($dom->createElement('coMsProcedimento', $codigo));
|
|
$procedimentosRealizados->appendChild($dom->createElement('quantidade', $quantidade));
|
|
}
|
|
}
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('turno', $fichaAtendimentoOdontologico->turno_id));
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('sexo', self::sexo($fichaAtendimentoOdontologico->paciente->cidadao->sexo->id)));
|
|
|
|
self::getExames($dom, $fichaAtendimentoOdontologico, $atendimentosOdontologicos);
|
|
self::getIvcf($dom, $fichaAtendimentoOdontologico, $atendimentosOdontologicos);
|
|
|
|
$atendimentosOdontologicos->appendChild($dom->createElement('dataHoraInicialAtendimento', strtotime($fichaAtendimentoOdontologico->created_at) * 1000));
|
|
$timestamp = strtotime($fichaAtendimentoOdontologico->created_at);
|
|
$timestamp += 5 * 60;
|
|
$timestampMillis = $timestamp * 1000;
|
|
$dataHoraFinalAtendimento = $dom->createElement('dataHoraFinalAtendimento', $timestampMillis);
|
|
$atendimentosOdontologicos->appendChild($dataHoraFinalAtendimento);
|
|
|
|
self::getMedicoes($dom, $fichaAtendimentoOdontologico, $atendimentosOdontologicos);
|
|
self::getCondicaoAvaliada($dom, $fichaAtendimentoOdontologico, $atendimentosOdontologicos);
|
|
|
|
if ($procedimentosOci->count() > 0) {
|
|
foreach ($procedimentosOci as $procedimento) {
|
|
$solicitacoesOci = $dom->createElement('solicitacoesOci');
|
|
$atendimentosOdontologicos->appendChild($solicitacoesOci);
|
|
$solicitacoesOci->appendChild($dom->createElement('codigoSigtap', $procedimento->codigo_procedimento));
|
|
}
|
|
}
|
|
|
|
$fichaAtendimentoOdontologico->uuid_ficha = $uuid;
|
|
$fichaAtendimentoOdontologico->exportacao_id = $exportacao->id;
|
|
$fichaAtendimentoOdontologico->data_exportacao = Carbon::now()->format('Y-m-d H:i:s');
|
|
$fichaAtendimentoOdontologico->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null;
|
|
$fichaAtendimentoOdontologico->save();
|
|
}
|
|
|
|
$headerTransport = $dom->createElement('headerTransport');
|
|
$fichaAtendimentoOdontologicoMasterTransport->appendChild($headerTransport);
|
|
|
|
$lotacaoFormPrincipal = $dom->createElement('lotacaoFormPrincipal');
|
|
$headerTransport->appendChild($lotacaoFormPrincipal);
|
|
|
|
$lotacaoFormPrincipal->appendChild($dom->createElement('profissionalCNS', $fichaProfissional->usuario->cidadao->cns ?? ''));
|
|
$lotacaoFormPrincipal->appendChild($dom->createElement('cboCodigo_2002', $fichaProfissional->ocupacao->codigo ));
|
|
$lotacaoFormPrincipal->appendChild($dom->createElement('cnes', $fichaProfissional->equipe->unidade->cnes));
|
|
|
|
if($fichaProfissional->equipe->area->numero_ine){
|
|
|
|
$lotacaoFormPrincipal->appendChild($dom->createElement('ine', $fichaProfissional->equipe->area->numero_ine));
|
|
}
|
|
|
|
if($fichaProfissional->usuario_auxiliar_id){
|
|
|
|
$lotacaoFormAtendimentoCompartilhado = $dom->createElement('lotacaoFormAtendimentoCompartilhado');
|
|
$headerTransport->appendChild($lotacaoFormAtendimentoCompartilhado);
|
|
|
|
$lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('profissionalCNS', $fichaProfissional->usuarioAuxiliar->cidadao->cns ?? ''));
|
|
$lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('cboCodigo_2002', $fichaProfissional->usuarioAuxiliarOcupacao->codigo ));
|
|
$lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('cnes', $fichaProfissional->usuarioAuxiliarEquipe->unidade->cnes ?? ''));
|
|
|
|
if (
|
|
$fichaProfissional->usuarioAuxiliarEquipe &&
|
|
$fichaProfissional->usuarioAuxiliarEquipe->area &&
|
|
$fichaProfissional->usuarioAuxiliarEquipe->area->numero_ine
|
|
) {
|
|
$lotacaoFormAtendimentoCompartilhado->appendChild(
|
|
$dom->createElement('ine', $fichaProfissional->usuarioAuxiliarEquipe->area->numero_ine)
|
|
);
|
|
}
|
|
}
|
|
|
|
$headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaProfissional->data_atendimento) * 1000));
|
|
$headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaProfissional->equipe->infraestrutura->endereco->logradouro->municipio->ibge));
|
|
|
|
$dom->appendChild($dadoTransporteTransportXml);
|
|
|
|
ExportacaoService::elementRemetente($dom, $dadoTransporteTransportXml);
|
|
ExportacaoService::elementOriginadora($dom, $dadoTransporteTransportXml);
|
|
ExportacaoService::elementVersao($dom, $dadoTransporteTransportXml);
|
|
|
|
return [
|
|
'exportacao' => $exportacao,
|
|
'dom' => $dom,
|
|
'atendimentos_odontologicos' => $atendimentosOdontologicosPosicoes,
|
|
];
|
|
}
|
|
|
|
private static function getMedicoes(&$dom, $fichaAtendimentoOdontologico, &$atendimentosOdontologicos){
|
|
|
|
$medicoesNecessarias = [
|
|
'circunferencia_abdominal',
|
|
'perimetro_panturrilha',
|
|
'pressao_arterial',
|
|
'frequencia_respiratoria',
|
|
'frequencia_cardiaca',
|
|
'temperatura',
|
|
'saturacao_o2',
|
|
'glicemia',
|
|
'momento_coleta_id',
|
|
'peso',
|
|
'altura',
|
|
'perimetro_cefalico'
|
|
];
|
|
|
|
$existeMedicao = false;
|
|
foreach ($medicoesNecessarias as $campo) {
|
|
if (!empty($fichaAtendimentoOdontologico->$campo)) {
|
|
$existeMedicao = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($existeMedicao) {
|
|
$medicoes = $dom->createElement('medicoes');
|
|
$atendimentosOdontologicos->appendChild($medicoes);
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->circunferencia_abdominal)) {
|
|
$medicoes->appendChild($dom->createElement('circunferenciaAbdominal', $fichaAtendimentoOdontologico->circunferencia_abdominal));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->perimetro_panturrilha)) {
|
|
$medicoes->appendChild($dom->createElement('perimetroPanturrilha', $fichaAtendimentoOdontologico->perimetro_panturrilha));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->pressao_arterial)) {
|
|
$pressao = explode('/', $fichaAtendimentoOdontologico->pressao_arterial);
|
|
|
|
if (count($pressao) === 2) {
|
|
$medicoes->appendChild($dom->createElement('pressaoArterialSistolica', $pressao[0]));
|
|
$medicoes->appendChild($dom->createElement('pressaoArterialDiastolica', $pressao[1]));
|
|
}
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->frequencia_respiratoria)) {
|
|
$medicoes->appendChild($dom->createElement('frequenciaRespiratoria', $fichaAtendimentoOdontologico->frequencia_respiratoria));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->frequencia_cardiaca)) {
|
|
$medicoes->appendChild($dom->createElement('frequenciaCardiaca', $fichaAtendimentoOdontologico->frequencia_cardiaca));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->temperatura)) {
|
|
$medicoes->appendChild($dom->createElement('temperatura', $fichaAtendimentoOdontologico->temperatura));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->saturacao_o2)) {
|
|
$medicoes->appendChild($dom->createElement('saturacaoO2', $fichaAtendimentoOdontologico->saturacao_o2));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->glicemia)) {
|
|
$medicoes->appendChild($dom->createElement('glicemiaCapilar', $fichaAtendimentoOdontologico->glicemia));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->momento_coleta_id)) {
|
|
$medicoes->appendChild($dom->createElement('tipoGlicemiaCapilar', $fichaAtendimentoOdontologico->momentoColeta->codigo_esus));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->peso)) {
|
|
$medicoes->appendChild($dom->createElement('peso', $fichaAtendimentoOdontologico->peso));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->altura)) {
|
|
$medicoes->appendChild($dom->createElement('altura', $fichaAtendimentoOdontologico->altura));
|
|
}
|
|
|
|
if (!empty($fichaAtendimentoOdontologico->perimetro_cefalico)) {
|
|
$medicoes->appendChild($dom->createElement('perimetroCefalico', $fichaAtendimentoOdontologico->perimetro_cefalico));
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function getCondicaoAvaliada(&$dom, $fichaAtendimentoOdontologico, &$atendimentosOdontologicos){
|
|
|
|
$ciapsAdicionados = [];
|
|
|
|
$atendimentosCondicaoAvaliada = DB::table('atencao_basica_atendimento_odontologico_condicao_avaliada')
|
|
->select([
|
|
'atencao_basica_cadastro_condicao_avaliada.id',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_condicao_avaliada',
|
|
'atencao_basica_cadastro_condicao_avaliada.id',
|
|
'atencao_basica_atendimento_odontologico_condicao_avaliada.condicao_avaliada_id'
|
|
)
|
|
->where('atencao_basica_atendimento_odontologico_condicao_avaliada.atendimento_odontologico_id', $fichaAtendimentoOdontologico->id)
|
|
->get();
|
|
|
|
foreach ($atendimentosCondicaoAvaliada as $condicaoAvaliada) {
|
|
|
|
$ciap = Ciap::where('id', self::getCiapFromCondicaoAvaliada($condicaoAvaliada->id))->first() ?? null;
|
|
|
|
if ($ciap) {
|
|
$ciapsAdicionados[] = $ciap->id; // ou $ciap->codigo, dependendo do que você quer evitar duplicar
|
|
|
|
$problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes');
|
|
$atendimentosOdontologicos->appendChild($problemaCondicaoAvaliada);
|
|
$problemaCondicaoAvaliada->appendChild($dom->createElement('ciap', $ciap->codigo));
|
|
$problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true'));
|
|
}
|
|
}
|
|
|
|
$atendimentosDoencaTransmissivel = DB::table('atencao_basica_atendimento_odontologico_doenca_transmissivel')
|
|
->select([
|
|
'atencao_basica_cadastro_doenca_transmissivel.id',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_doenca_transmissivel',
|
|
'atencao_basica_cadastro_doenca_transmissivel.id',
|
|
'atencao_basica_atendimento_odontologico_doenca_transmissivel.doenca_transmissivel_id'
|
|
)
|
|
->where('atencao_basica_atendimento_odontologico_doenca_transmissivel.atendimento_odontologico_id', $fichaAtendimentoOdontologico->id)
|
|
->get();
|
|
|
|
foreach ($atendimentosDoencaTransmissivel as $doenca) {
|
|
|
|
$ciap = Ciap::where('id', self::getCiapFromDoencaTransmissivel($doenca->id))->first() ?? null;
|
|
|
|
if ($ciap) {
|
|
$doencaTransmissivel = $dom->createElement('problemasCondicoes');
|
|
$atendimentosOdontologicos->appendChild($doencaTransmissivel);
|
|
$doencaTransmissivel->appendChild($dom->createElement('ciap', $ciap->codigo));
|
|
$doencaTransmissivel->appendChild($dom->createElement('isAvaliado', 'true'));
|
|
}
|
|
}
|
|
|
|
$atendimentosRastreamento = DB::table('atencao_basica_atendimento_odontologico_rastreamento')
|
|
->select([
|
|
'atencao_basica_cadastro_rastreamento.id',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_rastreamento',
|
|
'atencao_basica_cadastro_rastreamento.id',
|
|
'atencao_basica_atendimento_odontologico_rastreamento.rastreamento_id'
|
|
)
|
|
->where('atencao_basica_atendimento_odontologico_rastreamento.atendimento_odontologico_id', $fichaAtendimentoOdontologico->id)
|
|
->get();
|
|
|
|
foreach ($atendimentosRastreamento as $doenca) {
|
|
|
|
$ciap = Ciap::where('id', self::getCiapFromRastreamento($doenca->id))->first() ?? null;
|
|
|
|
if ($ciap) {
|
|
$doencaTransmissivel = $dom->createElement('problemasCondicoes');
|
|
$atendimentosOdontologicos->appendChild($doencaTransmissivel);
|
|
$doencaTransmissivel->appendChild($dom->createElement('ciap', $ciap->codigo));
|
|
$doencaTransmissivel->appendChild($dom->createElement('isAvaliado', 'true'));
|
|
}
|
|
}
|
|
|
|
$atendimentosCondicaoAvaliada = DB::table('atencao_basica_atendimento_odontologico_problema_condicao')
|
|
->select([
|
|
'atencao_basica_atendimento_odontologico_problema_condicao.ciap_id',
|
|
'atencao_basica_atendimento_odontologico_problema_condicao.cid_id',
|
|
])
|
|
->where('atencao_basica_atendimento_odontologico_problema_condicao.atendimento_odontologico_id', $fichaAtendimentoOdontologico->id)
|
|
->get();
|
|
|
|
foreach ($atendimentosCondicaoAvaliada as $condicaoAvaliada) {
|
|
|
|
if ($condicaoAvaliada->ciap_id && !in_array($condicaoAvaliada->ciap_id, $ciapsAdicionados)) {
|
|
|
|
$ciap = Ciap::where('id', $condicaoAvaliada->ciap_id)->first() ?? null;
|
|
|
|
if ($ciap) {
|
|
$ciapsAdicionados[] = $ciap->id;
|
|
|
|
$problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes');
|
|
$atendimentosOdontologicos->appendChild($problemaCondicaoAvaliada);
|
|
$problemaCondicaoAvaliada->appendChild($dom->createElement('ciap', $ciap->codigo));
|
|
$problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true'));
|
|
}
|
|
}
|
|
|
|
if ($condicaoAvaliada->cid_id) {
|
|
|
|
$cid = Cid::where('id', $condicaoAvaliada->cid_id)->first() ?? null;
|
|
|
|
if ($cid) {
|
|
|
|
$problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes');
|
|
$atendimentosOdontologicos->appendChild($problemaCondicaoAvaliada);
|
|
$problemaCondicaoAvaliada->appendChild($dom->createElement('cid10', $cid->codigo));
|
|
$problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true'));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function getExames(&$dom, $fichaAtendimentoOdontologico, &$atendimentosOdontologicos)
|
|
{
|
|
$exames = DB::table('atencao_basica_atendimento_odontologico_exame')
|
|
->select([
|
|
'atencao_basica_cadastro_exame_solicitado_avaliado.codigo_esus',
|
|
'atencao_basica_cadastro_exame_solicitado_avaliado.codigo_procedimento',
|
|
'atencao_basica_atendimento_odontologico_exame.solicitado',
|
|
'atencao_basica_atendimento_odontologico_exame.avaliado',
|
|
])
|
|
->join('atencao_basica_cadastro_exame_solicitado_avaliado', 'atencao_basica_cadastro_exame_solicitado_avaliado.id', 'atencao_basica_atendimento_odontologico_exame.exame_id')
|
|
->where('atencao_basica_atendimento_odontologico_exame.atendimento_odontologico_id', $fichaAtendimentoOdontologico->id)
|
|
->limit(1)
|
|
->get();
|
|
|
|
foreach ($exames as $value) {
|
|
$codigoExame = null;
|
|
|
|
if ($value->codigo_procedimento && $value->codigo_procedimento !== '') {
|
|
$codigoExame = $value->codigo_procedimento;
|
|
} else {
|
|
$codigoExame = $value->codigo_esus;
|
|
}
|
|
|
|
$exame = $dom->createElement('exame');
|
|
$atendimentosOdontologicos->appendChild($exame);
|
|
$exame->appendChild($dom->createElement('codigoExame', $codigoExame));
|
|
|
|
if ($value->solicitado) {
|
|
$exame->appendChild($dom->createElement('solicitadoAvaliado', 'S'));
|
|
}
|
|
|
|
if ($value->avaliado) {
|
|
$exame->appendChild($dom->createElement('solicitadoAvaliado', 'A'));
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function getCiapFromCondicaoAvaliada($condicaoAvaliada)
|
|
{
|
|
$map = [
|
|
CondicaoAvaliada::ASMA => CiapCondicaoAvaliada::ASMA,
|
|
CondicaoAvaliada::DESNUTRICAO => CiapCondicaoAvaliada::DESNUTRICAO,
|
|
CondicaoAvaliada::DIABETES => CiapCondicaoAvaliada::DIABETES,
|
|
CondicaoAvaliada::DPOC => CiapCondicaoAvaliada::DPOC,
|
|
CondicaoAvaliada::HIPERTENSAO_ARTERIAL => CiapCondicaoAvaliada::HIPERTENSAO_ARTERIAL,
|
|
CondicaoAvaliada::OBESIDADE => CiapCondicaoAvaliada::OBESIDADE,
|
|
CondicaoAvaliada::PRE_NATAL => CiapCondicaoAvaliada::PRE_NATAL,
|
|
CondicaoAvaliada::PUERICULTURA => CiapCondicaoAvaliada::PUERICULTURA,
|
|
CondicaoAvaliada::PUERPERIO_ATE_42_DIAS => CiapCondicaoAvaliada::PUERPERIO,
|
|
CondicaoAvaliada::REABILITACAO => CiapCondicaoAvaliada::REABILITACAO,
|
|
CondicaoAvaliada::TABAGISMO => CiapCondicaoAvaliada::TABAGISMO,
|
|
CondicaoAvaliada::USUARIO_DE_ALCOOL => CiapCondicaoAvaliada::USUARIO_DE_ALCOOL,
|
|
CondicaoAvaliada::USUARIO_DE_OUTRAS_DROGAS => CiapCondicaoAvaliada::USUARIO_DE_OUTRAS_DROGAS,
|
|
];
|
|
|
|
return $map[$condicaoAvaliada] ?? null;
|
|
}
|
|
|
|
private static function getCiapFromDoencaTransmissivel($condicaoAvaliada)
|
|
{
|
|
$map = [
|
|
DoencaTransmissivel::DENGUE => CiapCondicaoAvaliada::DENGUE,
|
|
DoencaTransmissivel::DST => CiapCondicaoAvaliada::DST,
|
|
DoencaTransmissivel::HANSENIASE => CiapCondicaoAvaliada::HANSENIASE,
|
|
DoencaTransmissivel::TUBERCULOSE => CiapCondicaoAvaliada::TUBERCULOSE,
|
|
];
|
|
|
|
return $map[$condicaoAvaliada] ?? null;
|
|
}
|
|
|
|
private static function getCiapFromRastreamento($condicaoAvaliada)
|
|
{
|
|
$map = [
|
|
Rastreamento::RISCO_CARDIOVASCULAR => CiapCondicaoAvaliada::RASTREAMENTO_DE_RISCO_CARDIOVASCULAR,
|
|
];
|
|
|
|
return $map[$condicaoAvaliada] ?? null;
|
|
}
|
|
|
|
private static function sexo($sexo_id) {
|
|
$sexo = null;
|
|
|
|
if ($sexo_id === Sexo::MASCULINO) {
|
|
$sexo = ExportacaoSexo::MASCULINO;
|
|
}
|
|
else if ($sexo_id === Sexo::FEMININO) {
|
|
$sexo = ExportacaoSexo::FEMININO;
|
|
}
|
|
else if ($sexo_id === Sexo::INDETERMINADO) {
|
|
$sexo = ExportacaoSexo::INDETERMINADO;
|
|
}
|
|
else {
|
|
$sexo = ExportacaoSexo::IGNORADO;
|
|
}
|
|
|
|
return $sexo;
|
|
}
|
|
|
|
private static function getIvcf(&$dom, $fichaAtendimentoOdontologico, &$atendimentosOdontologicos)
|
|
{
|
|
$atendimentoOdontologicoIvcf = AtendimentoOdontologicoIvcf::where('atendimento_odontologico_id', $fichaAtendimentoOdontologico->id)->first();
|
|
|
|
if ($atendimentoOdontologicoIvcf) {
|
|
$pacienteIdade = $atendimentoOdontologicoIvcf->atendimentoOdontologico->paciente->cidadao->idade['anos'] ?? null;
|
|
|
|
$resultado = null;
|
|
$hasSgIdade = true;
|
|
$hasSgPercepcaoSaude = false;
|
|
$hasSgAvdInstrumental = false;
|
|
$hasSgAvdBasica = false;
|
|
$hasSgCognicao = false;
|
|
$hasSgHumor = false;
|
|
$hasSgAlcancePreensaoPinca = false;
|
|
$hasSgCapAerobicaMuscular = false;
|
|
$hasSgMarcha = false;
|
|
$hasSgContinencia = false;
|
|
$hasSgVisao = false;
|
|
$hasSgAudicao = false;
|
|
$hasSgComorbidade = false;
|
|
$dataResultado = strtotime($atendimentoOdontologicoIvcf->updated_at) * 1000;
|
|
|
|
if ($pacienteIdade >= 75 && $pacienteIdade <= 84) {
|
|
$resultado += 1;
|
|
}
|
|
else if ($pacienteIdade >= 85) {
|
|
$resultado += 3;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->estado_saude_geral === 'regular_ou_ruim') {
|
|
$resultado += 1;
|
|
$hasSgPercepcaoSaude = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->limitacao_compras || $atendimentoOdontologicoIvcf->limitacao_gestao_financeira || $atendimentoOdontologicoIvcf->limitacao_tarefas_domesticas) {
|
|
$resultado += 4;
|
|
$hasSgAvdInstrumental = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->banho_independencia) {
|
|
$resultado += 6;
|
|
$hasSgAvdBasica = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->relato_esquecimento_por_terceiros) {
|
|
$resultado += 1;
|
|
$hasSgCognicao = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->esquecimento_piorando) {
|
|
$resultado += 1;
|
|
$hasSgCognicao = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->esquecimento_impacta_atividades) {
|
|
$resultado += 2;
|
|
$hasSgCognicao = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->humor_tristeza_desanimo) {
|
|
$resultado += 2;
|
|
$hasSgHumor = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->perda_interesse_atividades) {
|
|
$resultado += 2;
|
|
$hasSgHumor = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->limitacao_elevar_bracos) {
|
|
$resultado += 1;
|
|
$hasSgAlcancePreensaoPinca = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->limitacao_motricidade_fina) {
|
|
$resultado += 1;
|
|
$hasSgAlcancePreensaoPinca = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->perda_peso_nao_intencional || $atendimentoOdontologicoIvcf->imc_abaixo_22 || $atendimentoOdontologicoIvcf->panturrilha_abaixo_31 || $atendimentoOdontologicoIvcf->marcha_lenta_4m_maior_5s) {
|
|
$resultado += 2;
|
|
$hasSgCapAerobicaMuscular = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->dificuldade_caminhar_impacto_atividades) {
|
|
$resultado += 2;
|
|
$hasSgMarcha = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->quedas_recorrentes) {
|
|
$resultado += 2;
|
|
$hasSgMarcha = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->incontinencia) {
|
|
$resultado += 2;
|
|
$hasSgContinencia = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->problema_visao_impacto_atividades) {
|
|
$resultado += 2;
|
|
$hasSgVisao = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->problema_audicao_impacto_atividades) {
|
|
$resultado += 2;
|
|
$hasSgAudicao = true;
|
|
}
|
|
|
|
if ($atendimentoOdontologicoIvcf->doencas_cronicas_multiplas || $atendimentoOdontologicoIvcf->polifarmacia_5_ou_mais_medicamentos || $atendimentoOdontologicoIvcf->internacao_ultimos_6_meses) {
|
|
$resultado += 4;
|
|
$hasSgComorbidade = true;
|
|
}
|
|
|
|
$ivcf = $dom->createElement('ivcf');
|
|
$atendimentosOdontologicos->appendChild($ivcf);
|
|
|
|
$ivcf->appendChild($dom->createElement('resultado', $resultado));
|
|
$ivcf->appendChild($dom->createElement('hasSgIdade', $hasSgIdade ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgPercepcaoSaude', $hasSgPercepcaoSaude ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgAvdInstrumental', $hasSgAvdInstrumental ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgAvdBasica', $hasSgAvdBasica ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgCognicao', $hasSgCognicao ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgHumor', $hasSgHumor ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgAlcancePreensaoPinca', $hasSgAlcancePreensaoPinca ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgCapAerobicaMuscular', $hasSgCapAerobicaMuscular ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgMarcha', $hasSgMarcha ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgContinencia', $hasSgContinencia ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgVisao', $hasSgVisao ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgAudicao', $hasSgAudicao ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('hasSgComorbidade', $hasSgComorbidade ? 'true' : 'false'));
|
|
$ivcf->appendChild($dom->createElement('dataResultado', $dataResultado));
|
|
}
|
|
}
|
|
}
|