# Entidades

### Escrow

Contiene tanto tipos de liberación única como de liberación múltiple.

```typescript
/**
 * Liberación Única Escrow
 */
export type SingleReleaseEscrow = {
  /**
   * Dirección del usuario que firma la transacción del contrato
   */
  signer: string;

  /**
   * ID (dirección) que identifica el contrato escrow
   */
  contractId: string;

  /**
   * Identificador único para el escrow
   */
  engagementId: string;

  /**
   * Nombre del escrow
   */
  title: string;

  /**
   * Roles que forman la estructura del escrow
   */
  roles: Roles;

  /**
   * Texto que describe la función del escrow
   */
  description: string;

  /**
   * Monto a transferir al completar los hitos del escrow
   */
  amount: number;

  /**
   * Comisión que la plataforma recibirá cuando se complete el escrow
   */
  platformFee: number;

  /**
   * Cantidad del token (XLM, USDC, EURC, etc.) en el contrato inteligente.
   */
  balance: number;

  /**
   * Objetivos a completar para definir el escrow como completado
   */
  milestones: SingleReleaseMilestone[];

  /**
   * Flags que validan ciertos estados de vida del escrow
   */
  flags?: Flags;

  /**
   * Información sobre la trustline que gestionará el movimiento de fondos en escrow
   */
  trustline: Trustline;
};

/**
 * Liberación Múltiple Escrow
 */
export type MultiReleaseEscrow = Omit<
  SingleReleaseEscrow,
  "milestones" | "flags" | "amount" | "roles"
> & {
  milestones: MultiReleaseMilestone[];
  roles: Omit<Roles, "receiver">;
};
```

### Hito

Contiene tanto tipos de liberación única como de liberación múltiple. Ambos basados en BaseMilestone.

```typescript
/**
 * Hito
 */
type BaseMilestone = {
  /**
   * Texto que describe la función del hito.
   */
  description: string;

  /**
   * Estado del hito. Ej: Aprobado, En disputa, etc...
   */
  status?: string;

  /**
   * Evidencia del trabajo realizado por el proveedor de servicios.
   */
  evidence?: string;
};

/**
 * Hito de Liberación Única
 */
export type SingleReleaseMilestone = BaseMilestone & {
  /**
   * Indicador de aprobado, solo si el escrow es de liberación única
   */
  approved?: boolean;
};

/**
 * Hito de Liberación Múltiple
 */
export type MultiReleaseMilestone = BaseMilestone & {
  /**
   * Monto a transferir al completar este hito
   */
  amount: number;
  
  /**
   * Dirección a la que se enviarán los ingresos del hito
   */
  receiver: string;

  /**
   * Flags que validan ciertos estados de vida del hito, solo si el escrow es de liberación múltiple
   */
  flags?: Flags;
};
```

### Trustline

```typescript
/**
 * Trustline
 */
export type Trustline = {
  /**
   * Símbolo del token, por ejemplo: USDC, EURC, etc...
   */
  symbol: string;

  /**
   * Dirección pública que establece permiso para aceptar y usar un token específico.
   */
  address: string;
};
```

### Flags

Todos los flags posibles **solo en escrow de liberación múltiple.**

```typescript
/**
 * Flags
 */
export type Flags = {
  /**
   * Indicador que señala que un escrow está en disputa.
   */
  disputed?: boolean;

  /**
   * Indicador que señala que los fondos del escrow ya han sido liberados.
   */
  released?: boolean;

  /**
   * Indicador que señala que un escrow en disputa ya ha sido resuelto.
   */
  resolved?: boolean;

  /**
   * Indicador que señala si un hito ha sido aprobado por el aprobador.
   */
  approved?: boolean;
};

```

### Roles

```typescript
/**
 * Roles
 */
export type Roles = {
  /**
   * Dirección de la entidad que solicita el servicio.
   */
  approver: string;

  /**
   * Dirección de la entidad que presta el servicio.
   */
  serviceProvider: string;

  /**
   * Dirección de la entidad que posee el escrow
   */
  platformAddress: string;

  /**
   * Dirección del usuario encargado de liberar los fondos del escrow al proveedor de servicios.
   */
  releaseSigner: string;

  /**
   * Dirección encargada de resolver disputas dentro del escrow.
   */
  disputeResolver: string;

  /**
   * Dirección a la que se enviarán los ingresos del escrow (En la versión “Multi-Release”, 
     este rol está a nivel de hito.)
   */
  receiver: string;
};

/**
 * Rol
 */
export type Role =
  | "approver"
  | "serviceProvider"
  | "platformAddress"
  | "releaseSigner"
  | "disputeResolver"
  | "receiver"
  | "signer";
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.trustlesswork.com/trustless-work/v1-es/introduccion/developer-resources/tipos/entidades.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
