<?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: 
	SA1: Taxa de Preven��o ao C�ncer Ginecologico

Defini��o: 
	Avalia��o do percentual de mulheres na faixa et�ria de maior risco para o 
	c�ncer ginecol�gico (20-59 anos) submetida a exames preventivos do c�ncer 
	na rede municipal de servi�os de sa�de.

C�lculo: 
	N�mero de exames preventivos realizados na rede municipal de servi�os de 
	sa�de em residentes de Nova Igua�u/ total de mulheres de 20-59 anos 
	residente * 100

Unidade de medida: 
	%

Periodicidade de c�lculo: 
	Anual

Granularidade: 
	Para o munic�pio. Separar tamb�m por faixa et�ria (20-29, 30-39, 40-49, 
	50-59 )

Estilo: 
	Maior, melhor

Fonte: 
	Sistema de Coleta de Dados do Usu�rio da Rede de Sa�de - form online - e 
	IBGE (Censo e Contagem)

*/

/* 

Parametros de entrada:
	indicador (SA9)
	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) != "SA9")
{
    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 == 'faixaetaria')
{
	$faixas = array('20 a 29' => array(array(20,29),'fem,20-29 anos'),
					'30 a 39' => array(array(30,39),'fem,30-39 anos'),
					'40 a 49' => array(array(40,49),'fem,40-49 anos'),
					'50 a 59' => array(array(50,59),'fem,50-59 anos'));

	$sql = "select valorgranularidade, valortermo from
			pcni_painel.seriehistoricatermo where codigotermo='TSA01' and
			codigogranularidade=20 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[1]) && in_array($grao, $faixa[1]))
			{
				$pop += $valor_pop['valortermo'];
				$found = true;
			}
			else if($grao == $faixa[1])
			{
				$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(cp.*)

		from saude.comparecimento_programa cp 
		inner join saude.comparecimento c on c.id = cp.idcomparecimento
		inner join saude.inscricao_programa ip on ip.id = cp.idinscricao_programa
		inner join saude.pessoa p on ip.idpessoa = p.id
		where c.data between '$data_ini' and '$data_fim' and
              ip.idprograma = 6
		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='TSA01' and
			codigogranularidade=1 and valorperiodo='$ano' and 
			codigoperiodicidade=5";
	$valor_pop_faixas = $doc->fetchAll($sql);

	if(!empty($valor_pop_faixas))
	{
		$sql = <<<EOT
			select count(cp.*)
			from saude.comparecimento_programa cp 
			inner join saude.comparecimento c on c.id = cp.idcomparecimento
			inner join saude.inscricao_programa ip on ip.id = cp.idinscricao_programa
			where c.data between '$data_ini' and '$data_fim' and
				  ip.idprograma = 6
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;
}

?>
