Árbol de decisión

Una regla de arquitectura que no ayuda a tomar decisiones termina siendo una frase decorativa. Este árbol existe para responder una duda concreta: ¿esta operación contiene una decisión del negocio o solo ejecuta una tarea técnica?

¿Alguien del negocio preguntaría por esto?
        │
       sí  →  api → flow (consulta fx/db y aplica reglas)
                    → api guarda mediante fx/db si hay cambios
        │
       no  →  api → fx

Y, si después de escribir hay que hablar con otro sistema, eso se queda en api/ o en api/actions/.

Operación Camino Por qué
Ver el carrito api → fx/db Lectura sin regla
Listar productos activos api → fx/db Filtro técnico
Agregar producto API → flow → API → fx/db El flow comprueba stock y cantidad; API guarda el carrito
Aplicar un cupón API → flow → API → fx/db El flow aplica la promoción; API guarda el resultado
Checkout API → flow → API → fx/db, luego acciones El flow arma el pedido; API lo guarda y coordina cobro y aviso
Tocar updated_at api → fx/db Campo técnico
¿Solo lectura?
    sí → ¿hay filtro de negocio o permiso?
            sí → flow
            no → fx directo
    no → ¿hay validación o regla?
            sí → flow
            no → fx directo

Esto es arquitectura adaptativa. El árbol sirve para no crear un flow vacío y, al mismo tiempo, para no esconder una regla dentro del handler. No se trata de escoger el camino más corto, sino el lugar que permite entender mejor la operación.

En las operaciones con cambios, el flow puede consultar fx/db, pero no escribe. API recibe su resultado y ejecuta la escritura, manteniendo la misma transacción cuando la regla lo requiere.