Files
rkm-conectasus-ci-sandbox/api/app/Services/AtencaoBasica/RelatorioEstatisticoPacienteCadastradoService.php
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

3010 lines
154 KiB
PHP

<?php
namespace App\Services\AtencaoBasica;
use App\Enums\Cadastro\SujeitoAtencao\Sexo as SexoEnum;
use App\Models\Cadastro\Estabelecimento\UnidadeTipo;
use App\Services\Service;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
class RelatorioEstatisticoPacienteCadastradoService extends Service
{
public static function index()
{
$params = request()->all();
$data = DB::table('atencao_basica_cadastro_individual')
->join('cadastro_paciente', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->leftJoin('cadastro_usuario as usuario', 'atencao_basica_cadastro_individual.usuario_id', 'usuario.id')
->leftJoin('cadastro_cidadao as cidadao_usuario', 'usuario.cidadao_id', 'cidadao_usuario.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_endereco', 'cadastro_domicilio.endereco_id', 'cadastro_endereco.id')
->leftJoin('cadastro_logradouro', 'cadastro_endereco.logradouro_id', 'cadastro_logradouro.id')
->leftJoin('cadastro_logradouro_tipo', 'cadastro_logradouro.tipo_id', 'cadastro_logradouro_tipo.id')
->leftJoin('intranet.cadastro_municipio as municipio', 'municipio.id', 'cadastro_logradouro.municipio_id')
->leftJoin('intranet.cadastro_estado as estado', 'estado.id', 'municipio.estado_id')
->leftJoin('cadastro_bairro', 'cadastro_logradouro.bairro_id', 'cadastro_bairro.id')
->leftJoin('cadastro_paciente_responsavel', 'cadastro_paciente_responsavel.paciente_id', 'cadastro_paciente.id')
->leftJoin('cadastro_usuario as usuario_micro_area', 'usuario_micro_area.id', 'cadastro_paciente_responsavel.responsavel_usuario_id')
->leftJoin('cadastro_cidadao as cidadao_cadastro', 'cidadao_cadastro.id', 'usuario_micro_area.cidadao_id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('atencao_basica_parametrizacao_equipe.unidade_id', $params['unidade_equipe_id'] ?? $params['unidade_equipe'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNull('cadastro_paciente.deleted_at')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$data = self::getParams($data, $params, 'index');
$data = $data->selectRaw('
cadastro_domicilio_informacao_residencial.fora_area,
cadastro_domicilio_informacao_residencial.microarea_id,
cadastro_cidadao.id,
cadastro_cidadao.nome as nome_paciente,
cadastro_sexo.descricao as sexo_paciente,
cadastro_sexo.id as sexo_id,
TIMESTAMPDIFF(YEAR, cadastro_cidadao.data_nascimento, CURDATE()) AS idade_anos_paciente,
TIMESTAMPDIFF(
MONTH,
DATE_ADD(cadastro_cidadao.data_nascimento, INTERVAL TIMESTAMPDIFF(YEAR, cadastro_cidadao.data_nascimento, CURDATE()) YEAR),
CURDATE()
) AS idade_meses_paciente,
DATEDIFF(
CURDATE(),
DATE_ADD(
DATE_ADD(
cadastro_cidadao.data_nascimento,
INTERVAL TIMESTAMPDIFF(YEAR, cadastro_cidadao.data_nascimento, CURDATE()) YEAR
),
INTERVAL TIMESTAMPDIFF(
MONTH,
DATE_ADD(
cadastro_cidadao.data_nascimento,
INTERVAL TIMESTAMPDIFF(YEAR, cadastro_cidadao.data_nascimento, CURDATE()) YEAR
),
CURDATE()
) MONTH
)
) AS idade_dias_paciente,
cadastro_paciente_classificacao.descricao as classificacao_paciente,
COALESCE(cidadao_usuario.nome, "-") as profissional,
COALESCE(cidadao_cadastro.nome, "-") as responsavel_cadastro,
COALESCE(
CONCAT_WS(
", ",
CONCAT_WS(" ", COALESCE(cadastro_logradouro_tipo.descricao, "Não informado"), COALESCE(cadastro_logradouro.nome, "")),
NULLIF(COALESCE(cadastro_endereco.numero, ""), ""),
NULLIF(COALESCE(cadastro_endereco.complemento, ""), ""),
NULLIF(COALESCE(cadastro_bairro.nome, ""), "")
),
"-"
) AS endereco_paciente,
COALESCE(
CONCAT_WS(
", ",
CONCAT_WS(" ", COALESCE(cadastro_logradouro_tipo.descricao, "Não informado"), COALESCE(cadastro_logradouro.nome, "")),
NULLIF(COALESCE(cadastro_endereco.numero, "S/N"), ""),
NULLIF(COALESCE(cadastro_endereco.complemento, ""), ""),
NULLIF(COALESCE(cadastro_bairro.nome, ""), ""),
NULLIF(COALESCE(municipio.nome, ""), ""),
NULLIF(COALESCE(estado.uf, ""), "")
),
"-"
) AS endereco_completo,
COALESCE(atencao_basica_cadastro_peso.descricao, "-") as peso_paciente,
IF(atencao_basica_cadastro_individual.gestante = 1, "SIM", "NÃO") as gestante,
IF(atencao_basica_cadastro_individual.hipertensao = 1, "SIM", "NÃO") as hipertenso,
IF(atencao_basica_cadastro_individual.diabetes = 1, "SIM", "NÃO") as diabetico,
IF(atencao_basica_cadastro_individual.hanseniase = 1, "SIM", "NÃO") as hanseniase,
IF(atencao_basica_cadastro_individual.tuberculose = 1, "SIM", "NÃO") as tuberculose,
IF(atencao_basica_cadastro_individual.fumante = 1, "SIM", "NÃO") as fumante,
IF(atencao_basica_cadastro_individual.usa_alcool = 1, "SIM", "NÃO") as alcool,
IF(atencao_basica_cadastro_individual.outras_drogas = 1, "SIM", "NÃO") as drogas,
IF(atencao_basica_cadastro_individual.transtorno_espectro_autista = 1, "SIM", "NÃO") as tea,
IF(atencao_basica_cadastro_individual.avc_derrame = 1, "SIM", "NÃO") as avc,
IF(atencao_basica_cadastro_individual.infarto = 1, "SIM", "NÃO") as infarto,
IF(atencao_basica_cadastro_individual.cancer = 1, "SIM", "NÃO") as cancer,
IF(atencao_basica_cadastro_individual.fibromialgia = 1, "SIM", "NÃO") as fibromialgia,
IF(atencao_basica_cadastro_individual.internacao = 1, "SIM", "NÃO") as internacao,
IF(atencao_basica_cadastro_individual.doenca_cardiaca = 1, "SIM", "NÃO") as doenca_cardiaca,
IF(atencao_basica_cadastro_individual.problemas_rins = 1, "SIM", "NÃO") as doenca_renal,
IF(atencao_basica_cadastro_individual.doenca_respiratoria = 1, "SIM", "NÃO") as doenca_respiratoria,
IF(atencao_basica_cadastro_individual.tratamento_saude_mental = 1, "SIM", "NÃO") as tratamento_saude_mental,
IF(atencao_basica_cadastro_individual.plantas_medicinais = 1, "SIM", "NÃO") as plantas_medicinais,
IF(atencao_basica_cadastro_individual.praticas_integrativas = 1, "SIM", "NÃO") as praticas_integrativas,
IF(atencao_basica_cadastro_individual.acamado = 1, "SIM", "NÃO") as acamado,
IF(atencao_basica_cadastro_individual.domiciliado = 1, "SIM", "NÃO") as domiciliado
');
if (isset($params['sort_by']) && isset($params['sort_desc'])) {
$data->orderBy($params['sort_by'], $params['sort_desc'] ? 'desc' : 'asc');
} else {
$data->orderBy('cadastro_cidadao.nome', 'asc');
}
$data = $data
->groupBy('atencao_basica_cadastro_individual.paciente_id')
->get();
$pacientesIds = $data->pluck('id')->toArray();
$totalPacientes = $data->count();
$totalPacientesPorSexo = [
'masculino' => $data->where('sexo_id', SexoEnum::MASCULINO)->count(),
'feminino' => $data->where('sexo_id', SexoEnum::FEMININO)->count(),
'indeterminado' => $data->where('sexo_id', SexoEnum::INDETERMINADO)->count(),
];
$familiasQuery = DB::table('atencao_basica_cadastro_individual')
->join('cadastro_paciente', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade as unidade', 'atencao_basica_parametrizacao_equipe.unidade_id', 'unidade.id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->leftJoin('cadastro_usuario as usuario', 'atencao_basica_cadastro_individual.usuario_id', 'usuario.id')
->leftJoin('cadastro_cidadao as cidadao_usuario', 'usuario.cidadao_id', 'cidadao_usuario.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_endereco', 'cadastro_domicilio.endereco_id', 'cadastro_endereco.id')
->leftJoin('cadastro_logradouro', 'cadastro_endereco.logradouro_id', 'cadastro_logradouro.id')
->leftJoin('cadastro_logradouro_tipo', 'cadastro_logradouro.tipo_id', 'cadastro_logradouro_tipo.id')
->leftJoin('intranet.cadastro_municipio as municipio', 'municipio.id', 'cadastro_logradouro.municipio_id')
->leftJoin('intranet.cadastro_estado as estado', 'estado.id', 'municipio.estado_id')
->leftJoin('cadastro_bairro', 'cadastro_logradouro.bairro_id', 'cadastro_bairro.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('atencao_basica_parametrizacao_equipe.unidade_id', $params['unidade_equipe_id'] ?? $params['unidade_equipe'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$familiasQuery = self::getParams($familiasQuery, $params);
$totalFamilias = $familiasQuery
->select('cadastro_domicilio.id')
->distinct()
->count('cadastro_domicilio.id');
$totalPacientesPorArea = DB::table('atencao_basica_cadastro_individual')
->join('cadastro_paciente', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->leftjoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio.id','cadastro_domicilio_informacao_residencial.domicilio_id')
->leftJoin('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_equipe.area_id', 'atencao_basica_parametrizacao_area.id')
->whereIn('cadastro_cidadao.id', $pacientesIds)
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
})
->groupBy(DB::raw("
CASE
WHEN cadastro_domicilio_informacao_residencial.fora_area = 1 THEN 'Fora de área'
WHEN atencao_basica_parametrizacao_area.descricao IS NULL THEN 'Fora de área'
ELSE atencao_basica_parametrizacao_area.descricao
END
"))
->selectRaw("
CASE
WHEN cadastro_domicilio_informacao_residencial.fora_area = 1 THEN 'Fora de área'
WHEN atencao_basica_parametrizacao_area.descricao IS NULL THEN 'Fora de área'
ELSE atencao_basica_parametrizacao_area.descricao
END as area,
COUNT(DISTINCT cadastro_paciente.id) as total
")
->pluck('total', 'area');
$totalPacientesPorMicroArea = DB::table('atencao_basica_cadastro_individual')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
->join('cadastro_paciente', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->leftjoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftjoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio.id', 'cadastro_domicilio_informacao_residencial.domicilio_id')
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
->whereIn('cadastro_cidadao.id', $pacientesIds)
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNull('cadastro_paciente.deleted_at')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
})
->groupBy(DB::raw('COALESCE(atencao_basica_parametrizacao_microarea.descricao, "Fora de área")'))
->selectRaw('
COALESCE(atencao_basica_parametrizacao_microarea.descricao, "Sem micro área") as micro_area,
COUNT(DISTINCT cadastro_paciente.id) as total
')
->pluck('total', 'micro_area');
return [
'relatorio' => $data,
'total_pacientes' => $totalPacientes,
'total_pacientes_por_sexo' => $totalPacientesPorSexo,
'total_familias' => $totalFamilias,
'total_pacientes_por_area' => $totalPacientesPorArea,
'total_pacientes_por_micro_area' => $totalPacientesPorMicroArea,
];
}
public static function list()
{
$params = collect(request()->all());
$fieldsToLoad = collect();
if(!isset($params['fields_to_load'])){
$fieldsToLoad->push(
'unidade_equipe',
'infraestrutura_equipe',
'local_domicilio',
'area_equipe',
'micro_area',
'profissional',
'classificacao_paciente',
'sexo',
'peso',
'gestante',
'hipertenso',
'diabetico',
'hanseniase',
'tuberculose',
'fumante',
'alcool',
'drogas',
'tea',
'avc',
'infarto',
'cancer',
'fibromialgia',
'internacao',
'doenca_cardiaca',
'doenca_renal',
'doenca_respiratoria',
'tratamento_psicologico',
'plantas_medicinais',
'praticas_integrativas',
'acamado',
'domiciliado',
);
} else {
$fieldsToLoad = collect($params->get('fields_to_load'));
}
return [
'form' => self::fieldsFiltered($fieldsToLoad),
'model' => self::getModel(),
'additionals' => [
'is_secretaria_type' => self::getIsSecretariaType(),
'unidade_logada_id' => self::getCurrentLotacao()->infraestrutura->unidade->id,
]
];
}
private static function fieldsFiltered(Collection $campos)
{
$params = request()->all();
$dados = collect();
if ($campos->contains('unidade_equipe')) {
$unidadeEquipe = self::getUnidadeEquipe(self::getIsSecretariaType());
$dados->put('unidade_equipe', $unidadeEquipe);
$params['unidade_equipe'] = $unidadeEquipe[0]['id'] && count($unidadeEquipe) === 1 ? $unidadeEquipe[0]['id'] : null;
}
if ($campos->contains('infraestrutura_equipe')) {
$infraestruturaEquipe = self::getInfraestruturaEquipe($params);
$dados->put('infraestrutura_equipe', $infraestruturaEquipe);
$params['infraestrutura_equipe'] = collect($infraestruturaEquipe)->pluck('id')->toArray() ?? null;
}
if ($campos->contains('local_domicilio')) {
$localDomicilio = self::getLocalDomicilio($params);
$dados->put('local_domicilio', $localDomicilio);
$params['local_domicilio'] = collect($localDomicilio)->pluck('id')->toArray() ?? null;
}
if ($campos->contains('area_equipe')) {
$areaEquipe = self::getAreaEquipe($params);
$dados->put('area_equipe', $areaEquipe);
$params['area_equipe'] = collect($areaEquipe)->pluck('id')->toArray() ?? null;
}
if ($campos->contains('micro_area')) {
$microArea = self::getMicroArea($params);
$dados->put('micro_area', $microArea);
$params['micro_area'] = collect($microArea)->pluck('id')->toArray() ?? null;
}
if ($campos->contains('profissional')) {
$profissional = self::getProfissional($params);
$dados->put('profissional', $profissional);
$params['profissional'] = collect($profissional)->pluck('id')->toArray();
}
if ($campos->contains('classificacao_paciente')) {
$classificacaoPaciente = self::getClassificacaoPaciente($params);
$dados->put('classificacao_paciente', $classificacaoPaciente);
$params['classificacao_paciente'] = collect($classificacaoPaciente)->pluck('id')->toArray();
}
if ($campos->contains('sexo')) {
$sexo = self::getSexo($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['sexo' => $sexo]));
$params['sexo'] = collect($sexo)->pluck('id')->toArray();
}
if ($campos->contains('peso')) {
$peso = self::getPeso($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['peso' => $peso]));
$params['peso'] = collect($peso)->pluck('id')->toArray();
}
if ($campos->contains('gestante')) {
$gestante = self::getGestante($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['gestante' => $gestante]));
$params['gestante'] = collect($gestante)->pluck('id')->toArray();
}
if ($campos->contains('hipertenso')) {
$hipertenso = self::getHipertenso($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['hipertenso' => $hipertenso]));
$params['hipertenso'] = collect($hipertenso)->pluck('id')->toArray();
}
if ($campos->contains('diabetico')) {
$diabetico = self::getDiabetico($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['diabetico' => $diabetico]));
$params['diabetico'] = collect($diabetico)->pluck('id')->toArray();
}
if ($campos->contains('hanseniase')) {
$hanseniase = self::gethanseniase($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['hanseniase' => $hanseniase]));
$params['hanseniase'] = collect($hanseniase)->pluck('id')->toArray();
}
if ($campos->contains('tuberculose')) {
$tuberculose = self::getTuberculose($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['tuberculose' => $tuberculose]));
$params['tuberculose'] = collect($tuberculose)->pluck('id')->toArray();
}
if ($campos->contains('fumante')) {
$fumante = self::getFumante($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['fumante' => $fumante]));
$params['fumante'] = collect($fumante)->pluck('id')->toArray();
}
if ($campos->contains('alcool')) {
$alcool = self::getAlcool($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['alcool' => $alcool]));
$params['alcool'] = collect($alcool)->pluck('id')->toArray();
}
if ($campos->contains('drogas')) {
$drogas = self::getDrogas($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['drogas' => $drogas]));
$params['drogas'] = collect($drogas)->pluck('id')->toArray();
}
if ($campos->contains('tea')) {
$tea = self::getTea($params);
$dados->put('condicionalidades', array_merge($dados->get('condicionalidades', []), ['tea' => $tea]));
$params['tea'] = collect($tea)->pluck('id')->toArray();
}
if ($campos->contains('avc')) {
$avc = self::getAvc($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['avc' => $avc]));
$params['avc'] = collect($avc)->pluck('id')->toArray();
}
if ($campos->contains('infarto')) {
$infarto = self::getInfarto($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['infarto' => $infarto]));
$params['infarto'] = collect($infarto)->pluck('id')->toArray();
}
if ($campos->contains('cancer')) {
$cancer = self::getCancer($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['cancer' => $cancer]));
$params['cancer'] = collect($cancer)->pluck('id')->toArray();
}
if ($campos->contains('fibromialgia')) {
$fibromialgia = self::getFibromialgia($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['fibromialgia' => $fibromialgia]));
$params['fibromialgia'] = collect($fibromialgia)->pluck('id')->toArray();
}
if ($campos->contains('internacao')) {
$internacao = self::getInternacao($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['internacao' => $internacao]));
$params['internacao'] = collect($internacao)->pluck('id')->toArray();
}
if ($campos->contains('doenca_cardiaca')) {
$doencaCardiaca = self::getDoencaCardiaca($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['doenca_cardiaca' => $doencaCardiaca]));
$params['doenca_cardiaca'] = collect($doencaCardiaca)->pluck('id')->toArray();
}
if ($campos->contains('doenca_renal')) {
$doencaRenal = self::getDoencaRenal($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['doenca_renal' => $doencaRenal]));
$params['doenca_renal'] = collect($doencaRenal)->pluck('id')->toArray();
}
if ($campos->contains('doenca_respiratoria')) {
$doencaRespiratoria = self::getDoencaRespiratoria($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['doenca_respiratoria' => $doencaRespiratoria]));
$params['doenca_respiratoria'] = collect($doencaRespiratoria)->pluck('id')->toArray();
}
if ($campos->contains('tratamento_psicologico')) {
$tratamentoPsicologico = self::getTratamentoPsicologico($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['tratamento_psicologico' => $tratamentoPsicologico]));
$params['tratamento_psicologico'] = collect($tratamentoPsicologico)->pluck('id')->toArray();
}
if ($campos->contains('plantas_medicinais')) {
$plantasMedicinais = self::getPlantasMedicinais($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['plantas_medicinais' => $plantasMedicinais]));
$params['plantas_medicinais'] = collect($plantasMedicinais)->pluck('id')->toArray();
}
if ($campos->contains('praticas_integrativas')) {
$praticasIntegrativas = self::getPraticasIntegrativas($params);
$dados->put('outras_doencas', array_merge($dados->get('outras_doencas', []), ['praticas_integrativas' => $praticasIntegrativas]));
$params['praticas_integrativas'] = collect($praticasIntegrativas)->pluck('id')->toArray();
}
if ($campos->contains('acamado')) {
$acamado = self::getAcamado($params);
$dados->put('atencao_domiciliar', array_merge($dados->get('atencao_domiciliar', []), ['acamado' => $acamado]));
$params['acamado'] = $acamado;
}
if ($campos->contains('domiciliado')) {
$domiciliado = self::getDomiciliado($params);
$dados->put('atencao_domiciliar', array_merge($dados->get('atencao_domiciliar', []), ['domiciliado' => $domiciliado]));
$params['domiciliado'] = $domiciliado;
}
return $dados->all();
}
private static function getModel()
{
$params = collect(request()->all());
$form = collect();
if(!isset($params['fields_to_load'])){
$form->push(
'unidade_equipe',
'infraestrutura_equipe',
'local_domicilio',
'area_equipe',
'micro_area',
'profissional',
'classificacao_paciente',
'sexo',
'peso',
'gestante',
'hipertenso',
'diabetico',
'hanseniase',
'tuberculose',
'fumante',
'alcool',
'drogas',
'tea',
'avc',
'infarto',
'cancer',
'fibromialgia',
'internacao',
'doenca_cardiaca',
'doenca_renal',
'doenca_respiratoria',
'tratamento_psicologico',
'plantas_medicinais',
'praticas_integrativas',
'acamado',
'domiciliado',
);
} else {
$form = collect($params->get('fields_to_load'));
}
$form = self::fieldsFiltered($form);
$data = [
'unidade_equipe_id' => count($form['unidade_equipe'] ?? []) === 1 ? $form['unidade_equipe'][0]['id'] : null,
'infraestrutura_equipe_id' => count($form['infraestrutura_equipe'] ?? []) === 1 ? $form['infraestrutura_equipe'][0]['id'] : null,
'local_domicilio_id' => count($form['local_domicilio'] ?? []) === 1 ? $form['local_domicilio'][0]['id'] : null,
'area_equipe_id' => null,
'micro_area_id' => null,
'profissional_id' => count($form['profissional'] ?? []) === 1 ? $form['profissional'][0]['id'] : null,
'classificacao_paciente_id' => count($form['classificacao_paciente'] ?? []) === 1 ? $form['classificacao_paciente'][0]['id'] : null,
'idade' => [
'anos_de' => null,
'meses_de' => null,
'dias_de' => null,
'anos_ate' => null,
'meses_ate' => null,
'dias_ate' => null,
],
'condicionalidades' => [
'sexo_id' => null,
'peso_id' => null,
'gestante_id' => null,
'hipertenso_id' => null,
'diabetico_id' => null,
'hanseniase_id' => null,
'tuberculose_id' => null,
'fumante_id' => null,
'alcool_id' => null,
'drogas_id' => null,
'tea_id' => null,
],
'outras_doencas' => [
'avc_id' => null,
'infarto_id' => null,
'cancer_id' => null,
'fibromialgia_id' => null,
'internacao_id' => null,
'doenca_cardiaca_id' => null,
'doenca_renal_id' => null,
'doenca_respiratoria_id' => null,
'tratamento_psicologico_id' => null,
'plantas_medicinais_id' => null,
'praticas_integrativas_id' => null,
],
'atencao_domiciliar' => [
'acamado_id' => null,
'domiciliado_id' => null,
],
];
return $data;
}
private static function getUnidadePacienteAB($unidadeEquipe)
{
$query = DB::table('atencao_basica_cadastro_individual')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'atencao_basica_parametrizacao_equipe.unidade_id', 'cadastro_unidade.id')
->where('cadastro_unidade.id', $unidadeEquipe)
->first();
if ($query && $query->count() > 0) {
return true;
}
return false;
}
private static function checkUnidadeEquipeDefault()
{
$unidadeEquipe = self::getUnidadeEquipe(self::getIsSecretariaType());
return count($unidadeEquipe) === 1 ? $unidadeEquipe[0]['id'] : null;
}
private static function getIsSecretariaType()
{
return self::getCurrentLotacao()->infraestrutura->unidade->tipo_id
=== UnidadeTipo::where('descricao', 'CENTRAL DE GESTÃO EM SAÚDE')
->first()->id;
}
private static function getUnidadeEquipe($isSecretariaType)
{
$unidadesAtencaoBasica = DB::table('cadastro_unidade')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.unidade_id', 'cadastro_unidade.id')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_paciente.cidadao_id');
})
->select('cadastro_unidade.id', 'cadastro_unidade.nome_fantasia')
->distinct()
->orderBy('cadastro_unidade.nome_fantasia')
->get();
if ($isSecretariaType) {
return $unidadesAtencaoBasica->map(function ($unidade) {
return [
'id' => $unidade->id,
'nome_fantasia' => $unidade->nome_fantasia,
];
})->toArray();
} else {
$unidadeLogada = self::getCurrentLotacao()->infraestrutura->unidade;
$unidadeFiltrada =
$unidadesAtencaoBasica->filter(function ($unidade) use ($unidadeLogada) {
return $unidade->id === $unidadeLogada->id;
})
->first();
if ($unidadeFiltrada) {
return [[
'id' => $unidadeFiltrada->id,
'nome_fantasia' => $unidadeFiltrada->nome_fantasia,
]];
} else {
return [[
'id' => 0,
'nome_fantasia' => 'NÃO HÁ REGISTROS PARA A UNIDADE LOGADA'
]];
}
}
}
private static function getInfraestruturaEquipe($params = null)
{
if (!isset($params['unidade_equipe']) && isset($params['unidade_equipe_id']) && $params['unidade_equipe_id']) {
$unidadeId = request()->get('unidade_equipe_id');
} else if (isset($params['unidade_equipe']) && !empty($params['unidade_equipe'])) {
$unidadeId = $params['unidade_equipe'];
if ($unidadeId === 0) {
return [];
}
} else {
return [];
}
$infraestruturas = DB::table('cadastro_infraestrutura')
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
->where('unidade_id', $unidadeId)
->selectRaw('
cadastro_infraestrutura.id as id,
COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) as nome
')
->get();
if ($infraestruturas->isEmpty()) {
return [];
}
return $infraestruturas->map(function ($infraestrutura) {
return [
'id' => $infraestrutura->id,
'nome' => $infraestrutura->nome,
];
})->toArray();
}
private static function getLocalDomicilio($params)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [['id' => 0, 'nome' => 'Fora de área']];
}
$unidadeId = $params['unidade_equipe_id'] ?? $params['unidade_equipe'];
$query = DB::table('atencao_basica_cadastro_individual')
->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('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
->join('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('atencao_basica_parametrizacao_equipe.unidade_id', $unidadeId)
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
})
->selectRaw("
DISTINCT
CASE
WHEN cadastro_domicilio_informacao_residencial.fora_area = 1 THEN 0
ELSE 1
END AS id,
CASE
WHEN cadastro_domicilio_informacao_residencial.fora_area = 1 THEN 'Fora de área'
ELSE 'Dentro de área'
END AS nome
")
->get();
$resultado = $query->map(function($item) {
return (array) $item;
})->unique()->values()->toArray();
return empty($resultado) ? [['id' => 0, 'nome' => 'Fora de área']] : $resultado;
}
private static function getAreaEquipe($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
if (
(isset($params['local_domicilio_id']) && !is_null($params['local_domicilio_id']) && $params['local_domicilio_id'] == 0) ||
(
isset($params['local_domicilio']) &&
!is_null($params['local_domicilio']) &&
is_array($params['local_domicilio']) &&
count($params['local_domicilio']) == 1 &&
$params['local_domicilio'][0] == 0
)
) {
return [];
}
$query = DB::table('atencao_basica_cadastro_individual')
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
->join('cadastro_usuario', 'atencao_basica_cadastro_individual.usuario_id', 'cadastro_usuario.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('cadastro_cidadao', 'cadastro_usuario.cidadao_id', 'cadastro_cidadao.id')
->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('atencao_basica_parametrizacao_equipe.unidade_id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_paciente.cidadao_id');
});
$query = self::getParams($query, $params);
$areas = $query->selectRaw('
atencao_basica_parametrizacao_area.descricao as descricao,
atencao_basica_parametrizacao_equipe.area_id as id,
COALESCE(atencao_basica_parametrizacao_area.numero_ine, "SEM NÚMERO INE") as numero_ine
')
->distinct()
->get();
return $areas->map(function ($area) {
return [
'id' => $area->id,
'nome' => $area->descricao . ' - ' . $area->numero_ine
];
})->toArray();
}
private static function getMicroArea($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
if (
(isset($params['local_domicilio_id']) && !is_null($params['local_domicilio_id']) && $params['local_domicilio_id'] == 0) ||
(
isset($params['local_domicilio']) &&
!is_null($params['local_domicilio']) &&
is_array($params['local_domicilio']) &&
count($params['local_domicilio']) == 1 &&
$params['local_domicilio'][0] == 0
)
) {
return [];
}
$queryMicroareas = DB::table('atencao_basica_parametrizacao_equipe')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
->join('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
->join('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->join('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
->join('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
})
->when(isset($params['unidade_equipe']) || isset($params['unidade_equipe_id']), function ($q) use ($params) {
$unidadeId = $params['unidade_equipe'] ?? $params['unidade_equipe_id'];
$q->where('cadastro_unidade.id', $unidadeId);
})
->when(isset($params['infraestrutura_id']), function ($q) use ($params) {
return is_array($params['infraestrutura_id']) ?
$q->whereIn('cadastro_infraestrutura.id', $params['infraestrutura_id']) :
$q->where('cadastro_infraestrutura.id', $params['infraestrutura_id']);
})
->when(isset($params['local_domicilio_id']), function ($q) use ($params) {
if ($params['local_domicilio_id'] == 0) {
$q->where('cadastro_domicilio_informacao_residencial.fora_area', 1);
} else if ($params['local_domicilio_id'] == 1) {
$q->where(function ($sub) {
$sub->whereNull('cadastro_domicilio_informacao_residencial.fora_area')
->orWhere('cadastro_domicilio_informacao_residencial.fora_area', 0);
});
}
})
->when(isset($params['area_equipe_id']), function ($q) use ($params) {
return is_array($params['area_equipe_id']) ?
$q->whereIn('atencao_basica_parametrizacao_equipe.area_id', $params['area_equipe_id']) :
$q->where('atencao_basica_parametrizacao_equipe.area_id', $params['area_equipe_id']);
})
->selectRaw('
CONCAT_WS(" -",
atencao_basica_parametrizacao_microarea.descricao,
atencao_basica_parametrizacao_area.descricao
) as descricao,
atencao_basica_parametrizacao_microarea.id as id
')
->distinct();
$querySemMicroarea = DB::table('atencao_basica_parametrizacao_equipe')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_equipe.area_id', 'atencao_basica_parametrizacao_area.id')
->join('cadastro_unidade', 'atencao_basica_parametrizacao_equipe.unidade_id', 'cadastro_unidade.id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('cadastro_paciente', 'cadastro_paciente.id', 'atencao_basica_cadastro_individual.paciente_id')
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio.id', 'cadastro_domicilio_informacao_residencial.domicilio_id')
->whereNull('atencao_basica_parametrizacao_equipe.microarea_id')
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
})
->when(isset($params['unidade_equipe']), fn($q) => $q->where('cadastro_unidade.id', $params['unidade_equipe']))
->when(isset($params['unidade_equipe_id']), fn($q) => $q->where('cadastro_unidade.id', $params['unidade_equipe_id']))
->when(isset($params['infraestrutura_id']), function ($q) use ($params) {
return is_array($params['infraestrutura_id']) ?
$q->whereIn('cadastro_infraestrutura.id', $params['infraestrutura_id']) :
$q->where('cadastro_infraestrutura.id', $params['infraestrutura_id']);
})
->when(isset($params['local_domicilio_id']), function ($q) use ($params) {
if ($params['local_domicilio_id'] == 0) {
$q->where('cadastro_domicilio_informacao_residencial.fora_area', 1);
} else if ($params['local_domicilio_id'] == 1) {
$q->where(function ($s) {
$s->whereNull('cadastro_domicilio_informacao_residencial.fora_area')
->orWhere('cadastro_domicilio_informacao_residencial.fora_area', 0);
});
}
})
->when(isset($params['area_equipe_id']), function ($q) use ($params) {
return is_array($params['area_equipe_id']) ?
$q->whereIn('atencao_basica_parametrizacao_equipe.area_id', $params['area_equipe_id']) :
$q->where('atencao_basica_parametrizacao_equipe.area_id', $params['area_equipe_id']);
})
->selectRaw('
CONCAT_WS(" -", "SEM MICROÁREA", atencao_basica_parametrizacao_area.descricao) as descricao,
"sem_microarea" as id
')
->distinct();
$microareasSql = $queryMicroareas->toSql();
$semMicroareaSql = $querySemMicroarea->toSql();
$bindings = array_merge(
$queryMicroareas->getBindings(),
$querySemMicroarea->getBindings()
);
$sql = "({$microareasSql}) UNION ALL ({$semMicroareaSql})";
$microareas = DB::select(DB::raw($sql), $bindings);
return collect($microareas)->map(fn($m) => [
'id' => $m->id,
'nome' => $m->descricao,
])->toArray();
}
private static function getProfissional($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_cidadao')
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'atencao_basica_cadastro_individual.usuario_id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id')
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'cadastro_usuario.cidadao_id')
->join('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id')
->join('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('atencao_basica_parametrizacao_equipe.unidade_id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params, 'profissional');
$profissionais = $query->selectRaw('
cidadao_usuario.nome as nome,
cadastro_usuario.id as id
')
->orderBy('cidadao_usuario.nome', 'asc')
->distinct()
->get();
return $profissionais->map(function ($profissional) {
return [
'id' => $profissional->id,
'nome' => $profissional->nome,
];
})->toArray();
}
private static function getClassificacaoPaciente($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_unidade')
->join('cadastro_infraestrutura', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
->join('atencao_basica_parametrizacao_equipe', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('atencao_basica_cadastro_individual', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_cadastro_individual.equipe_id')
->join('cadastro_paciente', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$classificacoes = $query->select('cadastro_paciente_classificacao.id', 'cadastro_paciente_classificacao.descricao')
->distinct()
->get();
if ($classificacoes->isEmpty()) {
return [];
}
return $classificacoes->map(function ($classificacao) {
return [
'id' => $classificacao->id,
'nome' => $classificacao->descricao,
];
})->toArray();
}
private static function getSexo($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$sexos = $query->select('cadastro_sexo.id', 'cadastro_sexo.descricao')
->distinct()
->get();
if ($sexos->isEmpty()) {
return [];
}
return $sexos->map(function ($sexo) {
return [
'id' => $sexo->id,
'nome' => $sexo->descricao,
];
})->toArray();
}
private static function getPeso($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->join('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$pesos = $query->select('atencao_basica_cadastro_peso.id', 'atencao_basica_cadastro_peso.descricao')
->distinct()
->get();
if ($pesos->isEmpty()) {
return [];
}
return $pesos->map(function ($peso) {
return [
'id' => $peso->id,
'nome' => $peso->descricao,
];
})->toArray();
}
private static function getGestante($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$gestantes = $query->select('atencao_basica_cadastro_individual.gestante')
->distinct()
->get();
$hasTrue = $gestantes->contains(function ($item) {
return $item->gestante === true || $item->gestante === 1 || $item->gestante === '1';
});
$hasFalse = $gestantes->contains(function ($item) {
return $item->gestante === false || $item->gestante === 0 || $item->gestante === '0' || is_null($item->gestante);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getHipertenso($params = null): array
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$hipertensos = $query->select('atencao_basica_cadastro_individual.hipertensao')
->distinct()
->get();
$hasTrue = $hipertensos->contains(function ($item) {
return $item->hipertensao === true || $item->hipertensao === 1 || $item->hipertensao === '1';
});
$hasFalse = $hipertensos->contains(function ($item) {
return $item->hipertensao === false || $item->hipertensao === 0 || $item->hipertensao === '0' || is_null($item->hipertensao);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getDiabetico($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$diabeticos = $query->select('atencao_basica_cadastro_individual.diabetes')
->distinct()
->get();
$hasTrue = $diabeticos->contains(function ($item) {
return $item->diabetes === true || $item->diabetes === 1 || $item->diabetes === '1';
});
$hasFalse = $diabeticos->contains(function ($item) {
return $item->diabetes === false || $item->diabetes === 0 || $item->diabetes === '0' || is_null($item->diabetes);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function gethanseniase($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$hanseniases = $query->select('atencao_basica_cadastro_individual.hanseniase')
->distinct()
->get();
$hasTrue = $hanseniases->contains(function ($item) {
return $item->hanseniase === true || $item->hanseniase === 1 || $item->hanseniase === '1';
});
$hasFalse = $hanseniases->contains(function ($item) {
return $item->hanseniase === false || $item->hanseniase === 0 || $item->hanseniase === '0' || is_null($item->hanseniase);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getTuberculose($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$tuberculoses = $query->select('atencao_basica_cadastro_individual.tuberculose')
->distinct()
->get();
$hasTrue = $tuberculoses->contains(function ($item) {
return $item->tuberculose === true || $item->tuberculose === 1 || $item->tuberculose === '1';
});
$hasFalse = $tuberculoses->contains(function ($item) {
return $item->tuberculose === false || $item->tuberculose === 0 || $item->tuberculose === '0' || is_null($item->tuberculose);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getFumante($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$fumantes = $query->select('atencao_basica_cadastro_individual.fumante')
->distinct()
->get();
$hasTrue = $fumantes->contains(function ($item) {
return $item->fumante === true || $item->fumante === 1 || $item->fumante === '1';
});
$hasFalse = $fumantes->contains(function ($item) {
return $item->fumante === false || $item->fumante === 0 || $item->fumante === '0' || is_null($item->fumante);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getAlcool($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$alcoolistas = $query->select('atencao_basica_cadastro_individual.usa_alcool')
->distinct()
->get();
if ($alcoolistas->isEmpty()) {
return [];
}
$hasTrue = $alcoolistas->contains(function ($item) {
return $item->usa_alcool === true || $item->usa_alcool === 1 || $item->usa_alcool === '1';
});
$hasFalse = $alcoolistas->contains(function ($item) {
return $item->usa_alcool === false || $item->usa_alcool === 0 || $item->usa_alcool === '0' || is_null($item->usa_alcool);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getDrogas($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$drogas = $query->select('atencao_basica_cadastro_individual.outras_drogas')
->distinct()
->get();
$hasTrue = $drogas->contains(function ($item) {
return $item->outras_drogas === true || $item->outras_drogas === 1 || $item->outras_drogas === '1';
});
$hasFalse = $drogas->contains(function ($item) {
return $item->outras_drogas === false || $item->outras_drogas === 0 || $item->outras_drogas === '0' || is_null($item->outras_drogas);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getTea($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$transtornoEspectroAutista = $query->select('atencao_basica_cadastro_individual.transtorno_espectro_autista')
->distinct()
->get();
$hasTrue = $transtornoEspectroAutista->contains(function ($item) {
return $item->transtorno_espectro_autista === true || $item->transtorno_espectro_autista === 1 || $item->transtorno_espectro_autista === '1';
});
$hasFalse = $transtornoEspectroAutista->contains(function ($item) {
return $item->transtorno_espectro_autista === false || $item->transtorno_espectro_autista === 0 || $item->transtorno_espectro_autista === '0' || is_null($item->transtorno_espectro_autista);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getAvc($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$avc = $query->select('atencao_basica_cadastro_individual.avc_derrame')
->distinct()
->get();
$hasTrue = $avc->contains(function ($item) {
return $item->avc_derrame === true || $item->avc_derrame === 1 || $item->avc_derrame === '1';
});
$hasFalse = $avc->contains(function ($item) {
return $item->avc_derrame === false || $item->avc_derrame === 0 || $item->avc_derrame === '0' || is_null($item->avc_derrame);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getInfarto($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$infarto = $query->select('atencao_basica_cadastro_individual.infarto')
->distinct()
->get();
$hasTrue = $infarto->contains(function ($item) {
return $item->infarto === true || $item->infarto === 1 || $item->infarto === '1';
});
$hasFalse = $infarto->contains(function ($item) {
return $item->infarto === false || $item->infarto === 0 || $item->infarto === '0' || is_null($item->infarto);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getCancer($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$cancer = $query->select('atencao_basica_cadastro_individual.cancer')
->distinct()
->get();
$hasTrue = $cancer->contains(function ($item) {
return $item->cancer === true || $item->cancer === 1 || $item->cancer === '1';
});
$hasFalse = $cancer->contains(function ($item) {
return $item->cancer === false || $item->cancer === 0 || $item->cancer === '0' || is_null($item->cancer);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getFibromialgia($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$fibromialgia = $query->select('atencao_basica_cadastro_individual.fibromialgia')
->distinct()
->get();
$hasTrue = $fibromialgia->contains(function ($item) {
return $item->fibromialgia === true || $item->fibromialgia === 1 || $item->fibromialgia === '1';
});
$hasFalse = $fibromialgia->contains(function ($item) {
return $item->fibromialgia === false || $item->fibromialgia === 0 || $item->fibromialgia === '0' || is_null($item->fibromialgia);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getInternacao($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$internacao = $query->select('atencao_basica_cadastro_individual.internacao')
->distinct()
->get();
$hasTrue = $internacao->contains(function ($item) {
return $item->internacao === true || $item->internacao === 1 || $item->internacao === '1';
});
$hasFalse = $internacao->contains(function ($item) {
return $item->internacao === false || $item->internacao === 0 || $item->internacao === '0' || is_null($item->internacao);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getDoencaCardiaca($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$doencaCardiaca = $query->select('atencao_basica_cadastro_individual.doenca_cardiaca')
->distinct()
->get();
$hasTrue = $doencaCardiaca->contains(function ($item) {
return $item->doenca_cardiaca === true || $item->doenca_cardiaca === 1 || $item->doenca_cardiaca === '1';
});
$hasFalse = $doencaCardiaca->contains(function ($item) {
return $item->doenca_cardiaca === false || $item->doenca_cardiaca === 0 || $item->doenca_cardiaca === '0' || is_null($item->doenca_cardiaca);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getDoencaRenal($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id') ->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$doencaRenal = $query->select('atencao_basica_cadastro_individual.problemas_rins')
->distinct()
->get();
$hasTrue = $doencaRenal->contains(function ($item) {
return $item->problemas_rins === true || $item->problemas_rins === 1 || $item->problemas_rins === '1';
});
$hasFalse = $doencaRenal->contains(function ($item) {
return $item->problemas_rins === false || $item->problemas_rins === 0 || $item->problemas_rins === '0' || is_null($item->problemas_rins);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getDoencaRespiratoria($params)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$doencaRespiratoria = $query->select('atencao_basica_cadastro_individual.doenca_respiratoria')
->distinct()
->get();
$hasTrue = $doencaRespiratoria->contains(function ($item) {
return $item->doenca_respiratoria === true || $item->doenca_respiratoria === 1 || $item->doenca_respiratoria === '1';
});
$hasFalse = $doencaRespiratoria->contains(function ($item) {
return $item->doenca_respiratoria === false || $item->doenca_respiratoria === 0 || $item->doenca_respiratoria === '0' || is_null($item->doenca_respiratoria);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getTratamentoPsicologico($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$tratamentoSaudeMental = $query->select('atencao_basica_cadastro_individual.tratamento_saude_mental')
->distinct()
->get();
$hasTrue = $tratamentoSaudeMental->contains(function ($item) {
return $item->tratamento_saude_mental === true || $item->tratamento_saude_mental === 1 || $item->tratamento_saude_mental === '1';
});
$hasFalse = $tratamentoSaudeMental->contains(function ($item) {
return $item->tratamento_saude_mental === false || $item->tratamento_saude_mental === 0 || $item->tratamento_saude_mental === '0' || is_null($item->tratamento_saude_mental);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getPlantasMedicinais($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$plantasMedicinais = $query->select('atencao_basica_cadastro_individual.plantas_medicinais')
->distinct()
->get();
$hasTrue = $plantasMedicinais->contains(function ($item) {
return $item->plantas_medicinais === true || $item->plantas_medicinais === 1 || $item->plantas_medicinais === '1';
});
$hasFalse = $plantasMedicinais->contains(function ($item) {
return $item->plantas_medicinais === false || $item->plantas_medicinais === 0 || $item->plantas_medicinais === '0' || is_null($item->plantas_medicinais);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getPraticasIntegrativas($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$praticasIntegrativas = $query->select('atencao_basica_cadastro_individual.praticas_integrativas')
->distinct()
->get();
$hasTrue = $praticasIntegrativas->contains(function ($item) {
return $item->praticas_integrativas === true || $item->praticas_integrativas === 1 || $item->praticas_integrativas === '1';
});
$hasFalse = $praticasIntegrativas->contains(function ($item) {
return $item->praticas_integrativas === false || $item->praticas_integrativas === 0 || $item->praticas_integrativas === '0' || is_null($item->praticas_integrativas);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getAcamado($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$acamado = $query->select('atencao_basica_cadastro_individual.acamado')
->distinct()
->get();
$hasTrue = $acamado->contains(function ($item) {
return $item->acamado === true || $item->acamado === 1 || $item->acamado === '1';
});
$hasFalse = $acamado->contains(function ($item) {
return $item->acamado === false || $item->acamado === 0 || $item->acamado === '0' || is_null($item->acamado);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
private static function getDomiciliado($params = null)
{
$params = !is_null($params) ? $params : request()->all();
if (!isset($params['unidade_equipe']) && !isset($params['unidade_equipe_id'])) {
return [];
}
$query = DB::table('cadastro_paciente')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->join('cadastro_cidadao', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
->join('cadastro_sexo', 'cadastro_cidadao.sexo_id', 'cadastro_sexo.id')
->leftJoin('atencao_basica_cadastro_peso', 'atencao_basica_cadastro_individual.peso_id', 'atencao_basica_cadastro_peso.id')
->leftJoin('cadastro_domicilio', 'cadastro_cidadao.domicilio_id', 'cadastro_domicilio.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
});
$query = self::getParams($query, $params);
$domiciliado = $query->select('atencao_basica_cadastro_individual.domiciliado')
->distinct()
->get();
$hasTrue = $domiciliado->contains(function ($item) {
return $item->domiciliado === true || $item->domiciliado === 1 || $item->domiciliado === '1';
});
$hasFalse = $domiciliado->contains(function ($item) {
return $item->domiciliado === false || $item->domiciliado === 0 || $item->domiciliado === '0' || is_null($item->domiciliado);
});
$result = [];
if ($hasTrue && $hasFalse) {
$result = [
['id' => 1, 'nome' => 'Sim'],
['id' => 0, 'nome' => 'Não']
];
}
else if ($hasTrue) {
$result = [
['id' => 1, 'nome' => 'Sim']
];
}
else if ($hasFalse) {
$result = [
['id' => 0, 'nome' => 'Não']
];
}
return $result;
}
public static function autocompletePaciente()
{
$params = request()->all();
$query = DB::table('cadastro_paciente')
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'cadastro_paciente.cidadao_id')
->join('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_cadastro_individual.equipe_id', 'atencao_basica_parametrizacao_equipe.id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('cadastro_infraestrutura', 'atencao_basica_parametrizacao_equipe.infraestrutura_id', 'cadastro_infraestrutura.id')
->join('atencao_basica_parametrizacao_equipe_usuario', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_usuario', 'atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id')
->leftJoin('cadastro_domicilio', 'cidadao.domicilio_id', 'cadastro_domicilio.id')
->join('cadastro_paciente_classificacao', 'cadastro_paciente.classificacao_id', 'cadastro_paciente_classificacao.id')
->leftJoin('cadastro_domicilio_informacao_residencial', 'cadastro_domicilio_informacao_residencial.domicilio_id', 'cadastro_domicilio.id')
->where('cadastro_unidade.id', $params['unidade_equipe'] ?? $params['unidade_equipe_id'])
->whereNull('atencao_basica_cadastro_individual.saida_cidadao_id')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('cadastro_obito')
->whereColumn('cadastro_obito.cidadao_id', 'cidadao.id');
});
$query = self::getParams($query, $params);
$query = $query->distinct()
->selectRaw('
cadastro_paciente.id,
cidadao.nome,
cidadao.cns,
cidadao.nome_social,
cadastro_paciente.prontuario
');
return $query;
}
private static function getParams($query, $params, $contex = null)
{
$params = !is_null($params) ? $params : request()->all();
if (isset($params['infraestrutura_equipe']) && !is_array($params['infraestrutura_equipe'])) {
$query->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $params['infraestrutura_equipe']);
} else if (isset($params['infraestrutura_equipe']) && is_array($params['infraestrutura_equipe'])) {
$query->whereIn('atencao_basica_parametrizacao_equipe.infraestrutura_id', $params['infraestrutura_equipe']);
} else if (isset($params['infraestrutura_equipe_id'])) {
$query->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $params['infraestrutura_equipe_id']);
}
if (isset($params['local_domicilio_id']) && $params['local_domicilio_id'] == 0) {
$query->where(function ($q) {
$q->where('cadastro_domicilio_informacao_residencial.fora_area', 1);
});
} else if (isset($params['local_domicilio_id']) && $params['local_domicilio_id'] == 1) {
$query->where(function ($q) use ($contex) {
$q->where(function ($sub) {
$sub->whereNull('cadastro_domicilio_informacao_residencial.fora_area')
->orWhere('cadastro_domicilio_informacao_residencial.fora_area', 0);
});
});
}
if (isset($params['area_equipe_id']) && !is_null($params['area_equipe_id']) && !is_array($params['area_equipe_id'])) {
$query->where('atencao_basica_parametrizacao_equipe.area_id', $params['area_equipe_id'])
->where(function ($q) {
$q->where('cadastro_domicilio_informacao_residencial.fora_area', 0)
->orWhereNull('cadastro_domicilio_informacao_residencial.fora_area');
});
} else if (isset($params['area_equipe']) && !is_array($params['area_equipe']) && !is_array($params['area_equipe_id'])) {
$query->where('atencao_basica_parametrizacao_equipe.area_id', $params['area_equipe']);
}
if (isset($params['micro_area'])) {
if (!is_array($params['micro_area']) && !is_null($params['micro_area'])) {
$query->where('atencao_basica_parametrizacao_equipe.microarea_id', $params['micro_area'] ?? $params['micro_area_id']);
}
} else if (
isset($params['micro_area_id']) &&
!is_null($params['micro_area_id']) &&
!is_array($params['micro_area_id']) &&
strpos($params['micro_area_id'], 'sem_') === false
) {
$query->where('atencao_basica_parametrizacao_equipe.microarea_id', $params['micro_area_id']);
} else if (
isset($params['micro_area_id']) &&
!is_null($params['micro_area_id']) &&
!is_array($params['micro_area_id']) &&
strpos($params['micro_area_id'], 'sem_') !== false
) {
$query->whereNull('atencao_basica_parametrizacao_equipe.microarea_id');
} else if (
isset($params['micro_area_id']) &&
!is_null($params['micro_area_id']) &&
is_array($params['micro_area_id']) &&
count($params['micro_area_id']) > 0 &&
strpos($params['micro_area_id'][0], 'sem_') !== false
) {
$query->where(function ($q) use ($params) {
$q->whereNull('atencao_basica_parametrizacao_equipe.microarea_id');
});
}
if (isset($params['profissional']) && !is_array($params['profissional'])) {
$query->where('atencao_basica_cadastro_individual.usuario_id', $params['profissional']);
} else if (isset($params['profissional']) && is_array($params['profissional'])) {
$query->whereIn('atencao_basica_cadastro_individual.usuario_id', $params['profissional']);
} else if (isset($params['profissional_id'])) {
$query->where('atencao_basica_cadastro_individual.usuario_id', $params['profissional_id']);
}
if (isset($params['classificacao_paciente']) && !is_array($params['classificacao_paciente'])) {
$query->where('cadastro_paciente.classificacao_id', $params['classificacao_paciente']);
} else if (isset($params['classificacao_paciente']) && is_array($params['classificacao_paciente'])) {
$query->whereIn('cadastro_paciente.classificacao_id', $params['classificacao_paciente']);
} else if (isset($params['classificacao_paciente_id'])) {
$query->where('cadastro_paciente.classificacao_id', $params['classificacao_paciente_id']);
}
if (isset($params['idade'])) {
$anosDe = isset($params['idade']['anos_de']) && !is_array($params['idade']['anos_de']) ? (int) $params['idade']['anos_de'] : 0;
$mesesDe = isset($params['idade']['meses_de']) && !is_array($params['idade']['meses_de']) ? (int) $params['idade']['meses_de'] : 0;
$diasDe = isset($params['idade']['dias_de']) && !is_array($params['idade']['dias_de']) ? (int) $params['idade']['dias_de'] : 0;
$anosAte = isset($params['idade']['anos_ate']) && !is_array($params['idade']['anos_ate']) ? (int) $params['idade']['anos_ate'] : null;
$mesesAte = isset($params['idade']['meses_ate']) && !is_array($params['idade']['meses_ate']) ? (int) $params['idade']['meses_ate'] : null;
$diasAte = isset($params['idade']['dias_ate']) && !is_array($params['idade']['dias_ate']) ? (int) $params['idade']['dias_ate'] : null;
$temFiltroDe = ($anosDe > 0 || $mesesDe > 0 || $diasDe > 0);
$temFiltroAte = ($anosAte !== null || $mesesAte !== null || $diasAte !== null);
if ($temFiltroDe) {
$idadeMinDias = ($anosDe * 365) + ($mesesDe * 30) + $diasDe;
$query->whereRaw('DATEDIFF(NOW(), cadastro_cidadao.data_nascimento) >= ?', [$idadeMinDias]);
}
if ($temFiltroAte) {
$anosAteCalc = $anosAte !== null ? $anosAte : 0;
$mesesAteCalc = $mesesAte !== null ? $mesesAte : 0;
$diasAteCalc = $diasAte !== null ? $diasAte : 0;
$idadeMaxDias = ($anosAteCalc * 365) + ($mesesAteCalc * 30) + $diasAteCalc;
$query->whereRaw('DATEDIFF(NOW(), cadastro_cidadao.data_nascimento) <= ?', [$idadeMaxDias]);
}
}
if (isset($params['paciente']['id'])) {
$query->where('cadastro_paciente.id', $params['paciente']['id']);
}
if (isset($params['sexo']) && !is_array($params['sexo'])) {
$query->where('cadastro_sexo.id', $params['sexo']);
} else if (isset($params['sexo']) && is_array($params['sexo'])) {
$query->whereIn('cadastro_sexo.id', $params['sexo']);
} else if (isset($params['condicionalidades']['sexo_id'])) {
$query->where('cadastro_sexo.id', $params['condicionalidades']['sexo_id']);
}
if (!empty($params['peso'])) {
if (!is_array($params['peso'])) {
$query->where('atencao_basica_cadastro_peso.id', $params['peso']);
}
} else if (isset($params['condicionalidades']['peso_id']) && !is_null($params['condicionalidades']['peso_id'])) {
$query->where('atencao_basica_cadastro_peso.id', $params['condicionalidades']['peso_id']);
}
if (isset($params['gestante']) && !is_array($params['gestante'])) {
$query->where('atencao_basica_cadastro_individual.gestante', $params['gestante']);
} else if (isset($params['condicionalidades']['gestante_id'])) {
$valor = $params['condicionalidades']['gestante_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.gestante', 0)
->orWhereNull('atencao_basica_cadastro_individual.gestante');
});
} else {
$query->where('atencao_basica_cadastro_individual.gestante', $valor);
}
}
if (isset($params['hipertensao']) && !is_array($params['hipertensao'])) {
$query->where('atencao_basica_cadastro_individual.hipertensao', $params['hipertensao']);
} else if (isset($params['condicionalidades']['hipertenso_id'])) {
$valor = $params['condicionalidades']['hipertenso_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.hipertensao', 0)
->orWhereNull('atencao_basica_cadastro_individual.hipertensao');
});
} else {
$query->where('atencao_basica_cadastro_individual.hipertensao', $valor);
}
}
if (isset($params['diabetes']) && !is_array($params['diabetes'])) {
$query->where('atencao_basica_cadastro_individual.diabetes', $params['diabetes']);
} else if (isset($params['condicionalidades']['diabetico_id'])) {
$valor = $params['condicionalidades']['diabetico_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.diabetes', 0)
->orWhereNull('atencao_basica_cadastro_individual.diabetes');
});
} else {
$query->where('atencao_basica_cadastro_individual.diabetes', $valor);
}
}
if (isset($params['hanseniase']) && !is_array($params['hanseniase'])) {
$query->where('atencao_basica_cadastro_individual.hanseniase', $params['hanseniase']);
} else if (isset($params['condicionalidades']['hanseniase_id'])) {
$valor = $params['condicionalidades']['hanseniase_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.hanseniase', 0)
->orWhereNull('atencao_basica_cadastro_individual.hanseniase');
});
} else {
$query->where('atencao_basica_cadastro_individual.hanseniase', $valor);
}
}
if (isset($params['tuberculose']) && !is_array($params['tuberculose'])) {
$query->where('atencao_basica_cadastro_individual.tuberculose', $params['tuberculose']);
} else if (isset($params['condicionalidades']['tuberculose_id'])) {
$valor = $params['condicionalidades']['tuberculose_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.tuberculose', 0)
->orWhereNull('atencao_basica_cadastro_individual.tuberculose');
});
} else {
$query->where('atencao_basica_cadastro_individual.tuberculose', $valor);
}
}
if (isset($params['fumante']) && !is_array($params['fumante'])) {
$query->where('atencao_basica_cadastro_individual.fumante', $params['fumante']);
} else if (isset($params['condicionalidades']['fumante_id'])) {
$valor = $params['condicionalidades']['fumante_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.fumante', 0)
->orWhereNull('atencao_basica_cadastro_individual.fumante');
});
} else {
$query->where('atencao_basica_cadastro_individual.fumante', $valor);
}
}
if (isset($params['alcool']) && !is_array($params['alcool'])) {
$query->where('atencao_basica_cadastro_individual.usa_alcool', $params['alcool']);
} else if (isset($params['condicionalidades']['alcool_id'])) {
$valor = $params['condicionalidades']['alcool_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.usa_alcool', 0)
->orWhereNull('atencao_basica_cadastro_individual.usa_alcool');
});
} else {
$query->where('atencao_basica_cadastro_individual.usa_alcool', $valor);
}
}
if (isset($params['drogas']) && !is_array($params['drogas'])) {
$query->where('atencao_basica_cadastro_individual.outras_drogas', $params['drogas']);
} else if (isset($params['condicionalidades']['drogas_id'])) {
$valor = $params['condicionalidades']['drogas_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.outras_drogas', 0)
->orWhereNull('atencao_basica_cadastro_individual.outras_drogas');
});
} else {
$query->where('atencao_basica_cadastro_individual.outras_drogas', $valor);
}
}
if (isset($params['tea']) && !is_array($params['tea'])) {
$query->where('atencao_basica_cadastro_individual.transtorno_espectro_autista', $params['tea']);
} else if (isset($params['condicionalidades']['tea_id'])) {
$valor = $params['condicionalidades']['tea_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.transtorno_espectro_autista', 0)
->orWhereNull('atencao_basica_cadastro_individual.transtorno_espectro_autista');
});
} else {
$query->where('atencao_basica_cadastro_individual.transtorno_espectro_autista', $valor);
}
}
if (isset($params['avc']) && !is_array($params['avc'])) {
$query->where('atencao_basica_cadastro_individual.avc_derrame', $params['avc']);
} else if (isset($params['outras_doencas']['avc_id'])) {
$valor = $params['outras_doencas']['avc_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.avc_derrame', 0)
->orWhereNull('atencao_basica_cadastro_individual.avc_derrame');
});
} else {
$query->where('atencao_basica_cadastro_individual.avc_derrame', $valor);
}
}
if (isset($params['infarto']) && !is_array($params['infarto'])) {
$query->where('atencao_basica_cadastro_individual.infarto', $params['infarto']);
} else if (isset($params['outras_doencas']['infarto_id'])) {
$valor = $params['outras_doencas']['infarto_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.infarto', 0)
->orWhereNull('atencao_basica_cadastro_individual.infarto');
});
} else {
$query->where('atencao_basica_cadastro_individual.infarto', $valor);
}
}
if (isset($params['cancer']) && !is_array($params['cancer'])) {
$query->where('atencao_basica_cadastro_individual.cancer', $params['cancer']);
} else if (isset($params['outras_doencas']['cancer_id'])) {
$valor = $params['outras_doencas']['cancer_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.cancer', 0)
->orWhereNull('atencao_basica_cadastro_individual.cancer');
});
} else {
$query->where('atencao_basica_cadastro_individual.cancer', $valor);
}
}
if (isset($params['fibromialgia']) && !is_array($params['fibromialgia'])) {
$query->where('atencao_basica_cadastro_individual.fibromialgia', $params['fibromialgia']);
} else if (isset($params['outras_doencas']['fibromialgia_id'])) {
$valor = $params['outras_doencas']['fibromialgia_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.fibromialgia', 0)
->orWhereNull('atencao_basica_cadastro_individual.fibromialgia');
});
} else {
$query->where('atencao_basica_cadastro_individual.fibromialgia', $valor);
}
}
if (isset($params['internacao']) && !is_array($params['internacao'])) {
$query->where('atencao_basica_cadastro_individual.internacao', $params['internacao']);
} else if (isset($params['outras_doencas']['internacao_id'])) {
$valor = $params['outras_doencas']['internacao_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.internacao', 0)
->orWhereNull('atencao_basica_cadastro_individual.internacao');
});
} else {
$query->where('atencao_basica_cadastro_individual.internacao', $valor);
}
}
if (isset($params['doenca_cardiaca']) && !is_array($params['doenca_cardiaca'])) {
$query->where('atencao_basica_cadastro_individual.doenca_cardiaca', $params['doenca_cardiaca']);
} else if (isset($params['outras_doencas']['doenca_cardiaca_id'])) {
$valor = $params['outras_doencas']['doenca_cardiaca_id'];
if ($valor == 0) {
$query->where(function($q) {
$q->where('atencao_basica_cadastro_individual.doenca_cardiaca', 0)
->orWhereNull('atencao_basica_cadastro_individual.doenca_cardiaca');
});
} else {
$query->where('atencao_basica_cadastro_individual.doenca_cardiaca', $valor);
}
}
if (isset($params['doenca_renal']) && !is_array($params['doenca_renal'])) {
$query->where('atencao_basica_cadastro_individual.problemas_rins', $params['doenca_renal']);
} else if (isset($params['outras_doencas']['doenca_renal_id'])) {
$valor = $params['outras_doencas']['doenca_renal_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.problemas_rins', 0)
->orWhereNull('atencao_basica_cadastro_individual.problemas_rins');
});
} else {
$query->where('atencao_basica_cadastro_individual.problemas_rins', $valor);
}
}
if (isset($params['doenca_respiratoria']) && !is_array($params['doenca_respiratoria'])) {
$query->where('atencao_basica_cadastro_individual.doenca_respiratoria', $params['doenca_respiratoria']);
} else if (isset($params['outras_doencas']['doenca_respiratoria_id'])) {
$valor = $params['outras_doencas']['doenca_respiratoria_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.doenca_respiratoria', 0)
->orWhereNull('atencao_basica_cadastro_individual.doenca_respiratoria');
});
} else {
$query->where('atencao_basica_cadastro_individual.doenca_respiratoria', $valor);
}
}
if (isset($params['tratamento_psicologico']) && !is_array($params['tratamento_psicologico'])) {
$query->where('atencao_basica_cadastro_individual.tratamento_saude_mental', $params['tratamento_psicologico']);
} else if (isset($params['outras_doencas']['tratamento_psicologico_id'])) {
$valor = $params['outras_doencas']['tratamento_psicologico_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.tratamento_saude_mental', 0)
->orWhereNull('atencao_basica_cadastro_individual.tratamento_saude_mental');
});
} else {
$query->where('atencao_basica_cadastro_individual.tratamento_saude_mental', $valor);
}
}
if (isset($params['plantas_medicinais']) && !is_array($params['plantas_medicinais'])) {
$query->where('atencao_basica_cadastro_individual.plantas_medicinais', $params['plantas_medicinais']);
} else if (isset($params['outras_doencas']['plantas_medicinais_id'])) {
$valor = $params['outras_doencas']['plantas_medicinais_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.plantas_medicinais', 0)
->orWhereNull('atencao_basica_cadastro_individual.plantas_medicinais');
});
} else {
$query->where('atencao_basica_cadastro_individual.plantas_medicinais', $valor);
}
}
if (isset($params['praticas_integrativas']) && !is_array($params['praticas_integrativas'])) {
$query->where('atencao_basica_cadastro_individual.praticas_integrativas', $params['praticas_integrativas']);
} else if (isset($params['outras_doencas']['praticas_integrativas_id'])) {
$valor = $params['outras_doencas']['praticas_integrativas_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.praticas_integrativas', 0)
->orWhereNull('atencao_basica_cadastro_individual.praticas_integrativas');
});
} else {
$query->where('atencao_basica_cadastro_individual.praticas_integrativas', $valor);
}
}
if (isset($params['acamado']) && !is_array($params['acamado'])) {
$query->where('atencao_basica_cadastro_individual.acamado', $params['acamado']);
} else if (isset($params['atencao_domiciliar']['acamado_id']) && !is_null($params['atencao_domiciliar']['acamado_id'])) {
$valor = $params['atencao_domiciliar']['acamado_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.acamado', 0)
->orWhereNull('atencao_basica_cadastro_individual.acamado');
});
} else {
$query->where('atencao_basica_cadastro_individual.acamado', $valor);
}
}
if (isset($params['domiciliado']) && !is_array($params['domiciliado'])) {
$query->where('atencao_basica_cadastro_individual.domiciliado', $params['domiciliado']);
} else if (isset($params['atencao_domiciliar']['domiciliado_id']) && !is_null($params['atencao_domiciliar']['domiciliado_id'])) {
$valor = $params['atencao_domiciliar']['domiciliado_id'];
if ($valor == 0) {
$query->where(function ($q) {
$q->where('atencao_basica_cadastro_individual.domiciliado', 0)
->orWhereNull('atencao_basica_cadastro_individual.domiciliado');
});
} else {
$query->where('atencao_basica_cadastro_individual.domiciliado', $valor);
}
}
return $query;
}
}