Código

function tratarComissao(valor) {
 
  // Casos nulos ou vazios
 
  if (valor === null || valor === undefined || valor === "null" || valor === "") {
 
    return 0;
 
  }
 
  
 
  // Se já for número
 
  if (typeof valor === "number") {
 
    return isNaN(valor) ? 0 : valor;
 
  }
 
  
 
  // Se for string
 
  if (typeof valor === "string") {
 
    let v = valor.trim();
 
    if (v === "") return 0;
 
  
 
    // Remove símbolos de moeda
 
    v = v.replace(/[R$€£¥]/g, "").trim();
 
  
 
    const pontos = (v.match(/\./g) || []).length;
 
    const virgulas = (v.match(/,/g) || []).length;
 
  
 
    // Se tiver ponto e vírgula, o último define o decimal
 
    if (pontos > 0 && virgulas > 0) {
 
      const ultimoPonto = v.lastIndexOf(".");
 
      const ultimaVirgula = v.lastIndexOf(",");
 
      if (ultimaVirgula > ultimoPonto) {
 
        v = v.replace(/\./g, "").replace(",", "."); // formato BR
 
      } else {
 
        v = v.replace(/,/g, ""); // formato US
 
      }
 
    }
 
    // Só vírgula
 
    else if (virgulas > 0) {
 
      if (virgulas === 1) {
 
        const partes = v.split(",");
 
        v = partes[1] && partes[1].length <= 2 ? v.replace(",", ".") : v.replace(/,/g, "");
 
      } else {
 
        v = v.replace(/,/g, "");
 
      }
 
    }
 
    // Só ponto
 
    else if (pontos > 0) {
 
      if (pontos === 1) {
 
        const partes = v.split(".");
 
        if (partes[1] && partes[1].length > 2) {
 
          v = v.replace(/\./g, "");
 
        }
 
      } else {
 
        v = v.replace(/\./g, "");
 
      }
 
    }
 
  
 
    // Remove tudo que não seja número, ponto ou sinal de menos
 
    v = v.replace(/[^\d.-]/g, "");
 
  
 
    const numero = parseFloat(v);
 
    return isNaN(numero) ? 0 : numero;
 
  }
 
  
 
  // Qualquer outro tipo
 
  return 0;
 
}
 
  
 
// Exemplo de uso:
 
const projected_commission = tratarComissao(flow.projected_commission);
 
return projected_commission

Saídas

  • Resultado da execução do código acima

Descrição adicional

Relações

← Recebe de: 2-user-variables---salvar-variaveis-de-user
→ Envia para: 4-flow-variable--- projected-commission

Observações