560 lines
33 KiB
PHP
560 lines
33 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica\Relatorios;
|
|
|
|
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\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
|
|
use App\Models\AtencaoBasica\Parametrizacao\Area;
|
|
use App\Models\AtencaoBasica\Parametrizacao\Microarea;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
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 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 list()
|
|
{
|
|
$idsValidos = self::idsValidosNoCadastroIndividual();
|
|
$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')
|
|
->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))
|
|
->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('atencao_basica_parametrizacao_equipe.unidade_id', $unidade->id)
|
|
->where(
|
|
function ($query) {
|
|
return $query
|
|
->where('atencao_basica_cadastro_domiciliar.fora_area', false)
|
|
->orWhereNull('atencao_basica_cadastro_domiciliar.fora_area');
|
|
}
|
|
)
|
|
->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("CONCAT(atencao_basica_parametrizacao_area.descricao, ' / ', atencao_basica_parametrizacao_area.numero_ine) 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 getPrintExportData()
|
|
{
|
|
$items = self::list();
|
|
|
|
$domicilio = !request()->domicilio ? 'Todos' : (request()->domicilio == "true" ? 'Dentro de área' : 'Fora de área');
|
|
|
|
|
|
$area = request()->domicilio == 'false' ? '-' : 'Todos';
|
|
if (request()->area) {
|
|
$area = Area::find(request()->area)->descricao . ' / ' . Area::find(request()->area)->numero_ine;
|
|
}
|
|
|
|
return [
|
|
'items' => $items,
|
|
'totalizadores' => $items['totalizadores'],
|
|
'unidade' => request()->unidade ? Unidade::find(request()->unidade)->nome_fantasia : 'Todos',
|
|
'domicilio' => $domicilio,
|
|
'area' => $area,
|
|
'microarea' => request()->microarea ? Microarea::find(request()->microarea)->descricao : (request()->domicilio == 'false' ? '-' : 'Todos'),
|
|
'colunas' => collect(request()->selectedCols),
|
|
];
|
|
}
|
|
|
|
public static function getPacientes()
|
|
{
|
|
$pacientes_id = [];
|
|
|
|
if (is_string(request()->pacientes)) {
|
|
$pacientes_id = json_decode(request()->pacientes);
|
|
} else {
|
|
$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();
|
|
}
|
|
|
|
public static function getPrintExportDataPacientes()
|
|
{
|
|
$items = self::getPacientes();
|
|
|
|
return [
|
|
'items' => $items,
|
|
'unidade' => request()->unidade,
|
|
'domicilio' => request()->domicilio,
|
|
'area' => request()->area,
|
|
'microarea' => request()->microarea,
|
|
'pacientes' => collect(request()->pacientes),
|
|
'colunas' => collect(request()->selectedCols),
|
|
];
|
|
}
|
|
}
|