> ## 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, service discovery e event streaming), veja a [referência de configuração BYOC](https://docs.lerian.studio/pt/reference/byoc-configuration.md). 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](https://docs.lerian.studio/pt/reference/health-and-readiness.md) 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 |
| `ENV_NAME` | Nome do ambiente. Com `production`, o Manager exige na inicialização telemetria, autenticação pelo Access Manager, origens CORS HTTPS explícitas e senhas reais. Ele também exige TLS para Redis, RabbitMQ e object storage, a menos que `ALLOW_INSECURE_TLS` seja `true`. Com `local`, o Reporter lê um arquivo `.env`. | `local` | Não |
| `MULTI_TENANT_ENABLED` | Executa o Reporter em modo multi-tenant. Com `true`, `MONGO_HOST` e `MONGO_NAME` deixam de ser obrigatórias, e o Reporter exige `MULTI_TENANT_URL`, `MULTI_TENANT_SERVICE_API_KEY` e um `MULTI_TENANT_CIRCUIT_BREAKER_THRESHOLD` acima de `0`. | `false` | Não |

## Licença

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `LICENSE_KEY` | Chave de licença da Lerian. O Reporter a verifica na inicialização em todos os modos de execução e não inicia sem uma licença válida. Sensível. | — | Sim |
| `ORGANIZATION_IDS` | Escopo da licença: `global`, ou uma lista de IDs de organização separados por vírgula. Com uma lista, toda requisição de API deve trazer o header `X-Organization-Id`. | `global` | Não |
| `IS_DEVELOPMENT` | O Reporter v4.7.0 e versões posteriores ignoram essa variável. Deixe sem valor ou `false`. | — | Não |

Cada processo do Reporter precisa alcançar o serviço de licenças da Lerian. Abra a regra de saída que o [License Manager](https://docs.lerian.studio/pt/platform/licensing/license-manager.md) descreve.

Quando a licença deixa de ser válida depois da inicialização, `/readyz` informa a licença como indisponível, e a API recusa todas as rotas, exceto `/health`, `/readyz` e `/version`. Um processo que executa o worker é encerrado.

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

## Envio de templates

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `MAX_TEMPLATE_FILE_BYTES` | Maior arquivo de template, em bytes, que um envio aceita. Um arquivo maior é rejeitado com `RPT-0078`. O servidor recusa qualquer corpo de requisição acima de 4 MiB, qualquer que seja esse valor. | `1048576` (1 MiB) | 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. Os previews de consulta do mapeamento têm os próprios slots, no mesmo número. 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. O valor limita as renderizações simultâneas e não limita a taxa de requisições. Valores abaixo de `1` usam o padrão. | `4` | Não |

## Calendário de relatórios

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `REPORT_TIMEZONE` | Fuso horário IANA que mede o início e o fim de cada dia nos filtros de data de relatório e decide quando um período de remessa terminou. Mude-o apenas quando seus livros fecham em outro relógio. O Manager e o Worker devem ter o mesmo valor. Um nome desconhecido interrompe a inicialização. O valor se aplica a todos os tenants do deploy. | `America/Sao_Paulo` | 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` | — | Sim |
| `MONGO_HOST` | Host do MongoDB | — | Sim (`MULTI_TENANT_ENABLED=false`) |
| `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 (`MULTI_TENANT_ENABLED=false`) |
| `MONGO_PARAMETERS` | Opções extras da URI do MongoDB, como `authSource=admin` | — | Não |
| `MONGO_MAX_POOL_SIZE` | Tamanho máximo do pool de conexões | `100` | 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. | — | Sim |
| `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. Deixe vazio para AWS S3. | — | Não |
| `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. Deixe-o e a chave secreta vazios para usar a cadeia de credenciais padrão da AWS. Sensível. | — | Não |
| `OBJECT_STORAGE_SECRET_KEY` | Chave de acesso secreta. Sensível. | — | Não |
| `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 | `3` | 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 |
| `PDF_PAPER_SIZE` | Tamanho da página: `A4` ou `Letter` | `A4` | Não |
| `PDF_DISPLAY_HEADER_FOOTER` | Imprime um cabeçalho e um rodapé em cada página do PDF | `true` | Não |

## Limites de extração (worker)

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `ENGINE_MAX_DATASOURCES` | Fontes de dados que uma extração pode ler | `10` | Não |
| `ENGINE_MAX_TABLES_PER_DATASOURCE` | Tabelas ou coleções por fonte de dados | `20` | Não |
| `ENGINE_MAX_FIELDS_PER_TABLE` | Campos por tabela | `50` | Não |
| `ENGINE_MAX_CONCURRENCY` | Limite de concorrência do motor | `4` | Não |
| `ENGINE_TIMEOUT_SEC` | Timeout de uma extração (segundos) | `300` | Não |
| `ENGINE_MAX_RESULT_BYTES` | Maior resultado de extração. Um resultado maior faz a extração falhar. | 256 MiB | Não |
| `DATASOURCE_DEFAULT_ROW_CEILING` | Linhas que uma tabela pode retornar, para uma fonte de dados sem teto próprio. Uma tabela que o excede falha com `RPT-0161`. | `150000` | Não |
| `DATASOURCE_DEFAULT_QUERY_TIMEOUT_SEC` | Timeout de uma consulta (segundos), para uma fonte de dados sem valor próprio. Uma consulta que o excede falha com `RPT-0162`. | `300` | Não |
| `ENGINE_MAX_DYNAMIC_POOLS` | Pools de conexão de fontes de dados que o worker mantém abertos, somando todos os tenants | `500` | Não |
| `ENGINE_POOL_IDLE_TIMEOUT_SEC` | Tempo ocioso antes de um pool de fonte de dados fechar (segundos) | `7200` | Não |

## Reaper de relatórios parados

Um worker registra um heartbeat em cada relatório que gera. O Manager move para `Error` com `RPT-0160` um relatório em `Processing` cujo heartbeat está desatualizado. O Manager e o Worker devem ter os mesmos valores de heartbeat.

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `REPORT_REAPER_ENABLED` | Executa o reaper no Manager | `true` | Não |
| `REPORT_REAPER_INTERVAL_SEC` | Segundos entre passagens do reaper | `60` | Não |
| `REPORT_REAPER_BATCH` | Relatórios que uma passagem por tenant encerra | `200` | Não |
| `WORKER_HEARTBEAT_INTERVAL_SEC` | Segundos entre heartbeats do worker | `30` | Não |
| `WORKER_HEARTBEAT_STALE_SEC` | Idade a partir da qual um heartbeat está desatualizado (segundos) | `180` | Não |

## Gatilho de prazos (Manager)

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `DEADLINE_TRIGGER_ENABLED` | Executa a varredura que publica `deadline.due` quando chega o dia de um prazo | `false` | Não |
| `DEADLINE_TRIGGER_INTERVAL_SEC` | Segundos entre varreduras | `300` | Não |
| `DEADLINE_TRIGGER_GENERATE_CATEGORIES` | Categorias de template, separadas por vírgula, para as quais a varredura também gera o relatório. Vazio não gera nenhum. | — | Não |
| `DEADLINE_TRIGGER_GENERATION_TIMEOUT_SEC` | Timeout de uma geração agendada (segundos) | `20` | Não |
| `DEADLINE_TRIGGER_MAX_CATCH_UP_OCCURRENCES` | Ocorrências perdidas de um prazo que uma varredura gera | `7` | Não |

## Catálogo regulatório

Sem uma origem de catálogo, o deploy não carrega nenhum documento regulatório.

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `REGULATORY_CATALOG_DIR` | Diretório onde o catálogo curado está montado. O Reporter o lê na inicialização, e um catálogo que não carrega interrompe a inicialização. | — | Não |
| `REGULATORY_CATALOG_GITHUB_REPO` | `owner/repo` que publica as releases do catálogo. Quando definido, o Reporter lista os documentos e busca as inscrições dele em vez do diretório. | — | Não |
| `REGULATORY_CATALOG_GITHUB_TOKEN` | Token para um repositório de catálogo privado. Sensível. | — | Não |
| `REGULATORY_CATALOG_GITHUB_URL` | Raiz de API alternativa, como um proxy | — | Não |

## Declaração de permissões

Na inicialização, a superfície da API pode publicar a declaração de permissões do Reporter no Access Manager. O worker não lê estas variáveis.

| Variável | Descrição | Padrão | Obrigatório |
| - | - | - | - |
| `IDP_DECLARATION_ENABLED` | Defina `true` para publicar a declaração de permissões na inicialização. | `false` | Não |
| `IDP_HOST` | URL do serviço Identity do Access Manager. | — | Sim (`IDP_DECLARATION_ENABLED=true`) |
| `IDP_M2M_CLIENT_ID` | O client ID com que o Reporter publica. | — | Sim (`IDP_DECLARATION_ENABLED=true`) |
| `IDP_M2M_CLIENT_SECRET` | O client secret com que o Reporter publica. Sensível. | — | Sim (`IDP_DECLARATION_ENABLED=true`) |

Com `IDP_DECLARATION_ENABLED=true`, a superfície da API não sobe quando uma das outras três variáveis está vazia, ou quando `PLUGIN_AUTH_ENABLED` não é `true`. Ela também precisa do endereço do Access Manager em `PLUGIN_AUTH_HOST`, ou em `PLUGIN_AUTH_ADDRESS` quando `PLUGIN_AUTH_HOST` está vazia. Quando o Access Manager recusa a publicação ou não responde, o Reporter sobe mesmo assim.

## 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](https://docs.lerian.studio/pt/reference/products/reporter/list-data-sources.md). O bloco de ambiente abaixo é um caminho opcional de bootstrap.

`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}_SSLCA_BASE64` | Base64 padrão de um pacote CA em PEM, em uma linha. Uma alternativa ao caminho do arquivo de certificado. Para PostgreSQL, defina `SSLMODE` como `verify-ca` ou `verify-full`, ou deixe-o vazio para `verify-full`. | — | Não |
| `DATASOURCE_{NAME}_OPTIONS` | Opções extras da URI do MongoDB | — | Não |
| `DATASOURCE_{NAME}_ROW_CEILING` | Linhas que uma tabela desta fonte de dados pode retornar | `DATASOURCE_DEFAULT_ROW_CEILING` | Não |
| `DATASOURCE_{NAME}_QUERY_TIMEOUT_SEC` | Timeout de uma consulta nesta fonte de dados (segundos) | `DATASOURCE_DEFAULT_QUERY_TIMEOUT_SEC` | 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. Um bloco de ambiente apenas semeia uma entrada previamente ausente. Ele nunca sobrescreve uma entrada gerenciada pela API nem restaura uma com soft delete.

### Datasource CRM reservada

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

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, pare e use o caminho de recuperação de engenharia aprovado. Não use a API comum para alterá-lo.

Para definir essas variáveis com o chart do Reporter, consulte o [README do chart do Reporter](https://github.com/LerianStudio/helm/tree/main/charts/reporter). 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.

## Configuração compartilhada entre produtos

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

* **Autenticação do Access Manager**: `PLUGIN_AUTH_ENABLED`, `PLUGIN_AUTH_ADDRESS`. Habilite em produçã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 e `STREAMING_KAFKA_BROKERS` para a cópia opcional no Kafka de `report.finished` e `report.partial`. Desabilitado por padrão.
* **OpenTelemetry**: `ENABLE_TELEMETRY`, `OTEL_*`, `OTEL_INSECURE_EXPORTER`. A telemetria é OTLP push.


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