# Entidades

### Escrow

Contém tipos de liberação única e liberação múltipla.

```typescript
/**
 * Escrow de Liberação Única
 */
export type SingleReleaseEscrow = {
  /**
   * Endereço do usuário que assina a transação do contrato
   */
  signer: string;

  /**
   * ID (endereço) que identifica o contrato escrow
   */
  contractId: string;

  /**
   * Identificador único do escrow
   */
  engagementId: string;

  /**
   * Nome do escrow
   */
  title: string;

  /**
   * Papéis que compõem a estrutura do escrow
   */
  roles: Roles;

  /**
   * Texto descrevendo a função do escrow
   */
  description: string;

  /**
   * Quantia a ser transferida após a conclusão dos marcos do escrow
   */
  amount: number;

  /**
   * Comissão que a plataforma receberá quando o escrow for concluído
   */
  platformFee: number;

  /**
   * Quantidade do token (XLM, USDC, EURC, etc) no contrato inteligente.
   */
  balance: number;

  /**
   * Objetivos a serem concluídos para definir o escrow como finalizado
   */
  milestones: SingleReleaseMilestone[];

  /**
   * Flags que validam certos estados de vida do escrow
   */
  flags?: Flags;

  /**
   * Informações sobre a trustline que gerenciará o movimento de fundos no escrow
   */
  trustline: Trustline;
};

/**
 * Escrow de Liberação Múltipla
 */
export type MultiReleaseEscrow = Omit<
  SingleReleaseEscrow,
  "milestones" | "flags" | "amount" | "roles"
> & {
  milestones: MultiReleaseMilestone[];
  roles: Omit<Roles, "receiver">;
};
```

### Marco

Contém tipos de liberação única e múltipla. Ambos baseados no BaseMilestone.

```typescript
/**
 * Marco
 */
type BaseMilestone = {
  /**
   * Texto descrevendo a função do marco.
   */
  description: string;

  /**
   * Status do marco. Ex: Aprovado, Em disputa, etc...
   */
  status?: string;

  /**
   * Evidência do trabalho realizado pelo prestador de serviços.
   */
  evidence?: string;
};

/**
 * Marco de Liberação Única
 */
export type SingleReleaseMilestone = BaseMilestone & {
  /**
   * Flag de aprovado, apenas se o escrow for de liberação única
   */
  approved?: boolean;
};

/**
 * Marco de Liberação Múltipla
 */
export type MultiReleaseMilestone = BaseMilestone & {
  /**
   * Quantia a ser transferida após a conclusão deste marco
   */
  amount: number;
  
  /**
   * Endereço para onde os rendimentos do marco serão enviados
   */
  receiver: string;

  /**
   * Flags que validam certos estados de vida do marco, apenas se o escrow for de liberação múltipla
   */
  flags?: Flags;
};
```

### Trustline

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

  /**
   * Endereço público que estabelece permissão para aceitar e usar um token específico.
   */
  address: string;
};
```

### Flags

Todas as flags possíveis **apenas em escrow de liberação múltipla.**

```typescript
/**
 * Flags
 */
export type Flags = {
  /**
   * Flag indicando que um escrow está em disputa.
   */
  disputed?: boolean;

  /**
   * Flag indicando que os fundos do escrow já foram liberados.
   */
  released?: boolean;

  /**
   * Flag indicando que um escrow em disputa já foi resolvido.
   */
  resolved?: boolean;

  /**
   * Flag indicando se um marco foi aprovado pelo aprovador.
   */
  approved?: boolean;
};

```

### Roles

```typescript
/**
 * Papéis
 */
export type Roles = {
  /**
   * Endereço da entidade que requer o serviço.
   */
  approver: string;

  /**
   * Endereço da entidade que fornece o serviço.
   */
  serviceProvider: string;

  /**
   * Endereço da entidade que possui o escrow
   */
  platformAddress: string;

  /**
   * Endereço do usuário responsável por liberar os fundos do escrow para o prestador de serviços.
   */
  releaseSigner: string;

  /**
   * Endereço responsável por resolver disputas dentro do escrow.
   */
  disputeResolver: string;

  /**
   * Endereço para onde os rendimentos do escrow serão enviados (Na versão “Multi-Release”, 
     este papel está no nível do marco.)
   */
  receiver: string;
};

/**
 * Papel
 */
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-pt/introducao/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.
