Saltar al contenido principal
El sistema Midaz v2.x.x utiliza un mecanismo de escala flexible para garantizar el almacenamiento y procesamiento consistente de valores monetarios evitando errores de redondeo. El Amount indica el valor que se está moviendo, ajustado por una scale apropiada para la precisión. Gestionar la precisión y el escalado es crítico para manejar transacciones y saldos con precisión. Cada transacción se registra con dos atributos clave:
  • amount: Representa el valor de la transacción como un entero.
  • scale: Especifica el número de decimales asociados con el amount.

Entender amount

El amount es el valor a debitar y acreditar desde las cuentas de origen o hacia las cuentas de destino. Se puede especificar de tres maneras:
  • amount: Esta es la definición directa del valor según la escala. Por ejemplo, un amount de 10 (:amount BRL 100|2).
  • share: Esto indica un porcentaje del amount total que se distribuirá a una cuenta dada. Por ejemplo, si desea enviar el 90% del amount, debe formatearse como :share 90, que significa 90%.
  • remaining: Esto indica que el amount total restante se enviará a una cuenta.

Entender scale

La scale es un parámetro diseñado para definir cómo se interpreta el amount de la transacción.
ImportanteEste parámetro solo se admite en Midaz v2.x.x y versiones anteriores.
La scale se puede establecer en un entero positivo para especificar el número de decimales para interpretar el valor de la transacción. Por ejemplo, si scale se establece en 2, un valor de 1000 se interpretará como 10.00.
AtenciónLa scale solo acepta valores no negativos, incluido 0. Los enteros negativos (por ejemplo, -1) resultarán en un error.
En la siguiente tabla, puede encontrar algunos ejemplos de cómo funciona la scale.
ActivoAmountScaleInterpretación
BRL57625.76
ETH3850.00038
BTC1460.000014
JPY1540154
Si no se especifica el campo scale, se establece por defecto en 0, asegurando que los valores de transacción se procesen como números enteros (integers) sin decimales aplicados.

Cálculo del saldo

Los saldos se ajustan dinámicamente según la escala más grande encontrada entre todas las transacciones registradas. Esto garantiza consistencia mientras preserva la precisión. Ejemplo de flujo de trabajo:
  • Transacción 1: BRL 0.1 usando amount = 1000 y scale = 4.
  • Transacción 2: BRL 0.02 usando amount = 2000 y scale = 5.
  • Transacción 3: BRL 10 usando amount = 10 y scale = 0.
  • Transacción 4: BRL 10 usando amount = 100 y scale = 1.
  • Transacción 5: BRL 0.03 usando amount = 30 y scale = 3.
A medida que se agregan nuevas transacciones, el saldo se ajusta para reflejar la escala más grande utilizada hasta el momento:
  • Después de la Transacción 1, el saldo se almacena con scale = 4.
  • Después de la Transacción 2, el saldo se ajusta a scale = 5.
  • Después de la Transacción 3, el saldo permanece en scale = 5 ya que no se encuentra una escala más grande.
Este enfoque garantiza que los saldos reflejen el mayor nivel de precisión requerido por las transacciones registradas.
AtenciónPor razones de seguridad, la scale no puede disminuirse una vez que se ha aumentado. Por ejemplo, si la scale se ajustó de 2 a 5, no puede cambiarla a 3 ni volver a 2.