> ## 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 a las cuentas del ledger que debitan y acreditan, y anota cada operación con su clasificación contable.

Los Asientos Contables (también conocidos como **Rúbricas**) asignan una acción de transacción a los asientos del ledger que genera. El motor usa esta asignación para resolver qué cuentas debitar y acreditar en cada acción. Luego anota cada operación con los códigos contables de partida doble correctos en cada etapa del ciclo de vida de la transacción.

## Qué son los Asientos Contables

***

Una **rúbrica** asigna una acción de transacción a las cuentas del ledger que el motor debe debitar y acreditar. En lugar de calcular cada clasificación a mano, registras las rúbricas una sola vez. Midaz luego las resuelve automáticamente a medida que procesa las transacciones.

Cada rúbrica lleva:

* **`code`** — un identificador único (el código del plan de cuentas, ej., `1.1.1.001`).
* **`description`** — una etiqueta legible para el asiento (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 crédito.

Cuando el motor procesa una transacción, resuelve la rúbrica de cada operación. Registra el **`routeCode`** y el **`routeDescription`** resultantes en la operación. Esto te da una pista de auditoría completa 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. Las rutas **Source** requieren la rúbrica de **débito**. Las rutas **Destination** requieren la rúbrica de **crédito**. Las rutas **Bidirectional** requieren **ambas**.
</Note>

## Los 8 tipos de acción

***

Cada acción representa 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 asignar diferentes cuentas de débito y crédito para cada acción. Cada etapa de una operación cae entonces en el asiento correcto del ledger.

| Acción        | Identificador | Descripción                                                                                                                                                                                                                                         |
| :------------ | :------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Direct**    | `direct`      | Débito/crédito inmediato, de un solo paso, entre dos cuentas, sin etapas intermedias (ej., una comisión o un ajuste).                                                                                                                               |
| **Hold**      | `hold`        | Reserva fondos creando un movimiento pendiente (mueve valor de `available` a `on_hold` en la cuenta de origen).                                                                                                                                     |
| **Commit**    | `commit`      | Confirma un monto previamente retenido, liberando el valor `on_hold` a la cuenta de destino.                                                                                                                                                        |
| **Cancel**    | `cancel`      | Cancela/revierte una retención, devolviendo el valor `on_hold` al saldo `available` en la cuenta de origen.                                                                                                                                         |
| **Revert**    | `revert`      | Revierte una transacción `direct` completada creando una contra-transacción que deshace la original.                                                                                                                                                |
| **Overdraft** | `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 disminuye). Ambas rúbricas son obligatorias cuando se configura este asiento. |
| **Block**     | `block`       | Clasifica un movimiento de bloqueo de fondos que congela valor en una cuenta (por ejemplo, un `asset-freeze`).                                                                                                                                      |
| **Unblock**   | `unblock`     | Clasifica la liberación de fondos previamente bloqueados de vuelta al saldo `available`.                                                                                                                                                            |

**Overdraft** clasifica las operaciones complementarias que el motor genera automáticamente durante el uso y el pago del sobregiro. **Block** y **unblock** clasifican las operaciones que producen los endpoints de transacción dedicados de bloqueo y desbloqueo. Registras las rúbricas de las tres de la misma manera que las demás acciones.

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

## Configurar Asientos Contables

***

Registras las rúbricas a través de 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 de `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>

Gestionas estos asientos a través de los endpoints de Ruta de Operación — consulta [Crear una Ruta de Operación](/es/reference/midaz/create-an-operation-route) y [Actualizar una Ruta de Operación](/es/reference/midaz/update-an-operation-route). Para el flujo completo de configuración, consulta [Enrutamiento de Transacciones](/es/midaz/transaction-routing-entities#4-configurar-asientos-contables-acciones).

## Modos de validación

***

Midaz reacciona ante una rúbrica faltante según la configuración contable del Ledger. Dos compuertas distintas controlan este comportamiento:

### Por defecto (tolerante)

Por defecto, la transacción procede normalmente cuando ninguna rúbrica coincide con una acción. Midaz deja los campos `routeCode` y `routeDescription` vacíos (nil) para esa operación. No genera ningún error.

### Estricto (opcional)

Establece `accounting.validateRoutes` en `true` en la [Configuración del Ledger](/es/midaz/ledgers#ledger-settings) para exigir una rúbrica registrada en cada acción. Midaz luego rechaza cualquier operación cuya acción y dirección no tenga un mapeo registrado. Devuelve el error `0117 ErrAccountingRouteNotFound`.

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

<Warning>
  En modo estricto, si una ruta tiene asientos contables pero una transacción usa una acción no mapeada, Midaz deniega la transacción con `0117 ErrAccountingRouteNotFound`. Una Transacción en Dos Fases dispara esto cuando mapeas solo `direct`. Esta compuerta mantiene cada etapa de una operación mapeada antes de la ejecución, de modo que tus reportes contables se mantengan consistentes.
</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 configuras las 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, poblada junto con `routeCode`.
