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

# DSL de Transacciones

> Migra del DSL Gold (obsoleto) y aprende cómo los archivos .gold legacy estructuraban transacciones en Midaz antes de la API actual.

<Warning>
  **Esta función está obsoleta y se eliminará en la próxima versión.** Actualiza tus flujos de trabajo lo antes posible para evitar errores o tiempo de inactividad.

  Para el enfoque actual de creación de transacciones, consulta [Transacciones](/es/reference/midaz/create-a-transaction-using-dsl).
</Warning>

<Tip>
  **Esta página está dirigida a desarrolladores** que están migrando desde el DSL heredado. Si buscas una visión general a nivel de negocio de cómo funcionan las transacciones en Midaz, consulta [Sobre Midaz](/es/midaz/about-midaz).
</Tip>

Midaz usa un **Lenguaje Específico de Dominio (DSL)** llamado **gold** para estructurar transacciones financieras de manera legible e intuitiva. Diseñado para equipos de negocio, **gold** simplifica el modelado de transacciones al permitir que las operaciones se procesen a través de archivos `.gold`. Estos archivos hacen que los movimientos financieros sean más accesibles y estén alineados con la lógica contable.

### ¿Por qué usar Gold?

* Proporciona un formato claro y estructurado para transferencias de activos.
* Define fuentes, destinos y cantidades de manera explícita.
* Admite lógica de transacción avanzada, como distribuir saldos basados en porcentajes o cantidades restantes.
* Mejora la automatización y consistencia en los flujos de trabajo financieros.

## Estructura de un archivo `.gold`

***

Un archivo `.gold` representa una transacción usando una estructura jerárquica. Aquí hay un ejemplo:

<CodeGroup>
  ```go Go expandable theme={null}
  (transaction v1
  	(transaction route ID)
    (description "descripción de la transacción, no de la operación")
    (metadata
      (key valor)
      (anotherKey otroValor)
    )
    (send USD 10000
      (source
       (from @originAccount :amount USD 10000
  				(transaction route ID)
          (description "mostrada en el extracto")
          (metadata
            (key valor)
            (anotherKey otroValor)
          )
        )
      )
      (distribute
       (to @destinationAccount :amount USD 10000
  				(transaction route ID)
          (description "descripción de la operación")
          (metadata
            (key valor)
          )
        )
      )
    )
  )
  ```
</CodeGroup>

## Jerarquía del DSL

***

A continuación se muestra la estructura jerárquica de un archivo `.gold`, ilustrando las relaciones clave:

```bash theme={null}
└─ transaction
   ├─ route
   ├─ description
   ├─ code
   ├─ pending
   ├─ metadata
   │   └─ key value (n)
   ├─ send
   │   ├─ source
   │   │  └─ from
   │   │     ├─ description
   │   │     ├─ route
   │   │     └─ metadata
   │   │        └─ key value (n)
   │   └─ distribute
   │      └─ to
   │         ├─ description
   │         ├─ route
   │         └─ metadata
   └─           └─ key value (n)
```

## Comprensión de las palabras clave del DSL

***

### transaction

Abre un nuevo bloque de transacción, donde se definen todos los elementos relacionados.

### send

Especifica el activo y la cantidad a transferir, incluyendo las cuentas de origen de las cuales se debitarán los fondos. Se pueden agrupar múltiples cuentas `from` usando `source`.

**Formato**: `send {asset_code} {value}`

### distribute

Define las cuentas de destino donde se acreditarán los fondos. Se pueden incluir múltiples cuentas `to` dentro de `distribute`.

## Notaciones de valor en transacciones

***

El DSL **gold** admite diferentes formas de expresar valores dentro de una transacción:

* **`:amount`** – Notación estándar que especifica el activo, cantidad y escala.
* **`:share`** – Especifica un porcentaje de la cantidad total `send`.
* **`:remaining`** – Asigna el saldo restante después de todas las demás distribuciones.

## Ejemplo: Flujo de transacción Pix Out

***

Este ejemplo demuestra una transacción Pix Out en formato `.gold`:

<CodeGroup>
  ```go Go expandable theme={null}
  (transaction v1
  	(transaction route ID)
    (metadata
      (anyKey valor)
      (anotherKey otroValor)
    )
    (code PIX_OUT)
    (description "descripción de la transacción, no de la operación")
    (send BRL $amount+$fee
      (source
       (from $sourceAccount :amount BRL $amount
  				(transaction route ID)
          (description "Envío por PIX")
        )
       (from $sourceAccount :amount BRL $fee
  				(transaction route ID)
          (description "Tarifa de envío por PIX")
        )
      )
      (distribute
       (to @fees/PIX_OUT :amount BRL $fee
  				(transaction route ID)
        )
        (distribute :remaining
          (to @external/BRL :remaining
            (description "internalTransactionId 99839218")
          )
        )
      )
    )
  )
  ```
</CodeGroup>

### Desglose:

* **(transaction v1)** – Define una nueva transacción usando la versión 1.
* **(Transaction route ID)** – Categoriza la transacción.
* **(metadata ...)** – Almacena datos adicionales de la transacción.
* **(send BRL fee|2)** – Especifica la cantidad total enviada.
* **(source ...)** – Detalla las cuentas de origen de las cuales se debita la cantidad.
* **(distribute ...)** – Asigna los fondos a las cuentas apropiadas.
* **(distribute :remaining ...)** – Asegura que cualquier saldo restante sea manejado.

Este formato asegura una forma **estructurada, transparente y eficiente** de gestionar transacciones en Midaz.
