This commit is contained in:
@@ -0,0 +1,566 @@
|
||||
<?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\TipoAtendimento;
|
||||
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\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliar;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarAtendimento;
|
||||
use App\Models\AtencaoBasica\AtendimentoDomiciliar\AtendimentoDomiciliarAtendimentoIvcf;
|
||||
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 FichaAtendimentoDomiciliarService extends Service
|
||||
{
|
||||
|
||||
public static function create($arquivo_caminho, $arquivo_nome, $exportacaoArquivoId, $usuarioId = null)
|
||||
{
|
||||
$mes_ano = request()->mes_ano;
|
||||
|
||||
foreach (self::getFichasAtendimentoDomiciliar($mes_ano) as $fichaAtendimentoDomiciliar) {
|
||||
|
||||
$dadosExportacao = self::getDadosExportacao($fichaAtendimentoDomiciliar, $exportacaoArquivoId, $usuarioId);
|
||||
|
||||
$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, 'AD_' . $dadosExportacao['exportacao']->uuid . '.esus.xml');
|
||||
$zip->close();
|
||||
|
||||
if (file_exists($xmlPath)) {
|
||||
unlink($xmlPath);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static function gerarExportacoes($mesAnoInicial)
|
||||
{
|
||||
$exportacoes = collect();
|
||||
|
||||
foreach (self::getFichasAtendimentoDomiciliar($mesAnoInicial, false) as $fichaAtendimentoDomiciliar) {
|
||||
|
||||
$dadosExportacao = self::getDadosExportacao($fichaAtendimentoDomiciliar);
|
||||
|
||||
$exportacoes->push([
|
||||
'exportacao_id' => $dadosExportacao['exportacao']->id,
|
||||
'data_atendimento' => $fichaAtendimentoDomiciliar->data,
|
||||
'usuario_id' => $fichaAtendimentoDomiciliar->usuario->id,
|
||||
'ocupacao_id' => $fichaAtendimentoDomiciliar->ocupacao->id,
|
||||
'equipe_id' => $fichaAtendimentoDomiciliar->equipe->id,
|
||||
'atendimento_domiciliar_id' => $fichaAtendimentoDomiciliar->id,
|
||||
'atendimento_domiciliar_atendimentos' => $dadosExportacao['atendimento_domiciliar_atendimentos'],
|
||||
'xml' => [
|
||||
'nome_arquivo' => 'AD_' . $dadosExportacao['exportacao']->uuid . '.esus.xml',
|
||||
'conteudo' => $dadosExportacao['dom']->saveXml(),
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
return $exportacoes;
|
||||
}
|
||||
|
||||
private static function getFichasAtendimentoDomiciliar($mes_ano, $somenteMesAno = true)
|
||||
{
|
||||
return AtendimentoDomiciliar::whereNull('exportacao_id')
|
||||
->when($somenteMesAno,
|
||||
fn ($q) => $q->whereYear('data', substr($mes_ano, 2))
|
||||
->whereMonth('data', substr($mes_ano, 0, 2)),
|
||||
fn ($q) => $q->where(function ($q) use ($mes_ano) {
|
||||
$q->whereYear('data', '>', substr($mes_ano, 2))
|
||||
->orWhere(function ($q) use ($mes_ano) {
|
||||
$q->whereYear('data', substr($mes_ano, 2))
|
||||
->whereMonth('data', '>=', substr($mes_ano, 0, 2));
|
||||
});
|
||||
})
|
||||
)
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getDadosExportacao($fichaAtendimentoDomiciliar, $exportacaoArquivoId = null, $usuarioId = null)
|
||||
{
|
||||
$atendimentoDomiciliarAtendimentosPosicoes = collect();
|
||||
|
||||
$uuid = ExportacaoService::getUuid($fichaAtendimentoDomiciliar->equipe->unidade->cnes);
|
||||
|
||||
$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/fichaatendimentodomiciliarmaster');
|
||||
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid));
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::ATENDIMENTO_DOMICILIAR));
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaAtendimentoDomiciliar->equipe->infraestrutura->endereco->logradouro->municipio->ibge));
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaAtendimentoDomiciliar->equipe->unidade->cnes));
|
||||
|
||||
if($fichaAtendimentoDomiciliar->equipe->area->numero_ine){
|
||||
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaAtendimentoDomiciliar->equipe->area->numero_ine));
|
||||
}
|
||||
|
||||
$fichaAtendimentoDomiciliarMasterTransport = $dom->createElement('ns4:fichaAtendimentoDomiciliarMasterTransport');
|
||||
$dadoTransporteTransportXml->appendChild($fichaAtendimentoDomiciliarMasterTransport);
|
||||
|
||||
$fichaAtendimentoDomiciliarMasterTransport->appendChild($dom->createElement('uuidFicha', $uuid));
|
||||
$fichaAtendimentoDomiciliarMasterTransport->appendChild($dom->createElement('tpCdsOrigem', '3'));
|
||||
|
||||
$headerTransport = $dom->createElement('headerTransport');
|
||||
$fichaAtendimentoDomiciliarMasterTransport->appendChild($headerTransport);
|
||||
|
||||
$lotacaoFormPrincipal = $dom->createElement('lotacaoFormPrincipal');
|
||||
$headerTransport->appendChild($lotacaoFormPrincipal);
|
||||
|
||||
$lotacaoFormPrincipal->appendChild($dom->createElement('profissionalCNS', $fichaAtendimentoDomiciliar->usuario->cidadao->cns ?? ''));
|
||||
$lotacaoFormPrincipal->appendChild($dom->createElement('cboCodigo_2002', $fichaAtendimentoDomiciliar->ocupacao->codigo ));
|
||||
$lotacaoFormPrincipal->appendChild($dom->createElement('cnes', $fichaAtendimentoDomiciliar->equipe->unidade->cnes));
|
||||
|
||||
if($fichaAtendimentoDomiciliar->equipe->area->numero_ine){
|
||||
|
||||
$lotacaoFormPrincipal->appendChild($dom->createElement('ine', $fichaAtendimentoDomiciliar->equipe->area->numero_ine));
|
||||
}
|
||||
|
||||
if($fichaAtendimentoDomiciliar->usuario_auxiliar_id){
|
||||
|
||||
$lotacaoFormAtendimentoCompartilhado = $dom->createElement('lotacaoFormAtendimentoCompartilhado');
|
||||
$headerTransport->appendChild($lotacaoFormAtendimentoCompartilhado);
|
||||
|
||||
$lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('profissionalCNS', $fichaAtendimentoDomiciliar->usuarioAuxiliar->cidadao->cns ?? ''));
|
||||
$lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('cboCodigo_2002', $fichaAtendimentoDomiciliar->ocupacaoAuxiliar->codigo ));
|
||||
$lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('cnes', $fichaAtendimentoDomiciliar->equipeAuxiliar->unidade->cnes));
|
||||
|
||||
if($fichaAtendimentoDomiciliar->equipeAuxiliar->area->numero_ine){
|
||||
|
||||
$lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('ine', $fichaAtendimentoDomiciliar->equipeAuxiliar->area->numero_ine));
|
||||
}
|
||||
}
|
||||
|
||||
$headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaAtendimentoDomiciliar->data) * 1000));
|
||||
$headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaAtendimentoDomiciliar->equipe->infraestrutura->endereco->logradouro->municipio->ibge));
|
||||
|
||||
$atendimentos = AtendimentoDomiciliarAtendimento::where('atendimento_domiciliar_id', $fichaAtendimentoDomiciliar->id)
|
||||
->get();
|
||||
|
||||
foreach ($atendimentos as $i => $atendimento) {
|
||||
|
||||
$atendimentoDomiciliarAtendimentosPosicoes->push([
|
||||
'posicao' => $i + 1,
|
||||
'id' => $atendimento->id,
|
||||
]);
|
||||
|
||||
$atendimentosDomiciliares = $dom->createElement('atendimentosDomiciliares');
|
||||
$fichaAtendimentoDomiciliarMasterTransport->appendChild($atendimentosDomiciliares);
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('turno', $atendimento->turno_id));
|
||||
|
||||
if (Cns::isValid($atendimento->paciente->cidadao->cns)) {
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('cnsCidadao', $atendimento->paciente->cidadao->cns ?? ''));
|
||||
}
|
||||
|
||||
if (!Cns::isValid($atendimento->paciente->cidadao->cns)) {
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('cpfCidadao', $atendimento->paciente->cidadao->cpf ?? ''));
|
||||
}
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('dataNascimento', strtotime($atendimento->paciente->cidadao->data_nascimento->format('Y-m-d')) * 1000));
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('sexo', self::sexo($atendimento->paciente->cidadao->sexo->id)));
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('localAtendimento', $atendimento->local_atendimento_id));
|
||||
|
||||
if($atendimento->tipoAtendimento->id != TipoAtendimento::VISITA_DOMICILIAR_POS_OBITO){
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('atencaoDomiciliarModalidade', $atendimento->modalidade->codigo_esus));
|
||||
}
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('tipoAtendimento', $atendimento->tipoAtendimento->codigo_esus));
|
||||
|
||||
if (count($atendimento->condicoes) > 0) {
|
||||
|
||||
foreach ($atendimento->condicoes as $condicoes) {
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('condicoesAvaliadas', $condicoes->condicao->codigo));
|
||||
}
|
||||
}
|
||||
|
||||
self::getCondicaoAvaliada($dom, $atendimento, $atendimentosDomiciliares);
|
||||
self::getIvcf($dom, $atendimento, $atendimentosDomiciliares);
|
||||
|
||||
if (count($atendimento->procedimentos) > 0) {
|
||||
|
||||
foreach ($atendimento->procedimentos as $procedimento) {
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('procedimentos', $procedimento->codigo_procedimento));
|
||||
}
|
||||
}
|
||||
|
||||
if($atendimento->conduta_desfecho_id){
|
||||
|
||||
$atendimentosDomiciliares->appendChild($dom->createElement('condutaDesfecho', $atendimento->condutaDesfecho->codigo));
|
||||
}
|
||||
}
|
||||
|
||||
$dom->appendChild($dadoTransporteTransportXml);
|
||||
|
||||
ExportacaoService::elementRemetente($dom, $dadoTransporteTransportXml);
|
||||
ExportacaoService::elementOriginadora($dom, $dadoTransporteTransportXml);
|
||||
ExportacaoService::elementVersao($dom, $dadoTransporteTransportXml);
|
||||
|
||||
$exportacao = new Exportacao();
|
||||
$exportacao->uuid = $uuid;
|
||||
$exportacao->exportacao_arquivo_id = $exportacaoArquivoId;
|
||||
$exportacao->save();
|
||||
|
||||
$fichaAtendimentoDomiciliar->uuid_ficha = $uuid;
|
||||
$fichaAtendimentoDomiciliar->exportacao_id = $exportacao->id;
|
||||
$fichaAtendimentoDomiciliar->data_exportacao = Carbon::now()->format('Y-m-d H:i:s');
|
||||
$fichaAtendimentoDomiciliar->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null;
|
||||
$fichaAtendimentoDomiciliar->save();
|
||||
|
||||
return [
|
||||
'exportacao' => $exportacao,
|
||||
'dom' => $dom,
|
||||
'atendimento_domiciliar_atendimentos' => $atendimentoDomiciliarAtendimentosPosicoes,
|
||||
];
|
||||
}
|
||||
|
||||
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 getCondicaoAvaliada(&$dom, $atendimento, &$atendimentosDomiciliares){
|
||||
|
||||
$atendimentosCondicaoAvaliada = DB::table('atencao_basica_atendimento_domiciliar_atend_condicao_avaliada')
|
||||
->select([
|
||||
'atencao_basica_cadastro_condicao_avaliada.id',
|
||||
])
|
||||
->join(
|
||||
'atencao_basica_cadastro_condicao_avaliada',
|
||||
'atencao_basica_cadastro_condicao_avaliada.id',
|
||||
'atencao_basica_atendimento_domiciliar_atend_condicao_avaliada.condicao_avaliada_id'
|
||||
)
|
||||
->where('atencao_basica_atendimento_domiciliar_atend_condicao_avaliada.atendimento_domiciliar_atendimento_id', $atendimento->id)
|
||||
->get();
|
||||
|
||||
foreach ($atendimentosCondicaoAvaliada as $condicaoAvaliada) {
|
||||
|
||||
$ciap = Ciap::where('id', self::getCiapFromCondicaoAvaliada($condicaoAvaliada->id))->first() ?? null;
|
||||
|
||||
if ($ciap) {
|
||||
$problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes');
|
||||
$atendimentosDomiciliares->appendChild($problemaCondicaoAvaliada);
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('ciap', $ciap->codigo));
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true'));
|
||||
}
|
||||
}
|
||||
|
||||
$atendimentosDoencaTransmissivel = DB::table('atencao_basica_atendimento_domiciliar_atend_doenca_transmissivel')
|
||||
->select([
|
||||
'atencao_basica_cadastro_doenca_transmissivel.id',
|
||||
])
|
||||
->join(
|
||||
'atencao_basica_cadastro_doenca_transmissivel',
|
||||
'atencao_basica_cadastro_doenca_transmissivel.id',
|
||||
'atencao_basica_atendimento_domiciliar_atend_doenca_transmissivel.doenca_transmissivel_id'
|
||||
)
|
||||
->where('atencao_basica_atendimento_domiciliar_atend_doenca_transmissivel.atendimento_domiciliar_atendimento_id', $atendimento->id)
|
||||
->get();
|
||||
|
||||
foreach ($atendimentosDoencaTransmissivel as $doenca) {
|
||||
|
||||
$ciap = Ciap::where('id', self::getCiapFromDoencaTransmissivel($doenca->id))->first() ?? null;
|
||||
|
||||
if ($ciap) {
|
||||
$doencaTransmissivel = $dom->createElement('problemasCondicoes');
|
||||
$atendimentosDomiciliares->appendChild($doencaTransmissivel);
|
||||
$doencaTransmissivel->appendChild($dom->createElement('ciap', $ciap->codigo));
|
||||
$doencaTransmissivel->appendChild($dom->createElement('isAvaliado', 'true'));
|
||||
}
|
||||
}
|
||||
|
||||
$atendimentosRastreamento = DB::table('atencao_basica_atendimento_domiciliar_atend_rastreamento')
|
||||
->select([
|
||||
'atencao_basica_cadastro_rastreamento.id',
|
||||
])
|
||||
->join(
|
||||
'atencao_basica_cadastro_rastreamento',
|
||||
'atencao_basica_cadastro_rastreamento.id',
|
||||
'atencao_basica_atendimento_domiciliar_atend_rastreamento.rastreamento_id'
|
||||
)
|
||||
->where('atencao_basica_atendimento_domiciliar_atend_rastreamento.atendimento_domiciliar_atendimento_id', $atendimento->id)
|
||||
->get();
|
||||
|
||||
foreach ($atendimentosRastreamento as $doenca) {
|
||||
|
||||
$ciap = Ciap::where('id', self::getCiapFromRastreamento($doenca->id))->first() ?? null;
|
||||
|
||||
if ($ciap) {
|
||||
$doencaTransmissivel = $dom->createElement('problemasCondicoes');
|
||||
$atendimentosDomiciliares->appendChild($doencaTransmissivel);
|
||||
$doencaTransmissivel->appendChild($dom->createElement('ciap', $ciap->codigo));
|
||||
$doencaTransmissivel->appendChild($dom->createElement('isAvaliado', 'true'));
|
||||
}
|
||||
}
|
||||
|
||||
$atendimentosCondicaoAvaliada = DB::table('atencao_basica_atendimento_domiciliar_atend_problema_condicao')
|
||||
->select([
|
||||
'atencao_basica_atendimento_domiciliar_atend_problema_condicao.ciap_id',
|
||||
'atencao_basica_atendimento_domiciliar_atend_problema_condicao.cid_id',
|
||||
])
|
||||
->where('atencao_basica_atendimento_domiciliar_atend_problema_condicao.atendimento_domiciliar_atendimento_id', $atendimento->id)
|
||||
->get();
|
||||
|
||||
foreach ($atendimentosCondicaoAvaliada as $condicaoAvaliada) {
|
||||
|
||||
if ($condicaoAvaliada->ciap_id) {
|
||||
|
||||
$ciap = Ciap::where('id', $condicaoAvaliada->ciap_id)->first() ?? null;
|
||||
|
||||
if ($ciap) {
|
||||
|
||||
$problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes');
|
||||
$atendimentosDomiciliares->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');
|
||||
$atendimentosDomiciliares->appendChild($problemaCondicaoAvaliada);
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('cid10', $cid->codigo));
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($atendimento->codigo_cid){
|
||||
|
||||
$problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes');
|
||||
$atendimentosDomiciliares->appendChild($problemaCondicaoAvaliada);
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('cid10', $atendimento->codigo_cid));
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true'));
|
||||
}
|
||||
|
||||
if($atendimento->codigo_ciap){
|
||||
|
||||
$problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes');
|
||||
$atendimentosDomiciliares->appendChild($problemaCondicaoAvaliada);
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('ciap', $atendimento->codigo_ciap));
|
||||
$problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true'));;
|
||||
}
|
||||
}
|
||||
|
||||
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 getIvcf(&$dom, $atendimento, &$atendimentosDomiciliares)
|
||||
{
|
||||
$atendimentoDomiciliarAtendimentoIvcf = AtendimentoDomiciliarAtendimentoIvcf::where('atendimento_domiciliar_atendimento_id', $atendimento->id)->first();
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf) {
|
||||
$pacienteIdade = $atendimentoDomiciliarAtendimentoIvcf->atendimentoDomiciliarAtendimento->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($atendimentoDomiciliarAtendimentoIvcf->updated_at) * 1000;
|
||||
|
||||
if ($pacienteIdade >= 75 && $pacienteIdade <= 84) {
|
||||
$resultado += 1;
|
||||
}
|
||||
else if ($pacienteIdade >= 85) {
|
||||
$resultado += 3;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->estado_saude_geral === 'regular_ou_ruim') {
|
||||
$resultado += 1;
|
||||
$hasSgPercepcaoSaude = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->limitacao_compras || $atendimentoDomiciliarAtendimentoIvcf->limitacao_gestao_financeira || $atendimentoDomiciliarAtendimentoIvcf->limitacao_tarefas_domesticas) {
|
||||
$resultado += 4;
|
||||
$hasSgAvdInstrumental = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->banho_independencia) {
|
||||
$resultado += 6;
|
||||
$hasSgAvdBasica = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->relato_esquecimento_por_terceiros) {
|
||||
$resultado += 1;
|
||||
$hasSgCognicao = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->esquecimento_piorando) {
|
||||
$resultado += 1;
|
||||
$hasSgCognicao = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->esquecimento_impacta_atividades) {
|
||||
$resultado += 2;
|
||||
$hasSgCognicao = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->humor_tristeza_desanimo) {
|
||||
$resultado += 2;
|
||||
$hasSgHumor = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->perda_interesse_atividades) {
|
||||
$resultado += 2;
|
||||
$hasSgHumor = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->limitacao_elevar_bracos) {
|
||||
$resultado += 1;
|
||||
$hasSgAlcancePreensaoPinca = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->limitacao_motricidade_fina) {
|
||||
$resultado += 1;
|
||||
$hasSgAlcancePreensaoPinca = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->perda_peso_nao_intencional || $atendimentoDomiciliarAtendimentoIvcf->imc_abaixo_22 || $atendimentoDomiciliarAtendimentoIvcf->panturrilha_abaixo_31 || $atendimentoDomiciliarAtendimentoIvcf->marcha_lenta_4m_maior_5s) {
|
||||
$resultado += 2;
|
||||
$hasSgCapAerobicaMuscular = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->dificuldade_caminhar_impacto_atividades) {
|
||||
$resultado += 2;
|
||||
$hasSgMarcha = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->quedas_recorrentes) {
|
||||
$resultado += 2;
|
||||
$hasSgMarcha = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->incontinencia) {
|
||||
$resultado += 2;
|
||||
$hasSgContinencia = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->problema_visao_impacto_atividades) {
|
||||
$resultado += 2;
|
||||
$hasSgVisao = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->problema_audicao_impacto_atividades) {
|
||||
$resultado += 2;
|
||||
$hasSgAudicao = true;
|
||||
}
|
||||
|
||||
if ($atendimentoDomiciliarAtendimentoIvcf->doencas_cronicas_multiplas || $atendimentoDomiciliarAtendimentoIvcf->polifarmacia_5_ou_mais_medicamentos || $atendimentoDomiciliarAtendimentoIvcf->internacao_ultimos_6_meses) {
|
||||
$resultado += 4;
|
||||
$hasSgComorbidade = true;
|
||||
}
|
||||
|
||||
$ivcf = $dom->createElement('ivcf');
|
||||
$atendimentosDomiciliares->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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user