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

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

View File

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