Domain modeling · Modelagem de domínio
English · Português · Guided tour / Visita guiada · Validation / Validação
EN: Does every transfer preserve the total value of the accounts?
PT: Cada transferência preserva o valor total das contas?
| Goal · Objetivo | Where to go · Por onde começar |
|---|---|
| Understand a real example · Entender um exemplo concreto | Walkthrough / Roteiro |
| Reproduce and compare · Reproduzir e comparar | Evidence tour / Visita às evidências |
| Inspect the checks · Inspecionar as verificações | Validation record / Registro de validação · CI |
Example result · Resultado do exemplo: Transfer 12.35 from Alice (100.00) to Bob (25.00): balances 87.65 and 37.35; total stays 125.00. / Transferir 12,35 de Alice (100,00) para Bob (25,00): saldos 87,65 e 37,35; total de 125,00.
Try a comparison · Experimente uma comparação
EN: Follow the 12.35 transfer, then inspect rejected insufficient funds and concurrent-transfer tests.
PT: Acompanhe a transferência de 12,35 e inspecione saldo insuficiente e testes de transferências concorrentes.
An executable account and transfer model focused on exact cent arithmetic, atomic balance changes and clear failure behavior.
- Decimal balances accept cent-exact values and reject NaN, infinity, booleans, negative values and fractional cents.
- Transfers acquire both account locks in a stable order and validate both sides before changing balances.
- Regression tests cover insufficient funds, failed transfers, concurrent operations and total-value conservation.
Requirements: Python 3.12 / Python 3.12.
Run from the repository root. The validation environment installs the components exercised by the tests and documented example; optional integrations may need their separate dependencies.
python -m venv .venv
# Activate .venv for your shell / Ative .venv no seu terminal
python -m pip install -r requirements-validation.txt
python -m pytest -q
python -m examples.review_demoInput contract / Contrato de entrada: Single currency / moeda única; use decimal strings / use strings decimais; maximum amount / valor máximo 999999999999.99.
Expected behavior / Comportamento esperado: Transfer 12.35 from Alice (100.00) to Bob (25.00): balances 87.65 and 37.35; total stays 125.00. / Transferir 12,35 de Alice (100,00) para Bob (25,00): saldos 87,65 e 37,35; total de 125,00.
flowchart LR
A["Account operations / Operações de conta"]
B["Cent-exact validation / Validação exata de centavos"]
C["Ordered account locks / Bloqueios ordenados"]
D["Atomic balance update / Atualização atômica de saldos"]
A --> B --> C --> D
The main path can be followed in src/transactions/bank.py. Examples call the actual implementation and include assertions; they are not pseudocode.
An educational domain model, not an operating bank. There is no durable ledger, authentication, interest, fees, exchange-rate conversion or regulatory workflow. Thread safety applies within one process.
Replaced floating-point balances with validated Decimal values and made transfers atomic across both accounts.
Modelo executável de contas e transferências com foco em aritmética exata de centavos, alterações atômicas de saldo e comportamento claro em falhas.
- Saldos Decimal aceitam valores exatos em centavos e rejeitam NaN, infinito, booleanos, negativos e frações de centavo.
- Transferências obtêm os bloqueios das contas em ordem estável e validam ambos os lados antes de alterar saldos.
- Testes cobrem saldo insuficiente, transferências recusadas, concorrência e conservação do valor total.
Use os comandos da seção acima a partir da raiz do repositório. Requisitos: Python 3.12 / Python 3.12. O ambiente de validação instala os componentes exercitados pelos testes e pelo exemplo documentado; integrações opcionais podem exigir dependências próprias.
O fluxo principal está em src/transactions/bank.py. Os exemplos usam a implementação real e verificam resultados com asserções; não são pseudocódigo. O diagrama apresenta os mesmos passos nos dois idiomas.
Modelo didático de domínio, sem operação bancária real. Não há livro contábil persistente, autenticação, juros, taxas, conversão cambial ou fluxo regulatório. A proteção concorrente vale dentro de um processo.
Substituídos saldos em ponto flutuante por valores Decimal validados e tornadas atômicas as transferências entre contas.
| Location / Local | Purpose / Finalidade |
|---|---|
| Implementation / Implementação | Main domain behavior / Comportamento principal do domínio |
| Example / Exemplo | Executable scenario / Cenário executável |
| Tests / Testes | Normal behavior and failure cases / Fluxos válidos e casos de falha |
| Validation notes / Notas de validação | Corrections, evidence and boundaries / Correções, evidências e limites |
| Workflow / Automação | Automated checks / Verificações automatizadas |
EN: When changing behavior, update the contract, the worked example and a regression test together. Keep synthetic fixtures separate from real data. A passing test suite demonstrates the listed software behaviors; it does not certify a deployment or domain outcome.
PT: Ao alterar comportamento, atualize em conjunto o contrato, o exemplo e um teste de regressão. Separe amostras fictícias de dados reais. Testes aprovados demonstram os comportamentos de software listados; não certificam implantação nem resultado no domínio.
Author / Autor: Gabriel Demetrios Lafis · Institutional contact / Contato institucional
License / Licença: repository license.