<?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

/*

Setor: Sa�de

Indicador: 
	SA4: Taxa de Cobertura pr�-natal

Defini��o: 
	Percentual de gestantes residentes inseridas na assist�ncia pr�-natal do 
	munic�pio

C�lculo: 
	N�mero de usu�rias inscritas no programa de assist�ncia pr�-natal do 
	munic�pio/N�mero de nascidos vivos do ano anterior *100

Unidade de medida: 
	%

Periodicidade de c�lculo: 
	Anual

Granularidade: 
	Para o munic�pio
	Por 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 e 
	Nascidos vivos - DATASUS

Observa��es: 
	Objetiva avaliar a ades�o das gestantes � assist�ncia pr�-natal municipal.

*/

/* 

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

Formato do retorno
	CCC;III;G1;PPP;VVV
	CCC = c�digo de retorno da chamada ao Calculador
	III = c�digo do indicador retornado, em caixa baixa
	G1 = nome do gr�o retornado (string, pode estar acentuado 
		 e com letras ma�usculas e min�sculas)
	PPP = per�odo de refer�ncia do valor retornado
VVV = valor retornado
	
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"];

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

// indicador correto
if(strtoupper($indicador) != "SA4")
{
    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;
}

include '../../common/begin.php';

if($granularidade == 'faixaetariagestante')
{
	$faixas = array('10 a 14' => array(array(10,14),'10_a_14','10 a 14 anos'),
					'15 a 19' => array(array(15,19),'15_a_19','15 a 19 anos'),
					'20 a 29' => array(array(20,29),'20_a_29','20 a 29 anos'),
					'30 a 39' => array(array(30,39),'30_a_39','30 a 39 anos'),
					'40+' => array(array(40,1000),'maior_40','40 anos ou mais'));
	$sql = "select valorgranularidade, valortermo from
			pcni_painel.seriehistoricatermo where codigotermo='TSA02' and
			codigogranularidade=19 and valorperiodo='$ano' and 
			codigoperiodicidade=5";
	$valor_pop_faixas_list = $doc->fetchAll($sql);

	$valor_pop_faixas = array();
	foreach($faixas as $faixa)
	{
		$pop = 0;
		$found = false;
		foreach($valor_pop_faixas_list as $valor_pop)
		{
			$grao = trim($valor_pop['valorgranularidade']);

			if(is_array($faixa[2]) && in_array($grao, $faixa[2]))
			{
				$pop += $valor_pop['valortermo'];
				$found = true;
			}
			else if($grao == $faixa[2])
			{
				$pop += $valor_pop['valortermo'];
				$found = true;
			}
		}

		if($found)
			$valor_pop_faixas[] = $pop;
		else
			$valor_pop_faixas[] = null;

	}

	$idfaixa = 0;
	$sql = 'select case';
	foreach($faixas as $faixa)
	{
		$limites = $faixa[0];

		$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(p.*)
		from saude.pessoa p
		where p.id in (select idpessoa from saude.inscricao_programa where
					   data between '$data_ini' and '$data_fim' and
                       data_desligamento is not null and idprograma = 4)
		group by idfaixa
EOT;

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

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

	foreach($infos as $info)
	{
		$pop = $valor_pop_faixas[$info['idfaixa']];

		if($pop !== NULL)
		{
			if($pop)
				$valores[$info['idfaixa']] = $info['count']/$pop*100.0;
			else
				$valores[$info['idfaixa']] = 0;
		}
	}

	foreach($nome_faixas as $idfaixa => $nome)
	{
		$valor = isset($valores[$idfaixa]) ? $valores[$idfaixa] : 0;
		if(isset($valores[$idfaixa]))
			echo "0;$indicador;".$nome.";$periodo;".$valor."\n";
		else
			echo "1;$indicador;".$nome.";$periodo;0\n";
	}
}
else if($granularidade == 'municipio')
{
	$sql = "select valorgranularidade, valortermo from
			pcni_painel.seriehistoricatermo where codigotermo='TSA02' and
			codigogranularidade=1 and valorperiodo='$ano' and 
			codigoperiodicidade=5";
	$valor_pop_faixas = $doc->fetchAll($sql);

	if(!empty($valor_pop_faixas))
	{
		$sql = <<<EOT
			select count(p.*)
			from saude.pessoa p
			where p.id in (select idpessoa from saude.inscricao_programa where
						   data between '$data_ini' and '$data_fim' and
						   data_desligamento is not null and idprograma = 4)
EOT;

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

		$pop = $valor_pop_faixas[0]['valortermo'];
		if($pop)
			$valor = $info['count'] / $pop;
		else
			$valor = 0;

		echo "0;$indicador;Nova Igua�u;$periodo;".$valor;
	}
	else
		echo "1;$indicador;Nova Igua�u;$periodo;0";
}
else
{
	echo "5";
	exit;
}

?>
