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

# Variáveis de ambiente

> Referência das variáveis de ambiente usadas para configurar o Reporter, organizadas por categoria: servidor HTTP, banco de dados, armazenamento, autenticação e telemetria.

Esta referência lista as variáveis de ambiente usadas para configurar o **Reporter**, o serviço que gera relatórios regulatórios, de compliance e contábeis a partir de templates configuráveis. O Reporter é distribuído como um binário único, e `RUN_MODE` seleciona suas superfícies ativas: o gerenciador de API, o worker de relatórios, ou ambos. Você define essas variáveis no momento do deploy, por meio de valores do Helm, Docker Compose ou do ambiente do seu orquestrador. Variáveis marcadas como obrigatórias fazem o servidor falhar na inicialização se não forem definidas.

Para os blocos de configuração que todo produto Lerian compartilha (postura de TLS, OpenTelemetry, autenticação do Access Manager, multi-tenancy, service discovery e event streaming), veja a [referência de configuração BYOC](/pt/reference/byoc-configuration). Esta página foca no que é específico do Reporter.

## Modo de execução e portas

`RUN_MODE` decide quais superfícies o processo atende. Rode a API e o worker como um único processo (`all`) para deploys pequenos, ou separe-os em deployables distintos (`api` e `worker`) para escalar a geração de relatórios de forma independente. Veja a [referência de health e readiness](/pt/reference/health-and-readiness) para o contrato de probes.

| Variável                         | Descrição                                                                                                                                                                        | Padrão | Obrigatório       |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------- |
| `RUN_MODE`                       | Superfícies a executar: `api`, `worker` ou `all`                                                                                                                                 | `all`  | Não               |
| `SERVER_PORT` / `SERVER_ADDRESS` | Endereço de bind da API (`RUN_MODE=api`/`all`), lido de `SERVER_ADDRESS`; `SERVER_PORT` é a convenção usada para construí-lo (`:4005`). Atende `/health`, `/readyz`, `/version`. | —      | Sim (`api`/`all`) |
| `HEALTH_PORT`                    | Porta de health do worker (`RUN_MODE=worker`). Atende `/health`, `/readyz`.                                                                                                      | `4006` | Não               |

## Deploy e TLS

| Variável             | Descrição                                                                                                                                                                                                                                                        | Padrão  | Obrigatório |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----------- |
| `DEPLOYMENT_MODE`    | Modalidade de deploy: `local`, `byoc` ou `saas`. Em `saas`, o TLS é obrigatório para toda conexão com dependências e o servidor recusa iniciar sem ele. Em `byoc`, o TLS é recomendado e gera aviso em vez de ser exigido. Também marca a resposta de `/readyz`. | `local` | Não         |
| `ALLOW_INSECURE_TLS` | Ignora a exigência de TLS por conexão em DSNs de infraestrutura. Deixe sem definir ou como `false` em produção.                                                                                                                                                  | `false` | Não         |

## CORS e proxies

| Variável               | Descrição                                                                                                 | Padrão  | Obrigatório |
| ---------------------- | --------------------------------------------------------------------------------------------------------- | ------- | ----------- |
| `CORS_ALLOWED_ORIGINS` | Origens de CORS permitidas (CSV, ou `*`). Restrinja a origens explícitas em produção.                     | `*`     | Não         |
| `CORS_ALLOWED_METHODS` | Métodos de CORS permitidos                                                                                | varia   | Não         |
| `CORS_ALLOWED_HEADERS` | Cabeçalhos de CORS permitidos                                                                             | varia   | Não         |
| `TRUSTED_PROXIES`      | CIDRs de proxy confiáveis para o parsing de `X-Forwarded-For`. Defina ao rodar atrás de um load balancer. | —       | Não         |
| `SWAGGER_ENABLED`      | Servir a UI do OpenAPI/Swagger                                                                            | `false` | Não         |

## Paginação da API

| Variável               | Descrição                                                                                                                                               | Padrão | Obrigatório |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------- |
| `MAX_PAGINATION_LIMIT` | Maior `limit` que uma operação de listagem aceita. Uma requisição acima do teto é rejeitada com um erro de paginação, em vez de ajustada para o limite. | `100`  | Não         |

## Previews de template

| Variável                 | Descrição                                                                                                                                                                                                                                                                                                                                                             | Padrão | Obrigatório |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------- |
| `PREVIEW_MAX_CONCURRENT` | Número máximo de previews síncronos de template que o gerenciador de API renderiza ao mesmo tempo. Quando todos os slots estão em uso, o Reporter rejeita um novo preview imediatamente com HTTP `429` e `RPT-0108`; ele não entra em fila. Este é um limite de renderizações simultâneas, não um limite de taxa de requisições. Valores abaixo de `1` usam o padrão. | `4`    | Não         |

## Banco de dados (MongoDB)

Armazena metadados de relatórios, templates e histórico de execuções.

| Variável              | Descrição                                                                      | Padrão    | Obrigatório |
| --------------------- | ------------------------------------------------------------------------------ | --------- | ----------- |
| `MONGO_URI`           | Esquema de conexão: `mongodb` ou `mongodb+srv`                                 | `mongodb` | Não         |
| `MONGO_HOST`          | Host do MongoDB                                                                | —         | Sim         |
| `MONGO_PORT`          | Porta do MongoDB                                                               | —         | Sim         |
| `MONGO_USER`          | Usuário do banco de dados                                                      | —         | Sim         |
| `MONGO_PASSWORD`      | Senha do banco de dados. Sensível.                                             | —         | Sim         |
| `MONGO_NAME`          | Nome do banco de dados                                                         | —         | Sim         |
| `MONGO_MAX_POOL_SIZE` | Tamanho máximo do pool de conexões                                             | varia     | Não         |
| `MONGO_TLS_CA_CERT`   | Certificado CA PEM codificado em Base64 para TLS (por exemplo, AWS DocumentDB) | —         | Não         |

## Message broker (RabbitMQ)

Transporta a fila de comandos de geração de relatório entre a API e o worker.

| Variável                         | Descrição                                                                    | Padrão | Obrigatório                |
| -------------------------------- | ---------------------------------------------------------------------------- | ------ | -------------------------- |
| `RABBITMQ_HOST`                  | Host do broker                                                               | —      | Sim                        |
| `RABBITMQ_PORT_AMQP`             | Porta AMQP                                                                   | —      | Sim                        |
| `RABBITMQ_PORT_HOST`             | Porta de gerenciamento/HTTP                                                  | —      | Não                        |
| `RABBITMQ_URI`                   | Esquema de conexão: `amqp` ou `amqps`. Use `amqps` em produção.              | `amqp` | Não                        |
| `RABBITMQ_DEFAULT_USER`          | Usuário do broker                                                            | —      | Sim                        |
| `RABBITMQ_DEFAULT_PASS`          | Senha do broker. Sensível.                                                   | —      | Sim                        |
| `RABBITMQ_EXCHANGE`              | Exchange onde a API publica os comandos de geração de relatório              | —      | Sim (`api`/`all`)          |
| `RABBITMQ_GENERATE_REPORT_QUEUE` | Fila que transporta os comandos de geração de relatório da API para o worker | —      | Sim (`api`/`worker`/`all`) |
| `RABBITMQ_GENERATE_REPORT_KEY`   | Routing key que a API usa para os comandos de geração de relatório           | —      | Sim (`api`/`all`)          |
| `RABBITMQ_NUMBERS_OF_WORKERS`    | Concorrência de consumidores do worker                                       | `5`    | Não                        |

## Armazenamento de objetos (compatível com S3)

Onde os relatórios renderizados são armazenados. Funciona com qualquer endpoint compatível com S3.

| Variável                        | Descrição                                                                          | Padrão             | Obrigatório |
| ------------------------------- | ---------------------------------------------------------------------------------- | ------------------ | ----------- |
| `OBJECT_STORAGE_ENDPOINT`       | URL do endpoint compatível com S3                                                  | —                  | Sim         |
| `OBJECT_STORAGE_REGION`         | Região de armazenamento                                                            | `us-east-1`        | Não         |
| `OBJECT_STORAGE_BUCKET`         | Bucket para os relatórios renderizados                                             | `reporter-storage` | Não         |
| `OBJECT_STORAGE_ACCESS_KEY_ID`  | ID da chave de acesso. Sensível.                                                   | —                  | Sim         |
| `OBJECT_STORAGE_SECRET_KEY`     | Chave de acesso secreta. Sensível.                                                 | —                  | Sim         |
| `OBJECT_STORAGE_USE_PATH_STYLE` | Usar endereçamento path-style (necessário em alguns provedores compatíveis com S3) | `false`            | Não         |
| `OBJECT_STORAGE_DISABLE_SSL`    | Desabilita o TLS para o endpoint de armazenamento. Deixe como `false` em produção. | `false`            | Não         |

## Cache (Redis / Valkey)

| Variável            | Descrição                                             | Padrão  | Obrigatório |
| ------------------- | ----------------------------------------------------- | ------- | ----------- |
| `REDIS_HOST`        | Host e porta do Redis/Valkey                          | —       | Sim         |
| `REDIS_PASSWORD`    | Senha de autenticação. Sensível.                      | —       | Não         |
| `REDIS_DB`          | Índice do banco de dados lógico                       | `0`     | Não         |
| `REDIS_PROTOCOL`    | Versão do protocolo RESP                              | varia   | Não         |
| `REDIS_TLS`         | Habilitar TLS para a conexão                          | `false` | Não         |
| `REDIS_CA_CERT`     | Certificado CA PEM codificado em Base64 para TLS      | —       | Não         |
| `REDIS_MASTER_NAME` | Nome do master do Sentinel (deploys com Sentinel)     | —       | Não         |
| `REDIS_USE_GCP_IAM` | Autenticar no GCP Memorystore com IAM em vez de senha | `false` | Não         |

## Renderização de PDF (worker)

| Variável              | Descrição                                               | Padrão | Obrigatório |
| --------------------- | ------------------------------------------------------- | ------ | ----------- |
| `PDF_POOL_WORKERS`    | Workers de renderização de PDF simultâneos              | `2`    | Não         |
| `PDF_TIMEOUT_SECONDS` | Timeout de renderização de PDF por relatório (segundos) | `90`   | Não         |

## Datasources de relatório

Os relatórios leem de datasources PostgreSQL e MongoDB no registro persistido. Crie e gerencie entradas comuns pela [API de data source](/pt/reference/products/reporter/list-data-sources). O bloco de ambiente abaixo é um caminho opcional de bootstrap single-tenant. Deploys multi-tenant criam datasources comuns por tenant pela API.

`DATASOURCE_{NAME}_CONFIG_NAME` faz um bloco de seed de ambiente existir. O Reporter varre chaves que correspondem a `DATASOURCE_*_CONFIG_NAME`. O prefixo conta tanto quanto o sufixo, então uma chave que apenas termina em `_CONFIG_NAME` não declara nada. Na inicialização do Manager, um bloco completo semeia seu `configName` apenas quando nenhuma entrada no registro, incluindo uma com soft delete, já usa esse nome. O valor é o nome que seus templates usam para endereçar a fonte.

Dentro de um bloco, as variáveis marcadas como obrigatórias são as que o Reporter precisa antes de ler o bloco.

| Variável                               | Descrição                                                                                                                                                                                                                                                                                                                       | Padrão   | Obrigatório |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- |
| `DATASOURCE_{NAME}_CONFIG_NAME`        | Nome que os templates usam para endereçar essa datasource. Declara o bloco.                                                                                                                                                                                                                                                     | —        | Sim         |
| `DATASOURCE_{NAME}_TYPE`               | Engine da datasource: `postgresql` ou `mongodb`                                                                                                                                                                                                                                                                                 | —        | Sim         |
| `DATASOURCE_{NAME}_HOST`               | Host da datasource                                                                                                                                                                                                                                                                                                              | —        | Sim         |
| `DATASOURCE_{NAME}_PORT`               | Porta da datasource                                                                                                                                                                                                                                                                                                             | —        | Sim         |
| `DATASOURCE_{NAME}_DATABASE`           | Nome do banco de dados                                                                                                                                                                                                                                                                                                          | —        | Sim         |
| `DATASOURCE_{NAME}_USER`               | Usuário da datasource                                                                                                                                                                                                                                                                                                           | —        | Não         |
| `DATASOURCE_{NAME}_PASSWORD`           | Senha da datasource. Sensível.                                                                                                                                                                                                                                                                                                  | —        | Não         |
| `DATASOURCE_CRED_ENC_KEY`              | Chave AES persistente, codificada em hex, compartilhada pelo Manager e pelo worker para criptografar e descriptografar as credenciais do registro. Mantenha-a inalterada entre reinicializações e deploys; alterá-la impede que eles descriptografem credenciais já armazenadas no registro. Gere-a com `openssl rand -hex 32`. | —        | Sim         |
| `DATASOURCE_{CONFIG_NAME}_SCHEMAS`     | Schemas a expor da datasource (CSV). Esta chave usa o valor de `CONFIG_NAME` em maiúsculas, diferente das outras chaves do bloco.                                                                                                                                                                                               | `public` | Não         |
| `DATASOURCE_{NAME}_SSLMODE`            | Modo SSL para uma conexão PostgreSQL                                                                                                                                                                                                                                                                                            | —        | Não         |
| `DATASOURCE_{NAME}_SSLROOTCERT`        | Caminho para o certificado raiz SSL do PostgreSQL                                                                                                                                                                                                                                                                               | —        | Não         |
| `DATASOURCE_{NAME}_SSL`                | Habilitar TLS em uma conexão MongoDB                                                                                                                                                                                                                                                                                            | —        | Não         |
| `DATASOURCE_{NAME}_SSLCA`              | Caminho para o arquivo de certificado CA do MongoDB                                                                                                                                                                                                                                                                             | —        | Não         |
| `DATASOURCE_{NAME}_OPTIONS`            | Opções extras da URI do MongoDB                                                                                                                                                                                                                                                                                                 | —        | Não         |
| `DATASOURCE_CRM_MIDAZ_ORGANIZATION_ID` | ID da organização no Midaz que delimita o escopo da datasource CRM reservada. Obrigatório quando `DATASOURCE_CRM_CONFIG_NAME=plugin_crm`.                                                                                                                                                                                       | —        | Não         |
| `CRYPTO_HASH_SECRET_KEY_CRM`           | Chave de hash do CRM já existente, usada para ler PII da datasource CRM. Sensível; obrigatória quando campos de CRM são lidos.                                                                                                                                                                                                  | —        | Não         |
| `CRYPTO_ENCRYPT_SECRET_KEY_CRM`        | Chave de criptografia do CRM já existente, usada para ler PII da datasource CRM. Sensível; obrigatória quando campos de CRM são lidos.                                                                                                                                                                                          | —        | Não         |

Um bloco completo de seed por datasource segue abaixo. Defina o `DATASOURCE_CRED_ENC_KEY` global separadamente, como descrito acima. Recomendamos usar o mesmo nome para `CONFIG_NAME` e `{NAME}`, com o segmento da variável de ambiente em maiúsculas (por exemplo, `ONBOARDING` para `CONFIG_NAME=onboarding`). Isso mantém a chave de schema intuitiva, porque `SCHEMAS` usa o valor de `CONFIG_NAME` como chave, enquanto todo o resto dos campos usa `{NAME}`:

```bash theme={null}
DATASOURCE_ONBOARDING_CONFIG_NAME=onboarding
DATASOURCE_ONBOARDING_TYPE=postgresql
DATASOURCE_ONBOARDING_HOST=midaz-postgres-replica
DATASOURCE_ONBOARDING_PORT=5702
DATASOURCE_ONBOARDING_DATABASE=onboarding
DATASOURCE_ONBOARDING_USER=reporter
DATASOURCE_ONBOARDING_PASSWORD=<secret>
DATASOURCE_ONBOARDING_SCHEMAS=public
```

Um template então endereça essa fonte pelo seu nome de config, como em `{{ onboarding.accounts }}`. Use a API para adicionar ou atualizar uma datasource comum. No modo single-tenant, um bloco de ambiente apenas semeia uma entrada previamente ausente. Ele nunca sobrescreve uma entrada gerenciada pela API nem restaura uma com soft delete.

<h3 id="reserved-crm-datasource">
  Datasource CRM reservada
</h3>

`plugin_crm` é a datasource CRM reservada, gerenciada por ambiente. Não a crie nem faça PATCH nela pela API comum de data source: o Reporter rejeita esse caminho com `RPT-0073`. Um template de CRM deve usar exatamente o nome de config `plugin_crm` e um bloco MongoDB completo:

```bash theme={null}
DATASOURCE_CRM_CONFIG_NAME=plugin_crm
DATASOURCE_CRM_TYPE=mongodb
DATASOURCE_CRM_HOST=<crm-mongodb-host>
DATASOURCE_CRM_PORT=<crm-mongodb-port>
DATASOURCE_CRM_DATABASE=<crm-database>
DATASOURCE_CRM_USER=<crm-readonly-user>
DATASOURCE_CRM_PASSWORD=<secret>
DATASOURCE_CRM_MIDAZ_ORGANIZATION_ID=<midaz-organization-id>
```

Coloque `DATASOURCE_CRM_PASSWORD`, `CRYPTO_HASH_SECRET_KEY_CRM` e `CRYPTO_ENCRYPT_SECRET_KEY_CRM` no seu secret store. Os valores de criptografia do CRM devem ser as mesmas chaves já usadas pelo CRM; não gere chaves substitutas para o Reporter. Mantenha `DATASOURCE_CRED_ENC_KEY` estável também: alterá-la impede que o Reporter descriptografe as credenciais de datasource armazenadas.

Em um deploy single-tenant, o Manager usa esse bloco na inicialização para semear `plugin_crm` e preencher um `metadata.midazOrganizationId` ausente ou vazio. Um ID de organização persistido e não vazio prevalece e não é sobrescrito pelo ambiente. Se estiver errado, não use a API comum para alterá-lo: pare e use o caminho de recuperação de engenharia aprovado. Em um deploy multi-tenant, o Manager pula esse seed de ambiente, então esse bloco não é um mecanismo de provisionamento multi-tenant.

Para o posicionamento no Helm e um exemplo completo de values, veja [Reporter via Helm](/pt/platform/deploy/reporter/reporter-helm). Para templates que usam `plugin_crm`, valide o caminho completo: importe ou salve o template, gere um relatório, confirme que os campos de CRM descriptografam e confirme que os registros ficam com escopo restrito à organização Midaz pretendida.

## Backbone de configuração compartilhado

Os blocos a seguir são idênticos entre os produtos Lerian. A [referência de configuração BYOC](/pt/reference/byoc-configuration) os documenta por completo. Ficam desabilitados por padrão.

* **Autenticação do Access Manager**: `PLUGIN_AUTH_ENABLED`, `PLUGIN_AUTH_ADDRESS`. Habilite em produção.
* **Multi-tenancy**: `MULTI_TENANT_*`, além de `RABBITMQ_MULTI_TENANT_SYNC_INTERVAL` e `RABBITMQ_MULTI_TENANT_DISCOVERY_TIMEOUT`. Desabilitado por padrão.
* **Service discovery**: `SD_*` (Consul, e o Reporter também aceita os aliases legados `SD_ADVERTISE_*` / `CONSUL_ADDR`). Desabilitado por padrão.
* **Event streaming**: `STREAMING_ENABLED`, `STREAMING_BROKERS`, `STREAMING_CLOUDEVENTS_SOURCE`, além de `RABBITMQ_REPORT_EVENTS_EXCHANGE` para a exchange de eventos. Desabilitado por padrão.
* **OpenTelemetry**: `ENABLE_TELEMETRY`, `OTEL_*`, `OTEL_INSECURE_EXPORTER`. A telemetria é OTLP push.
