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

# Relatórios CCS

> Crie arquivos XML de CCS (ACCS001, ACCS005, ACCS010) para o BACEN combinando dados do CRM da Lerian e do Midaz por meio de templates do Reporter e geração agendada.

O Reporter permite que você gere arquivos CCS (Cadastro de Clientes do Sistema Financeiro Nacional) baseados em XML, conforme definido pelo Banco Central do Brasil (BACEN).

Este guia mostra como criar relatórios CCS automatizados com o Reporter: ACCS001, ACCS005 e ACCS010. Você combina dados de CRM (titulares e aliases) com estruturas do Midaz.

## Antes de usar os templates CCS

***

Os exemplos abaixo mapeiam a fonte de dados reservada do CRM chamada `plugin_crm`. Configure essa fonte de dados antes de importar ou salvar um template CCS: ela precisa da conexão MongoDB do CRM e de `DATASOURCE_CRM_MIDAZ_ORGANIZATION_ID`, que restringe os registros do CRM a uma organização do Midaz. Siga [Reporter via Helm](/pt/platform/deploy/reporter/reporter-helm#optional-crm-datasource) ou a [referência de variáveis de ambiente](/pt/products/reporter/reporter-environment-variables#reserved-crm-datasource).

`plugin_crm` é gerenciado pelo ambiente. Não tente criá-lo nem fazer PATCH nele pela API regular de fonte de dados. Em deploys single-tenant, o Manager pode popular a entrada e preencher um ID de organização ausente ou vazio na inicialização; um valor persistido não vazio é mantido. Deploys multi-tenant pulam essa população e exigem seu próprio caminho de provisionamento específico do tenant.

Antes de tratar um template CCS como pronto, importe-o ou salve-o, gere um relatório, confirme que os campos do CRM são descriptografados e verifique que a saída contém registros apenas da organização pretendida do Midaz. `RPT-0075` é uma verificação de escopo fail-closed: pode significar que o metadado de organização está ausente ou vazio, mas também pode significar que o Reporter não conseguiu ler o registro de fontes de dados. Use a [solução de problemas do RPT-0075](/pt/reference/products/reporter/reporter-error-list#rpt-0075-crm-organization-scope-unresolved) em vez de presumir uma variável de ambiente ausente.

<Danger>
  Os relatórios CCS devem seguir rigorosamente os layouts definidos pelo BACEN. O Reporter permite automatizar a geração do XML, mas você continua responsável por validar a saída e garantir a conformidade com os requisitos regulatórios.
</Danger>

## O que é o CCS?

***

O **CCS (Cadastro de Clientes do Sistema Financeiro Nacional)** é um registro que mapeia **relacionamentos entre clientes e instituições financeiras**.

Seu objetivo é permitir que reguladores e outras entidades autorizadas identifiquem **onde um cliente mantém relacionamentos financeiros**.

As instituições devem enviar relatórios CCS em formato XML, seguindo os esquemas ACCS do BACEN. Cada tipo de arquivo tem uma função específica — de atualizações diárias a transferências de relacionamentos.

O Reporter torna esse processo automatizado e padronizado, garantindo que os envios de CCS sejam **tecnicamente válidos** e **alinhados ao negócio**.

## ACCS001: arquivo de atualização diária

***

### O que é

O ACCS001 é o **arquivo de atualização diária**. Ele reporta inclusões, alterações ou exclusões de relacionamentos de clientes (pessoa física ou jurídica) com a instituição. Este é o arquivo CCS mais frequente, mantendo o registro sincronizado com as operações diárias.

### Template completo

```
{# reporter:output-encoding=utf-16be #}<?xml version="1.0" encoding="UTF-16"?>
<CCSDOC xmlns="http://www.bcb.gov.br/ccs/ACCS001.xsd">
    <BCARQ>
        <IdentdEmissor>12345678</IdentdEmissor>
        <IdentdDestinatario>00000000</IdentdDestinatario>
        <NomArq>ACCS001</NomArq>
        <NumRemessaArq>12233444</NumRemessaArq>
    </BCARQ>
    <SISARQ>
        <CCSArqAtlzDiaria>
            <Repet_ACCS001_Pessoa>
{%- for alias in plugin_crm.aliases -%}
{%- for holder in plugin_crm.holders -%}
{%- if holder.document == alias.document %}
                <Grupo_ACCS001_Pessoa>
                    <TpOpCCS>I</TpOpCCS>
                    <QualifdrOpCCS>N</QualifdrOpCCS>
                    <TpPessoa>{%- if holder.type == "NATURAL_PERSON" -%}F{%- else -%}J{%- endif -%}</TpPessoa>
                    <CNPJ_CPFPessoa>{{holder.document}}</CNPJ_CPFPessoa>
                    <DtIni>{{alias.banking_details.opening_date}}</DtIni>
                    <DtFim></DtFim>
                </Grupo_ACCS001_Pessoa>
{%- endif -%}
{%- endfor %}
{%- endfor %}
            </Repet_ACCS001_Pessoa>
            <QtdOpCCS>{% count_by plugin_crm.aliases %}</QtdOpCCS>
            <DtMovto>{% date_time "YYYY-MM-dd" %}</DtMovto>
        </CCSArqAtlzDiaria>
    </SISARQ>
</CCSDOC>
```

### Lógica aplicada

Loops aninhados cruzam plugin\_crm.aliases (contas) com plugin\_crm.holders (titulares), permitindo a associação precisa entre os dados da conta e seus respectivos proprietários.

* O campo `<TpPessoa>` é condicional:
  * F para **pessoas físicas**
  * J para **pessoas jurídicas**
* **Valores fixos neste exemplo:**
  * `<TpOpCCS>` = I (Inclusão)

    Este cenário define o campo como I. O campo ainda deve refletir a operação real que você relata.\
    Os valores válidos segundo o BACEN são:

    * I = **Inclusão** (novas contas na base de dados da instituição)
    * A = **Atualização** (alterações em informações de contas existentes)
    * E = **Exclusão** (o registro original deve ser desconsiderado)
  * `<QualifdrOpCCS>` = N (Normal)

    Da mesma forma, recomenda-se que este campo represente o qualificador correto para a conta.\
    Os valores válidos incluem:

    * N = **Normal**
    * P = **Popular**
    * C = **Conglomerado**
* **Funções usadas:**
  * count\_by plugin\_crm.aliases conta os registros de alias por conta.
  * date\_time "YYYY-MM-dd" insere dinamicamente a data atual no formato especificado.

### Exemplo renderizado

```
<?xml version="1.0" encoding="UTF-16"?>
<CCSDOC xmlns="http://www.bcb.gov.br/ccs/ACCS001.xsd">
    <BCARQ>
        <IdentdEmissor>12345678</IdentdEmissor>
        <IdentdDestinatario>00000000</IdentdDestinatario>
        <NomArq>ACCS001</NomArq>
        <NumRemessaArq>12233444</NumRemessaArq>
    </BCARQ>
    <SISARQ>
        <CCSArqAtlzDiaria>
            <Repet_ACCS001_Pessoa>
                <Grupo_ACCS001_Pessoa>
                    <TpOpCCS>I</TpOpCCS>
                    <QualifdrOpCCS>N</QualifdrOpCCS>
                    <TpPessoa>F</TpPessoa>
                    <CNPJ_CPFPessoa>12345678900</CNPJ_CPFPessoa>
                    <DtIni>2025-02-01</DtIni>
                    <DtFim></DtFim>
                </Grupo_ACCS001_Pessoa>
            </Repet_ACCS001_Pessoa>
            <QtdOpCCS>1</QtdOpCCS>
            <DtMovto>2025-02-01</DtMovto>
        </CCSArqAtlzDiaria>
    </SISARQ>
</CCSDOC>
```

## ACCS005: arquivo de detalhamento de relacionamento

***

### O que é

Você gera o ACCS005 com o Reporter quando o BACEN solicita **informações detalhadas sobre relacionamentos de clientes**. Ele lista todas as vinculações entre um cliente e ativos financeiros (BDVs — Bens, Direitos e Valores). Também pode incluir **pessoas vinculadas**, como sócios ou representantes legais.

### Template completo

```
{# reporter:output-encoding=utf-16be #}<?xml version="1.0" encoding="UTF-16"?>
<CCSDOC xmlns="http://www.bcb.gov.br/ccs/ACCS005.xsd">
    <BCARQ>
        <IdentdEmissor>12345678</IdentdEmissor>
        <IdentdDestinatario>00000001</IdentdDestinatario>
        <NomArq>ACCS005</NomArq>
        <NumRemessaArq>{% date_time "YYYYMMddHHmm" %}</NumRemessaArq>
    </BCARQ>
    <SISARQ>
        <CCSArqInfDettRelctPessoa>
            <CNPJBaseEntRespons>{{plugin_crm.holders.0.document|slice:':8'}}</CNPJBaseEntRespons>
            <NumCtrlCCSOr>000000</NumCtrlCCSOr>
            <Repet_CCS0005_BDV>
                {%- for account in midaz_onboarding.account %}
                {%- for alias in plugin_crm.aliases %}
                {%- if alias.account_id == account.id %}
                {%- for holder in plugin_crm.holders %}
                {%- if holder.document == alias.document %}
                <Grupo_CCS0005_BDV>
                    <SitInfDettPessoa></SitInfDettPessoa>
                    <Grupo_CCS0005_Part>
                        <CNPJBasePart>{{holder.document|slice:"0:8"}}</CNPJBasePart>
                        <TpBDV>{% if account.type == "deposit" %}1{% elif account.type == "savings" %}2{% elif account.type == "payment" %}3{% else %}6{% endif %}</TpBDV>
                        {%- if alias.banking_details.branch %}
                        <AgIF>{{alias.banking_details.branch}}</AgIF>
                        {%- endif %}
                        {%- if alias.banking_details.type == "CACC" %}
                        <CtCli>{{alias.banking_details.account}}</CtCli>
                        {%- elif alias.banking_details.type == "payment" %}
                        <CtPgto>{{alias.banking_details.account}}</CtPgto>
                        {%- endif %}
                        <TpVincBDV>1</TpVincBDV>
                        <NomPessoa>{{holder.name}}</NomPessoa>
                        <DtIni>{{alias.banking_details.opening_date}}</DtIni>
                        <DtFim></DtFim>
                        {%- if holder.type == "NATURAL_PERSON" and holder.natural_person %}
                        <Repet_CCS0005_Vincd>
                            <Grupo_CCS0005_Vincd>
                                <Grupo_CCS0005_PessoaVincd>
                                    <TpVinc>3</TpVinc>
                                    <CNPJ_CPFPessoaVincd>{{holder.document}}</CNPJ_CPFPessoaVincd>
                                    <NomPessoaVincd>{{holder.natural_person.mother_name}}</NomPessoaVincd>
                                    <DtIniVinc>{{alias.banking_details.opening_date}}</DtIniVinc>
                                    <DtFimVinc></DtFimVinc>
                                </Grupo_CCS0005_PessoaVincd>
                            </Grupo_CCS0005_Vincd>
                        </Repet_CCS0005_Vincd>
                        {%- endif %}
                    </Grupo_CCS0005_Part>
                </Grupo_CCS0005_BDV>
                {%- endif %}
                {%- endfor %}
                {%- endif %}
                {%- endfor %}
                {%- endfor %}
            </Repet_CCS0005_BDV>
            <DtMovto>{% date_time "YYYY-MM-dd" %}</DtMovto>
        </CCSArqInfDettRelctPessoa>
    </SISARQ>
</CCSDOC>
```

### Lógica aplicada

A lógica aplica loops aninhados para iterar por **contas**, **aliases** e **titulares**, permitindo a extração estruturada de todas as entidades relevantes.

* O campo `<TpBDV>` usa lógica condicional para determinar o tipo de conta:
  * 1 = depósito
  * 2 = poupança
  * 3 = pagamento
  * 6 = outros
* Para a extração do CNPJ, slice:"0:8" recupera apenas os 8 primeiros dígitos (base do CNPJ).
* O Reporter renderiza a tag `<Repet_CCS0005_Vincd>` apenas quando o titular da conta é pessoa física **e** tem pessoas associadas (por exemplo, um procurador ou representante legal).

O exemplo abaixo inclui o **nome da mãe** como um placeholder para uma pessoa vinculada. Essa tag não se refere à mãe. O exemplo mostra o recurso em ação.

* A função `date_time` gera dinamicamente timestamps em tempo de execução, garantindo que o relatório reflita o contexto de execução atual.

### Exemplo renderizado

```
<?xml version="1.0" encoding="UTF-16"?>
<CCSDOC xmlns="http://www.bcb.gov.br/ccs/ACCS005.xsd">
    <BCARQ>
        <IdentdEmissor>12345678</IdentdEmissor>
        <IdentdDestinatario>00000001</IdentdDestinatario>
        <NomArq>ACCS005</NomArq>
        <NumRemessaArq>202502011230</NumRemessaArq>
    </BCARQ>
    <SISARQ>
        <CCSArqInfDettRelctPessoa>
            <CNPJBaseEntRespons>12345678</CNPJBaseEntRespons>
            <NumCtrlCCSOr>000000</NumCtrlCCSOr>
            <Repet_CCS0005_BDV>
                <Grupo_CCS0005_BDV>
                    <SitInfDettPessoa></SitInfDettPessoa>
                    <Grupo_CCS0005_Part>
                        <CNPJBasePart>12345678</CNPJBasePart>
                        <TpBDV>1</TpBDV>
                        <AgIF>001</AgIF>
                        <CtCli>12345-6</CtCli>
                        <TpVincBDV>1</TpVincBDV>
                        <NomPessoa>João Silva</NomPessoa>
                        <DtIni>2020-01-01</DtIni>
                        <DtFim></DtFim>
                        <Repet_CCS0005_Vincd>
                            <Grupo_CCS0005_Vincd>
                                <Grupo_CCS0005_PessoaVincd>
                                    <TpVinc>3</TpVinc>
                                    <CNPJ_CPFPessoaVincd>12345678900</CNPJ_CPFPessoaVincd>
                                    <NomPessoaVincd>Maria Silva</NomPessoaVincd>
                                    <DtIniVinc>2020-01-01</DtIniVinc>
                                    <DtFimVinc></DtFimVinc>
                                </Grupo_CCS0005_PessoaVincd>
                            </Grupo_CCS0005_Vincd>
                        </Repet_CCS0005_Vincd>
                    </Grupo_CCS0005_Part>
                </Grupo_CCS0005_BDV>
            </Repet_CCS0005_BDV>
            <DtMovto>2025-02-01</DtMovto>
        </CCSArqInfDettRelctPessoa>
    </SISARQ>
</CCSDOC>
```

## ACCS010: arquivo de transferência de relacionamento

***

### O que é

Você gera o ACCS010 com o Reporter quando instituições **transferem relacionamentos de clientes**, o que é comum em vendas de portfólio ou fusões. Ele lista os relacionamentos transferidos e identifica a **nova instituição responsável**.

### Template completo

```
{# reporter:output-encoding=utf-16be #}<?xml version="1.0" encoding="UTF-16"?>
<CCSDOC xmlns="http://www.bcb.gov.br/ccs/ACCS010.xsd">
    <BCARQ>
        <IdentdEmissor>12345678</IdentdEmissor>
        <IdentdDestinatario>00000000</IdentdDestinatario>
        <NomArq>ACCS010</NomArq>
        <NumRemessaArq>{% date_time "YYYYMMdd" %}0001</NumRemessaArq>
    </BCARQ>
    <SISARQ>
        <CCSArqTransRelac>
            <CNPJBaseNovRespons>12345679</CNPJBaseNovRespons>
            {%- for alias in plugin_crm.aliases %}
            {%- for holder in plugin_crm.holders %}
            {%- if alias.holder_id == holder._id and (holder.type == "LEGAL_PERSON" or holder.type == "NATURAL_PERSON") %}
            <Repet_ACCS010_Pessoa>
                <CNPJBasePart></CNPJBasePart>
                <TpPessoa>{% if holder.type == "NATURAL_PERSON" %}F{% else %}J{% endif %}</TpPessoa>
                <CNPJ_CPFPessoa>{{holder.document}}</CNPJ_CPFPessoa>
                <DtIni>{{alias.banking_details.opening_date}}</DtIni>
                <DtFim></DtFim>
            </Repet_ACCS010_Pessoa>
            {%- endif %}
            {%- endfor %}
            {%- endfor %}
            <QtdOpCCS>{% count_by plugin_crm.aliases %}</QtdOpCCS>
        </CCSArqTransRelac>
    </SISARQ>
</CCSDOC>
```

### Lógica aplicada

* **Loops duplos** iteram por aliases e titulares.
* `<TpPessoa>` define se o titular é pessoa física (**F**) ou jurídica (**J**).
* `<CNPJBaseNovRespons>` identifica a **nova instituição responsável**.
* `<QtdOpCCS>` usa count\_by para garantir que o número de relacionamentos reportados corresponda ao conjunto de dados.
* As datas (`<DtIni>` e `<DtFim>`) rastreiam a validade do relacionamento.

### Exemplo renderizado

```
<?xml version="1.0" encoding="UTF-16"?>
<CCSDOC xmlns="http://www.bcb.gov.br/ccs/ACCS010.xsd">
    <BCARQ>
        <IdentdEmissor>12345678</IdentdEmissor>
        <IdentdDestinatario>00000000</IdentdDestinatario>
        <NomArq>ACCS010</NomArq>
        <NumRemessaArq>202502010001</NumRemessaArq>
    </BCARQ>
    <SISARQ>
        <CCSArqTransRelac>
            <CNPJBaseNovRespons>87654321</CNPJBaseNovRespons>
            <Repet_ACCS010_Pessoa>
                <CNPJBasePart>12345678</CNPJBasePart>
                <TpPessoa>F</TpPessoa>
                <CNPJ_CPFPessoa>12345678900</CNPJ_CPFPessoa>
                <DtIni>2019-05-10</DtIni>
                <DtFim></DtFim>
            </Repet_ACCS010_Pessoa>
            <QtdOpCCS>1</QtdOpCCS>
        </CCSArqTransRelac>
    </SISARQ>
</CCSDOC>
```

<Warning>
  Embora o Reporter forneça a automação técnica, as instituições devem garantir a **precisão e consistência dos dados** enviados ao BACEN. Sempre valide o XML renderizado em relação ao esquema oficial antes do envio, e envolva as equipes de contabilidade ou compliance no processo de revisão.
</Warning>
