4170 lines
274 KiB
PHP
4170 lines
274 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica;
|
|
|
|
use App\Enums\Ambulatorio\ProblemaCondicaoSituacao;
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\ExameSolicitadoAvaliado;
|
|
use App\Enums\AtencaoBasica\CadastroIndividual\SaidaCidadao;
|
|
use App\Enums\AtencaoBasica\Parametrizacao\AreaTipo;
|
|
use App\Enums\AtencaoBasica\TesteRapido;
|
|
use App\Enums\Cadastro\VacinaCodigo;
|
|
use App\Enums\Sigtap\Ocupacao;
|
|
use App\Enums\Sigtap\Procedimento;
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada;
|
|
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
|
use App\Models\Cadastro\SujeitoAtencao\Sexo;
|
|
use App\Services\Geral\AgeService;
|
|
use App\Services\Service;
|
|
use App\Utils\DataUtil;
|
|
use App\Utils\MaskUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
|
|
class RelatorioCuidadoGestacaoPuerperioService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
$params = self::getParams();
|
|
|
|
$resultadoEquipes = self::getResultadoPorEquipes($params);
|
|
$equipes = $resultadoEquipes->equipes;
|
|
$totalizadores = $resultadoEquipes->totalizadores;
|
|
$pacientes = $params->busca_ativa ? self::getResultadoPorPacientes($params) : collect();
|
|
|
|
return (object) [
|
|
'equipes' => $equipes,
|
|
'pacientes' => $pacientes,
|
|
'totalizadores' => $totalizadores,
|
|
];
|
|
}
|
|
|
|
private static function getResultadoPorEquipes($params)
|
|
{
|
|
$equipesBuilder = DB::table('cadastro_paciente AS paciente')
|
|
->join('atencao_basica_cadastro_individual AS cadastro_individual', 'cadastro_individual.paciente_id', 'paciente.id')
|
|
->join('atencao_basica_atendimento_individual AS atendimento_individual', fn ($q) => $q
|
|
->on('atendimento_individual.paciente_id', 'paciente.id')
|
|
->where('atendimento_individual.id', fn ($q) => $q
|
|
->select('atendimento_individual2.id')
|
|
->from('atencao_basica_atendimento_individual AS atendimento_individual2')
|
|
->whereColumn('atendimento_individual2.paciente_id', 'paciente.id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_problema_condicao AS problema_condicao')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->whereColumn('problema_condicao.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->where('problema_condicao.situacao_id', ProblemaCondicaoSituacao::ATIVO)
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('ciap.codigo', self::getCiapsGestacao())
|
|
->orWhereIn('cid.codigo', self::getCidsGestacao())
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_condicao_avaliada AS atendimento_individual_condicao_avaliada')
|
|
->whereColumn('atendimento_individual_condicao_avaliada.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->whereIn('atendimento_individual_condicao_avaliada.condicao_avaliada_id',[
|
|
CondicaoAvaliada::PRE_NATAL,
|
|
CondicaoAvaliada::PUERICULTURA,
|
|
CondicaoAvaliada::PUERPERIO_ATE_42_DIAS
|
|
])
|
|
)
|
|
)
|
|
->whereNotNull('atendimento_individual2.data_ultima_menstruacao')
|
|
->where('atendimento_individual2.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->orderBy('atendimento_individual2.data_usuario_responsavel')
|
|
->limit(1)
|
|
)
|
|
)
|
|
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('atencao_basica_parametrizacao_equipe AS equipe', 'equipe.id', 'cadastro_individual.equipe_id')
|
|
->join('atencao_basica_parametrizacao_area AS area', 'area.id', 'equipe.area_id')
|
|
->join('cadastro_unidade AS unidade', 'unidade.id', 'equipe.unidade_id')
|
|
->join(
|
|
'atencao_basica_atendimento_individual_problema_condicao AS problema_condicao',
|
|
'problema_condicao.atendimento_individual_id',
|
|
'atendimento_individual.id'
|
|
)
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->leftJoin('atencao_basica_parametrizacao_microarea AS microarea', 'microarea.id', 'equipe.microarea_id')
|
|
->leftJoin('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar', 'cadastro_domiciliar.domicilio_id', 'cidadao.domicilio_id')
|
|
->leftJoin('cadastro_obito AS obito', fn ($j) => $j
|
|
->on('obito.cidadao_id', 'cidadao.id')
|
|
->whereNull('obito.deleted_at')
|
|
)
|
|
->select([
|
|
'unidade.nome_fantasia AS unidade_nome_fantasia',
|
|
'microarea.id AS microarea_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 equipe_descricao"),
|
|
DB::raw("COUNT(DISTINCT (atendimento_individual.paciente_id)) AS denominador"),
|
|
DB::raw("GROUP_CONCAT(DISTINCT(atendimento_individual.paciente_id) SEPARATOR '#') AS pacientes"),
|
|
DB::raw("SUM(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 84 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PRE_NATAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
), 1, 0)
|
|
) AS quantidade_boa_pratica_a"),
|
|
DB::raw("SUM(
|
|
IF((
|
|
SELECT COUNT(DISTINCT (ai.id))
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PRE_NATAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
) >= 7, 1, 0)
|
|
) AS quantidade_boa_pratica_b"),
|
|
DB::raw("SUM(
|
|
IF((
|
|
(
|
|
SELECT COUNT(DISTINCT (ai.id))
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
ai.pressao_arterial IS NOT NULL
|
|
OR p.codigo = '" . Procedimento::AFERICAO_PRESSAO_ARTERIAL . "'
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(DISTINCT (pa.id))
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
pa.afericao_pa IS NOT NULL
|
|
OR proc.codigo = '" . Procedimento::AFERICAO_PRESSAO_ARTERIAL . "'
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(vd.id)
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND vd.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND vd.afericao_pa IS NOT NULL
|
|
)
|
|
) >= 7, 1, 0)
|
|
) AS quantidade_boa_pratica_c"),
|
|
DB::raw("SUM(
|
|
IF((
|
|
(
|
|
SELECT COUNT(ai.id)
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(ai.peso IS NOT NULL AND ai.altura IS NOT NULL)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual_procedimento AS aip
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE aip.atendimento_individual_id = ai.id
|
|
AND p.codigo = '" . Procedimento::AVALIACAO_ANTROPOMETRICA . "'
|
|
)
|
|
OR (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual_procedimento AS aip
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE aip.atendimento_individual_id = ai.id
|
|
AND p.codigo = '" . Procedimento::MEDICAO_DE_PESO . "'
|
|
)
|
|
AND EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual_procedimento AS aip
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE aip.atendimento_individual_id = ai.id
|
|
AND p.codigo = '" . Procedimento::MEDICAO_DE_ALTURA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(pa.id)
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(pa.peso IS NOT NULL AND pa.altura IS NOT NULL)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento_procedimento AS pap
|
|
INNER JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pap.procedimento_atendimento_id = pa.id
|
|
AND proc.codigo = '" . Procedimento::AVALIACAO_ANTROPOMETRICA . "'
|
|
)
|
|
OR (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento_procedimento AS pap
|
|
INNER JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pap.procedimento_atendimento_id = pa.id
|
|
AND proc.codigo = '" . Procedimento::MEDICAO_DE_PESO . "'
|
|
)
|
|
AND EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento_procedimento AS pap
|
|
INNER JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pap.procedimento_atendimento_id = pa.id
|
|
AND proc.codigo = '" . Procedimento::MEDICAO_DE_ALTURA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(vd.id)
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND vd.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND vd.peso IS NOT NULL
|
|
AND vd.altura IS NOT NULL
|
|
)
|
|
) >= 7, 1, 0)
|
|
) AS quantidade_boa_pratica_d"),
|
|
DB::raw("SUM(
|
|
IF((
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND vd.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND vd.data_usuario_responsavel >= (
|
|
SELECT ai.data_usuario_responsavel
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PRE_NATAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
GROUP BY ai.id
|
|
ORDER BY ai.data_usuario_responsavel
|
|
LIMIT 1
|
|
)
|
|
AND (
|
|
o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
) >= 3, 1, 0)
|
|
) AS quantidade_boa_pratica_e"),
|
|
DB::raw("SUM(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM imunizacao_registro_aplicacao ra
|
|
INNER JOIN imunizacao_entrada_vacina ev ON ev.id = ra.entrada_vacina_id
|
|
INNER JOIN cadastro_vacina v ON v.id = ev.vacina_id
|
|
WHERE ra.paciente_id = atendimento_individual.paciente_id
|
|
AND ra.data_aplicacao >= atendimento_individual.data_ultima_menstruacao
|
|
AND ra.data_aplicacao <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ra.data_aplicacao <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ra.data_aplicacao > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 133 DAY)
|
|
AND v.codigo = " . VacinaCodigo::D_TPA_ADULTO . "
|
|
) OR EXISTS(
|
|
SELECT 1
|
|
FROM imunizacao_registro_atualizacao ra
|
|
INNER JOIN cadastro_vacina v ON v.id = ra.vacina_id
|
|
WHERE ra.paciente_id = atendimento_individual.paciente_id
|
|
AND ra.data_atualizacao >= atendimento_individual.data_ultima_menstruacao
|
|
AND ra.data_atualizacao <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ra.data_atualizacao <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ra.data_atualizacao > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 133 DAY)
|
|
AND v.codigo = " . VacinaCodigo::D_TPA_ADULTO . "
|
|
), 1, 0)
|
|
) AS quantidade_boa_pratica_f"),
|
|
DB::raw("SUM(
|
|
IF((
|
|
(
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_DE_SIFILIS . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::SIFILIS . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_PARA_HIV . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HIV . "
|
|
OR proc.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::HEPATITE_B . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HBV . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DO_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG_EM_GESTANTE . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_IG_G_E_IG_M_CONTRA_O_ANTIGENO_CENTRAL_DO_VIRUS_DA_HEPATITE_B_ANTI_HBC_TOTAL . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG . "',
|
|
'" . Procedimento::IDENTIFICACAO_DO_VIRUS_DA_HEPATITE_B_POR_PCR_QUANTITATIVO . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HEPATITE_B . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HBV . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DO_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG_EM_GESTANTE . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_IG_G_E_IG_M_CONTRA_O_ANTIGENO_CENTRAL_DO_VIRUS_DA_HEPATITE_B_ANTI_HBC_TOTAL . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG . "',
|
|
'" . Procedimento::IDENTIFICACAO_DO_VIRUS_DA_HEPATITE_B_POR_PCR_QUANTITATIVO . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::HEPATITE_C . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HEPATITE_C . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_EM_GESTANTE . "',
|
|
'" . Procedimento::DETECCAO_DE_RNA_DO_VIRUS_DA_HEPATITE_C_QUALITATIVO . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_ANTI_HCV . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HEPATITE_C . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HEPATITE_C . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_EM_GESTANTE . "',
|
|
'" . Procedimento::DETECCAO_DE_RNA_DO_VIRUS_DA_HEPATITE_C_QUALITATIVO . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_ANTI_HCV . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
), 1, 0)
|
|
) AS quantidade_boa_pratica_g"),
|
|
DB::raw("SUM(
|
|
IF((
|
|
(
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_DE_SIFILIS . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::SIFILIS . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_PARA_HIV . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HIV . "
|
|
OR proc.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
), 1, 0)
|
|
) AS quantidade_boa_pratica_h"),
|
|
DB::raw("SUM(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel > COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
)
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PUERPERAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
), 1, 0)
|
|
) AS quantidade_boa_pratica_i"),
|
|
DB::raw("SUM(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel > COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
)
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
), 1, 0)
|
|
) AS quantidade_boa_pratica_j"),
|
|
DB::raw("SUM(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_odontologico AS ao
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ao.ocupacao_id
|
|
WHERE ao.paciente_id = atendimento_individual.paciente_id
|
|
AND ao.data_atendimento >= atendimento_individual.data_ultima_menstruacao
|
|
AND ao.data_atendimento <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ao.data_atendimento <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '3224%'
|
|
)
|
|
), 1, 0)
|
|
) AS quantidade_boa_pratica_k"),
|
|
])
|
|
->whereIn('area.tipo_id', self::getTiposEquipes())
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->whereNotNull('atendimento_individual.data_ultima_menstruacao')
|
|
->where('atendimento_individual.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) >= ?", [$params->periodo['start']->format('Y-m-d')])
|
|
->where(fn ($q) => $q
|
|
->whereNull('cadastro_individual.saida_cidadao_id')
|
|
->orWhere(fn ($q) => $q
|
|
->where('cadastro_individual.saida_cidadao_id', SaidaCidadao::MUDANCA_DE_TERRITORIO)
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < cadastro_individual.motivo_saida_data")
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->whereNull('obito.obito_em')
|
|
->orWhereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < obito.obito_em")
|
|
)
|
|
->whereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual AS ai')
|
|
->join('atencao_basica_atendimento_individual_problema_condicao AS pc', 'pc.atendimento_individual_id', 'ai.id')
|
|
->leftJoin('geral_ciap AS gc', 'gc.id', 'pc.ciap_id')
|
|
->leftJoin('sigtap.cid AS sc', 'sc.id', 'pc.cid_id')
|
|
->whereColumn('ai.paciente_id', 'atendimento_individual.paciente_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('gc.codigo', self::getCiapsEncerramGestacao())
|
|
->orWhereIn('sc.codigo', self::getCidsEncerramGestacao())
|
|
)
|
|
->whereColumn('ai.data_usuario_responsavel', '>=', 'atendimento_individual.data_ultima_menstruacao')
|
|
->whereRaw("ai.data_usuario_responsavel <= (COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)))")
|
|
)
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('equipe.unidade_id', $id))
|
|
->when($params->equipe_id, fn ($q, $id) => $q->where('cadastro_individual.equipe_id', $id))
|
|
->when($params->sexo_id, fn ($q, $id) => $q->where('cidadao.sexo_id', $id))
|
|
->when(!is_null($params->idade_minima), fn ($q) => $q
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, CURRENT_DATE) >= ?", [$params->idade_minima]))
|
|
->when(!is_null($params->idade_maxima), fn ($q) => $q
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, CURRENT_DATE) <= ?", [$params->idade_maxima]))
|
|
->when($params->paciente_id, fn ($q, $id) => $q->where('atendimento_individual.paciente_id', $id))
|
|
->when(!$params->fora_area, fn ($q) => $q
|
|
->whereNotNull('cadastro_domiciliar.id')
|
|
->where(fn ($sub) => $sub
|
|
->whereNull('cadastro_domiciliar.fora_area')
|
|
->orWhere('cadastro_domiciliar.fora_area', 0)
|
|
))
|
|
->groupBy(
|
|
'unidade.nome_fantasia',
|
|
'microarea.id',
|
|
'equipe_descricao'
|
|
);
|
|
|
|
self::setOrderByEquipe($equipesBuilder);
|
|
|
|
$equipes = $equipesBuilder->get();
|
|
|
|
$pacientesIds = [];
|
|
$microareasIds = [];
|
|
|
|
$equipes->each(function ($equipe) use (&$pacientesIds, &$microareasIds, $params) {
|
|
$equipe->numerador = 0;
|
|
$pontuacao = 0;
|
|
|
|
if (in_array('A', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_a * 10;
|
|
$equipe->boa_pratica_a = self::round(($equipe->quantidade_boa_pratica_a / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_a > 0) {
|
|
$pontuacao += 10;
|
|
}
|
|
}
|
|
|
|
if (in_array('B', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_b * 9;
|
|
$equipe->boa_pratica_b = self::round(($equipe->quantidade_boa_pratica_b / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_b > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('C', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_c * 9;
|
|
$equipe->boa_pratica_c = self::round(($equipe->quantidade_boa_pratica_c / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_c > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('D', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_d * 9;
|
|
$equipe->boa_pratica_d = self::round(($equipe->quantidade_boa_pratica_d / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_d > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('E', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_e * 9;
|
|
$equipe->boa_pratica_e = self::round(($equipe->quantidade_boa_pratica_e / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_e > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('F', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_f * 9;
|
|
$equipe->boa_pratica_f = self::round(($equipe->quantidade_boa_pratica_f / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_f > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('G', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_g * 9;
|
|
$equipe->boa_pratica_g = self::round(($equipe->quantidade_boa_pratica_g / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_g > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('H', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_h * 9;
|
|
$equipe->boa_pratica_h = self::round(($equipe->quantidade_boa_pratica_h / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_h > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('I', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_i * 9;
|
|
$equipe->boa_pratica_i = self::round(($equipe->quantidade_boa_pratica_i / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_i > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('J', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_j * 9;
|
|
$equipe->boa_pratica_j = self::round(($equipe->quantidade_boa_pratica_j / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_j > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
if (in_array('K', $params->boas_praticas)) {
|
|
$equipe->numerador += $equipe->quantidade_boa_pratica_k * 9;
|
|
$equipe->boa_pratica_k = self::round(($equipe->quantidade_boa_pratica_k / $equipe->denominador) * 100);
|
|
|
|
if ($equipe->quantidade_boa_pratica_k > 0) {
|
|
$pontuacao += 9;
|
|
}
|
|
}
|
|
|
|
$equipe->resultado = self::round(($equipe->numerador / ($equipe->denominador * 100)) * 100);
|
|
|
|
$classificacao = self::getClassificacao($pontuacao);
|
|
$equipe->classificacao_resultado_ordenacao = $classificacao['ordenacao'];
|
|
$equipe->classificacao_resultado = $classificacao['texto'];
|
|
|
|
$pacientesIds = array_merge($pacientesIds, explode('#', $equipe->pacientes));
|
|
|
|
if (!is_null($equipe->microarea_id)) {
|
|
$microareasIds[] = $equipe->microarea_id;
|
|
}
|
|
|
|
unset($equipe->pacientes, $equipe->microarea_id);
|
|
});
|
|
|
|
$columnsSortBy = collect([
|
|
'numerador',
|
|
'resultado',
|
|
'classificacao_resultado',
|
|
'boa_pratica_a',
|
|
'boa_pratica_b',
|
|
'boa_pratica_c',
|
|
'boa_pratica_d',
|
|
'boa_pratica_e',
|
|
'boa_pratica_f',
|
|
'boa_pratica_g',
|
|
'boa_pratica_h',
|
|
'boa_pratica_i',
|
|
'boa_pratica_j',
|
|
'boa_pratica_k',
|
|
]);
|
|
|
|
if ($columnsSortBy->contains(request()->equipe_sort_by)) {
|
|
$sortBy = request()->equipe_sort_by === 'classificacao_resultado'
|
|
? 'classificacao_resultado_ordenacao'
|
|
: request()->equipe_sort_by;
|
|
|
|
$equipes = (DataUtil::getBooleanValueFromStringBoolean(request()->equipe_sort_desc)
|
|
? $equipes->sortByDesc($sortBy)
|
|
: $equipes->sortBy($sortBy)
|
|
)->values();
|
|
}
|
|
|
|
$denominador = $totalPacientes = collect($pacientesIds)->unique()->count();
|
|
$totalEquipes = $equipes->count();
|
|
$totalMicroareas = collect($microareasIds)->unique()->count();
|
|
$numerador = $equipes->sum('numerador');
|
|
|
|
$resultado = 0;
|
|
$boaPraticaA = 0;
|
|
$boaPraticaB = 0;
|
|
$boaPraticaC = 0;
|
|
$boaPraticaD = 0;
|
|
$boaPraticaE = 0;
|
|
$boaPraticaF = 0;
|
|
$boaPraticaG = 0;
|
|
$boaPraticaH = 0;
|
|
$boaPraticaI = 0;
|
|
$boaPraticaJ = 0;
|
|
$boaPraticaK = 0;
|
|
|
|
if ($denominador > 0) {
|
|
$resultado = self::round(($numerador / ($denominador * 100)) * 100);
|
|
|
|
if (in_array('A', $params->boas_praticas)) {
|
|
$boaPraticaA = self::round(($equipes->sum('quantidade_boa_pratica_a') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('B', $params->boas_praticas)) {
|
|
$boaPraticaB = self::round(($equipes->sum('quantidade_boa_pratica_b') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('C', $params->boas_praticas)) {
|
|
$boaPraticaC = self::round(($equipes->sum('quantidade_boa_pratica_c') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('D', $params->boas_praticas)) {
|
|
$boaPraticaD = self::round(($equipes->sum('quantidade_boa_pratica_d') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('E', $params->boas_praticas)) {
|
|
$boaPraticaE = self::round(($equipes->sum('quantidade_boa_pratica_e') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('F', $params->boas_praticas)) {
|
|
$boaPraticaF = self::round(($equipes->sum('quantidade_boa_pratica_f') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('G', $params->boas_praticas)) {
|
|
$boaPraticaG = self::round(($equipes->sum('quantidade_boa_pratica_g') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('H', $params->boas_praticas)) {
|
|
$boaPraticaH = self::round(($equipes->sum('quantidade_boa_pratica_h') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('I', $params->boas_praticas)) {
|
|
$boaPraticaI = self::round(($equipes->sum('quantidade_boa_pratica_i') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('J', $params->boas_praticas)) {
|
|
$boaPraticaJ = self::round(($equipes->sum('quantidade_boa_pratica_j') / $denominador) * 100);
|
|
}
|
|
|
|
if (in_array('K', $params->boas_praticas)) {
|
|
$boaPraticaK = self::round(($equipes->sum('quantidade_boa_pratica_k') / $denominador) * 100);
|
|
}
|
|
}
|
|
|
|
return (object) [
|
|
'equipes' => $equipes,
|
|
'totalizadores' => (object) [
|
|
'total_pacientes' => $totalPacientes,
|
|
'total_equipes' => $totalEquipes,
|
|
'total_microareas' => $totalMicroareas,
|
|
'denominador' => $denominador,
|
|
'numerador' => $numerador,
|
|
'resultado' => $resultado,
|
|
'boa_pratica_a' => $boaPraticaA,
|
|
'boa_pratica_b' => $boaPraticaB,
|
|
'boa_pratica_c' => $boaPraticaC,
|
|
'boa_pratica_d' => $boaPraticaD,
|
|
'boa_pratica_e' => $boaPraticaE,
|
|
'boa_pratica_f' => $boaPraticaF,
|
|
'boa_pratica_g' => $boaPraticaG,
|
|
'boa_pratica_h' => $boaPraticaH,
|
|
'boa_pratica_i' => $boaPraticaI,
|
|
'boa_pratica_j' => $boaPraticaJ,
|
|
'boa_pratica_k' => $boaPraticaK,
|
|
],
|
|
];
|
|
}
|
|
|
|
private static function getClassificacao($pontuacao)
|
|
{
|
|
if ($pontuacao > 75 && $pontuacao <= 100) {
|
|
return ['ordenacao' => 'otimo', 'texto' => 'Ótimo'];
|
|
}
|
|
else if ($pontuacao > 50 && $pontuacao <= 75) {
|
|
return ['ordenacao' => 'bom', 'texto' => 'Bom'];
|
|
}
|
|
else if ($pontuacao > 25 && $pontuacao <= 50) {
|
|
return ['ordenacao' => 'suficiente', 'texto' => 'Suficiente'];
|
|
}
|
|
|
|
return ['ordenacao' => 'regular', 'texto' => 'Regular'];
|
|
}
|
|
|
|
private static function setOrderByEquipe($builder)
|
|
{
|
|
$columns = [
|
|
'unidade_nome_fantasia' => 'unidade.nome_fantasia',
|
|
'equipe_descricao' => 'equipe_descricao',
|
|
'denominador' => 'denominador',
|
|
];
|
|
|
|
if (is_null(request()->equipe_sort_by) || !isset($columns[request()->equipe_sort_by])) {
|
|
$builder->orderByRaw(join(', ', $columns));
|
|
return;
|
|
}
|
|
|
|
$column = $columns[request()->equipe_sort_by];
|
|
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->equipe_sort_desc) ? 'DESC' : 'ASC';
|
|
|
|
unset($columns[request()->equipe_sort_by]);
|
|
|
|
$builder->orderByRaw("{$column} {$direction}, " . join(', ', $columns));
|
|
}
|
|
|
|
private static function getResultadoPorPacientes($params)
|
|
{
|
|
$pacientesBuilder = DB::table('cadastro_paciente as paciente')
|
|
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('atencao_basica_cadastro_individual AS cadastro_individual', 'cadastro_individual.paciente_id', 'paciente.id')
|
|
->join('atencao_basica_atendimento_individual AS atendimento_individual', fn ($q) => $q
|
|
->on('atendimento_individual.paciente_id', 'paciente.id')
|
|
->where('atendimento_individual.id', fn ($q) => $q
|
|
->select('atendimento_individual2.id')
|
|
->from('atencao_basica_atendimento_individual AS atendimento_individual2')
|
|
->whereColumn('atendimento_individual2.paciente_id', 'paciente.id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_problema_condicao AS problema_condicao')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->whereColumn('problema_condicao.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->where('problema_condicao.situacao_id', ProblemaCondicaoSituacao::ATIVO)
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('ciap.codigo', self::getCiapsGestacao())
|
|
->orWhereIn('cid.codigo', self::getCidsGestacao())
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_condicao_avaliada AS atendimento_individual_condicao_avaliada')
|
|
->whereColumn('atendimento_individual_condicao_avaliada.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->whereIn('atendimento_individual_condicao_avaliada.condicao_avaliada_id',[
|
|
CondicaoAvaliada::PRE_NATAL,
|
|
CondicaoAvaliada::PUERICULTURA,
|
|
CondicaoAvaliada::PUERPERIO_ATE_42_DIAS
|
|
])
|
|
)
|
|
)
|
|
->whereNotNull('atendimento_individual2.data_ultima_menstruacao')
|
|
->where('atendimento_individual2.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->orderBy('atendimento_individual2.data_usuario_responsavel')
|
|
->limit(1)
|
|
)
|
|
)
|
|
->join('atencao_basica_parametrizacao_equipe AS equipe', 'equipe.id', 'cadastro_individual.equipe_id')
|
|
->join('atencao_basica_parametrizacao_area AS area', 'area.id', 'equipe.area_id')
|
|
->join('cadastro_unidade AS unidade', 'unidade.id', 'equipe.unidade_id')
|
|
->join(
|
|
'atencao_basica_atendimento_individual_problema_condicao AS problema_condicao',
|
|
'problema_condicao.atendimento_individual_id',
|
|
'atendimento_individual.id'
|
|
)
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->leftJoin('atencao_basica_parametrizacao_microarea AS microarea', 'microarea.id', 'equipe.microarea_id')
|
|
->leftJoin('cadastro_sexo AS sexo', 'sexo.id', 'cidadao.sexo_id')
|
|
->leftJoin('cadastro_cidadao_telefone AS telefone', fn ($j) => $j
|
|
->on('telefone.cidadao_id', 'cidadao.id')
|
|
->where('telefone.id', fn ($q) => $q
|
|
->select('telefone2.id')
|
|
->from('cadastro_cidadao_telefone AS telefone2')
|
|
->whereColumn('telefone2.cidadao_id', 'cidadao.id')
|
|
->where('telefone2.principal', true)
|
|
->limit(1)
|
|
)
|
|
)
|
|
->leftJoin('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
|
->leftJoin('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
|
->leftJoin('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
|
->leftJoin('cadastro_logradouro_tipo AS logradouro_tipo', 'logradouro_tipo.id', 'logradouro.tipo_id')
|
|
->leftJoin('cadastro_bairro AS bairro', 'bairro.id', 'logradouro.bairro_id')
|
|
->leftJoin('intranet.cadastro_municipio AS municipio', 'municipio.id', 'logradouro.municipio_id')
|
|
->leftJoin('intranet.cadastro_estado AS estado', 'estado.id', 'municipio.estado_id')
|
|
->leftJoin('cadastro_paciente_responsavel AS paciente_responsavel', 'paciente_responsavel.paciente_id', 'paciente.id')
|
|
->leftJoin('cadastro_usuario AS usuario_responsavel', 'usuario_responsavel.id', 'paciente_responsavel.responsavel_usuario_id')
|
|
->leftJoin('cadastro_cidadao AS cidadao_responsavel', 'cidadao_responsavel.id', 'usuario_responsavel.cidadao_id')
|
|
->leftJoin('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar', 'cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
|
->leftJoin('atencao_basica_parametrizacao_microarea AS cadastro_domiciliar_microarea', 'cadastro_domiciliar_microarea.id', 'cadastro_domiciliar.microarea_id')
|
|
->leftJoin('atencao_basica_parametrizacao_area AS cadastro_domiciliar_area', 'cadastro_domiciliar_area.id', 'cadastro_domiciliar_microarea.area_id')
|
|
->leftJoin('cadastro_obito AS obito', fn ($j) => $j
|
|
->on('obito.cidadao_id', 'cidadao.id')
|
|
->whereNull('obito.deleted_at')
|
|
)
|
|
->select(
|
|
'unidade.nome_fantasia AS unidade_nome_fantasia',
|
|
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_descricao"),
|
|
'area.tipo_id AS area_tipo_id',
|
|
'cidadao.nome AS paciente_nome',
|
|
'sexo.descricao AS sexo_descricao',
|
|
DB::raw("CONCAT(
|
|
CASE
|
|
WHEN cadastro_domiciliar_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', cadastro_domiciliar_area.numero_ine)
|
|
ELSE ''
|
|
END,
|
|
CASE
|
|
WHEN cadastro_domiciliar_area.descricao IS NOT NULL AND cadastro_domiciliar_area.numero_ine IS NOT NULL THEN ' - Área: '
|
|
WHEN cadastro_domiciliar_area.descricao IS NOT NULL THEN 'Área: '
|
|
ELSE ''
|
|
END,
|
|
COALESCE(cadastro_domiciliar_area.descricao, ''),
|
|
CASE
|
|
WHEN cadastro_domiciliar_microarea.descricao IS NOT NULL
|
|
AND (cadastro_domiciliar_area.numero_ine IS NOT NULL OR cadastro_domiciliar_area.descricao IS NOT NULL) THEN ' - Microárea: '
|
|
WHEN cadastro_domiciliar_microarea.descricao IS NOT NULL THEN 'Microárea: '
|
|
ELSE ''
|
|
END,
|
|
COALESCE(cadastro_domiciliar_microarea.descricao, '')
|
|
) AS microarea_descricao"),
|
|
DB::raw("
|
|
CASE
|
|
WHEN cadastro_domiciliar_area.numero_ine IS NULL
|
|
AND cadastro_domiciliar_area.descricao IS NULL
|
|
AND cadastro_domiciliar_microarea.descricao IS NULL THEN 'Não informada'
|
|
ELSE CONCAT(
|
|
CASE
|
|
WHEN cadastro_domiciliar_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', cadastro_domiciliar_area.numero_ine)
|
|
ELSE ''
|
|
END,
|
|
CASE
|
|
WHEN cadastro_domiciliar_area.descricao IS NOT NULL AND cadastro_domiciliar_area.numero_ine IS NOT NULL THEN ' - Área: '
|
|
WHEN cadastro_domiciliar_area.descricao IS NOT NULL THEN 'Área: '
|
|
ELSE ''
|
|
END,
|
|
COALESCE(cadastro_domiciliar_area.descricao, ''),
|
|
CASE
|
|
WHEN cadastro_domiciliar_microarea.descricao IS NOT NULL
|
|
AND (cadastro_domiciliar_area.numero_ine IS NOT NULL OR cadastro_domiciliar_area.descricao IS NOT NULL) THEN ' - Microárea: '
|
|
WHEN cadastro_domiciliar_microarea.descricao IS NOT NULL THEN 'Microárea: '
|
|
ELSE ''
|
|
END,
|
|
COALESCE(cadastro_domiciliar_microarea.descricao, '')
|
|
)
|
|
END AS area_microarea_domicilio
|
|
"),
|
|
'cidadao_responsavel.nome AS usuario_cadastro_nome',
|
|
'cidadao.data_nascimento',
|
|
'telefone.numero AS telefone_principal',
|
|
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"),
|
|
DB::raw("(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 84 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PRE_NATAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
), 1, 0)
|
|
) AS boa_pratica_a"),
|
|
DB::raw("(
|
|
IF((
|
|
SELECT COUNT(DISTINCT (ai.id))
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PRE_NATAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
) >= 7, 1, 0)
|
|
) AS boa_pratica_b"),
|
|
DB::raw("(
|
|
IF((
|
|
(
|
|
SELECT COUNT(DISTINCT (ai.id))
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
ai.pressao_arterial IS NOT NULL
|
|
OR p.codigo = '" . Procedimento::AFERICAO_PRESSAO_ARTERIAL . "'
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(DISTINCT (pa.id))
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
pa.afericao_pa IS NOT NULL
|
|
OR proc.codigo = '" . Procedimento::AFERICAO_PRESSAO_ARTERIAL . "'
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(vd.id)
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND vd.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND vd.afericao_pa IS NOT NULL
|
|
)
|
|
) >= 7, 1, 0)
|
|
) AS boa_pratica_c"),
|
|
DB::raw("(
|
|
IF((
|
|
(
|
|
SELECT COUNT(ai.id)
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(ai.peso IS NOT NULL AND ai.altura IS NOT NULL)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual_procedimento AS aip
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE aip.atendimento_individual_id = ai.id
|
|
AND p.codigo = '" . Procedimento::AVALIACAO_ANTROPOMETRICA . "'
|
|
)
|
|
OR (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual_procedimento AS aip
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE aip.atendimento_individual_id = ai.id
|
|
AND p.codigo = '" . Procedimento::MEDICAO_DE_PESO . "'
|
|
)
|
|
AND EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual_procedimento AS aip
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE aip.atendimento_individual_id = ai.id
|
|
AND p.codigo = '" . Procedimento::MEDICAO_DE_ALTURA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(pa.id)
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(pa.peso IS NOT NULL AND pa.altura IS NOT NULL)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento_procedimento AS pap
|
|
INNER JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pap.procedimento_atendimento_id = pa.id
|
|
AND proc.codigo = '" . Procedimento::AVALIACAO_ANTROPOMETRICA . "'
|
|
)
|
|
OR (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento_procedimento AS pap
|
|
INNER JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pap.procedimento_atendimento_id = pa.id
|
|
AND proc.codigo = '" . Procedimento::MEDICAO_DE_PESO . "'
|
|
)
|
|
AND EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento_procedimento AS pap
|
|
INNER JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
WHERE pap.procedimento_atendimento_id = pa.id
|
|
AND proc.codigo = '" . Procedimento::MEDICAO_DE_ALTURA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
+
|
|
(
|
|
SELECT COUNT(vd.id)
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND vd.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND vd.peso IS NOT NULL
|
|
AND vd.altura IS NOT NULL
|
|
)
|
|
) >= 7, 1, 0)
|
|
) AS boa_pratica_d"),
|
|
DB::raw("(
|
|
IF((
|
|
SELECT COUNT(*)
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND vd.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND vd.data_usuario_responsavel >= (
|
|
SELECT ai.data_usuario_responsavel
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PRE_NATAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
GROUP BY ai.id
|
|
ORDER BY ai.data_usuario_responsavel
|
|
LIMIT 1
|
|
)
|
|
AND (
|
|
o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
) >= 3, 1, 0)
|
|
) AS boa_pratica_e"),
|
|
DB::raw("(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM imunizacao_registro_aplicacao ra
|
|
INNER JOIN imunizacao_entrada_vacina ev ON ev.id = ra.entrada_vacina_id
|
|
INNER JOIN cadastro_vacina v ON v.id = ev.vacina_id
|
|
WHERE ra.paciente_id = atendimento_individual.paciente_id
|
|
AND ra.data_aplicacao >= atendimento_individual.data_ultima_menstruacao
|
|
AND ra.data_aplicacao <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ra.data_aplicacao <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ra.data_aplicacao > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 133 DAY)
|
|
AND v.codigo = " . VacinaCodigo::D_TPA_ADULTO . "
|
|
) OR EXISTS(
|
|
SELECT 1
|
|
FROM imunizacao_registro_atualizacao ra
|
|
INNER JOIN cadastro_vacina v ON v.id = ra.vacina_id
|
|
WHERE ra.paciente_id = atendimento_individual.paciente_id
|
|
AND ra.data_atualizacao >= atendimento_individual.data_ultima_menstruacao
|
|
AND ra.data_atualizacao <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ra.data_atualizacao <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ra.data_atualizacao > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 133 DAY)
|
|
AND v.codigo = " . VacinaCodigo::D_TPA_ADULTO . "
|
|
), 1, 0)
|
|
) AS boa_pratica_f"),
|
|
DB::raw("(
|
|
IF((
|
|
(
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_DE_SIFILIS . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::SIFILIS . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_PARA_HIV . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HIV . "
|
|
OR proc.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::HEPATITE_B . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HBV . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DO_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG_EM_GESTANTE . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_IG_G_E_IG_M_CONTRA_O_ANTIGENO_CENTRAL_DO_VIRUS_DA_HEPATITE_B_ANTI_HBC_TOTAL . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG . "',
|
|
'" . Procedimento::IDENTIFICACAO_DO_VIRUS_DA_HEPATITE_B_POR_PCR_QUANTITATIVO . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HEPATITE_B . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HBV . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DO_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG_EM_GESTANTE . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_IG_G_E_IG_M_CONTRA_O_ANTIGENO_CENTRAL_DO_VIRUS_DA_HEPATITE_B_ANTI_HBC_TOTAL . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTIGENO_DE_SUPERFICIE_DO_VIRUS_DA_HEPATITE_B_H_BS_AG . "',
|
|
'" . Procedimento::IDENTIFICACAO_DO_VIRUS_DA_HEPATITE_B_POR_PCR_QUANTITATIVO . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::HEPATITE_C . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HEPATITE_C . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_EM_GESTANTE . "',
|
|
'" . Procedimento::DETECCAO_DE_RNA_DO_VIRUS_DA_HEPATITE_C_QUALITATIVO . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_ANTI_HCV . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel <= DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 91 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HEPATITE_C . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HEPATITE_C . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_EM_GESTANTE . "',
|
|
'" . Procedimento::DETECCAO_DE_RNA_DO_VIRUS_DA_HEPATITE_C_QUALITATIVO . "',
|
|
'" . Procedimento::PESQUISA_DE_ANTICORPOS_CONTRA_O_VIRUS_DA_HEPATITE_C_ANTI_HCV . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
), 1, 0)
|
|
) AS boa_pratica_g"),
|
|
DB::raw("(
|
|
IF((
|
|
(
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_DE_SIFILIS . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::SIFILIS . "
|
|
OR proc.codigo IN (
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS . "',
|
|
'" . Procedimento::TESTE_RAPIDO_PARA_SIFILIS_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'" . Procedimento::TESTE_RAPIDO_TREPONEMICO_SIFILIS_EM_GESTANTE . "',
|
|
'" . Procedimento::TESTE_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS . "',
|
|
'" . Procedimento::TESTE_NAO_TREPONEMICO_PARA_DETECCAO_DE_SIFILIS_EM_GESTANTE . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
AND (
|
|
EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
LEFT JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
LEFT JOIN atencao_basica_atendimento_individual_exame_solicitado_avaliado esv ON esv.atendimento_individual_id = ai.id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND ai.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND ai.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
(
|
|
esv.exame_solicitado_avaliado_id = " . ExameSolicitadoAvaliado::SOROLOGIA_PARA_HIV . "
|
|
AND esv.avaliado = 1
|
|
) OR p.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
OR EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_procedimento_atendimento AS pa
|
|
INNER JOIN atencao_basica_procedimento p ON p.id = pa.procedimento_id
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = p.ocupacao_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_procedimento AS pap ON pap.procedimento_atendimento_id = pa.id
|
|
LEFT JOIN sigtap.procedimento proc ON proc.id = pap.procedimento_id
|
|
LEFT JOIN atencao_basica_procedimento_atendimento_teste_rapido tr ON tr.procedimento_atendimento_id = pa.id
|
|
WHERE pa.atendimento_individual_id IS NULL
|
|
AND pa.paciente_id = atendimento_individual.paciente_id
|
|
AND p.data_usuario_responsavel >= atendimento_individual.data_ultima_menstruacao
|
|
AND p.data_usuario_responsavel <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND p.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND p.data_usuario_responsavel > DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 182 DAY)
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
OR o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '2234%'
|
|
OR o.codigo LIKE '2236%'
|
|
OR o.codigo LIKE '2238%'
|
|
OR o.codigo LIKE '2237%'
|
|
OR o.codigo LIKE '2241%'
|
|
OR o.codigo LIKE '3222%'
|
|
OR o.codigo LIKE '2239%'
|
|
OR o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
AND (
|
|
tr.teste_rapido_id = " . TesteRapido::HIV . "
|
|
OR proc.codigo IN (
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_HIV_NA_GESTANTE_OU_PAI_PARCEIRO . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_ANTICORPOS_ANTI_HIV_EM_GESTANTE . "',
|
|
'". Procedimento::TESTE_RAPIDO_PARA_DETECCAO_DE_INFECCAO_PELO_HIV . "',
|
|
'". Procedimento::DETECCAO_RAPIDA_DA_CARGA_VIRAL_DO_HIV . "',
|
|
'". Procedimento::QUANTIFICACAO_DA_CARGA_VIRAL_DO_HIV_RNA . "'
|
|
)
|
|
)
|
|
)
|
|
)
|
|
), 1, 0)
|
|
) AS boa_pratica_h"),
|
|
DB::raw("(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_individual AS ai
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ai.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_atendimento_individual_procedimento AS aip ON aip.atendimento_individual_id = ai.id
|
|
INNER JOIN sigtap.procedimento p ON p.id = aip.procedimento_id
|
|
WHERE ai.paciente_id = atendimento_individual.paciente_id
|
|
AND ai.data_usuario_responsavel > COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ai.data_usuario_responsavel <= DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
)
|
|
AND ai.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2235%'
|
|
OR o.codigo LIKE '2231%'
|
|
OR o.codigo LIKE '2251%'
|
|
OR o.codigo LIKE '2252%'
|
|
OR o.codigo LIKE '2253%'
|
|
)
|
|
AND p.codigo IN (
|
|
'" . Procedimento::CONSULTA_DE_PROFISSIONAIS_DE_NIVEL_SUPERIOR_NA_ATENCAO_PRIMARIA_EXCETO_MEDICO . "',
|
|
'" . Procedimento::CONSULTA_MEDICA_EM_ATENCAO_PRIMARIA . "',
|
|
'" . Procedimento::CONSULTA_PUERPERAL . "',
|
|
'" . Procedimento::CONSULTA_ATENDIMENTO_DOMICILIAR . "',
|
|
'" . Procedimento::TELECONSULTA_NA_ATENCAO_PRIMARIA . "'
|
|
)
|
|
), 1, 0)
|
|
) AS boa_pratica_i"),
|
|
DB::raw("(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_visita_domiciliar AS vd
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = vd.usuario_ocupacao_id
|
|
INNER JOIN atencao_basica_parametrizacao_equipe e ON e.id = vd.equipe_id
|
|
INNER JOIN atencao_basica_parametrizacao_area a ON a.id = e.area_id
|
|
WHERE a.tipo_id = " . AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA . "
|
|
AND vd.paciente_id = atendimento_individual.paciente_id
|
|
AND vd.data_usuario_responsavel > COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND vd.data_usuario_responsavel <= DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
)
|
|
AND vd.data_usuario_responsavel <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo = '" . Ocupacao::AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
OR o.codigo = '" . Ocupacao::TECNICO_EM_AGENTE_COMUNITARIO_DE_SAUDE . "'
|
|
)
|
|
), 1, 0)
|
|
) AS boa_pratica_j"),
|
|
DB::raw("(
|
|
IF(EXISTS(
|
|
SELECT 1
|
|
FROM atencao_basica_atendimento_odontologico AS ao
|
|
INNER JOIN sigtap.ocupacao AS o ON o.id = ao.ocupacao_id
|
|
WHERE ao.paciente_id = atendimento_individual.paciente_id
|
|
AND ao.data_atendimento >= atendimento_individual.data_ultima_menstruacao
|
|
AND ao.data_atendimento <= COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY))
|
|
AND ao.data_atendimento <= '{$params->periodo['end']->format('Y-m-d')}'
|
|
AND (
|
|
o.codigo LIKE '2232%'
|
|
OR o.codigo LIKE '3224%'
|
|
)
|
|
), 1, 0)
|
|
) AS boa_pratica_k")
|
|
)
|
|
->whereIn('area.tipo_id', self::getTiposEquipes())
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->whereNotNull('atendimento_individual.data_ultima_menstruacao')
|
|
->where('atendimento_individual.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) >= ?", [$params->periodo['start']->format('Y-m-d')])
|
|
->where(fn ($q) => $q
|
|
->whereNull('cadastro_individual.saida_cidadao_id')
|
|
->orWhere(fn ($q) => $q
|
|
->where('cadastro_individual.saida_cidadao_id', SaidaCidadao::MUDANCA_DE_TERRITORIO)
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < cadastro_individual.motivo_saida_data")
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->whereNull('obito.obito_em')
|
|
->orWhereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < obito.obito_em")
|
|
)
|
|
->whereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual AS ai')
|
|
->join('atencao_basica_atendimento_individual_problema_condicao AS pc', 'pc.atendimento_individual_id', 'ai.id')
|
|
->leftJoin('geral_ciap AS gc', 'gc.id', 'pc.ciap_id')
|
|
->leftJoin('sigtap.cid AS sc', 'sc.id', 'pc.cid_id')
|
|
->whereColumn('ai.paciente_id', 'atendimento_individual.paciente_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('gc.codigo', self::getCiapsEncerramGestacao())
|
|
->orWhereIn('sc.codigo', self::getCidsEncerramGestacao())
|
|
)
|
|
->whereColumn('ai.data_usuario_responsavel', '>=', 'atendimento_individual.data_ultima_menstruacao')
|
|
->whereRaw("ai.data_usuario_responsavel <= (COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)))")
|
|
)
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('equipe.unidade_id', $id))
|
|
->when($params->equipe_id, fn ($q, $id) => $q->where('cadastro_individual.equipe_id', $id))
|
|
->when($params->sexo_id, fn ($q, $id) => $q->where('cidadao.sexo_id', $id))
|
|
->when(!is_null($params->idade_minima), fn ($q) => $q
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, CURRENT_DATE) >= ?", [$params->idade_minima]))
|
|
->when(!is_null($params->idade_maxima), fn ($q) => $q
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, CURRENT_DATE) <= ?", [$params->idade_maxima]))
|
|
->when($params->paciente_id, fn ($q, $id) => $q->where('atendimento_individual.paciente_id', $id))
|
|
->when(!$params->fora_area, fn ($q) => $q
|
|
->whereNotNull('cadastro_domiciliar.id')
|
|
->where(fn ($sub) => $sub
|
|
->whereNull('cadastro_domiciliar.fora_area')
|
|
->orWhere('cadastro_domiciliar.fora_area', 0)
|
|
))
|
|
->groupBy('atendimento_individual.id');
|
|
|
|
self::setOrderByPaciente($pacientesBuilder);
|
|
|
|
$pacientes = $pacientesBuilder->get();
|
|
|
|
$pacientes->each(function ($paciente) use ($params) {
|
|
$paciente->idade = $paciente->data_nascimento
|
|
? AgeService::getFormattedAge(Carbon::create($paciente->data_nascimento)->toDate())
|
|
: null;
|
|
|
|
if ($paciente->telefone_principal) {
|
|
$paciente->telefone_principal = MaskUtil::getPhoneMasked($paciente->telefone_principal);
|
|
}
|
|
|
|
$paciente->boa_pratica_a = (bool) $paciente->boa_pratica_a;
|
|
$paciente->boa_pratica_b = (bool) $paciente->boa_pratica_b;
|
|
$paciente->boa_pratica_c = (bool) $paciente->boa_pratica_c;
|
|
$paciente->boa_pratica_d = (bool) $paciente->boa_pratica_d;
|
|
$paciente->boa_pratica_e = (bool) $paciente->boa_pratica_e;
|
|
$paciente->boa_pratica_f = (bool) $paciente->boa_pratica_f;
|
|
$paciente->boa_pratica_g = (bool) $paciente->boa_pratica_g;
|
|
$paciente->boa_pratica_h = (bool) $paciente->boa_pratica_h;
|
|
$paciente->boa_pratica_i = (bool) $paciente->boa_pratica_i;
|
|
$paciente->boa_pratica_j = (bool) $paciente->boa_pratica_j;
|
|
$paciente->boa_pratica_k = (bool) $paciente->boa_pratica_k;
|
|
|
|
$paciente->pontuacao_total = 0;
|
|
|
|
if (in_array('A', $params->boas_praticas) && $paciente->boa_pratica_a) $paciente->pontuacao_total += 10;
|
|
if (in_array('B', $params->boas_praticas) && $paciente->boa_pratica_b) $paciente->pontuacao_total += 9;
|
|
if (in_array('C', $params->boas_praticas) && $paciente->boa_pratica_c) $paciente->pontuacao_total += 9;
|
|
if (in_array('D', $params->boas_praticas) && $paciente->boa_pratica_d) $paciente->pontuacao_total += 9;
|
|
if (in_array('E', $params->boas_praticas) && $paciente->boa_pratica_e) $paciente->pontuacao_total += 9;
|
|
if (in_array('F', $params->boas_praticas) && $paciente->boa_pratica_f) $paciente->pontuacao_total += 9;
|
|
if (in_array('G', $params->boas_praticas) && $paciente->boa_pratica_g) $paciente->pontuacao_total += 9;
|
|
if (in_array('H', $params->boas_praticas) && $paciente->boa_pratica_h) $paciente->pontuacao_total += 9;
|
|
if (in_array('I', $params->boas_praticas) && $paciente->boa_pratica_i) $paciente->pontuacao_total += 9;
|
|
if (in_array('J', $params->boas_praticas) && $paciente->boa_pratica_j) $paciente->pontuacao_total += 9;
|
|
if (in_array('K', $params->boas_praticas) && $paciente->boa_pratica_k) $paciente->pontuacao_total += 9;
|
|
});
|
|
|
|
$pacientes = $pacientes->filter(function ($paciente) use ($params) {
|
|
foreach ($params->boas_praticas as $boaPratica) {
|
|
if (!$paciente->{'boa_pratica_' . Str::lower($boaPratica)}) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
})->values();
|
|
|
|
$columnsSortBy = collect([
|
|
'pontuacao_total'
|
|
]);
|
|
|
|
if ($columnsSortBy->contains(request()->paciente_sort_by)) {
|
|
$pacientes = (DataUtil::getBooleanValueFromStringBoolean(request()->paciente_sort_desc)
|
|
? $pacientes->sortByDesc(request()->paciente_sort_by)
|
|
: $pacientes->sortBy(request()->paciente_sort_by)
|
|
)->values();
|
|
}
|
|
|
|
return $pacientes;
|
|
}
|
|
|
|
private static function setOrderByPaciente($builder)
|
|
{
|
|
$columns = [
|
|
'unidade_nome_fantasia' => 'unidade.nome_fantasia',
|
|
'equipe_descricao' => 'equipe_descricao',
|
|
'paciente_nome' => 'cidadao.nome',
|
|
'sexo_descricao' => 'sexo.descricao',
|
|
'idade' => 'cidadao.data_nascimento',
|
|
'microarea_descricao' => 'microarea_descricao',
|
|
'area_microarea_domicilio' => 'area_microarea_domicilio',
|
|
'usuario_cadastro_nome' => 'cidadao_responsavel.nome',
|
|
'data_nascimento' => 'cidadao.data_nascimento',
|
|
'telefone_principal' => 'telefone.numero',
|
|
'endereco' => 'endereco',
|
|
];
|
|
|
|
if (is_null(request()->paciente_sort_by) || !isset($columns[request()->paciente_sort_by])) {
|
|
$builder->orderByRaw(join(', ', $columns));
|
|
return;
|
|
}
|
|
|
|
$column = $columns[request()->paciente_sort_by];
|
|
$sortDesc = DataUtil::getBooleanValueFromStringBoolean(request()->paciente_sort_desc);
|
|
|
|
if (request()->paciente_sort_by === 'idade') {
|
|
$sortDesc = !$sortDesc;
|
|
}
|
|
|
|
$direction = $sortDesc ? 'DESC' : 'ASC';
|
|
|
|
unset($columns[request()->paciente_sort_by]);
|
|
|
|
$builder->orderByRaw("{$column} {$direction}, " . join(', ', $columns));
|
|
}
|
|
|
|
private static function round($value)
|
|
{
|
|
if (fmod($value, 1) === 0.0) {
|
|
return $value;
|
|
}
|
|
|
|
return round($value, 2);
|
|
}
|
|
|
|
public static function create()
|
|
{
|
|
$boasPraticas = self::getBoasPraticas();
|
|
|
|
return [
|
|
'additionals' => [
|
|
'data_atual' => Carbon::now()->format('d/m/Y'),
|
|
],
|
|
'form' => [
|
|
'quadrimestres_anos' => self::getQuadrimestres(),
|
|
'unidades' => [],
|
|
'equipes' => [],
|
|
'boas_praticas' => $boasPraticas,
|
|
'sexos' => [],
|
|
],
|
|
'model' => [
|
|
'periodo' => ['start' => null, 'end' => null],
|
|
'quadrimestre_ano' => null,
|
|
'quadrimestre' => null,
|
|
'unidade_id' => null,
|
|
'equipe_id' => null,
|
|
'boas_praticas' => $boasPraticas->pluck('value')->toArray(),
|
|
'busca_ativa' => false,
|
|
'sexo_id' => null,
|
|
'idade_minima' => null,
|
|
'idade_maxima' => null,
|
|
'paciente' => null,
|
|
'fora_area' => false,
|
|
],
|
|
];
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
$params = self::getParams();
|
|
|
|
switch (request()->listar) {
|
|
case 'unidades': {
|
|
return [
|
|
'unidades' => self::getUnidades($params),
|
|
'equipes' => self::getEquipes($params),
|
|
'sexos' => self::getSexos($params),
|
|
];
|
|
}
|
|
case 'equipes': {
|
|
return [
|
|
'equipes' => self::getEquipes($params),
|
|
'sexos' => self::getSexos($params),
|
|
];
|
|
}
|
|
case 'sexos': {
|
|
return [
|
|
'sexos' => self::getSexos($params),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
private static function getParams()
|
|
{
|
|
$params = (object) [
|
|
'unidade_id' => request()->get('unidade_id'),
|
|
'equipe_id' => request()->get('equipe_id'),
|
|
'boas_praticas' => request()->get('boas_praticas', []),
|
|
'busca_ativa' => DataUtil::getBooleanValueFromStringBoolean(request()->get('busca_ativa', 'false')),
|
|
'sexo_id' => request()->get('sexo_id'),
|
|
'idade_minima' => request()->get('idade_minima'),
|
|
'idade_maxima' => request()->get('idade_maxima'),
|
|
'paciente_id' => request()->get('paciente_id'),
|
|
'fora_area' => DataUtil::getBooleanValueFromStringBoolean(request()->get('fora_area', 'false')),
|
|
];
|
|
|
|
if (is_null(request()->get('periodo'))) {
|
|
$ano = request()->get('quadrimestre_ano');
|
|
$quadrimestre = request()->get('quadrimestre');
|
|
|
|
if ($quadrimestre == 1) {
|
|
$mesInicial = 1;
|
|
$mesFinal = 4;
|
|
}
|
|
else if ($quadrimestre == 2) {
|
|
$mesInicial = 5;
|
|
$mesFinal = 8;
|
|
}
|
|
else {
|
|
$mesInicial = 9;
|
|
$mesFinal = 12;
|
|
}
|
|
|
|
$params->periodo = [
|
|
'start' => Carbon::create($ano, $mesInicial, 1)->setTime(0, 0, 0),
|
|
'end' => Carbon::create($ano, $mesFinal)->endOfMonth()->setTime(23, 59, 59)
|
|
];
|
|
}
|
|
else {
|
|
$params->periodo = [
|
|
'start' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['start'])->setTime(0, 0, 0),
|
|
'end' => Carbon::createFromFormat('d/m/Y', request()->get('periodo')['end'])->setTime(23, 59, 59)
|
|
];
|
|
}
|
|
|
|
return $params;
|
|
}
|
|
|
|
private static function getQuadrimestres()
|
|
{
|
|
$anos = collect();
|
|
|
|
$anoInicial = 2020;
|
|
$anoAtual = Carbon::now()->year;
|
|
$mesAtual = Carbon::now()->month;
|
|
$ano = $anoAtual;
|
|
|
|
while ($ano >= $anoInicial) {
|
|
for ($i = 1; $i <= 3; $i++) {
|
|
$meses = null;
|
|
|
|
if ($i === 1) {
|
|
$meses = 'Janeiro - Abril';
|
|
}
|
|
else if ($i === 2) {
|
|
$meses = 'Maio - Agosto';
|
|
}
|
|
else {
|
|
$meses = 'Setembro - Dezembro';
|
|
}
|
|
|
|
if ($ano === $anoAtual && (
|
|
($i === 2 && $mesAtual <= 4)
|
|
|| ($i === 3 && $mesAtual <= 8)
|
|
)) {
|
|
continue;
|
|
}
|
|
|
|
$anoQuadrimenstre = $anos->firstWhere('value', $ano);
|
|
|
|
if (is_null($anoQuadrimenstre)) {
|
|
$anoQuadrimenstre = (object) [
|
|
'value' => $ano,
|
|
'text' => $ano,
|
|
'quadrimestres' => collect(),
|
|
];
|
|
|
|
$anos->push($anoQuadrimenstre);
|
|
}
|
|
|
|
$anoQuadrimenstre->quadrimestres->push((object) [
|
|
'value' => $i,
|
|
'text' => "{$i}º ({$meses})"
|
|
]);
|
|
}
|
|
|
|
$ano--;
|
|
}
|
|
|
|
return $anos;
|
|
}
|
|
|
|
private static function getUnidades($params)
|
|
{
|
|
return DB::table('cadastro_unidade AS unidade')
|
|
->select([
|
|
'unidade.id',
|
|
'unidade.nome_fantasia',
|
|
])
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_individual AS cadastro_individual')
|
|
->join('cadastro_paciente AS paciente', 'paciente.id', 'cadastro_individual.paciente_id')
|
|
->join('atencao_basica_parametrizacao_equipe AS equipe', 'equipe.id', 'cadastro_individual.equipe_id')
|
|
->join('atencao_basica_parametrizacao_area AS area', 'area.id', 'equipe.area_id')
|
|
->join('atencao_basica_atendimento_individual AS atendimento_individual', fn ($q) => $q
|
|
->on('atendimento_individual.paciente_id', 'paciente.id')
|
|
->where('atendimento_individual.id', fn ($q) => $q
|
|
->select('atendimento_individual2.id')
|
|
->from('atencao_basica_atendimento_individual AS atendimento_individual2')
|
|
->whereColumn('atendimento_individual2.paciente_id', 'paciente.id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_problema_condicao AS problema_condicao')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->whereColumn('problema_condicao.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->where('problema_condicao.situacao_id', ProblemaCondicaoSituacao::ATIVO)
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('ciap.codigo', self::getCiapsGestacao())
|
|
->orWhereIn('cid.codigo', self::getCidsGestacao())
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_condicao_avaliada AS atendimento_individual_condicao_avaliada')
|
|
->whereColumn('atendimento_individual_condicao_avaliada.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->whereIn('atendimento_individual_condicao_avaliada.condicao_avaliada_id',[
|
|
CondicaoAvaliada::PRE_NATAL,
|
|
CondicaoAvaliada::PUERICULTURA,
|
|
CondicaoAvaliada::PUERPERIO_ATE_42_DIAS
|
|
])
|
|
)
|
|
)
|
|
->whereNotNull('atendimento_individual2.data_ultima_menstruacao')
|
|
->where('atendimento_individual2.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->orderBy('atendimento_individual2.data_usuario_responsavel')
|
|
->limit(1)
|
|
)
|
|
)
|
|
->join(
|
|
'atencao_basica_atendimento_individual_problema_condicao AS problema_condicao',
|
|
'problema_condicao.atendimento_individual_id',
|
|
'atendimento_individual.id'
|
|
)
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->leftJoin('cadastro_obito AS obito', fn ($j) => $j
|
|
->on('obito.cidadao_id', 'paciente.cidadao_id')
|
|
->whereNull('obito.deleted_at')
|
|
)
|
|
->whereColumn('equipe.unidade_id', 'unidade.id')
|
|
->whereIn('area.tipo_id', self::getTiposEquipes())
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->whereNotNull('atendimento_individual.data_ultima_menstruacao')
|
|
->where('atendimento_individual.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) >= ?", [$params->periodo['start']->format('Y-m-d')])
|
|
->where(fn ($q) => $q
|
|
->whereNull('cadastro_individual.saida_cidadao_id')
|
|
->orWhere(fn ($q) => $q
|
|
->where('cadastro_individual.saida_cidadao_id', SaidaCidadao::MUDANCA_DE_TERRITORIO)
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < cadastro_individual.motivo_saida_data")
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->whereNull('obito.obito_em')
|
|
->orWhereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < obito.obito_em")
|
|
)
|
|
->whereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual AS ai')
|
|
->join('atencao_basica_atendimento_individual_problema_condicao AS pc', 'pc.atendimento_individual_id', 'ai.id')
|
|
->leftJoin('geral_ciap AS gc', 'gc.id', 'pc.ciap_id')
|
|
->leftJoin('sigtap.cid AS sc', 'sc.id', 'pc.cid_id')
|
|
->whereColumn('ai.paciente_id', 'atendimento_individual.paciente_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('gc.codigo', self::getCiapsEncerramGestacao())
|
|
->orWhereIn('sc.codigo', self::getCidsEncerramGestacao())
|
|
)
|
|
->whereColumn('ai.data_usuario_responsavel', '>=', 'atendimento_individual.data_ultima_menstruacao')
|
|
->whereRaw("ai.data_usuario_responsavel <= (COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)))")
|
|
)
|
|
)
|
|
->orderBy('unidade.nome_fantasia')
|
|
->get();
|
|
}
|
|
|
|
private static function getEquipes($params)
|
|
{
|
|
return DB::table('atencao_basica_parametrizacao_equipe AS equipe')
|
|
->join('atencao_basica_parametrizacao_area AS area', 'area.id', 'equipe.area_id')
|
|
->leftJoin('atencao_basica_parametrizacao_microarea AS microarea', 'microarea.id', 'equipe.microarea_id')
|
|
->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"),
|
|
])
|
|
->whereIn('area.tipo_id', self::getTiposEquipes())
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('equipe.unidade_id', $id))
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_individual AS cadastro_individual')
|
|
->join('cadastro_paciente AS paciente', 'paciente.id', 'cadastro_individual.paciente_id')
|
|
->join('atencao_basica_atendimento_individual AS atendimento_individual', fn ($q) => $q
|
|
->on('atendimento_individual.paciente_id', 'paciente.id')
|
|
->where('atendimento_individual.id', fn ($q) => $q
|
|
->select('atendimento_individual2.id')
|
|
->from('atencao_basica_atendimento_individual AS atendimento_individual2')
|
|
->whereColumn('atendimento_individual2.paciente_id', 'paciente.id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_problema_condicao AS problema_condicao')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->whereColumn('problema_condicao.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->where('problema_condicao.situacao_id', ProblemaCondicaoSituacao::ATIVO)
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('ciap.codigo', self::getCiapsGestacao())
|
|
->orWhereIn('cid.codigo', self::getCidsGestacao())
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_condicao_avaliada AS atendimento_individual_condicao_avaliada')
|
|
->whereColumn('atendimento_individual_condicao_avaliada.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->whereIn('atendimento_individual_condicao_avaliada.condicao_avaliada_id',[
|
|
CondicaoAvaliada::PRE_NATAL,
|
|
CondicaoAvaliada::PUERICULTURA,
|
|
CondicaoAvaliada::PUERPERIO_ATE_42_DIAS
|
|
])
|
|
)
|
|
)
|
|
->whereNotNull('atendimento_individual2.data_ultima_menstruacao')
|
|
->where('atendimento_individual2.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->orderBy('atendimento_individual2.data_usuario_responsavel')
|
|
->limit(1)
|
|
)
|
|
)
|
|
->join(
|
|
'atencao_basica_atendimento_individual_problema_condicao AS problema_condicao',
|
|
'problema_condicao.atendimento_individual_id',
|
|
'atendimento_individual.id'
|
|
)
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->leftJoin('cadastro_obito AS obito', fn ($j) => $j
|
|
->on('obito.cidadao_id', 'paciente.cidadao_id')
|
|
->whereNull('obito.deleted_at')
|
|
)
|
|
->whereColumn('cadastro_individual.equipe_id', 'equipe.id')
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->whereNotNull('atendimento_individual.data_ultima_menstruacao')
|
|
->where('atendimento_individual.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) >= ?", [$params->periodo['start']->format('Y-m-d')])
|
|
->where(fn ($q) => $q
|
|
->whereNull('cadastro_individual.saida_cidadao_id')
|
|
->orWhere(fn ($q) => $q
|
|
->where('cadastro_individual.saida_cidadao_id', SaidaCidadao::MUDANCA_DE_TERRITORIO)
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < cadastro_individual.motivo_saida_data")
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->whereNull('obito.obito_em')
|
|
->orWhereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < obito.obito_em")
|
|
)
|
|
->whereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual AS ai')
|
|
->join('atencao_basica_atendimento_individual_problema_condicao AS pc', 'pc.atendimento_individual_id', 'ai.id')
|
|
->leftJoin('geral_ciap AS gc', 'gc.id', 'pc.ciap_id')
|
|
->leftJoin('sigtap.cid AS sc', 'sc.id', 'pc.cid_id')
|
|
->whereColumn('ai.paciente_id', 'atendimento_individual.paciente_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('gc.codigo', self::getCiapsEncerramGestacao())
|
|
->orWhereIn('sc.codigo', self::getCidsEncerramGestacao())
|
|
)
|
|
->whereColumn('ai.data_usuario_responsavel', '>=', 'atendimento_individual.data_ultima_menstruacao')
|
|
->whereRaw("ai.data_usuario_responsavel <= (COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)))")
|
|
)
|
|
)
|
|
->orderBy('descricao')
|
|
->get();
|
|
}
|
|
|
|
private static function getBoasPraticas()
|
|
{
|
|
return collect([
|
|
(object) ['value' => 'A', 'text' => 'A - 1ª consulta até 12 semanas'],
|
|
(object) ['value' => 'B', 'text' => 'B - 7 consultas no pré-natal'],
|
|
(object) ['value' => 'C', 'text' => 'C - 7 aferições de pressão arterial'],
|
|
(object) ['value' => 'D', 'text' => 'D - 7 registros simultâneos de peso e altura'],
|
|
(object) ['value' => 'E', 'text' => 'E - 3 visitas domiciliares após 1ª consulta'],
|
|
(object) ['value' => 'F', 'text' => 'F - dTpa a partir da 20ª semana'],
|
|
(object) ['value' => 'G', 'text' => 'G - exames/testes do 1º trimestre'],
|
|
(object) ['value' => 'H', 'text' => 'H - exames/testes do 3º trimestre'],
|
|
(object) ['value' => 'I', 'text' => 'I - consulta no puerpério'],
|
|
(object) ['value' => 'J', 'text' => 'J - visita domiciliar no puerpério'],
|
|
(object) ['value' => 'K', 'text' => 'K - atividade de saúde bucal na gestação'],
|
|
]);
|
|
}
|
|
|
|
private static function getSexos($params)
|
|
{
|
|
return DB::table('cadastro_sexo AS sexo')
|
|
->select(
|
|
'sexo.id',
|
|
'sexo.descricao',
|
|
)
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_cadastro_individual AS cadastro_individual')
|
|
->join('cadastro_paciente AS paciente', 'paciente.id', 'cadastro_individual.paciente_id')
|
|
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
|
->join('atencao_basica_parametrizacao_equipe AS equipe', 'equipe.id', 'cadastro_individual.equipe_id')
|
|
->join('atencao_basica_parametrizacao_area AS area', 'area.id', 'equipe.area_id')
|
|
->join('atencao_basica_atendimento_individual AS atendimento_individual', fn ($q) => $q
|
|
->on('atendimento_individual.paciente_id', 'paciente.id')
|
|
->where('atendimento_individual.id', fn ($q) => $q
|
|
->select('atendimento_individual2.id')
|
|
->from('atencao_basica_atendimento_individual AS atendimento_individual2')
|
|
->whereColumn('atendimento_individual2.paciente_id', 'paciente.id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_problema_condicao AS problema_condicao')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->whereColumn('problema_condicao.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->where('problema_condicao.situacao_id', ProblemaCondicaoSituacao::ATIVO)
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('ciap.codigo', self::getCiapsGestacao())
|
|
->orWhereIn('cid.codigo', self::getCidsGestacao())
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_condicao_avaliada AS atendimento_individual_condicao_avaliada')
|
|
->whereColumn('atendimento_individual_condicao_avaliada.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->whereIn('atendimento_individual_condicao_avaliada.condicao_avaliada_id',[
|
|
CondicaoAvaliada::PRE_NATAL,
|
|
CondicaoAvaliada::PUERICULTURA,
|
|
CondicaoAvaliada::PUERPERIO_ATE_42_DIAS
|
|
])
|
|
)
|
|
)
|
|
->whereNotNull('atendimento_individual2.data_ultima_menstruacao')
|
|
->where('atendimento_individual2.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->orderBy('atendimento_individual2.data_usuario_responsavel')
|
|
->limit(1)
|
|
)
|
|
)
|
|
->join(
|
|
'atencao_basica_atendimento_individual_problema_condicao AS problema_condicao',
|
|
'problema_condicao.atendimento_individual_id',
|
|
'atendimento_individual.id'
|
|
)
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->leftJoin('cadastro_obito AS obito', fn ($j) => $j
|
|
->on('obito.cidadao_id', 'cidadao.id')
|
|
->whereNull('obito.deleted_at')
|
|
)
|
|
->whereColumn('cidadao.sexo_id', 'sexo.id')
|
|
->whereIn('area.tipo_id', self::getTiposEquipes())
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->whereNotNull('atendimento_individual.data_ultima_menstruacao')
|
|
->where('atendimento_individual.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) >= ?", [$params->periodo['start']->format('Y-m-d')])
|
|
->where(fn ($q) => $q
|
|
->whereNull('cadastro_individual.saida_cidadao_id')
|
|
->orWhere(fn ($q) => $q
|
|
->where('cadastro_individual.saida_cidadao_id', SaidaCidadao::MUDANCA_DE_TERRITORIO)
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < cadastro_individual.motivo_saida_data")
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->whereNull('obito.obito_em')
|
|
->orWhereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < obito.obito_em")
|
|
)
|
|
->whereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual AS ai')
|
|
->join('atencao_basica_atendimento_individual_problema_condicao AS pc', 'pc.atendimento_individual_id', 'ai.id')
|
|
->leftJoin('geral_ciap AS gc', 'gc.id', 'pc.ciap_id')
|
|
->leftJoin('sigtap.cid AS sc', 'sc.id', 'pc.cid_id')
|
|
->whereColumn('ai.paciente_id', 'atendimento_individual.paciente_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('gc.codigo', self::getCiapsEncerramGestacao())
|
|
->orWhereIn('sc.codigo', self::getCidsEncerramGestacao())
|
|
)
|
|
->whereColumn('ai.data_usuario_responsavel', '>=', 'atendimento_individual.data_ultima_menstruacao')
|
|
->whereRaw("ai.data_usuario_responsavel <= (COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)))")
|
|
)
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('equipe.unidade_id', $id))
|
|
->when($params->equipe_id, fn ($q, $id) => $q->where('atendimento_individual.equipe_id', $id))
|
|
)
|
|
->orderBy('sexo.descricao')
|
|
->get();
|
|
}
|
|
|
|
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_cadastro_individual AS cadastro_individual', 'cadastro_individual.paciente_id', 'paciente.id')
|
|
->join('atencao_basica_atendimento_individual AS atendimento_individual', fn ($q) => $q
|
|
->on('atendimento_individual.paciente_id', 'paciente.id')
|
|
->where('atendimento_individual.id', fn ($q) => $q
|
|
->select('atendimento_individual2.id')
|
|
->from('atencao_basica_atendimento_individual AS atendimento_individual2')
|
|
->whereColumn('atendimento_individual2.paciente_id', 'paciente.id')
|
|
->where(fn ($q) => $q
|
|
->whereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_problema_condicao AS problema_condicao')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->whereColumn('problema_condicao.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->where('problema_condicao.situacao_id', ProblemaCondicaoSituacao::ATIVO)
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('ciap.codigo', self::getCiapsGestacao())
|
|
->orWhereIn('cid.codigo', self::getCidsGestacao())
|
|
)
|
|
)
|
|
->orWhereExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual_condicao_avaliada AS atendimento_individual_condicao_avaliada')
|
|
->whereColumn('atendimento_individual_condicao_avaliada.atendimento_individual_id', 'atendimento_individual2.id')
|
|
->whereIn('atendimento_individual_condicao_avaliada.condicao_avaliada_id',[
|
|
CondicaoAvaliada::PRE_NATAL,
|
|
CondicaoAvaliada::PUERICULTURA,
|
|
CondicaoAvaliada::PUERPERIO_ATE_42_DIAS
|
|
])
|
|
)
|
|
)
|
|
->whereNotNull('atendimento_individual2.data_ultima_menstruacao')
|
|
->where('atendimento_individual2.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->orderBy('atendimento_individual2.data_usuario_responsavel')
|
|
->limit(1)
|
|
)
|
|
)
|
|
->join('atencao_basica_parametrizacao_equipe AS equipe', 'equipe.id', 'cadastro_individual.equipe_id')
|
|
->join('atencao_basica_parametrizacao_area AS area', 'area.id', 'equipe.area_id')
|
|
->join(
|
|
'atencao_basica_atendimento_individual_problema_condicao AS problema_condicao',
|
|
'problema_condicao.atendimento_individual_id',
|
|
'atendimento_individual.id'
|
|
)
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'problema_condicao.ciap_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'problema_condicao.cid_id')
|
|
->leftJoin('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar', 'cadastro_domiciliar.domicilio_id', 'cidadao.domicilio_id')
|
|
->leftJoin('cadastro_obito AS obito', fn ($j) => $j
|
|
->on('obito.cidadao_id', 'cidadao.id')
|
|
->whereNull('obito.deleted_at')
|
|
)
|
|
->whereIn('area.tipo_id', self::getTiposEquipes())
|
|
->whereNull('problema_condicao.problema_condicao_anterior_id')
|
|
->whereNotNull('atendimento_individual.data_ultima_menstruacao')
|
|
->where('atendimento_individual.data_ultima_menstruacao', '<=', $params->periodo['end'])
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) >= ?", [$params->periodo['start']->format('Y-m-d')])
|
|
->where(fn ($q) => $q
|
|
->whereNull('cadastro_individual.saida_cidadao_id')
|
|
->orWhere(fn ($q) => $q
|
|
->where('cadastro_individual.saida_cidadao_id', SaidaCidadao::MUDANCA_DE_TERRITORIO)
|
|
->whereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < cadastro_individual.motivo_saida_data")
|
|
)
|
|
)
|
|
->where(fn ($q) => $q
|
|
->whereNull('obito.obito_em')
|
|
->orWhereRaw("DATE_ADD(
|
|
COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)),
|
|
INTERVAL 42 DAY
|
|
) < obito.obito_em")
|
|
)
|
|
->whereNotExists(fn ($q) => $q
|
|
->selectRaw(1)
|
|
->from('atencao_basica_atendimento_individual AS ai')
|
|
->join('atencao_basica_atendimento_individual_problema_condicao AS pc', 'pc.atendimento_individual_id', 'ai.id')
|
|
->leftJoin('geral_ciap AS gc', 'gc.id', 'pc.ciap_id')
|
|
->leftJoin('sigtap.cid AS sc', 'sc.id', 'pc.cid_id')
|
|
->whereColumn('ai.paciente_id', 'atendimento_individual.paciente_id')
|
|
->where(fn ($q) => $q
|
|
->whereIn('gc.codigo', self::getCiapsEncerramGestacao())
|
|
->orWhereIn('sc.codigo', self::getCidsEncerramGestacao())
|
|
)
|
|
->whereColumn('ai.data_usuario_responsavel', '>=', 'atendimento_individual.data_ultima_menstruacao')
|
|
->whereRaw("ai.data_usuario_responsavel <= (COALESCE((
|
|
SELECT pc.fim
|
|
FROM atencao_basica_atendimento_individual_problema_condicao pc
|
|
WHERE pc.problema_condicao_inicial_id = problema_condicao.id
|
|
AND pc.situacao_id = " . ProblemaCondicaoSituacao::RESOLVIDO . "
|
|
LIMIT 1
|
|
), DATE_ADD(atendimento_individual.data_ultima_menstruacao, INTERVAL 294 DAY)))")
|
|
)
|
|
->when($params->unidade_id, fn ($q, $id) => $q->where('equipe.unidade_id', $id))
|
|
->when($params->equipe_id, fn ($q, $id) => $q->where('cadastro_individual.equipe_id', $id))
|
|
->when($params->sexo_id, fn ($q, $id) => $q->where('cidadao.sexo_id', $id))
|
|
->when(!is_null($params->idade_minima), fn ($q) => $q
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, CURRENT_DATE) >= ?", [$params->idade_minima]))
|
|
->when(!is_null($params->idade_maxima), fn ($q) => $q
|
|
->whereRaw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, CURRENT_DATE) <= ?", [$params->idade_maxima]))
|
|
->when(!$params->fora_area, fn ($q) => $q
|
|
->whereNotNull('cadastro_domiciliar.id')
|
|
->where(fn ($sub) => $sub
|
|
->whereNull('cadastro_domiciliar.fora_area')
|
|
->orWhere('cadastro_domiciliar.fora_area', 0)
|
|
))
|
|
->select(
|
|
'paciente.id',
|
|
'cidadao.nome'
|
|
)
|
|
->distinct();
|
|
}
|
|
|
|
public static function getPrintExportData()
|
|
{
|
|
$data = self::index();
|
|
|
|
$data->pacientes->each(function ($paciente) {
|
|
if (!is_null($paciente->data_nascimento)) {
|
|
$paciente->data_nascimento = Carbon::create($paciente->data_nascimento)->format('d/m/Y');
|
|
}
|
|
});
|
|
|
|
$quadrimestre = '';
|
|
|
|
if (request()->quadrimestre == 1) {
|
|
$quadrimestre = "1º (Janeiro - Abril)";
|
|
}
|
|
else if (request()->quadrimestre == 2) {
|
|
$quadrimestre = "2º (Maio - Agosto)";
|
|
}
|
|
else if (request()->quadrimestre == 3) {
|
|
$quadrimestre = "3º (Setembro - Dezembro)";
|
|
}
|
|
|
|
$unidade = request()->unidade_id
|
|
? Unidade::findOrFail(request()->unidade_id)->nome_fantasia
|
|
: 'Todas';
|
|
|
|
$equipe = 'Todas';
|
|
|
|
if (request()->equipe_id) {
|
|
$equipeModel = Equipe::findOrFail(request()->equipe_id);
|
|
$equipe = '';
|
|
|
|
if (!is_null($equipeModel->area->numero_ine)) {
|
|
$equipe .= "INE: {$equipeModel->area->numero_ine}";
|
|
}
|
|
|
|
if (!is_null($equipeModel->area->descricao) && !is_null($equipeModel->area->numero_ine)) {
|
|
$equipe .= ' - Área: ';
|
|
}
|
|
else if (!is_null($equipeModel->area->descricao)) {
|
|
$equipe .= 'Área: ';
|
|
}
|
|
|
|
if (!is_null($equipeModel->area->descricao)) {
|
|
$equipe .= $equipeModel->area->descricao;
|
|
}
|
|
|
|
if (isset($equipeModel->microarea->descricao)
|
|
&& (!is_null($equipeModel->area->numero_ine) || !is_null($equipeModel->area->descricao))
|
|
) {
|
|
$equipe .= ' - Microárea: ';
|
|
}
|
|
else if (isset($equipeModel->microarea->descricao)) {
|
|
$equipe .= 'Microárea: ';
|
|
}
|
|
|
|
if (isset($equipeModel->microarea->descricao)) {
|
|
$equipe .= $equipeModel->microarea->descricao;
|
|
}
|
|
}
|
|
|
|
$boasPraticas = 'Todas';
|
|
|
|
if (count(request()->boas_praticas) === 1) {
|
|
$boasPraticas = self::getBoasPraticas()->where('value', request()->boas_praticas[0])->first()->text;
|
|
}
|
|
else if (count(request()->boas_praticas) < self::getBoasPraticas()->count()) {
|
|
$boasPraticas = count(request()->boas_praticas) . ' selecionadas';
|
|
}
|
|
|
|
$sexo = request()->sexo_id
|
|
? Sexo::findOrFail(request()->sexo_id)->descricao
|
|
: 'Todos';
|
|
|
|
$paciente = request()->paciente_id
|
|
? Paciente::findOrFail(request()->paciente_id)->cidadao->nome
|
|
: '';
|
|
|
|
$isBuscaAtiva = DataUtil::isStringTrue(request()->busca_ativa);
|
|
|
|
return [
|
|
'periodoDe' => request()->periodo['start'] ?? '',
|
|
'periodoAte' => request()->periodo['end'] ?? '',
|
|
'quadrimestreAno' => request()->quadrimestre_ano,
|
|
'quadrimestre' => $quadrimestre,
|
|
'unidade' => $unidade,
|
|
'equipe' => $equipe,
|
|
'boasPraticas' => $boasPraticas,
|
|
'buscaAtiva' => $isBuscaAtiva ? 'Sim' : 'Não',
|
|
'isBuscaAtiva' => $isBuscaAtiva,
|
|
'sexo' => $sexo,
|
|
'idadeMinima' => request()->idade_minima,
|
|
'idadeMaxima' => request()->idade_maxima,
|
|
'paciente' => $paciente,
|
|
'equipes' => $data->equipes,
|
|
'pacientes' => $data->pacientes,
|
|
'totalizadores' => $data->totalizadores,
|
|
'colunasPacientes' => collect(request()->colunas_pacientes),
|
|
'boasPraticasSelecionadas' => collect(request()->boas_praticas)
|
|
];
|
|
}
|
|
|
|
private static function getTiposEquipes()
|
|
{
|
|
return [
|
|
AreaTipo::EQUIPE_DE_SAUDE_DA_FAMILIA,
|
|
AreaTipo::EQUIPE_DE_ATENCAO_PRIMARIA,
|
|
];
|
|
}
|
|
|
|
private static function getCiapsGestacao()
|
|
{
|
|
return [
|
|
'W78',
|
|
'W79',
|
|
'W81',
|
|
'W84',
|
|
'W85',
|
|
];
|
|
}
|
|
|
|
private static function getCidsGestacao()
|
|
{
|
|
return [
|
|
'O11',
|
|
'O120',
|
|
'O121',
|
|
'O122',
|
|
'O13',
|
|
'O140',
|
|
'O141',
|
|
'O149',
|
|
'O150',
|
|
'O151',
|
|
'O159',
|
|
'O16',
|
|
'O200',
|
|
'O208',
|
|
'O209',
|
|
'O210',
|
|
'O211',
|
|
'O212',
|
|
'O218',
|
|
'O219',
|
|
'O220',
|
|
'O221',
|
|
'O222',
|
|
'O223',
|
|
'O224',
|
|
'O225',
|
|
'O228',
|
|
'O229',
|
|
'O230',
|
|
'O231',
|
|
'O232',
|
|
'O233',
|
|
'O234',
|
|
'O235',
|
|
'O239',
|
|
'O299',
|
|
'O300',
|
|
'O301',
|
|
'O302',
|
|
'O308',
|
|
'O309',
|
|
'O311',
|
|
'O312',
|
|
'O318',
|
|
'O320',
|
|
'O321',
|
|
'O322',
|
|
'O323',
|
|
'O324',
|
|
'O325',
|
|
'O326',
|
|
'O328',
|
|
'O329',
|
|
'O330',
|
|
'O331',
|
|
'O332',
|
|
'O333',
|
|
'O334',
|
|
'O335',
|
|
'O336',
|
|
'O337',
|
|
'O338',
|
|
'O752',
|
|
'O753',
|
|
'O990',
|
|
'O991',
|
|
'O992',
|
|
'O993',
|
|
'O994',
|
|
'O240',
|
|
'O241',
|
|
'O242',
|
|
'O243',
|
|
'O244',
|
|
'O249',
|
|
'O25',
|
|
'O260',
|
|
'O261',
|
|
'O263',
|
|
'O264',
|
|
'O265',
|
|
'O268',
|
|
'O269',
|
|
'O280',
|
|
'O281',
|
|
'O282',
|
|
'O283',
|
|
'O284',
|
|
'O285',
|
|
'O288',
|
|
'O289',
|
|
'O290',
|
|
'O291',
|
|
'O292',
|
|
'O293',
|
|
'O294',
|
|
'O295',
|
|
'O296',
|
|
'O298',
|
|
'O339',
|
|
'O340',
|
|
'O341',
|
|
'O342',
|
|
'O343',
|
|
'O344',
|
|
'O345',
|
|
'O346',
|
|
'O347',
|
|
'O348',
|
|
'O349',
|
|
'O350',
|
|
'O351',
|
|
'O352',
|
|
'O353',
|
|
'O354',
|
|
'O355',
|
|
'O356',
|
|
'O357',
|
|
'O358',
|
|
'O359',
|
|
'O360',
|
|
'O361',
|
|
'O362',
|
|
'O363',
|
|
'O365',
|
|
'O366',
|
|
'O367',
|
|
'O368',
|
|
'O369',
|
|
'O40',
|
|
'O410',
|
|
'O411',
|
|
'O418',
|
|
'O419',
|
|
'O430',
|
|
'O431',
|
|
'O438',
|
|
'O439',
|
|
'O440',
|
|
'O441',
|
|
'O460',
|
|
'O468',
|
|
'O469',
|
|
'O470',
|
|
'O471',
|
|
'O479',
|
|
'O48',
|
|
'O995',
|
|
'O996',
|
|
'O997',
|
|
'Z640',
|
|
'O10',
|
|
'O12',
|
|
'O14',
|
|
'O15',
|
|
'O20',
|
|
'O21',
|
|
'O22',
|
|
'O23',
|
|
'O24',
|
|
'O26',
|
|
'O28',
|
|
'O29',
|
|
'O30',
|
|
'O31',
|
|
'O32',
|
|
'O33',
|
|
'O34',
|
|
'O35',
|
|
'O36',
|
|
'O41',
|
|
'O43',
|
|
'O44',
|
|
'O46',
|
|
'O47',
|
|
'O98',
|
|
'Z34',
|
|
'Z35',
|
|
'Z36',
|
|
'Z321',
|
|
'Z33',
|
|
'Z340',
|
|
'Z348',
|
|
'Z349',
|
|
'Z350',
|
|
'Z351',
|
|
'Z352',
|
|
'Z353',
|
|
'Z354',
|
|
'Z357',
|
|
'Z358',
|
|
'Z359',
|
|
];
|
|
}
|
|
|
|
private static function getCiapsEncerramGestacao()
|
|
{
|
|
return ['W82', 'W83'];
|
|
}
|
|
|
|
private static function getCidsEncerramGestacao()
|
|
{
|
|
return ['O02', 'O021', 'O03', 'O04', 'O05', 'O06', 'Z303'];
|
|
}
|
|
}
|