Skip to content

About

Exact-cent accounts and atomic transfers / Contas com centavos exatos e transferências atômicas.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Banking Domain Model

Domain modeling · Modelagem de domínio

Workflow illustration: Cent-exact amounts → Atomic transfer → Conserved balances

Checks 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?

Start here · Comece aqui

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.

English

An executable account and transfer model focused on exact cent arithmetic, atomic balance changes and clear failure behavior.

What works

  • 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.

Reproducible walkthrough

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_demo

Input 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.

Architecture / Arquitetura

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
Loading

The main path can be followed in src/transactions/bank.py. Examples call the actual implementation and include assertions; they are not pseudocode.

Scope and assumptions

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.

Changes verified in this review

Replaced floating-point balances with validated Decimal values and made transfers atomic across both accounts.

Português

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.

Funcionalidades disponíveis

  • 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.

Execução reproduzível

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.

Escopo e premissas

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.

Melhorias verificadas nesta revisão

Substituídos saldos em ponto flutuante por valores Decimal validados e tornadas atômicas as transferências entre contas.

Repository guide / Guia do repositório

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

Development / Desenvolvimento

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.

About

Exact-cent accounts and atomic transfers / Contas com centavos exatos e transferências atômicas.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages