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

# Template HTML

> Crie um relatório financeiro analítico em HTML com o Reporter: dados da organização, detalhamento por conta e listas detalhadas de operações.

Este exemplo mostra como estruturar um **Relatório Financeiro Analítico** focado na análise de transações no nível de conta, em formato HTML. O relatório inclui:

* Informações de Organização e Ledger.
* Detalhamento por conta.
* Lista detalhada de operações.

## Código do template

***

```html HTML expandable theme={null}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Analytical Financial Report</title>
  <style>
    body {
      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
      background-color: #f4f6f9;
      color: #333;
      padding: 40px;
    }

    .container {
      max-width: 900px;
      margin: auto;
      background: #ffffff;
      padding: 30px 40px;
      border-radius: 8px;
      box-shadow: 0 0 10px rgba(0,0,0,0.1);
    }

    h1 {
      text-align: center;
      font-size: 24px;
      color: #004080;
      margin-bottom: 10px;
    }

    .subtitle {
      text-align: center;
      font-size: 14px;
      color: #777;
      margin-bottom: 30px;
    }

    .section-title {
      font-weight: bold;
      font-size: 16px;
      margin-top: 30px;
      margin-bottom: 10px;
      color: #004080;
      border-bottom: 1px solid #ccc;
      padding-bottom: 4px;
    }

    table {
      width: 100%;
      border-collapse: collapse;
      margin-top: 15px;
    }

    th, td {
      padding: 10px;
      text-align: left;
      border: 1px solid #ccc;
    }

    th {
      background-color: #e8f0fe;
      font-weight: bold;
      color: #003366;
    }

    .info p {
      margin: 4px 0;
    }

    .footer {
      margin-top: 40px;
      text-align: center;
      font-size: 12px;
      color: #999;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>Analytical Financial Report</h1>
    <div class="subtitle">Detailed analysis of movements by linked accounts.</div>

    <div class="info">
      <p><strong>Generation Date:</strong> {% date_time "dd/MM/YYYY HH:mm" %}</p>
      <p><strong>Organization:</strong> {{ midaz_onboarding.organization.0.legal_name }}</p>
      <p><strong>Ledger:</strong> {{ midaz_onboarding.ledger.0.name }}</p>
    </div>

    {% for account in midaz_onboarding.account %}
      {% with balance = filter(midaz_transaction.balance, "account_id", account.id)[0] %}
        <div class="section-title">Account: {{ account.alias }}</div>
        <div class="info">
          <p><strong>ID:</strong> {{ account.id }}</p>
          <p><strong>Currency:</strong> {{ balance.asset_code }}</p>
          <p><strong>Current Balance:</strong> {{ balance.available }}</p>
        </div>

        <table>
          <thead>
            <tr>
              <th>Operation ID</th>
              <th>Type</th>
              <th>Original Amount</th>
              <th>Discount (3%)</th>
              <th>Final Amount</th>
              <th>Description</th>
            </tr>
          </thead>
          <tbody>
            {% for operation in midaz_transaction.operation %}
              {% if operation.account_id == account.id %}
                {% set original_amount = operation.amount %}
                {% set discount_amount = original_amount * 0.03  %}
                {% set final_amount = original_amount - discount_amount %}
                <tr>
                  <td>{{ operation.id }}</td>
                  <td>{{ operation.type }}</td>
                  <td>{{ original_amount|decimal:2 }}</td>
                  <td>{{ discount_amount|decimal:2 }}</td>
                  <td>{{ final_amount|decimal:2 }}</td>
                  <td>{{ operation.description }}</td>
                </tr>
              {% endif %}
            {% endfor %}
          </tbody>
        </table>
      {% endwith %}
    {% endfor %}

    <div class="footer">
      Document generated automatically via Reporter - Lerian · {{ midaz_onboarding.organization.0.legal_document }}
    </div>
  </div>
</body>
</html>
```

## Detalhamento do código

***

### Informações de Organização e Ledger

```html HTML theme={null}
    <div class="info">
      <p><strong>Generation Date:</strong> {% date_time "dd/MM/YYYY HH:mm" %}</p>
      <p><strong>Organization:</strong> {{ midaz_onboarding.organization.0.legal_name }}</p>
      <p><strong>Ledger:</strong> {{ midaz_onboarding.ledger.0.name }}</p>
    </div>
```

**`<p><strong>Generation Date:</strong> {% date_time "dd/MM/YYYY HH:mm" %}</p>`**

Essa função aplica a data e a hora no momento da renderização, no formato `dd/MM/YYYY HH:mm`.

**`<p><strong>Organization:</strong> {{ midaz_onboarding.organization.0.legal_name }}</p>`**

Esta linha renderiza o nome legal da primeira Organização associada aos dados do onboarding.

* `midaz_onboarding.organization`: a lista de Organizações no sistema.
* `0`: busca o primeiro item da lista.
* `legal_name`: busca o valor do campo `legal_name`.

**`<p><strong>Ledger:</strong> {{ midaz_onboarding.ledger.0.name }}</p>`**

Esta linha renderiza o nome do primeiro Ledger associado aos dados do onboarding.

* `midaz_onboarding.ledger`: a lista de Ledgers no sistema.
* `0`: busca o primeiro item da lista.
* `name`: busca o valor do campo `name`.

### Iterando pelas contas

```html HTML theme={null}
    {% for account in midaz_onboarding.account %}
      {% with balance = filter(midaz_transaction.balance, "account_id", account.id)[0] %}  
```

**`{% for account in midaz_onboarding.account %}`**

Este loop percorre cada conta na lista `midaz_onboarding.account`.

* Esta lista representa todas as contas vinculadas a um cliente ou associadas a um fluxo de onboarding.
* A cada iteração, é criado um novo escopo em que `account` se refere a um item específico dessa lista.

**`{% with balance = filter(midaz_transaction.balance, "account_id", account.id)[0] %}`**

Dentro do loop, esta linha:

* Usa a função filter para encontrar um saldo na lista `midaz_transaction.balance` cujo `account_id` corresponda ao ID da conta atual.
* O `[0]` pega o primeiro saldo correspondente (supondo que exista apenas um por conta).
* O resultado vai para uma variável temporária chamada `balance`, com escopo restrito a este bloco.

### Informações da conta

```html HTML theme={null}
        <div class="section-title">Account: {{ account.alias }}</div>
        <div class="info">
          <p><strong>ID:</strong> {{ account.id }}</p>
          <p><strong>Currency:</strong> {{ balance.asset_code }}</p>
          <p><strong>Current Balance:</strong> {{ balance.available }}</p>
        </div>
```

**`<div class="section-title">Account: {{ account.alias }}</div>`**

Mostra um título de seção com o alias da conta (um nome amigável ou legível para a conta).

**`<p><strong>ID:</strong> {{ account.id }}</p>`**

Mostra o identificador único da conta.

**`<p><strong>Currency:</strong> {{ balance.asset_code }}</p>`**

Mostra o código da moeda (como "BRL" ou "USD") associado ao saldo da conta.

**`<p><strong>Current Balance:</strong> {{ balance.available }}`**

Mostra o saldo disponível atual.

### Informações das operações

```html HTML theme={null}
            {% for operation in midaz_transaction.operation %}
              {% if operation.account_id == account.id %}
                {% set original_amount = operation.amount %}
                {% set discount_amount = original_amount * 0.03  %}
                {% set final_amount = original_amount - discount_amount %}
```

**`{% for operation in midaz_transaction.operation %}`**

Este loop percorre todas as operações da lista `midaz_transaction.operation`.

**`{% if operation.account_id == account.id %}`**

Esta linha verifica se a operação atual está relacionada à conta atual no loop externo (do bloco anterior). Ela prossegue apenas se:

* O `account_id` da operação corresponder ao `account.id` em foco.

**`{% set original_amount = operation.amount %}`**

Esta linha define uma variável temporária chamada `original_amount` e atribui a ela o valor do campo `amount` no objeto da operação.

**`{% set discount_amount = original_amount * 0.03 %}`**

Esta linha calcula um desconto de 3% sobre o valor original.

* A linha salva o resultado como `discount_amount`.

**`{% set final_amount = original_amount - discount_amount %}`**

Esta linha subtrai o desconto do valor original.

* A linha armazena o resultado final em `final_amount`, que você pode renderizar depois.

### Colunas da tabela

```html HTML theme={null}
                <tr>
                  <td>{{ operation.id }}</td>
                  <td>{{ operation.type }}</td>
                  <td>{{ original_amount|decimal:2 }}</td>
                  <td>{{ discount_amount|decimal:2 }}</td>
                  <td>{{ final_amount|decimal:2 }}</td>
                  <td>{{ operation.description }}</td>
                </tr>
```

Este bloco gera uma linha de tabela para cada operação, incluindo as seguintes informações:

**`<td>{{ operation.id }}</td>`**

Identificador único da operação.

**`<td>{{ operation.type }}</td>`**

Tipo de operação, como `credit` ou `debit`.

**`<td>{{ original_amount|decimal:2 }}</td>`**

Mostra o valor original (sem ajustes), formatado com 2 casas decimais.

**`<td>{{ discount_amount|decimal:2 }}</td>`**

Mostra o desconto calculado, também com 2 casas decimais.

**`<td>{{ final_amount|decimal:2 }}</td>`**

Mostra o valor final após aplicar o desconto de 3%.

**`<td>{{ operation.description }}</td>`**

Renderiza a descrição ou o rótulo da operação, como "Transferência para poupança".

### Rodapé do relatório

```html HTML theme={null}
    <div class="footer">
      Document generated automatically via Reporter - Lerian · {{ midaz_onboarding.organization.0.legal_document }}
    </div>
```

Esta linha renderiza um rodapé na parte inferior do documento. O rodapé informa que o Reporter da Lerian gerou o conteúdo automaticamente.

* Ele também inclui o número do documento legal da primeira organização vinculada aos dados do onboarding, obtido dinamicamente usando o placeholder `{{ midaz_onboarding.organization.0.legal_document }}`.

## Saída do template

***

```html HTML expandable theme={null}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Analytical Financial Report</title>
  <style>
    body {
      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
      background-color: #f4f6f9;
      color: #333;
      padding: 40px;
    }

    .container {
      max-width: 900px;
      margin: auto;
      background: #ffffff;
      padding: 30px 40px;
      border-radius: 8px;
      box-shadow: 0 0 10px rgba(0,0,0,0.1);
    }

    h1 {
      text-align: center;
      font-size: 24px;
      color: #004080;
      margin-bottom: 10px;
    }

    .subtitle {
      text-align: center;
      font-size: 14px;
      color: #777;
      margin-bottom: 30px;
    }

    .section-title {
      font-weight: bold;
      font-size: 16px;
      margin-top: 30px;
      margin-bottom: 10px;
      color: #004080;
      border-bottom: 1px solid #ccc;
      padding-bottom: 4px;
    }

    table {
      width: 100%;
      border-collapse: collapse;
      margin-top: 15px;
    }

    th, td {
      padding: 10px;
      text-align: left;
      border: 1px solid #ccc;
    }

    th {
      background-color: #e8f0fe;
      font-weight: bold;
      color: #003366;
    }

    .info p {
      margin: 4px 0;
    }

    .footer {
      margin-top: 40px;
      text-align: center;
      font-size: 12px;
      color: #999;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>Analytical Financial Report</h1>
    <div class="subtitle">Detailed analysis of movements by linked accounts.</div>

    <div class="info">
      <p><strong>Generation Date:</strong> 23/05/2025 14:08</p>
      <p><strong>Organization:</strong> Mante - Pfannerstill</p>
      <p><strong>Ledger:</strong> Rice, Rowe and O'Hara</p>
    </div>    
        <div class="section-title">Account: @external/USD</div>
        <div class="info">
          <p><strong>ID:</strong> 0196d97e-a58d-7814-8eb3-e510b818f6a5</p>
          <p><strong>Currency:</strong> USD</p>
          <p><strong>Current Balance:</strong> 499950</p>
        </div>

        <table>
          <thead>
            <tr>
              <th>Operation ID</th>
              <th>Type</th>
              <th>Original Amount</th>
              <th>Discount (3%)</th>
              <th>Final Amount</th>
              <th>Description</th>
            </tr>
          </thead>
          <tbody>            
                <tr>
                  <td>0196d982-4085-7e1d-b698-3aad306df721</td>
                  <td>CREDIT</td>
                  <td>500000.00</td>
                  <td>15000.00</td>
                  <td>485000.00</td>
                  <td>Duplicated account test</td>
                </tr>
                <tr>
                  <td>0196d983-a2c2-7dce-ad14-78eb36d9f2d1</td>
                  <td>DEBIT</td>
                  <td>20.00</td>
                  <td>0.60</td>
                  <td>19.40</td>
                  <td>Loan payment person1</td>
                </tr>
                <tr>
                  <td>0196d983-a2c2-7e0d-a246-45d5234138e3</td>
                  <td>DEBIT</td>
                  <td>30.00</td>
                  <td>0.90</td>
                  <td>29.10</td>
                  <td>Loan payment person1</td>
                </tr>
          </tbody>
        </table>      
    <div class="footer">
      Document generated automatically via Reporter - Lerian · 123.456.789-0001/00
    </div>
  </div>
</body>
</html>
```

## Saída renderizada

***

![Exemplo de relatório financeiro renderizado a partir do código do template HTML mostrado acima](https://mintcdn.com/lerian-49cb71fc/uUQdWFdbYtzFLYzd/images/en/docs/html_template.jpg?fit=max\&auto=format\&n=uUQdWFdbYtzFLYzd\&q=85\&s=da9d3540b0a8b7b1122b38f24c2715cc)

Figura 1. Um exemplo de relatório financeiro renderizado a partir do código HTML do exemplo.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.