Files
rkm-conectasus-ci-sandbox/api/app/Services/AtencaoBasica/RelatorioAtividadeColetivaService.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

772 lines
41 KiB
PHP

<?php
namespace App\Services\AtencaoBasica;
use App\Models\AtencaoBasica\AtividadeColetiva\PublicoAlvo;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudePratica;
use App\Models\AtencaoBasica\AtividadeColetiva\SaudeTema;
use App\Services\Service;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class RelatorioAtividadeColetivaService extends Service {
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('atencao_basica_atividade_coletiva_participante as participante', 'participante.paciente_id', 'paciente.id')
->join('atencao_basica_atividade_coletiva as atividade_coletiva', 'atividade_coletiva.id', 'participante.atividade_coletiva_id')
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('atencao_basica_cadastro_atividade_tipo as atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->join('atencao_basica_cadastro_turno as turno', 'turno.id', 'atividade_coletiva.turno_id')
->leftJoin('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->Leftjoin('atencao_basica_atividade_coletiva_publico_alvo as publico_alvo', 'publico_alvo.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_publico_alvo as cadastro_publico_alvo', 'cadastro_publico_alvo.id', 'publico_alvo.publico_alvo_id')
->Leftjoin('atencao_basica_atividade_coletiva_saude_tema as saude_tema', 'saude_tema.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_tema as cadastro_saude_tema', 'cadastro_saude_tema.id', 'saude_tema.saude_tema_id')
->Leftjoin('atencao_basica_atividade_coletiva_saude_pratica as saude_pratica', 'saude_pratica.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_pratica as cadastro_saude_pratica', 'cadastro_saude_pratica.id', 'saude_pratica.saude_pratica_id')
->LeftJoin('atencao_basica_atividade_coletiva_procedimento as procedimento', 'procedimento.atividade_coletiva_id', 'atividade_coletiva.id')
->LeftJoin('sigtap.procedimento as sigtap_procedimento', 'sigtap_procedimento.id', 'procedimento.procedimento_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->when(request()->ocupacao_id, function($query) {
$query->where('usuario_ocupacao_id', request()->ocupacao_id);
})
->when(request()->equipe_id, function($query) {
$query->where('atividade_coletiva.equipe_id', request()->equipe_id);
})
->when(request()->atividade_tipo, function($query) {
$query->where('atividade_tipo.id', request()->atividade_tipo);
})
->when(request()->publico_alvo_ids, function($query) {
$query->whereIn('cadastro_publico_alvo.id', request()->publico_alvo_ids);
})
->when(request()->saude_tema_ids, function($query) {
$query->whereIn('cadastro_saude_tema.id', request()->saude_tema_ids);
})
->when(request()->pratica_saude_ids, function($query) {
$query->whereIn('cadastro_saude_pratica.id', request()->pratica_saude_ids);
})
->when(request()->procedimento_id, function($query) {
$query->whereIn('sigtap_procedimento.id', request()->procedimento_id);
})
->whereNull('paciente.deleted_at')
->selectRaw("
paciente.id,
cidadao.nome,
cidadao.nome_social,
cidadao.cns
")
->groupBy('paciente.id');
}
public static function index(){
return [
'model' => self::getModelData(),
];
}
public static function getModelData(){
return [
'periodo' => [
'start' => null,
'end' => null,
],
'pseId' => null,
'turnoId' => null,
'unidadeId' => null,
'localAtendimentoId' => null,
'profissionalId' => null,
'ocupacaoId' => null,
'equipeId' => null,
'atividade_id' => null,
'publico_alvo' => PublicoAlvo::orderBy('id')->get(),
'saude_temas' => SaudeTema::orderBy('descricao')->get(),
'saude_pratica' => SaudePratica::orderBy('id')->get(),
];
}
public static function list(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'atividade_coletiva.id',
'atividade_coletiva.data_cadastro',
'unidade.nome_fantasia as nome_unidade',
'cidadao_usuario.nome as nome_profissional',
'ocupacao.codigo as cbo_ocupacao',
'area.descricao as area',
'area.numero_ine as ine',
'atividade_tipo.descricao as atividade',
'atividade_coletiva.total_participantes',
'unidade.nome_fantasia as local_atendimento',
'atividade_coletiva.cnes',
'turno.descricao as descricao_turno',
DB::raw("GROUP_CONCAT(DISTINCT cadastro_publico_alvo.descricao ORDER BY cadastro_publico_alvo.descricao SEPARATOR ', ') as descricao_publico_alvo"),
DB::raw("GROUP_CONCAT(DISTINCT cadastro_saude_tema.descricao ORDER BY cadastro_saude_tema.descricao SEPARATOR ', ') as descricao_saude_tema"),
DB::raw("GROUP_CONCAT(DISTINCT cadastro_saude_pratica.descricao ORDER BY cadastro_saude_pratica.descricao SEPARATOR ', ') as descricao_saude_pratica"),
DB::raw("GROUP_CONCAT(DISTINCT sigtap_procedimento.codigo ORDER BY sigtap_procedimento.codigo SEPARATOR ', ') as codigo_procedimento"),
DB::raw("COUNT(DISTINCT procedimento.id) as count_procedimentos"),
DB::raw("COUNT(DISTINCT participante.paciente_id) as count_pessoas_avaliadas"),
DB::raw("
CONCAT(
CASE
WHEN area.numero_ine IS NOT NULL THEN CONCAT('INE: ', area.numero_ine)
ELSE ''
END,
CASE
WHEN area.descricao IS NOT NULL AND area.numero_ine IS NOT NULL THEN ' - Área: '
WHEN area.descricao IS NOT NULL THEN 'Área: '
ELSE ''
END,
COALESCE(area.descricao, ''),
CASE
WHEN microarea.descricao IS NOT NULL AND (area.numero_ine IS NOT NULL OR area.descricao IS NOT NULL) THEN ' - Microárea: '
WHEN microarea.descricao IS NOT NULL THEN 'Microárea: '
ELSE ''
END,
COALESCE(microarea.descricao, '')
) AS equipe
"),
])
->leftJoin('atencao_basica_cadastro_pse as cadastro_pse', 'cadastro_pse.id', 'atividade_coletiva.pse_id')
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'usuario.cidadao_id')
->join('sigtap.ocupacao as ocupacao', 'ocupacao.id', 'atividade_coletiva.usuario_ocupacao_id')
->join('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->Leftjoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->join('atencao_basica_cadastro_atividade_tipo as atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->join('atencao_basica_cadastro_turno as turno', 'turno.id', 'atividade_coletiva.turno_id')
->Leftjoin('atencao_basica_atividade_coletiva_publico_alvo as publico_alvo', 'publico_alvo.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_publico_alvo as cadastro_publico_alvo', 'cadastro_publico_alvo.id', 'publico_alvo.publico_alvo_id' )
->Leftjoin('atencao_basica_atividade_coletiva_saude_tema as saude_tema', 'saude_tema.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_tema as cadastro_saude_tema', 'cadastro_saude_tema.id', 'saude_tema.saude_tema_id' )
->Leftjoin('atencao_basica_atividade_coletiva_saude_pratica as saude_pratica', 'saude_pratica.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_pratica as cadastro_saude_pratica', 'cadastro_saude_pratica.id', 'saude_pratica.saude_pratica_id')
->LeftJoin('atencao_basica_atividade_coletiva_procedimento as procedimento', 'procedimento.atividade_coletiva_id', 'atividade_coletiva.id')
->leftJoin('sigtap.procedimento as sigtap_procedimento', 'sigtap_procedimento.id', 'procedimento.procedimento_id')
->LeftJoin('atencao_basica_atividade_coletiva_participante as participante', 'participante.atividade_coletiva_id', 'atividade_coletiva.id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('cadastro_pse.id', request()->pse_id);
})
->when(request()->inep, function($query) {
$query->where('atividade_coletiva.inep', request()->inep);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->unidade_id, function($query) {
$query->where('unidade.id', request()->unidade_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('atividade_coletiva.usuario_id', request()->profissional_id);
})
->when(request()->publico_alvo_id, function($query) {
$query->whereIn('cadastro_publico_alvo.id', request()->publico_alvo_id);
})
->when(request()->saude_tema_id, function($query) {
$query->whereIn('cadastro_saude_tema.id', request()->saude_tema_id);
})
->when(request()->pratica_saude_id, function($query) {
$query->whereIn('cadastro_saude_pratica.id', request()->pratica_saude_id);
})
->when(request()->procedimento_id, function($query) {
$query->whereIn('sigtap_procedimento.id', request()->procedimento_id);
})
->when(request()->paciente_id, function($query) {
$query->where('participante.paciente_id', request()->paciente_id);
})
->when(request()->avaliacao_alterada, function($query) {
$query->where('participante.avaliacao_alterada', true);
})
->when(request()->parou_de_fumar, function($query) {
$query->where('participante.parou_de_fumar', true);
})
->when(request()->abandonou_grupo, function($query) {
$query->where('participante.abandonou_grupo', true);
})
->groupBy('atividade_coletiva.id')
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'data' => $item->data_cadastro,
'unidade' => $item->nome_unidade,
'profissional' => $item->nome_profissional,
'cbo' => $item->cbo_ocupacao,
'equipe' => $item->equipe,
'atividade' => $item->atividade,
'total_participantes' => $item->total_participantes,
'total_pessoas_avaliadas' => self::getPessoasAvaliadas($item->id),
'local_atendimento' => $item->local_atendimento,
'cnes' => $item->cnes,
'turno' => $item->descricao_turno,
'publico_alvo' => $item->descricao_publico_alvo,
'tema_saude' => $item->descricao_saude_tema,
'pratica_saude' => $item->descricao_saude_pratica,
'procedimentos_vinculados' => $item->codigo_procedimento,
]),
'totalizadores' => [
'total_atividades' => $itens->count(),
'total_procedimentos' => $itens->sum('count_procedimentos'),
'total_pessoas_avaliadas' => $itens->sum('count_pessoas_avaliadas'),
],
];
}
public static function getPses(){
$params = self::getParams();
$itens = DB::table('atencao_basica_cadastro_pse')
->select([
'atencao_basica_cadastro_pse.id',
'atencao_basica_cadastro_pse.descricao'
])
->distinct()
->Leftjoin('atencao_basica_atividade_coletiva', 'atencao_basica_atividade_coletiva.pse_id', 'atencao_basica_cadastro_pse.id')
->whereBetween('atencao_basica_atividade_coletiva.data_cadastro', $params->periodo)
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'descricao' => $item->descricao,
])
];
}
public static function getTurnos(){
$params = self::getParams();
$itens = DB::table('atencao_basica_cadastro_turno')
->select([
'atencao_basica_cadastro_turno.id',
'atencao_basica_cadastro_turno.descricao'
])
->distinct()
->join('atencao_basica_atividade_coletiva', 'atencao_basica_atividade_coletiva.turno_id', 'atencao_basica_cadastro_turno.id')
->whereBetween('atencao_basica_atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atencao_basica_atividade_coletiva.pse_id', request()->pse_id);
})
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'descricao' => $item->descricao,
])
];
}
public static function getUnidades(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select(['unidade.id', 'unidade.nome_fantasia'])
->distinct()
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'nomeFantasia' => $item->nome_fantasia,
])
];
}
public static function getLocaisAtendimentos(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'unidade.id',
'unidade.nome_fantasia'
])
->distinct()
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'equipe.infraestrutura_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->unidade_id, function($query) {
$query->where('equipe.unidade_id', request()->unidade_id);
})
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'nomeFantasia' => $item->nome_fantasia,
])
];
}
public static function getProfissionais(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'usuario.id',
'cidadao_usuario.nome'
])
->distinct()
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_infraestrutura as infraestrutura_unidade', 'infraestrutura_unidade.id', 'equipe.infraestrutura_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura_unidade.unidade_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'usuario.cidadao_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->unidade_id, function($query) {
$query->where('infraestrutura_unidade.unidade_id', request()->unidade_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('infraestrutura_unidade.unidade_id', request()->local_atendimento_id);
})
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'nome' => $item->nome,
])
];
}
public static function getOcupacoes(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'ocupacao.id',
'ocupacao.nome'
])
->distinct()
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_cidadao as cidadao_usuario', 'cidadao_usuario.id', 'usuario.cidadao_id')
->join('sigtap.ocupacao as ocupacao', 'ocupacao.id', 'atividade_coletiva.usuario_ocupacao_id' )
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'nome' => $item->nome,
])
];
}
public static function getEquipes(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'equipe.id AS id',
DB::raw("
CONCAT(
CASE
WHEN area.numero_ine IS NOT NULL THEN CONCAT('INE: ', area.numero_ine)
ELSE ''
END,
CASE
WHEN area.descricao IS NOT NULL AND area.numero_ine IS NOT NULL THEN ' - Área: '
WHEN area.descricao IS NOT NULL THEN 'Área: '
ELSE ''
END,
COALESCE(area.descricao, ''),
CASE
WHEN microarea.descricao IS NOT NULL AND (area.numero_ine IS NOT NULL OR area.descricao IS NOT NULL) THEN ' - Microárea: '
WHEN microarea.descricao IS NOT NULL THEN 'Microárea: '
ELSE ''
END,
COALESCE(microarea.descricao, '')
) AS descricao
"),
'microarea.id as microarea_id'
])
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->leftJoin('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->when(request()->ocupacao_id, function($query) {
$query->where('usuario_ocupacao_id', request()->ocupacao_id);
})
->groupBy('equipe.id')
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'descricao' => $item->descricao,
])
];
}
public static function getAtividades(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'atividade_tipo.id',
'atividade_tipo.descricao'
])
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('atencao_basica_cadastro_atividade_tipo as atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->join('atencao_basica_cadastro_turno as turno', 'turno.id', 'atividade_coletiva.turno_id')
->leftJoin('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->when(request()->ocupacao_id, function($query) {
$query->where('usuario_ocupacao_id', request()->ocupacao_id);
})
->when(request()->equipe_id, function($query) {
$query->where('atividade_coletiva.equipe_id', request()->equipe_id);
})
->groupBy('atividade_tipo.id',)
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'descricao' => $item->descricao,
])
];
}
public static function getPublicosAlvo(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'cadastro_publico_alvo.id',
'cadastro_publico_alvo.descricao'
])
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('atencao_basica_cadastro_atividade_tipo as atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->join('atencao_basica_cadastro_turno as turno', 'turno.id', 'atividade_coletiva.turno_id')
->leftJoin('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->Leftjoin('atencao_basica_atividade_coletiva_publico_alvo as publico_alvo', 'publico_alvo.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_publico_alvo as cadastro_publico_alvo', 'cadastro_publico_alvo.id', 'publico_alvo.publico_alvo_id' )
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->when(request()->ocupacao_id, function($query) {
$query->where('usuario_ocupacao_id', request()->ocupacao_id);
})
->when(request()->equipe_id, function($query) {
$query->where('atividade_coletiva.equipe_id', request()->equipe_id);
})
->when(request()->atividade_tipo, function($query) {
$query->where('atividade_tipo.id', request()->atividade_tipo);
})
->groupBy('cadastro_publico_alvo.id',)
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'descricao' => $item->descricao,
])
];
}
public static function getTemasSaude(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'cadastro_saude_tema.id',
'cadastro_saude_tema.descricao'
])
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('atencao_basica_cadastro_atividade_tipo as atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->join('atencao_basica_cadastro_turno as turno', 'turno.id', 'atividade_coletiva.turno_id')
->leftJoin('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->Leftjoin('atencao_basica_atividade_coletiva_publico_alvo as publico_alvo', 'publico_alvo.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_publico_alvo as cadastro_publico_alvo', 'cadastro_publico_alvo.id', 'publico_alvo.publico_alvo_id')
->Leftjoin('atencao_basica_atividade_coletiva_saude_tema as saude_tema', 'saude_tema.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_tema as cadastro_saude_tema', 'cadastro_saude_tema.id', 'saude_tema.saude_tema_id' )
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->when(request()->ocupacao_id, function($query) {
$query->where('usuario_ocupacao_id', request()->ocupacao_id);
})
->when(request()->equipe_id, function($query) {
$query->where('atividade_coletiva.equipe_id', request()->equipe_id);
})
->when(request()->atividade_tipo, function($query) {
$query->where('atividade_tipo.id', request()->atividade_tipo);
})
->when(request()->publico_alvo_ids, function($query) {
$query->whereIn('cadastro_publico_alvo.id', request()->publico_alvo_ids);
})
->groupBy('cadastro_saude_tema.id')
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'descricao' => $item->descricao,
])
];
}
public static function getPraticasSaude(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'cadastro_saude_pratica.id',
'cadastro_saude_pratica.descricao'
])
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('atencao_basica_cadastro_atividade_tipo as atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->join('atencao_basica_cadastro_turno as turno', 'turno.id', 'atividade_coletiva.turno_id')
->leftJoin('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->Leftjoin('atencao_basica_atividade_coletiva_publico_alvo as publico_alvo', 'publico_alvo.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_publico_alvo as cadastro_publico_alvo', 'cadastro_publico_alvo.id', 'publico_alvo.publico_alvo_id')
->Leftjoin('atencao_basica_atividade_coletiva_saude_tema as saude_tema', 'saude_tema.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_tema as cadastro_saude_tema', 'cadastro_saude_tema.id', 'saude_tema.saude_tema_id')
->Leftjoin('atencao_basica_atividade_coletiva_saude_pratica as saude_pratica', 'saude_pratica.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_pratica as cadastro_saude_pratica', 'cadastro_saude_pratica.id', 'saude_pratica.saude_pratica_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->when(request()->ocupacao_id, function($query) {
$query->where('usuario_ocupacao_id', request()->ocupacao_id);
})
->when(request()->equipe_id, function($query) {
$query->where('atividade_coletiva.equipe_id', request()->equipe_id);
})
->when(request()->atividade_tipo, function($query) {
$query->where('atividade_tipo.id', request()->atividade_tipo);
})
->when(request()->publico_alvo_ids, function($query) {
$query->whereIn('cadastro_publico_alvo.id', request()->publico_alvo_ids);
})
->when(request()->saude_tema_ids, function($query) {
$query->whereIn('cadastro_saude_tema.id', request()->saude_tema_ids);
})
->groupBy('cadastro_saude_pratica.id')
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'descricao' => $item->descricao,
])
];
}
public static function getProcedimentos(){
$params = self::getParams();
$itens = DB::table('atencao_basica_atividade_coletiva as atividade_coletiva')
->select([
'atividade_coletiva.id as atividade_coletiva_id',
'sigtap_procedimento.id',
'sigtap_procedimento.nome'
])
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atividade_coletiva.equipe_id')
->join('cadastro_usuario as usuario', 'usuario.id', 'atividade_coletiva.usuario_id')
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
->join('atencao_basica_cadastro_atividade_tipo as atividade_tipo', 'atividade_tipo.id', 'atividade_coletiva.atividade_tipo_id')
->join('atencao_basica_cadastro_turno as turno', 'turno.id', 'atividade_coletiva.turno_id')
->leftJoin('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id')
->Leftjoin('atencao_basica_atividade_coletiva_publico_alvo as publico_alvo', 'publico_alvo.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_publico_alvo as cadastro_publico_alvo', 'cadastro_publico_alvo.id', 'publico_alvo.publico_alvo_id')
->Leftjoin('atencao_basica_atividade_coletiva_saude_tema as saude_tema', 'saude_tema.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_tema as cadastro_saude_tema', 'cadastro_saude_tema.id', 'saude_tema.saude_tema_id')
->Leftjoin('atencao_basica_atividade_coletiva_saude_pratica as saude_pratica', 'saude_pratica.atividade_coletiva_id', 'atividade_coletiva.id')
->Leftjoin('atencao_basica_cadastro_saude_pratica as cadastro_saude_pratica', 'cadastro_saude_pratica.id', 'saude_pratica.saude_pratica_id')
->LeftJoin('atencao_basica_atividade_coletiva_procedimento as procedimento', 'procedimento.atividade_coletiva_id', 'atividade_coletiva.id')
->leftJoin('sigtap.procedimento as sigtap_procedimento', 'sigtap_procedimento.id', 'procedimento.procedimento_id')
->whereBetween('atividade_coletiva.data_cadastro', $params->periodo)
->whereNotNull('procedimento.id')
->when(request()->pse_id, function($query) {
$query->where('atividade_coletiva.pse_id', request()->pse_id);
})
->when(request()->turno_id, function($query) {
$query->where('atividade_coletiva.turno_id', request()->turno_id);
})
->when(request()->local_atendimento_id, function($query) {
$query->where('unidade.id', request()->local_atendimento_id);
})
->when(request()->profissional_id, function($query) {
$query->where('usuario.id', request()->profissional_id);
})
->when(request()->ocupacao_id, function($query) {
$query->where('usuario_ocupacao_id', request()->ocupacao_id);
})
->when(request()->equipe_id, function($query) {
$query->where('atividade_coletiva.equipe_id', request()->equipe_id);
})
->when(request()->atividade_tipo, function($query) {
$query->where('atividade_tipo.id', request()->atividade_tipo);
})
->when(request()->publico_alvo_ids, function($query) {
$query->whereIn('cadastro_publico_alvo.id', request()->publico_alvo_ids);
})
->when(request()->saude_tema_ids, function($query) {
$query->whereIn('cadastro_saude_tema.id', request()->saude_tema_ids);
})
->when(request()->pratica_saude_ids, function($query) {
$query->whereIn('cadastro_saude_pratica.id', request()->pratica_saude_ids);
})
->groupBy('sigtap_procedimento.id')
->get();
return (object) [
'itens' => $itens->map(fn ($item) => (object) [
'id' => $item->id,
'nome' => $item->nome,
'atividade_coletiva_id' => $item->atividade_coletiva_id
])
];
}
public static function getParams(){
return (object) [
'periodo' => [
'start' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['data_inicial'])->setTime(0, 0, 0),
'end' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['data_final'])->setTime(23, 59, 59)
],
];
}
public static function getPessoasAvaliadas($atividade_coletiva_id){
return DB::table('atencao_basica_atividade_coletiva_participante')
->where('atividade_coletiva_id', $atividade_coletiva_id)
->count('paciente_id');
}
}
?>