public static function calcularPercentilMargens($imc, $sexo, $nascimento)
 {
     $curva = new Curva();
     // Margens dos percentis baseado no cálculo inicial.
     $margemIMCInferior = $imc - MARGEM_LIMITE_PERCENTIL;
     $margemIMCSuperior = $imc + MARGEM_LIMITE_PERCENTIL;
     // Valores crescentes e decrescentes do IMC.
     $imcDecrescente = $imc;
     $imcCrescente = $imc;
     $idadeMeses = DataUtil::calcularIdadeMeses($nascimento);
     $db = new DbHandler();
     // Verificação do percentil inferior.
     $percentilInferior = NULL;
     while (empty($percentilInferior) && $imcDecrescente >= $margemIMCInferior) {
         // Decrescer gradativamente os valores do IMC na escala.
         $imcDecrescente = $imcDecrescente - ESCALA_IMC_PERCENTIL;
         $percentilInferior = $db->selecionarPercentil($imcDecrescente, $sexo, $idadeMeses);
     }
     $curva->setPercentilInferior($percentilInferior);
     // Verificação do percentil superior.
     $percentilSuperior = NULL;
     while (empty($percentilSuperior) && $imcCrescente <= $margemIMCSuperior) {
         // Crescer gradativamente os valores do IMC na escala.
         $imcCrescente = $imcCrescente + ESCALA_IMC_PERCENTIL;
         $percentilSuperior = $db->selecionarPercentil($imcCrescente, $sexo, $idadeMeses);
     }
     $curva->setPercentilSuperior($percentilSuperior);
     return $curva;
 }
예제 #2
0
/**
 * 
 * @param type $name Description
 * 
 * @return type Description
 */
function calcularPerfilAntropometrico()
{
    /**
     * Anamnese: Peso, altura, idade, sexo
     * Acima de 19 calcular IMC
     * Abaixo de 19 anos verificar percentil: IMC x Idade.
     */
    $request = \Slim\Slim::getInstance()->request();
    $body = $request->getBody();
    $anamneseJson = json_decode($body);
    // Entrevistado
    $nascimento = $anamneseJson->entrevistado->nascimento;
    $sexo = strtoupper($anamneseJson->entrevistado->sexo);
    // Anamnese.
    $peso = $anamneseJson->peso;
    $altura = $anamneseJson->altura;
    $validacao = PerfilAntropometricoValidate::validate($peso, $altura, $sexo, $nascimento);
    if ($validacao == VALIDO) {
        $anamnese = new Anamnese();
        $anamnese->setPeso($peso);
        $anamnese->setAltura($altura);
        // Entrevistado
        $entrevistado = new Entrevistado();
        $entrevistado->setNascimento($nascimento);
        $entrevistado->setSexo($sexo);
        $anamnese->setEntrevistado($entrevistado);
        // Calcular IMC
        $imcValor = IMCController::calculaIMC($peso, $altura);
        $idadeMeses = DataUtil::calcularIdadeMeses($nascimento);
        $idadeAnos = DataUtil::calcularIdadeAnos($nascimento);
        $curva = new Curva();
        // Acima de 19 calcular IMC.
        if ($idadeMeses > IDADE_PERCENTIL_19) {
            // Cálculo do IMC para entrevistado acima de 19 anos.
            $imc = new Imc();
            $imc->setValor($imcValor);
            $curva->setImc($imc);
        } else {
            $percentilMediano = PercentilController::calcularPercentil($imcValor, $sexo, $nascimento);
            if (!empty($percentilMediano)) {
                $curva->setPercentilMediano($percentilMediano);
            } else {
                $curva = PercentilController::calcularPercentilMargens($imcValor, $sexo, $nascimento);
            }
        }
        // IMC padrão.
        $imc = new Imc();
        $imc->setValor($imcValor);
        $curva->setImc($imc);
        $diagnostico = PercentilController::determinarDiagnosticoNutricional($curva);
        $curva->setDiagnostico($diagnostico);
        echoRespnse(HTTP_OK, $curva);
    } else {
    }
}