Code Library

M · UDF

fnClassificacaoIMC

Classifica o IMC pelas faixas da OMS, em código ordenável ou pelo nome da faixa.

Categoria: SaúdeTipo: UDFVersão: v2.0Fonte: Paulo André Jesus — OfficeTuning · faixas: OMSAtualizado em: 25/09/2026
Documentação completa na Function Library →

Sintaxe

fnClassificacaoIMC(IMC as nullable number, optional Rotulo as nullable logical) as nullable text

Argumentos

NomeTipoObrigatórioDescrição
IMCnullable numberSimÍndice de massa corporal.
Rotulonullable logicalNãotrue devolve o nome da faixa; omitido devolve o código XX-Y.

Retorno

nullable text

Código completo

let
    fnClassificacaoIMC = (IMC as nullable number, optional Rotulo as nullable logical) as nullable text =>
        let
            // {limite superior (exclusivo), código, rótulo}
            vFaixas = {
                {17, "01-7", "Magreza moderada a grave"},
                {18.5, "02-6", "Magreza leve"},
                {25, "03-5", "Peso normal"},
                {30, "04-4", "Pré-obesidade"},
                {35, "05-3", "Obesidade grau I"},
                {40, "06-2", "Obesidade grau II"},
                {Number.PositiveInfinity, "07-1", "Obesidade grau III"}
            },
            vFaixa = List.First(List.Select(vFaixas, each IMC < _{0}), null)
        in
            if IMC = null or vFaixa = null then null
            else if Rotulo = true then vFaixa{2}
            else vFaixa{1},

    Documentacao = [
        Documentation.Name = "fnClassificacaoIMC",
        Documentation.Description = "Classifica o IMC pelas faixas da OMS.",
        Documentation.LongDescription = "Retorna o código XX-Y (XX sobe com o IMC; Y é a ordem invertida) ou, com Rotulo = true, o nome da faixa. IMC null retorna null.",
        Documentation.Category = "Saúde",
        Documentation.Author = "Paulo André Jesus",
        Documentation.Version = "2.0",
        Documentation.Examples = {
            [Description = "Código", Code = "fnClassificacaoIMC(22)", Result = """03-5"""],
            [Description = "Rótulo", Code = "fnClassificacaoIMC(37, true)", Result = """Obesidade grau II"""],
            [Description = "Nulo", Code = "fnClassificacaoIMC(null)", Result = "null"]
        }
    ]
in
    Value.ReplaceType(fnClassificacaoIMC, Value.ReplaceMetadata(Value.Type(fnClassificacaoIMC), Documentacao))

Exemplos

fnClassificacaoIMC(22)
// "03-5"

fnClassificacaoIMC(37, true)
// "Obesidade grau II"

Dicas e observações

💡 Faixas: < 17 magreza moderada a grave (01-7) · 17–18,4 magreza leve (02-6) · 18,5–24,9 peso normal (03-5) · 25–29,9 pré-obesidade (04-4) · 30–34,9 obesidade I (05-3) · 35–39,9 obesidade II (06-2) · ≥ 40 obesidade III (07-1). ⚠️ No código XX-Y, Y é só a ordem invertida — não mede risco: magreza e obesidade grave estão nas duas pontas.