> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Asientos contables

> Mapea las acciones de transacción y las direcciones de ruta a clasificaciones contables, y anota cada operación con su código y su descripción contables.

Los asientos contables (también conocidos como **Rubricas**) mapean una acción de transacción y una dirección de ruta a un `code` y una `description` contables. Anotan una operación después de la resolución de la ruta. Las reglas de la ruta de operación y los tramos de la transacción determinan las cuentas participantes.

## Qué son los asientos contables

***

Una **rúbrica** mapea una acción de transacción y una dirección de ruta a una clasificación contable. En lugar de calcular cada clasificación a mano, registras las rúbricas una vez. Midaz las resuelve después de forma automática mientras procesa las transacciones.

Cada rúbrica lleva:

* **`code`**: un código contable (por ejemplo, `1.1.1.001`).
* **`description`**: una etiqueta legible para el asiento (p. ej., `Customer checking — outbound`).
* Un conjunto de **mapeos de acción**: un asiento por tipo de acción, cada uno con su propia rúbrica de débito y/o de crédito.

Cuando el motor procesa una transacción con la validación de rutas (`accounting.validateRoutes`) habilitada y una rúbrica coincidente registrada, resuelve la rúbrica de cada operación. Registra en la operación el **`routeCode`** y el **`routeDescription`** resultantes. Esto te da un registro de auditoría completo desde la transacción hasta la operación y la rúbrica. Tus equipos pueden rastrear exactamente qué regla contable se aplicó a cada movimiento.

<Note>
  Configura las rúbricas por acción en cada ruta de operación. Para las acciones `direct` y `commit`, las rutas de **origen** requieren la rúbrica de **débito** y las rutas de **destino** requieren la rúbrica de **crédito**. Las rúbricas dedicadas `block` y `unblock` son opcionales. Si están ausentes, Midaz resuelve la rúbrica `direct` para esas acciones. Las acciones `hold` y `cancel` del lado del origen requieren **ambas** rúbricas, y `overdraft` requiere **ambas** en cada tipo de ruta admitido. Las rutas **bidireccionales** siempre requieren **ambas**.
</Note>

## Los 8 tipos de acción

***

Cada acción es un evento transaccional distinto. Las primeras cinco acciones cubren el ciclo de vida de la transacción. Las últimas tres cubren los movimientos de sobregiro, bloqueo y desbloqueo. Una sola rúbrica puede mapear distintas clasificaciones de débito y crédito para cada acción. Así, cada etapa de una operación recibe la anotación contable correcta.

| Acción           | Identificador | Descripción                                                                                                                                                                                                                                             |
| :--------------- | :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Directa**      | `direct`      | Débito/crédito inmediato, de un solo paso, entre dos cuentas, sin etapas intermedias (p. ej., una comisión o un ajuste).                                                                                                                                |
| **Retención**    | `hold`        | Reserva fondos al crear un movimiento pendiente (mueve valor de `available` a `on_hold` en la cuenta de origen).                                                                                                                                        |
| **Confirmación** | `commit`      | Confirma un monto retenido antes, y libera el valor `on_hold` hacia la cuenta de destino.                                                                                                                                                               |
| **Cancelación**  | `cancel`      | Cancela/revierte una retención, y devuelve el valor `on_hold` al saldo `available` en la cuenta de origen.                                                                                                                                              |
| **Reversión**    | `revert`      | Revierte una transacción `direct` completada al crear una contratransacción que deshace la original.                                                                                                                                                    |
| **Sobregiro**    | `overdraft`   | Clasifica los movimientos de sobregiro — la rúbrica de **débito** marca el uso del sobregiro (el déficit crece) y la rúbrica de **crédito** marca el pago (el déficit se reduce). Ambas rúbricas son obligatorias cuando este asiento está configurado. |
| **Bloqueo**      | `block`       | Clasifica de forma opcional un movimiento de bloqueo de fondos que congela valor en una cuenta (por ejemplo, un `asset-freeze`).                                                                                                                        |
| **Desbloqueo**   | `unblock`     | Clasifica de forma opcional la liberación de fondos bloqueados antes hacia el saldo `available`.                                                                                                                                                        |

**Sobregiro** clasifica las operaciones acompañantes que el motor genera de forma automática durante el uso y el pago del sobregiro. Para cada tipo de ruta y dirección admitidos, configura tanto la rúbrica de débito como la de crédito. **Bloqueo** y **desbloqueo** pueden usar rúbricas dedicadas para las operaciones que producen los endpoints de transacción de bloqueo y desbloqueo. Sin esas rúbricas, esas acciones usan la rúbrica `direct`. Cuando sea necesario, registra rúbricas dedicadas para estas acciones de la misma forma que para las demás acciones.

<Tip>
  Cada acción puede apuntar a distintas clasificaciones contables de débito y crédito dentro de la misma rúbrica. Mapea solo las acciones que usa una ruta. Si habilitas la validación estricta (abajo), cubre cada acción que emiten tus transacciones.
</Tip>

## Configurar los asientos contables

***

Registras las rúbricas mediante la API como parte de tus rutas de operación. El bloque `accountingEntries` de una ruta define un asiento por acción. Cada asiento lleva su rúbrica `debit` y/o `credit`:

<CodeGroup>
  ```json accountingEntries theme={null}
  {
      "accountingEntries": {
          "direct": {
              "debit": {
                  "code": "1.1.1.001",
                  "description": "Customer checking — outbound"
              },
              "credit": {
                  "code": "1.1.1.002",
                  "description": "Customer checking — inbound"
              }
          },
          "hold": {
              "debit": {
                  "code": "1.1.1.001",
                  "description": "Customer checking — reserve"
              },
              "credit": {
                  "code": "2.1.1.001",
                  "description": "Pending settlement — hold"
              }
          }
      }
  }
  ```
</CodeGroup>

Administras estos asientos mediante los endpoints de ruta de operación. Consulta [Crear una ruta de operación](/es/reference/products/midaz/v2/create-operation-route) y [Actualizar una ruta de operación](/es/reference/products/midaz/v2/update-operation-route). Para el flujo de configuración completo, consulta [Enrutamiento de transacciones](/es/products/midaz/transaction-routing-entities#4-configure-accounting-entries-actions).

## Modos de validación

***

Midaz reacciona ante una rúbrica ausente según la configuración contable del Ledger. Dos controles distintos rigen este comportamiento:

### Predeterminado (tolerante)

De forma predeterminada (`accounting.validateRoutes` deshabilitado), Midaz no resuelve ninguna rúbrica: la transacción avanza con normalidad y los campos `routeCode` y `routeDescription` quedan vacíos (nil) en cada operación. No lanza ningún error.

### Estricto (activación explícita)

Define `accounting.validateRoutes` en `true` en la [configuración del Ledger](/es/products/midaz/ledgers#ledger-settings) para aplicar la validación de rutas. En modo estricto, una acción solicitada sin rutas en la caché de rutas de transacción devuelve `0157 ErrNoRoutesForAction`. `0117 ErrAccountingRouteNotFound` aplica cuando un ID de ruta de operación está ausente de esa caché.

<CodeGroup>
  ```json PATCH /v1/organizations/{org_id}/ledgers/{ledger_id}/settings theme={null}
  {
    "accounting": {
      "validateRoutes": true
    }
  }
  ```
</CodeGroup>

<Warning>
  En modo estricto, no trates `0117 ErrAccountingRouteNotFound` como el error de cada acción no mapeada: aplica cuando un ID de ruta de operación está ausente de la caché de rutas de transacción. Una acción solicitada sin rutas en esa caché devuelve `0157 ErrNoRoutesForAction`.
</Warning>

<Tip>
  Usa el **modo estricto** en ledgers de producción donde cada tipo de transacción necesita una clasificación contable. El valor predeterminado tolerante ayuda mientras incorporas rutas. En producción, puede dejar movimientos sin clasificación de forma silenciosa.
</Tip>

Cuando Midaz encuentra una rúbrica coincidente, anota la operación con dos campos:

* **routeCode**: el `code` de la `AccountingRubric` resuelta para esa acción y dirección.
* **routeDescription**: la descripción de la rúbrica resuelta, que se completa junto con `routeCode`.
