14 lines
1.2 KiB
Markdown
14 lines
1.2 KiB
Markdown
# ADR-006 — Moeda, precisão e arredondamento
|
|
|
|
- Estado: Aceite como contrato de representação; regra de cálculo requer aprovação do domínio.
|
|
- Data: 2026-10-01
|
|
- Contexto: valores exactos usam `numeric(20,2)` em partes do schema; moedas são códigos de 3 letras, mas a lista autorizada e políticas de arredondamento não estão completas.
|
|
|
|
## Decisão
|
|
|
|
Representar montante como decimal exacto em SQL e como string decimal no JSON/OpenAPI para evitar perda IEEE-754; transportar código monetário separadamente e exigir ambos ou nenhum nos campos emparelhados. `^[A-Z]{3}$` verifica formato, não validade ISO nem moeda permitida. Não converter moedas nem arredondar implicitamente. A escala, modo e momento de arredondamento dependem de regra aprovada pelo domínio e devem ser identificados em cada operação; resultados persistidos registam a moeda e, se aplicável, a regra/versão usada. Não inferir taxas fiscais, taxa de câmbio ou número de casas pela moeda.
|
|
|
|
## Alternativas e consequências
|
|
|
|
Float/double é rejeitado por erro binário. Inteiro em unidade mínima depende de escala monetária ainda não aprovada. É necessário decidir allowlist de moedas e regras específicas antes de cálculo financeiro público.
|