The Broad Way

[ Sharp Mind · Sharp Blade · Sharp Spirit ]

root@construct:~
/maquinas-de-estado-em-producao-16-estados-da-contabilidade
$_
<-- back to /logs
2026-02-06//LOG

Maquinas de Estado em Producao: 16 Estados da Contabilidade

O TOPO Contabil tem um workflow de conciliacao bancaria. Quando mapeei pela primeira vez, contei 16 estados distintos. DEZESSEIS. De "importacao_bruta" ate "conciliado," "parcialmente_conciliado," "contestado," "revisao_manual," "aprovado," "lancado," e mais uns nove que existem porque contabilidade eh um pesadelo vestido de planilha Excel. A primeira versao usava flag booleana. Tu conhece o padrao. isRevisado, isAprovado, isLancado, isContestado, isConciliadoManualmente. Cinco booleanos = 32 combinacoes possiveis, das quais talvez 16 sao validas e o resto eh dado corrompido esperando pra estourar. A gente pegou um bug onde uma transacao tava simultaneamente "contestada" E "aprovada" porque duas pessoas clicaram botao ao mesmo tempo e os booleanos fizeram o que booleanos fazem. Alternaram independente. Caralho. Maquina de estado resolve isso COMPLETAMENTE. Uma transacao no estado "contestado" SO pode transicionar pra "em_revisao" ou "rejeitado." Nao pode magicamente virar "aprovado" porque nao existe aresta no grafo que permita isso. A maquina de estado eh a lei, e a lei nao eh negociavel. A arquitetura eh assim. Cada estado eh um objeto com tres coisas: transicoes permitidas, condicoes de guarda e efeitos colaterais. Guard checa regra de negocio antes de permitir transicao. Esse usuario pode aprovar transacao acima de R$10K? A documentacao de suporte ta anexada? Efeitos colaterais disparam DEPOIS de transicao bem-sucedida. Manda notificacao. Cria entrada no log de auditoria. Atualiza o livro razao. O problema da explosao de estado eh real. 16 estados com media de 3 transicoes cada = 48 arestas no grafo. Cada aresta tem guard e efeito colateral. Eh MUITO codigo se tu nao tomar cuidado. Solucao: convencao sobre configuracao. A maioria dos guards eh composavel. "temPermissao AND temDocumentacao AND valorAbaixoDoLimite." Tu monta uma biblioteca de funcoes guard pequenas e compoe. Mesma coisa pros efeitos colaterais. A gente armazena o estado atual e o historico completo de transicao. Cada mudanca de estado eh entrada append-only no log com timestamp, usuario, estado anterior, estado novo e resultados dos guards. Isso NAO eh opcional pra software contabil. Auditor VAI perguntar "quem moveu isso de contestado pra aprovado e quando." Se tua resposta for "eh, deixa eu checar as colunas booleanas," tu ta ferrado. Dezesseis estados. Zero combinacoes impossiveis. Esse eh o pitch.
The Broad Way | Kinho.dev