Code Library M — Validação, Formatação e Utilitários
Code Library M — Validação, Formatação e Utilitários
MUST
fnGrausParaDecimais,fnClassificacaoIMC,fnTelefoneAnonimoefnDocumentoAnonimojá aparecem corrigidos neste documento (capitalizaçãofnminúsculo + nomes ASCII puro, sem acento) — aplicar essas 4 renomeações na fonte real do Code Library antes de publicar. Ver achados 1 e 2 para o racional de cada uma.- Creditar autoria externa nas 2 funções adaptadas de terceiros
(
fnFeriados,fnHorasEntreDatas) — não são 100% autorais como o resto do Code Library, e o próprio script já registra os créditos originais emDocumentation.Author.
AVOID
- Não reintroduzir os nomes originais (
FnGrausParaDecimaiscomFmaiúsculo, ou as 3 variantes acentuadas) — foram corrigidos por quebrarem a convençãofn+ PascalCase ASCII já em uso no restante do Code Library (achados 1 e 2 abaixo detalham o porquê).
1. Tabela de funções
| Função (como está no script) | Categoria | Assinatura | Autoria |
|---|---|---|---|
fnFormatWithLeadingZeros | Formatação | (pNumero as nullable any, pNumeroDeCaracteres as nullable number) as nullable text | Paulo André Jesus |
fnValidaCPF | Funções de Validação | (CPF as text) as logical | Paulo André Jesus |
fnValidaCNPJ | Funções de Validação | (CNPJ as text) as logical | Paulo André Jesus |
fnFormataNome | Formatação de Texto | (NomeCompleto as text) as text | Paulo André |
fnNuvemDePalavras | Funções de Texto | (texto as text) as text | Paulo André Jesus |
fnGrausParaDecimais ⚠️ | Funções Geográficas | (graus as text) as number | Paulo André Jesus |
fnRemoveAcentos | Text | (texto as nullable text) as text | Paulo André Jesus |
fnClassificacaoIMC ⚠️ | Funções de Saúde | (ClassificarIMC as nullable number) as nullable text | Paulo André Jesus |
fnFeriados | Funções de Datas | (y as number) as table | Laennder Alves, adaptado por Paulo André Jesus |
fnTelefoneAnonimo ⚠️ | Funções de Texto | (telefone as text) as text | Paulo André Jesus |
fnDocumentoAnonimo | Funções de Texto | (documento as text) as text | Paulo André Jesus |
fnHorasEntreDatas | Funções de Data e Hora | (Start as datetime, End as datetime) as list | Imke Feldmann, adaptado por Paulo André Jesus |
2. Descrições (resumo, ver script para versão completa)
fnFormatWithLeadingZeros— zeros à esquerda, aceita número ou texto, aplicaABSinternamente.fnValidaCPF/fnValidaCNPJ— validam estrutura e dígitos verificadores, aceitam entrada formatada ou não, rejeitam sequências repetidas (111.111.111-11etc.).fnFormataNome— capitalização correta de nomes próprios: mantém partículas minúsculas (de,van), trata prefixos compostos (McGregor,MacDonald), hífens e apóstrofos.fnNuvemDePalavras— remove stopwords (artigos, preposições) para preparar texto para nuvem de palavras.fnGrausParaDecimais(nome corrigido) — converte coordenada geográfica em graus/minutos/segundos (23°34'45"S) para decimal, interpretando a direção (N/S/E/W/O).fnRemoveAcentos— remove acentos via truque de codificação (Text.ToBinarycom code page 1251 →Text.FromBinaryUTF-8).fnClassificacaoIMC— classifica IMC pelos intervalos da OMS.fnFeriados— tabela de feriados fixos e móveis do ano informado; feriados móveis calculados a partir do Domingo de Páscoa (algoritmo de Gauss).fnTelefoneAnonimo/fnDocumentoAnonimo— anonimização parcial (preserva início/fim, mascara o meio) — uso típico: LGPD, exibir dado sensível em ambiente de demonstração/treinamento sem expor o valor real.fnHorasEntreDatas— lista de todas as horas cheias entre duas datas/horários.
3. Achados da auditoria
Achado 1 — inconsistência de capitalização (corrigida): o script
original tinha FnGrausParaDecimais com F maiúsculo — única das 12
funções que quebrava a convenção fn + PascalCase que as outras 11
seguem à risca. Corrigido neste documento para fnGrausParaDecimais.
Achado 2 — caracteres acentuados em 3 identificadores (corrigido —
nomes ASCII puro): os nomes originais (fnClassificaçãoIMC,
fnTelefoneAnônimo, fnDocumentoAnônimo) usavam ç/ã/ô no
próprio nome da função. M aceita identificadores Unicode, então
funcionava no Power BI Desktop sem erro — mas é uma prática arriscada:
chamar essas funções de dentro de outra expressão M exige escapar o
nome com #"..." (ex.: #"fnClassificaçãoIMC"(25)), e ferramentas de
terceiros ou pipelines de automação via XMLA/CI podem não lidar bem
com identificadores não-ASCII. Renomeados neste documento para
fnClassificacaoIMC, fnTelefoneAnonimo e fnDocumentoAnonimo (sem
acento, chamada direta sem #"..." necessário) — aplicar o mesmo na
fonte real do Code Library.
Achado 3 — autoria mista, não 100% autoral: diferente do restante
do Code Library (DataHora, Delta, Estatistica — todos de autoria
própria), fnFeriados e fnHorasEntreDatas são adaptações de
funções de terceiros (Laennder Alves e Imke Feldmann,
respectivamente — ambos nomes conhecidos da comunidade Power Query).
O próprio script já registra isso em Documentation.Author. Manter a
atribuição visível na Biblioteca é tanto uma questão de crédito quanto
de transparência sobre proveniência do código.
4. Padrão de documentação usado no script (para referência)
Todas as 12 funções seguem o mesmo padrão de metadados via
Value.ReplaceType:
Value.ReplaceType(
Função,
Value.ReplaceMetadata(
Value.Type(Função),
[
Documentation.Name = "...",
Documentation.Description = "...",
Documentation.LongDescription = "...",
Documentation.Category = "...",
Documentation.Source = "...",
Documentation.Author = "...",
Documentation.Version = "..."
]
)
)
Esse padrão já é exatamente o que torna essas funções "auto-descritivas" no painel de Insights/Ajuda do Power Query — vale documentar como convenção recomendada para qualquer UDF M nova do Code Library, mesmo sem ligação direta com a Function Library.
5. O que fazer com BIBLIO_1.HTM
O segundo arquivo enviado junto é um artefato HTML/JS autocontido — aparenta ser um visualizador interativo dessas mesmas 12 funções (bundle com índice de nome/categoria/tipo de retorno embutido no JavaScript). Não extraí conteúdo adicional dele além do que já está no script TMDL (fonte mais confiável e completa). Se ele for um artefato gerado que você quer reaproveitar como peça de UI de referência (não como fonte de dados), me avisa — é um objeto diferente de "conteúdo a auditar".