854 lines
40 KiB
PHP
854 lines
40 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Cadastro;
|
|
|
|
use App\Enums\Cadastro\SujeitoAtencao\Classificacao;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
|
use App\Enums\Intranet\Sistema;
|
|
use App\Models\AtencaoBasica\Parametrizacao\Area;
|
|
use App\Models\AtencaoBasica\Parametrizacao\Microarea;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use App\Models\Cadastro\Localizacao\Bairro;
|
|
use App\Models\Cadastro\Localizacao\Logradouro;
|
|
use App\Models\Cadastro\Localizacao\LogradouroTipo;
|
|
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
|
use App\Models\Cadastro\SujeitoAtencao\PacienteClassificacao;
|
|
use App\Models\Intranet\Cliente;
|
|
use App\Models\Intranet\Municipio;
|
|
use App\Services\Service;
|
|
use App\Utils\DataUtil;
|
|
use App\Utils\MaskUtil;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class RelatorioPacienteBairroService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
$itens = collect();
|
|
$totalizadores = (object) [];
|
|
|
|
$params = self::getParams();
|
|
|
|
if ($params->modelo_resultado === 'sintetico') {
|
|
|
|
$totalizadores = (object) [
|
|
'total_pacientes' => 0,
|
|
'total_sexo_masculino' => 0,
|
|
'total_sexo_feminino' => 0,
|
|
'total_sexo_indeterminado' => 0,
|
|
'total_idade_zero_doze' => 0,
|
|
'total_idade_treze_dezessete' => 0,
|
|
'total_idade_dezoito_cinquenta_nove' => 0,
|
|
'total_idade_sessenta_setenta_nove' => 0,
|
|
'total_idade_oitenta_mais' => 0,
|
|
];
|
|
|
|
$itensBuilder = DB::table('cadastro_bairro AS bairro')
|
|
->join('cadastro_logradouro AS logradouro', 'logradouro.bairro_id', 'bairro.id')
|
|
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
|
->whereNull('bairro.deleted_at')
|
|
->whereNull('logradouro.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('paciente.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
|
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
|
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
|
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
|
->when($params->fora_area,
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
|
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
|
->where('cadastro_domiciliar.fora_area', true)
|
|
)
|
|
->orWhereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
|
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
|
)
|
|
),
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
|
->join(
|
|
'atencao_basica_parametrizacao_microarea AS microarea',
|
|
'microarea.id',
|
|
'cadastro_domiciliar.microarea_id'
|
|
)
|
|
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
|
->when($params->area_id, fn ($q, $id) => $q->where('microarea.area_id', $id))
|
|
->when($params->microarea_id, fn ($q, $id) => $q->where('cadastro_domiciliar.microarea_id', $id))
|
|
)
|
|
->when(is_null($params->area_id) && is_null($params->microarea_id), fn ($q) => $q
|
|
->orWhereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
|
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
|
->where('cadastro_domiciliar.fora_area', true)
|
|
)
|
|
->orWhereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
|
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
|
)
|
|
)
|
|
)
|
|
)
|
|
->select(
|
|
'bairro.nome AS bairro_nome',
|
|
DB::raw("COUNT(*) AS total_pacientes"),
|
|
DB::raw("SUM(IF(cidadao.sexo_id = " . Sexo::MASCULINO . ", 1, 0)) AS total_sexo_masculino"),
|
|
DB::raw("SUM(IF(cidadao.sexo_id = " . Sexo::FEMININO . ", 1, 0)) AS total_sexo_feminino"),
|
|
DB::raw("SUM(IF(cidadao.sexo_id = " . Sexo::INDETERMINADO . ", 1, 0)) AS total_sexo_indeterminado"),
|
|
DB::raw("SUM(
|
|
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 0
|
|
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 12,
|
|
1, 0)
|
|
) AS total_idade_zero_doze"),
|
|
DB::raw("SUM(
|
|
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 13
|
|
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 17,
|
|
1, 0)
|
|
) AS total_idade_treze_dezessete"),
|
|
DB::raw("SUM(
|
|
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 18
|
|
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 59,
|
|
1, 0)
|
|
) AS total_idade_dezoito_cinquenta_nove"),
|
|
DB::raw("SUM(
|
|
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 60
|
|
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 79,
|
|
1, 0)
|
|
) AS total_idade_sessenta_setenta_nove"),
|
|
DB::raw("SUM(
|
|
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 80, 1, 0)
|
|
) AS total_idade_oitenta_mais")
|
|
)
|
|
->groupBy(
|
|
'bairro.nome'
|
|
);
|
|
|
|
self::setOrderBy($params->modelo_resultado, $itensBuilder);
|
|
|
|
$itens = $itensBuilder->get();
|
|
|
|
$itens->each(function ($item) use ($totalizadores) {
|
|
|
|
$totalizadores->total_pacientes += $item->total_pacientes;
|
|
$totalizadores->total_sexo_masculino += $item->total_sexo_masculino;
|
|
$totalizadores->total_sexo_feminino += $item->total_sexo_feminino;
|
|
$totalizadores->total_sexo_indeterminado += $item->total_sexo_indeterminado;
|
|
$totalizadores->total_idade_zero_doze += $item->total_idade_zero_doze;
|
|
$totalizadores->total_idade_treze_dezessete += $item->total_idade_treze_dezessete;
|
|
$totalizadores->total_idade_dezoito_cinquenta_nove += $item->total_idade_dezoito_cinquenta_nove;
|
|
$totalizadores->total_idade_sessenta_setenta_nove += $item->total_idade_sessenta_setenta_nove;
|
|
$totalizadores->total_idade_oitenta_mais += $item->total_idade_oitenta_mais;
|
|
});
|
|
}
|
|
else {
|
|
|
|
$itensBuilder = DB::table('cadastro_paciente AS paciente')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('cadastro_sexo AS sexo', 'sexo.id', 'cidadao.sexo_id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
|
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
|
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
|
->join('cadastro_logradouro_tipo AS logradouro_tipo', 'logradouro_tipo.id', 'logradouro.tipo_id')
|
|
->join('cadastro_bairro AS bairro', 'bairro.id', 'logradouro.bairro_id')
|
|
->join('intranet.cadastro_municipio AS municipio', 'municipio.id', 'logradouro.municipio_id')
|
|
->join('intranet.cadastro_estado AS estado', 'estado.id', 'municipio.estado_id')
|
|
->leftJoin('cadastro_cidadao_telefone AS telefone', fn ($j) => $j
|
|
->on('telefone.cidadao_id', 'cidadao.id')
|
|
->where('telefone.id', fn ($q) => $q
|
|
->selectRaw('telefone2.id')
|
|
->from('cadastro_cidadao_telefone AS telefone2')
|
|
->whereColumn('telefone2.cidadao_id', 'cidadao.id')
|
|
->whereNull('telefone2.deleted_at')
|
|
->where('telefone2.principal', true)
|
|
->limit(1)
|
|
)
|
|
)
|
|
->leftJoin(
|
|
'atencao_basica_cadastro_domiciliar AS cadastro_domiciliar',
|
|
'cadastro_domiciliar.domicilio_id',
|
|
'domicilio.id'
|
|
)
|
|
->leftJoin(
|
|
'atencao_basica_parametrizacao_microarea AS microarea',
|
|
'microarea.id',
|
|
'cadastro_domiciliar.microarea_id'
|
|
)
|
|
->leftJoin(
|
|
'atencao_basica_parametrizacao_area AS area',
|
|
'area.id',
|
|
'microarea.area_id'
|
|
)
|
|
->leftJoin('cadastro_paciente_responsavel AS paciente_responsavel', fn ($j) => $j
|
|
->on('paciente_responsavel.paciente_id', 'paciente.id')
|
|
->whereNull('paciente_responsavel.deleted_at')
|
|
)
|
|
->leftJoin('cadastro_usuario AS usuario_responsavel', fn ($j) => $j
|
|
->on('usuario_responsavel.id', 'paciente_responsavel.responsavel_usuario_id')
|
|
->whereNull('usuario_responsavel.deleted_at')
|
|
)
|
|
->leftJoin('cadastro_cidadao AS usuario_responsavel_cidadao', fn ($j) => $j
|
|
->on('usuario_responsavel_cidadao.id', 'usuario_responsavel.cidadao_id')
|
|
->whereNull('usuario_responsavel_cidadao.deleted_at')
|
|
)
|
|
->whereNull('paciente.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('logradouro.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
|
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
|
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
|
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
|
->when($params->fora_area,
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->where(fn ($q) => $q
|
|
->whereNotNull('cadastro_domiciliar.id')
|
|
->where('cadastro_domiciliar.fora_area', true)
|
|
)
|
|
->orWhereNull('cadastro_domiciliar.id')
|
|
),
|
|
fn ($q) => $q->where(fn ($q) => $q
|
|
->where(fn ($q) => $q
|
|
->whereNotNull('cadastro_domiciliar.id')
|
|
->when($params->area_id, fn ($q, $id) => $q->where('microarea.area_id', $id))
|
|
->when($params->microarea_id, fn ($q, $id) => $q->where('cadastro_domiciliar.microarea_id', $id))
|
|
)
|
|
->when(is_null($params->area_id) && is_null($params->microarea_id), fn ($q) => $q
|
|
->orWhere(fn ($q) => $q
|
|
->where(fn ($q) => $q
|
|
->whereNotNull('cadastro_domiciliar.id')
|
|
->where('cadastro_domiciliar.fora_area', true)
|
|
)
|
|
->orWhereNull('cadastro_domiciliar.id')
|
|
)
|
|
)
|
|
)
|
|
)
|
|
->select(
|
|
DB::raw("LPAD(paciente.prontuario, 7, 0) AS paciente_prontuario"),
|
|
'cidadao.cns AS paciente_cns',
|
|
'cidadao.cpf AS paciente_cpf',
|
|
'cidadao.nome AS paciente_nome',
|
|
DB::raw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) AS paciente_idade"),
|
|
'sexo.descricao AS sexo_descricao',
|
|
DB::raw("CONCAT(
|
|
logradouro_tipo.descricao,
|
|
' ',
|
|
logradouro.nome,
|
|
', ',
|
|
IF(endereco.numero IS NULL, 'S/N', endereco.numero),
|
|
' - ',
|
|
bairro.nome,
|
|
', ',
|
|
municipio.nome,
|
|
' - ',
|
|
estado.uf
|
|
) AS endereco"),
|
|
'telefone.numero AS telefone_numero',
|
|
'area.descricao AS area',
|
|
'microarea.descricao AS microarea',
|
|
'usuario_responsavel_cidadao.nome AS usuario_responsavel_nome'
|
|
|
|
);
|
|
|
|
self::setOrderBy($params->modelo_resultado, $itensBuilder);
|
|
|
|
$itens = $itensBuilder->get();
|
|
|
|
$itens->each(function ($item) {
|
|
|
|
$item->paciente_cns = MaskUtil::getCnsMasked($item->paciente_cns);
|
|
$item->paciente_cpf = MaskUtil::getCpfMasked($item->paciente_cpf);
|
|
$item->telefone_numero = MaskUtil::getPhoneMasked($item->telefone_numero);
|
|
});
|
|
}
|
|
|
|
return compact('itens', 'totalizadores');
|
|
}
|
|
|
|
private static function setOrderBy($modeloResultado, $builder)
|
|
{
|
|
$columns = $modeloResultado === 'sintetico' ? [
|
|
'bairro_nome' => 'bairro.nome',
|
|
'total_pacientes' => 'total_pacientes',
|
|
'total_sexo_masculino' => 'total_sexo_masculino',
|
|
'total_sexo_feminino' => 'total_sexo_feminino',
|
|
'total_sexo_indeterminado' => 'total_sexo_indeterminado',
|
|
'total_idade_zero_doze' => 'total_idade_zero_doze',
|
|
'total_idade_treze_dezessete' => 'total_idade_treze_dezessete',
|
|
'total_idade_dezoito_cinquenta_nove' => 'total_idade_dezoito_cinquenta_nove',
|
|
'total_idade_sessenta_setenta_nove' => 'total_idade_sessenta_setenta_nove',
|
|
'total_idade_oitenta_mais' => 'total_idade_oitenta_mais',
|
|
] : [
|
|
'paciente_prontuario' => 'paciente.prontuario',
|
|
'paciente_cns' => 'cidadao.cns',
|
|
'paciente_cpf' => 'cidadao.cpf',
|
|
'paciente_nome' => 'cidadao.nome',
|
|
'paciente_idade' => 'paciente_idade',
|
|
'sexo_descricao' => 'sexo.descricao',
|
|
'endereco' => 'endereco',
|
|
'telefone_numero' => 'telefone.numero',
|
|
'area' => 'area.descricao',
|
|
'microarea' => 'microarea.descricao',
|
|
'usuario_responsavel_nome' => 'usuario_responsavel_cidadao.nome',
|
|
];
|
|
|
|
if (is_null(request()->sortBy)) {
|
|
|
|
$builder->orderByRaw(join(', ', $columns));
|
|
|
|
return;
|
|
}
|
|
|
|
$column = $columns[request()->sortBy];
|
|
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sortDesc) ? 'DESC' : 'ASC';
|
|
|
|
unset($columns[request()->sortBy]);
|
|
|
|
$builder->orderByRaw(
|
|
"{$column} {$direction}, " . join(', ', $columns)
|
|
);
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
$data = (object) [
|
|
'form' => [],
|
|
'model' => [],
|
|
];
|
|
|
|
$params = self::getParams();
|
|
|
|
$sets = [
|
|
'modelo_resultado' => function () use ($data, $params) {
|
|
|
|
$modelosResultadoData = self::getModelosResultadoData();
|
|
|
|
$data->form['modelos_resultado'] = $modelosResultadoData['form'];
|
|
$data->model['modelo_resultado'] = $modelosResultadoData['model'];
|
|
|
|
$params->modelo_resultado = $data->model['modelo_resultado'];
|
|
},
|
|
'classificacao' => function () use ($data, $params) {
|
|
|
|
$classificacoesData = self::getClassificacoesData();
|
|
|
|
$data->form['classificacoes'] = $classificacoesData['form'];
|
|
$data->model['classificacao_id'] = $classificacoesData['model'];
|
|
|
|
$params->classificacao_id = $data->model['classificacao_id'];
|
|
},
|
|
'municipio' => function () use ($data, $params) {
|
|
|
|
$municipiosData = self::getMunicipiosData($params);
|
|
|
|
$data->form['municipios'] = $municipiosData['form'];
|
|
$data->model['municipio_id'] = $municipiosData['model'];
|
|
|
|
$params->municipio_id = $data->model['municipio_id'];
|
|
},
|
|
'unidade' => function () use ($data, $params) {
|
|
|
|
$unidadesData = self::getUnidadesData($params);
|
|
|
|
$data->form['unidades'] = $unidadesData['form'];
|
|
$data->model['unidade_id'] = $unidadesData['model'];
|
|
|
|
$params->unidade_id = $data->model['unidade_id'];
|
|
},
|
|
'bairro' => function () use ($data, $params) {
|
|
|
|
$bairrosData = self::getBairrosData($params);
|
|
|
|
$data->form['bairros'] = $bairrosData['form'];
|
|
$data->model['bairro_id'] = $bairrosData['model'];
|
|
|
|
$params->bairro_id = $data->model['bairro_id'];
|
|
},
|
|
'tipo_logradouro' => function () use ($data, $params) {
|
|
|
|
$tiposLogradouroData = self::getTiposLogradouroData($params);
|
|
|
|
$data->form['tipos_logradouro'] = $tiposLogradouroData['form'];
|
|
$data->model['tipo_logradouro_id'] = $tiposLogradouroData['model'];
|
|
|
|
$params->tipo_logradouro_id = $data->model['tipo_logradouro_id'];
|
|
},
|
|
'logradouro' => function () use ($data, $params) {
|
|
|
|
$data->model['logradouro'] = null;
|
|
|
|
$params->logradouro_id = null;
|
|
},
|
|
'paciente' => function () use ($data, $params) {
|
|
|
|
$data->model['paciente'] = null;
|
|
|
|
$params->paciente_id = null;
|
|
},
|
|
'fora_area' => function () use ($data, $params) {
|
|
|
|
$data->model['fora_area'] = false;
|
|
|
|
$params->fora_area = false;
|
|
},
|
|
'area' => function () use ($data, $params) {
|
|
|
|
$areasData = self::getAreasData($params);
|
|
|
|
$data->form['areas'] = $areasData['form'];
|
|
$data->model['area_id'] = $areasData['model'];
|
|
|
|
$params->area_id = $data->model['area_id'];
|
|
},
|
|
'microarea' => function () use ($data, $params) {
|
|
|
|
$microareasData = self::getMicroareasData($params);
|
|
|
|
$data->form['microareas'] = $microareasData['form'];
|
|
$data->model['microarea_id'] = $microareasData['model'];
|
|
|
|
$params->microarea_id = $data->model['microarea_id'];
|
|
},
|
|
];
|
|
|
|
$firstLoad = $load = is_null(request()->load_from);
|
|
|
|
foreach ($sets as $field => $set) {
|
|
|
|
if ($load) {
|
|
|
|
if (!$firstLoad && collect(['fora_area', 'modelo_resultado'])->contains($field)) {
|
|
|
|
continue;
|
|
}
|
|
|
|
$set();
|
|
}
|
|
else if ($field === request()->load_from) {
|
|
|
|
$load = true;
|
|
}
|
|
}
|
|
|
|
foreach ($data as $property => $itens) {
|
|
|
|
if (empty($itens)) {
|
|
|
|
unset($data->{$property});
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
private static function getParams()
|
|
{
|
|
$params = (object) request()->only([
|
|
'classificacao_id',
|
|
'municipio_id',
|
|
'unidade_id',
|
|
'bairro_id',
|
|
'tipo_logradouro_id',
|
|
'logradouro_id',
|
|
'paciente_id',
|
|
'area_id',
|
|
'microarea_id',
|
|
'fora_area',
|
|
'modelo_resultado',
|
|
]);
|
|
|
|
if (isset($params->fora_area) && DataUtil::isStringBoolean($params->fora_area)) {
|
|
|
|
$params->fora_area = DataUtil::getBooleanValueFromStringBoolean($params->fora_area);
|
|
}
|
|
|
|
return $params;
|
|
}
|
|
|
|
private static function getModelosResultadoData()
|
|
{
|
|
$modeloesResultado = collect([
|
|
(object) ['value' => 'analitico', 'text' => 'Analítico'],
|
|
(object) ['value' => 'sintetico', 'text' => 'Sintético'],
|
|
]);
|
|
|
|
return ['form' => $modeloesResultado, 'model' => 'analitico'];
|
|
}
|
|
|
|
private static function getClassificacoesData()
|
|
{
|
|
$classificacoes = DB::table('cadastro_paciente_classificacao AS classificacao')
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('cadastro_paciente AS paciente')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->whereColumn('paciente.classificacao_id', 'classificacao.id')
|
|
->whereNull('paciente.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNotNull('cidadao.domicilio_id')
|
|
)
|
|
->select(
|
|
'classificacao.id',
|
|
'classificacao.descricao'
|
|
)
|
|
->orderBy('classificacao.descricao')
|
|
->get();
|
|
|
|
$id = $classificacoes->where('id', Classificacao::MUNICIPE)->isNotEmpty() ? Classificacao::MUNICIPE : null;
|
|
|
|
return ['form' => $classificacoes, 'model' => $id];
|
|
}
|
|
|
|
private static function getMunicipiosData($params)
|
|
{
|
|
$municipios = DB::table('intranet.cadastro_municipio AS municipio')
|
|
->join('intranet.cadastro_estado AS estado', 'estado.id', 'municipio.estado_id')
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('cadastro_logradouro AS logradouro')
|
|
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
|
->whereColumn('logradouro.municipio_id', 'municipio.id')
|
|
->whereNull('logradouro.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('paciente.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
)
|
|
->select(
|
|
'municipio.id',
|
|
DB::raw("CONCAT(municipio.nome, ' - ', estado.uf) AS nome")
|
|
)
|
|
->orderByRaw("CONCAT(municipio.nome, ' - ', estado.uf)")
|
|
->get();
|
|
|
|
$id = null;
|
|
|
|
$municipioClienteId = Cliente::where('link', config('database.default'))
|
|
->where('sistema_id', Sistema::CONECTASUS)
|
|
->firstOrFail()
|
|
->municipio_id;
|
|
|
|
if ($municipios->where('id', $municipioClienteId)->isNotEmpty()) {
|
|
|
|
if ($params->classificacao_id == Classificacao::MUNICIPE || $municipios->count() === 1) {
|
|
|
|
$id = $municipioClienteId;
|
|
}
|
|
}
|
|
|
|
return ['form' => $municipios, 'model' => $id];
|
|
}
|
|
|
|
private static function getUnidadesData($params)
|
|
{
|
|
$unidades = collect();
|
|
|
|
if ($params->modelo_resultado === 'sintetico'
|
|
|| ($params->modelo_resultado === 'analitico' && !is_null($params->municipio_id))
|
|
) {
|
|
|
|
$unidades = DB::table('cadastro_unidade AS unidade')
|
|
->whereNull('unidade.deleted_at')
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('cadastro_paciente AS paciente')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
|
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
|
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
|
->whereColumn('paciente.unidade_id', 'unidade.id')
|
|
->whereNull('paciente.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('logradouro.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
)
|
|
->select(
|
|
'unidade.id',
|
|
'unidade.nome_fantasia'
|
|
)
|
|
->orderBy('unidade.nome_fantasia')
|
|
->get();
|
|
}
|
|
|
|
return ['form' => $unidades, 'model' => null];
|
|
}
|
|
|
|
private static function getBairrosData($params)
|
|
{
|
|
$bairros = collect();
|
|
|
|
if ($params->modelo_resultado === 'sintetico'
|
|
|| ($params->modelo_resultado === 'analitico' && !is_null($params->municipio_id))
|
|
) {
|
|
|
|
$bairros = DB::table('cadastro_bairro AS bairro')
|
|
->whereNull('bairro.deleted_at')
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('cadastro_logradouro AS logradouro')
|
|
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
|
->whereColumn('logradouro.bairro_id', 'bairro.id')
|
|
->whereNull('logradouro.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('paciente.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
)
|
|
->select(
|
|
'bairro.id',
|
|
'bairro.nome'
|
|
)
|
|
->orderBy('bairro.nome')
|
|
->get();
|
|
}
|
|
|
|
return ['form' => $bairros, 'model' => null];
|
|
}
|
|
|
|
private static function getTiposLogradouroData($params)
|
|
{
|
|
$tiposLogradouro = collect();
|
|
|
|
if ($params->modelo_resultado === 'sintetico'
|
|
|| ($params->modelo_resultado === 'analitico' && !is_null($params->bairro_id))
|
|
) {
|
|
|
|
$tiposLogradouro = DB::table('cadastro_logradouro_tipo AS logradouro_tipo')
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('cadastro_logradouro AS logradouro')
|
|
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
|
->whereColumn('logradouro.tipo_id', 'logradouro_tipo.id')
|
|
->whereNull('logradouro.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('paciente.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
|
)
|
|
->select(
|
|
'logradouro_tipo.id',
|
|
'logradouro_tipo.descricao'
|
|
)
|
|
->orderBy('logradouro_tipo.descricao')
|
|
->get();
|
|
}
|
|
|
|
return ['form' => $tiposLogradouro, 'model' => null];
|
|
}
|
|
|
|
public static function autocompleteLogradouro()
|
|
{
|
|
$params = self::getParams();
|
|
|
|
return DB::table('cadastro_logradouro AS logradouro')
|
|
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
|
->whereNull('logradouro.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('paciente.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
|
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
|
->select(
|
|
'logradouro.id',
|
|
'logradouro.nome'
|
|
)
|
|
->distinct();
|
|
}
|
|
|
|
public static function autocompletePaciente()
|
|
{
|
|
$params = self::getParams();
|
|
|
|
return DB::table('cadastro_paciente AS paciente')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
|
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
|
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
|
->whereNull('paciente.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('logradouro.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
|
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
|
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
|
->select(
|
|
'paciente.id',
|
|
'cidadao.nome'
|
|
);
|
|
}
|
|
|
|
private static function getAreasData($params)
|
|
{
|
|
$areas = collect();
|
|
|
|
if (!$params->fora_area && ($params->modelo_resultado === 'sintetico'
|
|
|| ($params->modelo_resultado === 'analitico' && !is_null($params->bairro_id))
|
|
)) {
|
|
|
|
$areas = DB::table('atencao_basica_parametrizacao_area AS area')
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_parametrizacao_microarea AS microarea')
|
|
->join(
|
|
'atencao_basica_cadastro_domiciliar AS cadastro_domiciliar',
|
|
'cadastro_domiciliar.microarea_id',
|
|
'microarea.id'
|
|
)
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cadastro_domiciliar.domicilio_id')
|
|
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
|
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
|
->whereColumn('microarea.area_id', 'area.id')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('logradouro.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('paciente.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
|
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
|
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
|
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
|
)
|
|
->select(
|
|
'area.id',
|
|
'area.descricao'
|
|
)
|
|
->orderBy('area.descricao')
|
|
->get();
|
|
}
|
|
|
|
return ['form' => $areas, 'model' => null];
|
|
}
|
|
|
|
private static function getMicroareasData($params)
|
|
{
|
|
$microareas = collect();
|
|
|
|
if (!is_null($params->area_id)) {
|
|
|
|
$microareas = DB::table('atencao_basica_parametrizacao_microarea AS microarea')
|
|
->where('microarea.area_id', $params->area_id)
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
|
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cadastro_domiciliar.domicilio_id')
|
|
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
|
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
|
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
|
->whereColumn('cadastro_domiciliar.microarea_id', 'microarea.id')
|
|
->whereNull('domicilio.deleted_at')
|
|
->whereNull('endereco.deleted_at')
|
|
->whereNull('logradouro.deleted_at')
|
|
->whereNull('cidadao.deleted_at')
|
|
->whereNull('paciente.deleted_at')
|
|
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
|
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
|
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
|
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
|
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
|
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
|
)
|
|
->select(
|
|
'microarea.id',
|
|
'microarea.descricao'
|
|
)
|
|
->orderBy('microarea.descricao')
|
|
->get();
|
|
}
|
|
|
|
return ['form' => $microareas, 'model' => null];
|
|
}
|
|
|
|
public static function getPrintExportData()
|
|
{
|
|
$resultado = self::index();
|
|
$itens = $resultado['itens'];
|
|
|
|
$params = self::getParams();
|
|
|
|
$classificacao = is_null($params->classificacao_id) ? null : PacienteClassificacao::find($params->classificacao_id);
|
|
$municipio = is_null($params->municipio_id) ? null : Municipio::find($params->municipio_id);
|
|
$unidade = is_null($params->unidade_id) ? null : Unidade::find($params->unidade_id);
|
|
$bairro = is_null($params->bairro_id) ? null : Bairro::find($params->bairro_id);
|
|
$tipoLogradouro = is_null($params->tipo_logradouro_id) ? null : LogradouroTipo::find($params->tipo_logradouro_id);
|
|
$logradouro = is_null($params->logradouro_id) ? null : Logradouro::find($params->logradouro_id);
|
|
$paciente = is_null($params->paciente_id) ? null : Paciente::find($params->paciente_id);
|
|
$foraArea = DataUtil::getBooleanValueFromStringBoolean($params->fora_area) ? 'SIM' : 'NÃO';
|
|
$area = is_null($params->area_id) ? null : Area::find($params->area_id);
|
|
$microarea = is_null($params->microarea_id) ? null : Microarea::find($params->microarea_id);
|
|
|
|
return [
|
|
'classificacao' => $classificacao->descricao ?? 'Todas',
|
|
'municipio' => is_null($municipio) ? 'Todos' : "{$municipio->nome} - {$municipio->estado->uf}",
|
|
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
|
'bairro' => $bairro->nome ?? 'Todos',
|
|
'tipoLogradouro' => $tipoLogradouro->descricao ?? 'Todos',
|
|
'logradouro' => $logradouro->nome ?? 'Todos',
|
|
'paciente' => $paciente->cidadao->nome ?? 'Todos',
|
|
'foraArea' => $foraArea,
|
|
'area' => $area->descricao ?? 'Todas',
|
|
'microarea' => $microarea->descricao ?? 'Todas',
|
|
'colunas' => collect(request()->selectedCols),
|
|
'itens' => $itens,
|
|
'totalizadores' => $resultado['totalizadores'],
|
|
'isModeloSintetico' => $params->modelo_resultado === 'sintetico',
|
|
];
|
|
}
|
|
}
|