<?PHP
/*
 * DIREITOS AUTORAIS RESERVADOS (C) 2007 UFRJ
 * 
 * ESTE PROGRAMA É SOFTWARE LIVRE; VOCÊ PODE REDISTRIBUÍ-LO E/OU MODIFICÁ-LO SOB OS
 * TERMOS DA LICENÇA PÚBLICA GERAL GNU CONFORME PUBLICADA PELA FREE SOFTWARE FOUNDATION;
 * TANTO A VERSÃO 2 DA LICENÇA, COMO (A SEU CRITÉRIO) QUALQUER VERSÃO POSTERIOR.

 * ESTE PROGRAMA É DISTRIBUÍDO NA EXPECTATIVA DE QUE SEJA ÚTIL, PORÉM, SEM NENHUMA GARANTIA;
 * NEM MESMO A GARANTIA IMPLÍCITA DE COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
 * CONSULTE A LICENÇA PÚBLICA GERAL DO GNU PARA MAIS DETALHES.
 * 
 * VOCÊ DEVE TER RECEBIDO UMA CÓPIA DA LICENÇA PÚBLICA GERAL DO GNU JUNTO COM ESTE PROGRAMA; 
 * SE NÃO, ACESSE <<HTTP://WWW.GNU.ORG/LICENSES/LICENSES.PT-BR.HTML>>
 */

<?php

require_once '../../common/begin.php';

/*

Setor: Sa�de

Indicador: 
	SA5. �ndice de Adequa��o do Pr�-natal Realizado

Defini��o: 
	Percentual de gestantes inscritas no Programa de Assist�ncia Pr�-Natal com 
	registro de pelo menos 6 (seis) consultas de pr�-natal.

C�lculo: 
	N�mero de gestantes com registro de pelo menos 6 (seis) consultas de 
	pr�-natal/Total de gestantes inscritas no Programa de Assist�ncia 
	Pr�-Natal.


Unidade de medida: 
	%

Periodicidade de c�lculo: 
	Anual

Granularidade: 
	Para o munic�pio e faixa et�ria da gestante (10-14, 15-19, 20-29, 30-39, 40 
	+).

Estilo: 
	Maior, melhor

Fonte: 
	Sistema de Coleta de Dados do Usu�rio da Rede de Sa�de - form online

Observa��es: 
	Meta: 1

*/

/* 

Parametros de entrada:
	indicador (SA5)
	granularidade (municipio, faixaetaria)
	periodo (ano: numerico)

C�digos de Retorno:
	0 - Sucesso
	1 - N�o tenho valor
	2 - N�o sou eu
	3 - Um ou mais Par�metros obrigat�rios faltando
	4 - Um ou mais Par�metros fora do formato esperado
	5 - Granularidade invalida
*/

$indicador = $_GET["indicador"];
$granularidade = $_GET["granularidade"];
$periodo = $_GET["periodo"];

$ID_PRE_NATAL = 4;

// obrigatoriedade dos par�metros
if(empty($indicador) || empty($granularidade) || empty($periodo))
{
    echo "3";
    exit;
}

// indicador correto
if(strtoupper($indicador) != "SA5")
{
    echo "2";
    exit;
}

$data_ini = null;
$data_fim = null;

// Anual?
if(is_numeric($periodo))
{
	$ano = $periodo;

	$data_ini = "$ano-01-01";
	$data_fim = "$ano-12-31";
}
else
{
    echo "4";
    exit;
}

if($granularidade == 'faixaetaria')/*{{{*/
{
	$faixas = array('10 a 14' => array(10,14),
					'15 a 19' => array(15,19),
					'20 a 29' => array(20,29),
					'30 a 39' => array(30,39),
					'40+' => array(40,1000));

	$idfaixa = 0;
	$sql = 'select case';
	foreach($faixas as $limites)
	{
		$sql .= <<<EOT
			when extract(year from age(p.data_nascimento)) 
					between {$limites[0]} and {$limites[1]} then $idfaixa
EOT;
		++$idfaixa;
	}
	$sql .= <<<EOT
	else $idfaixa
	end as idfaixa,
	count(nullif(pc.count>=6, false)) as seis_consultas,
	count(pc.id) as count
	from (select p.id, count(cp.*) 
		  from saude.pessoa as p
		  left join (saude.comparecimento c
				inner join saude.comparecimento_programa cp 
					on cp.idcomparecimento=c.id 
				inner join saude.inscricao_programa ip 
					on cp.idinscricao_programa=ip.id 
						and ip.idprograma=$ID_PRE_NATAL
		  ) on c.idpessoa=p.id
		  where c.id is null or c.data between '$data_ini' and '$data_fim'
		  group by p.id) as pc
	inner join saude.pessoa as p on p.id = pc.id
	group by idfaixa
EOT;

	$infos = $doc->fetchAll($sql);


	$nome_faixas = array_keys($faixas);
	$valores = array();

	foreach($infos as $info)
		$valores[$info['idfaixa']] = $info['seis_consultas']/$info['count']*100.0;

	foreach($nome_faixas as $f => $nome)
	{
		$valor = isset($valores[$f]) ? $valores[$f] : 0;
		echo "0;$indicador;".$nome.";$periodo;".$valor."\n";
	}
}/*}}}*/
else if($granularidade == 'municipio')/*{{{*/
{
	$sql = <<<EOT

	select
	count(nullif(pc.count>=6, false)) as seis_consultas,
	count(pc.id) as count
	from (select p.id, count(c.*) 
		  from saude.pessoa as p
		  left join (saude.comparecimento c
				inner join saude.comparecimento_programa cp 
					on cp.idcomparecimento=c.id 
				inner join saude.inscricao_programa ip 
					on cp.idinscricao_programa=ip.id 
						and ip.idprograma=$ID_PRE_NATAL
		  ) on c.idpessoa=p.id
		  where c.id is null or c.data between '$data_ini' and '$data_fim'
		  group by p.id) as pc
EOT;

	$info = $doc->fetchRow($sql);

	$valor = $info['seis_consultas'] / $info['count']*100.0;

	echo "0;$indicador;Nova Igua�u;$periodo;".$valor;
}/*}}}*/
else // granularidade inv�lida {{{
{
	echo "5";
	exit;
}/*}}}*/
?>
