This commit is contained in:
@@ -0,0 +1,592 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\AtencaoBasica\RelatorioCadastroConsistente;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Nacionalidade as EnumNacionalidade;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor as EnumRacaCor;
|
||||
use App\Enums\Intranet\Pais as IntranetPais;
|
||||
use App\Rules\Cns;
|
||||
use App\Rules\Cpf;
|
||||
use App\Rules\NomeCompleto;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioCadastroConsistenteService extends Service
|
||||
{
|
||||
|
||||
private static $idsValidosCache = null;
|
||||
|
||||
private static function getIdsValidos()
|
||||
{
|
||||
if (self::$idsValidosCache === null) {
|
||||
self::$idsValidosCache = self::idsValidosNoCadastroIndividual();
|
||||
}
|
||||
|
||||
return self::$idsValidosCache;
|
||||
}
|
||||
|
||||
private static function idsValidosNoCadastroIndividual()
|
||||
{
|
||||
$registrosCadastrosIndividuais = self::getCadastrosIndividuais();
|
||||
$domiciliosCadastrados = DB::table('atencao_basica_cadastro_domiciliar')->pluck('domicilio_id');
|
||||
|
||||
$idsValidos = [];
|
||||
|
||||
foreach ($registrosCadastrosIndividuais as $registro) {
|
||||
|
||||
if(!$domiciliosCadastrados->contains($registro->domicilio_id)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($registro) {
|
||||
|
||||
$id = $registro->id;
|
||||
|
||||
if (
|
||||
($registro->paciente_cns && !Cns::isValid($registro->paciente_cns)) ||
|
||||
(!$registro->paciente_cns && !Cpf::isValid($registro->paciente_cpf)) ||
|
||||
($registro->nome_cidadao && !NomeCompleto::isValid($registro->nome_cidadao)) ||
|
||||
(!empty($registro->paciente_nome_mae) && !NomeCompleto::isValid($registro->paciente_nome_mae)) ||
|
||||
(!empty($registro->paciente_nome_pai) && !NomeCompleto::isValid($registro->paciente_nome_pai))
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!in_array($id, $idsValidos)) {
|
||||
$idsValidos[] = $id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($registrosCadastrosIndividuais as $registro) {
|
||||
|
||||
if ($registro) {
|
||||
|
||||
$id = $registro->id;
|
||||
|
||||
if (!Cns::isValid($registro->usuario_cns)) {
|
||||
$key = array_search($id, $idsValidos);
|
||||
|
||||
if ($key !== false) {
|
||||
unset($idsValidos[$key]);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $idsValidos;
|
||||
}
|
||||
|
||||
public static function getCadastrosIndividuais()
|
||||
{
|
||||
|
||||
return DB::table('atencao_basica_cadastro_individual AS cadastro_individual')
|
||||
->select([
|
||||
'cadastro_individual.id AS id',
|
||||
'paciente_cidadao.domicilio_id AS domicilio_id',
|
||||
'paciente.id as paciente_id',
|
||||
'paciente_cidadao.nome as nome_cidadao',
|
||||
'paciente_cidadao.cns as paciente_cns',
|
||||
'paciente_cidadao.cpf as paciente_cpf',
|
||||
'paciente_cidadao.nome_mae as paciente_nome_mae',
|
||||
'paciente_cidadao.nome_pai as paciente_nome_pai',
|
||||
'usuario.id AS id_usuario',
|
||||
'usuario_cidadao.nome AS nome_usuario',
|
||||
'usuario_cidadao.cns AS usuario_cns',
|
||||
])
|
||||
->join('cadastro_paciente as paciente', 'paciente.id', 'cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id')
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'cadastro_individual.usuario_id')
|
||||
->join('cadastro_cidadao as usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
||||
->where('cadastro_individual.ativo', true)
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query){
|
||||
$query->where('cadastro_individual.internacao', true)
|
||||
->whereNotNull('cadastro_individual.internacao_motivo');
|
||||
})
|
||||
->orWhere('cadastro_individual.internacao', false)
|
||||
->orWhereNull('cadastro_individual.internacao');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($q) {
|
||||
$q->where('cadastro_individual.doenca_cardiaca', true)
|
||||
->whereExists(function ($subquery) {
|
||||
$subquery->select(DB::raw(1))
|
||||
->from('atencao_basica_cadastro_individual_doenca_cardiaca')
|
||||
->whereColumn('atencao_basica_cadastro_individual_doenca_cardiaca.cadastro_individual_id', 'cadastro_individual.id');
|
||||
});
|
||||
})
|
||||
->orWhere('cadastro_individual.doenca_cardiaca', false)
|
||||
->orWhereNull('cadastro_individual.doenca_cardiaca');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('cadastro_individual.doenca_respiratoria', true)
|
||||
->whereExists(function ($subquery) {
|
||||
$subquery->select(DB::raw(1))
|
||||
->from('atencao_basica_cadastro_individual_doenca_respiratoria')
|
||||
->whereColumn('atencao_basica_cadastro_individual_doenca_respiratoria.cadastro_individual_id', 'cadastro_individual.id');
|
||||
});
|
||||
})
|
||||
->orWhere('cadastro_individual.doenca_respiratoria', false)
|
||||
->orWhereNull('cadastro_individual.doenca_respiratoria');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('cadastro_individual.problemas_rins', true)
|
||||
->whereExists(function ($subquery) {
|
||||
$subquery->select(DB::raw(1))
|
||||
->from('atencao_basica_cadastro_individual_problemas_rins')
|
||||
->whereColumn('atencao_basica_cadastro_individual_problemas_rins.cadastro_individual_id', 'cadastro_individual.id');
|
||||
});
|
||||
})
|
||||
->orWhere('cadastro_individual.problemas_rins', false)
|
||||
->orWhereNull('cadastro_individual.problemas_rins');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($q) {
|
||||
$q->whereNotNull('cadastro_individual.situacao_rua_id')
|
||||
->where(function ($qq) {
|
||||
$qq->where('cadastro_individual.visita_familiar', true)
|
||||
->whereNotNull('cadastro_individual.parentesco');
|
||||
});
|
||||
})
|
||||
->orWhere(function ($q) {
|
||||
$q->where('cadastro_individual.situacao_rua_id', null)
|
||||
->orWhere('cadastro_individual.visita_familiar', false);
|
||||
});
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('cadastro_individual.deficiente', true)
|
||||
->whereExists(function ($subquery) {
|
||||
$subquery->select(DB::raw(1))
|
||||
->from('atencao_basica_cadastro_individual_deficiencia_base')
|
||||
->whereColumn('atencao_basica_cadastro_individual_deficiencia_base.cadastro_individual_id', 'cadastro_individual.id');
|
||||
});
|
||||
})
|
||||
->orWhere('cadastro_individual.deficiente', false)
|
||||
->orWhereNull('cadastro_individual.deficiente');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('cadastro_individual.recusa_cadastro', false)
|
||||
->orWhereNull('cadastro_individual.recusa_cadastro');
|
||||
});
|
||||
})->orWhere('cadastro_individual.recusa_cadastro', true);
|
||||
})
|
||||
->whereNotNull('paciente_cidadao.nacionalidade_id')
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('paciente_cidadao.pais_nascimento_id', IntranetPais::BRASIL)
|
||||
->whereNotNull('paciente_cidadao.municipio_nascimento_id');
|
||||
})
|
||||
->orWhere('paciente_cidadao.pais_nascimento_id', IntranetPais::BRASIL);
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->whereNotNull('paciente_cidadao.nome')
|
||||
->where('paciente_cidadao.nome', '!=', '');
|
||||
})
|
||||
->whereNotNull('paciente_cidadao.raca_cor_id')
|
||||
->whereNotNull('paciente_cidadao.sexo_id')
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('paciente_cidadao.raca_cor_id', EnumRacaCor::INDIGENA)
|
||||
->whereNotNull('paciente_cidadao.etnia_indigena_id');
|
||||
})->orWhere('paciente_cidadao.raca_cor_id', '!=', EnumRacaCor::INDIGENA)
|
||||
->whereNull('paciente_cidadao.etnia_indigena_id');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('paciente_cidadao.nacionalidade_id', EnumNacionalidade::NATURALIZADO_BRASILEIRO)
|
||||
->where('paciente_cidadao.portaria_naturalizacao', '!=', '')
|
||||
->whereNotNull('paciente_cidadao.portaria_naturalizacao')
|
||||
->whereNotNull('paciente_cidadao.data_naturalizacao');
|
||||
})->orWhere('paciente_cidadao.nacionalidade_id', '!=', EnumNacionalidade::NATURALIZADO_BRASILEIRO)
|
||||
->whereNull('paciente_cidadao.data_naturalizacao');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where('paciente_cidadao.cpf', '!=', '')
|
||||
->orWhere('paciente_cidadao.cns', '!=', '');
|
||||
})
|
||||
->where(function ($query) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('paciente_cidadao.nacionalidade_id', '!=', EnumNacionalidade::ESTRANGEIRO)
|
||||
->whereExists(function ($subquery) {
|
||||
$subquery->select(DB::raw(1))
|
||||
->from('cadastro_cidadao_telefone')
|
||||
->whereColumn('cadastro_cidadao_telefone.cidadao_id', 'paciente_cidadao.id');
|
||||
});
|
||||
})->orWhere('paciente_cidadao.nacionalidade_id', EnumNacionalidade::ESTRANGEIRO);
|
||||
})
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getUnidades()
|
||||
{
|
||||
$idsValidos = self::getIdsValidos();
|
||||
return DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
DB::raw('DISTINCT cadastro_unidade.id AS id'),
|
||||
'cadastro_unidade.nome_fantasia AS nome',
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
||||
->when(request()->domicilio, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', request()->domicilio))
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getAreas()
|
||||
{
|
||||
$idsValidos = self::idsValidosNoCadastroIndividual();
|
||||
return DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
DB::raw('DISTINCT atencao_basica_parametrizacao_area.id AS id'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL
|
||||
AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL
|
||||
THEN CONCAT(atencao_basica_parametrizacao_area.descricao, ' / ', atencao_basica_parametrizacao_area.numero_ine)
|
||||
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL
|
||||
THEN atencao_basica_parametrizacao_area.descricao
|
||||
WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL
|
||||
THEN atencao_basica_parametrizacao_area.numero_ine
|
||||
ELSE NULL
|
||||
END AS descricao
|
||||
")
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
|
||||
->when(request()->unidade, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', request()->unidade))
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getMicroAreas()
|
||||
{
|
||||
$idsValidos = self::getIdsValidos();
|
||||
return DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
DB::raw('DISTINCT atencao_basica_parametrizacao_microarea.descricao AS descricao'),
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
|
||||
->when(request()->unidade, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', request()->unidade))
|
||||
->when(request()->area, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.area_id', request()->area))
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->get();
|
||||
}
|
||||
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$idsValidos = self::getIdsValidos();
|
||||
$domicilio = request()->domicilio;
|
||||
|
||||
$unidades = DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
DB::raw('DISTINCT cadastro_unidade.id AS id'),
|
||||
'cadastro_unidade.nome_fantasia AS nome',
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join('atencao_basica_cadastro_domiciliar', 'atencao_basica_cadastro_domiciliar.domicilio_id', 'cadastro_cidadao.domicilio_id')
|
||||
->join('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->when(request()->unidade, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', request()->unidade))
|
||||
->when(request()->area, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.area_id', request()->area))
|
||||
->when(request()->microarea, fn ($q) => $q->where('atencao_basica_parametrizacao_microarea.descricao', request()->microarea))
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->get();
|
||||
|
||||
$microareas = DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
DB::raw('DISTINCT atencao_basica_parametrizacao_microarea.descricao'),
|
||||
"atencao_basica_parametrizacao_microarea.descricao AS descricao",
|
||||
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
|
||||
->when(request()->unidade, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', request()->unidade))
|
||||
->when(request()->area, fn ($q) => $q->where('atencao_basica_parametrizacao_equipe.area_id', request()->area))
|
||||
->when(request()->microarea, fn ($q) => $q->where('atencao_basica_parametrizacao_microarea.descricao', request()->microarea))
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->pluck('descricao');
|
||||
|
||||
if (!request()->microarea && count($microareas) > 1) {
|
||||
$microareas[] = 'total';
|
||||
}
|
||||
|
||||
$dados = [
|
||||
"consulta" => $unidades->map(function ($unidade) use ($domicilio, $idsValidos) {
|
||||
$fora_area = DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
'atencao_basica_parametrizacao_equipe.unidade_id',
|
||||
'atencao_basica_cadastro_individual.paciente_id',
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join('atencao_basica_cadastro_domiciliar', 'atencao_basica_cadastro_domiciliar.domicilio_id', 'cadastro_cidadao.domicilio_id')
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->where('atencao_basica_cadastro_domiciliar.fora_area', true)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos);
|
||||
|
||||
$dados = [
|
||||
"unidade_id" => $unidade->id,
|
||||
"unidade_nome" => $unidade->nome,
|
||||
"total_pacientes_dentro_das_areas_de_toda_unidade" => DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
'atencao_basica_cadastro_individual.paciente_id',
|
||||
'atencao_basica_cadastro_domiciliar.fora_area'
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join('atencao_basica_cadastro_domiciliar', 'atencao_basica_cadastro_domiciliar.domicilio_id', 'cadastro_cidadao.domicilio_id')
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->where(
|
||||
function ($query) {
|
||||
return $query
|
||||
->where('atencao_basica_cadastro_domiciliar.fora_area', false)
|
||||
->orWhereNull('atencao_basica_cadastro_domiciliar.fora_area');
|
||||
}
|
||||
)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->count('atencao_basica_cadastro_individual.paciente_id'),
|
||||
"pacientes_fora_area" => [
|
||||
'unidade_id' => $unidade->id,
|
||||
'fora_area_pacientes_id' => $fora_area->pluck('paciente_id'),
|
||||
'total_fora_area' => $fora_area->count('paciente_id')
|
||||
],
|
||||
"total_pacientes_fora_area" => DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
'atencao_basica_cadastro_individual.paciente_id',
|
||||
'atencao_basica_cadastro_domiciliar.fora_area'
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join('atencao_basica_cadastro_domiciliar', 'atencao_basica_cadastro_domiciliar.domicilio_id', 'cadastro_cidadao.domicilio_id')
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->where('atencao_basica_cadastro_domiciliar.fora_area', true)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->count('atencao_basica_cadastro_individual.paciente_id'),
|
||||
'areas' => DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
DB::raw('DISTINCT atencao_basica_parametrizacao_area.id AS id'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL
|
||||
AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL
|
||||
THEN CONCAT(atencao_basica_parametrizacao_area.descricao, ' / ', atencao_basica_parametrizacao_area.numero_ine)
|
||||
WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL
|
||||
THEN atencao_basica_parametrizacao_area.descricao
|
||||
WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL
|
||||
THEN atencao_basica_parametrizacao_area.numero_ine
|
||||
ELSE NULL
|
||||
END AS descricao
|
||||
")
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->get()
|
||||
->map(fn ($area) => [
|
||||
'area_id' => $area->id,
|
||||
'area_descricao' => $area->descricao,
|
||||
'area_total_pacientes' => DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
'atencao_basica_cadastro_individual.paciente_id',
|
||||
'atencao_basica_cadastro_domiciliar.fora_area'
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join('atencao_basica_cadastro_domiciliar', 'atencao_basica_cadastro_domiciliar.domicilio_id', 'cadastro_cidadao.domicilio_id')
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->where(
|
||||
function ($query) {
|
||||
return $query
|
||||
->where('atencao_basica_cadastro_domiciliar.fora_area', false)
|
||||
->orWhereNull('atencao_basica_cadastro_domiciliar.fora_area');
|
||||
}
|
||||
)
|
||||
->where('atencao_basica_parametrizacao_equipe.area_id', $area->id)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->count('atencao_basica_cadastro_individual.paciente_id'),
|
||||
'microareas' => DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
DB::raw('DISTINCT atencao_basica_parametrizacao_microarea.id AS id'),
|
||||
"atencao_basica_parametrizacao_microarea.descricao AS descricao",
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
|
||||
->where('atencao_basica_parametrizacao_equipe.area_id', $area->id)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->when(request()->microarea, fn ($q) => $q->where('atencao_basica_parametrizacao_microarea.descricao', request()->microarea))
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->get()
|
||||
->map(fn ($microarea) => [
|
||||
"unidade_id" => $unidade->id,
|
||||
"area_id" => $area->id,
|
||||
"microarea_id" => $microarea->id,
|
||||
"microarea_descricao" => $microarea->descricao,
|
||||
"microarea_total_pacientes" =>
|
||||
DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
'atencao_basica_cadastro_individual.paciente_id',
|
||||
'atencao_basica_cadastro_domiciliar.fora_area'
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join('atencao_basica_cadastro_domiciliar', 'atencao_basica_cadastro_domiciliar.domicilio_id', 'cadastro_cidadao.domicilio_id')
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->where(
|
||||
function ($query) {
|
||||
return $query
|
||||
->where('atencao_basica_cadastro_domiciliar.fora_area', false)
|
||||
->orWhereNull('atencao_basica_cadastro_domiciliar.fora_area');
|
||||
}
|
||||
)
|
||||
->where('atencao_basica_parametrizacao_equipe.area_id', $area->id)
|
||||
->where('atencao_basica_parametrizacao_equipe.microarea_id', $microarea->id)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->count('atencao_basica_cadastro_individual.paciente_id'),
|
||||
"microarea_pacientes_ids" =>
|
||||
DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
'atencao_basica_cadastro_individual.paciente_id'
|
||||
])
|
||||
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->join('atencao_basica_cadastro_domiciliar', 'atencao_basica_cadastro_domiciliar.domicilio_id', 'cadastro_cidadao.domicilio_id')
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->where(
|
||||
function ($query) {
|
||||
return $query
|
||||
->where('atencao_basica_cadastro_domiciliar.fora_area', false)
|
||||
->orWhereNull('atencao_basica_cadastro_domiciliar.fora_area');
|
||||
}
|
||||
)
|
||||
->where('atencao_basica_parametrizacao_equipe.area_id', $area->id)
|
||||
->where('atencao_basica_parametrizacao_equipe.microarea_id', $microarea->id)
|
||||
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
||||
->whereIn('atencao_basica_cadastro_individual.id', $idsValidos)
|
||||
->pluck('paciente_id'),
|
||||
])
|
||||
]),
|
||||
];
|
||||
|
||||
if ($domicilio === "false" && $dados['pacientes_fora_area']['total_fora_area'] <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $dados;
|
||||
})->filter(fn ($item) => $item !== null),
|
||||
"todas_microareas" => $microareas,
|
||||
];
|
||||
|
||||
$somaPacientesTodasMicroareas = 0;
|
||||
|
||||
foreach ($dados["consulta"] as $item) {
|
||||
if (isset($item["areas"])) {
|
||||
foreach ($item["areas"] as $area) {
|
||||
if (request()->area && request()->area == $area["area_id"]) {
|
||||
if (isset($area["microareas"])) {
|
||||
foreach ($area["microareas"] as $microarea) {
|
||||
if (isset($microarea["microarea_total_pacientes"])) {
|
||||
$somaPacientesTodasMicroareas += $microarea["microarea_total_pacientes"];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!request()->area) {
|
||||
if (isset($area["microareas"])) {
|
||||
foreach ($area["microareas"] as $microarea) {
|
||||
if (isset($microarea["microarea_total_pacientes"])) {
|
||||
$somaPacientesTodasMicroareas += $microarea["microarea_total_pacientes"];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$listaQuantidadePacientesForaArea = $dados["consulta"]->map(fn ($item) => $item["total_pacientes_fora_area"])->toArray();
|
||||
|
||||
$dados["totalizadores"] = [
|
||||
"unidades" => $unidades->count(),
|
||||
"dentro_area" => request()->domicilio === false ? 0 : $somaPacientesTodasMicroareas,
|
||||
"fora_area" => (request()->microarea || request()->domicilio === true) ? 0 : array_sum($listaQuantidadePacientesForaArea)
|
||||
];
|
||||
|
||||
return $dados;
|
||||
}
|
||||
|
||||
public static function getPacientes()
|
||||
{
|
||||
$pacientes_id = request()->pacientes;
|
||||
|
||||
return DB::table('atencao_basica_cadastro_individual')
|
||||
->select([
|
||||
'atencao_basica_cadastro_individual.paciente_id',
|
||||
'cadastro_cidadao.nome',
|
||||
'cadastro_cidadao.data_nascimento',
|
||||
'cadastro_paciente.prontuario',
|
||||
])
|
||||
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->whereIn('atencao_basica_cadastro_individual.paciente_id', $pacientes_id)
|
||||
->get();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user