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

# Informes CCS

> Genera archivos XML de CCS (ACCS001, ACCS005, ACCS010) para BACEN combinando datos de Lerian CRM y Midaz mediante plantillas de Reporter y generación programada.

Reporter permite generar archivos XML de CCS (Cadastro de Clientes do Sistema Financeiro Nacional) según lo define el Banco Central de Brasil (BACEN).

Esta guía muestra cómo crear informes CCS automatizados con Reporter: ACCS001, ACCS005 y ACCS010. Combinas los datos de CRM (titulares y alias) con las estructuras de Midaz.

## Antes de usar las plantillas de CCS

***

Los siguientes ejemplos mapean la fuente de datos reservada de CRM llamada `plugin_crm`. Configura esa fuente de datos antes de importar o guardar una plantilla de CCS: necesita la conexión de MongoDB de CRM y `DATASOURCE_CRM_MIDAZ_ORGANIZATION_ID`, que limita el alcance de los registros de CRM a una sola organización de Midaz. Sigue [Reporter mediante Helm](/es/platform/deploy/reporter/reporter-helm#optional-crm-datasource) o la [referencia de variables de entorno](/es/products/reporter/reporter-environment-variables#reserved-crm-datasource).

`plugin_crm` se gestiona mediante el entorno. No intentes crearlo ni aplicarle PATCH mediante la API de fuentes de datos habitual. En los despliegues de un solo tenant, Manager puede sembrar la entrada y completar un ID de organización ausente o vacío al inicio; un valor persistido no vacío se conserva. Los despliegues multi-tenant omiten esa siembra y requieren su propia vía de aprovisionamiento específica del tenant.

Antes de considerar lista una plantilla de CCS, impórtala o guárdala, genera un informe, confirma que los campos de CRM se descifran y verifica que la salida contenga registros solo de la organización de Midaz prevista. `RPT-0075` es una verificación de alcance fail-closed: puede significar que los metadatos de la organización están ausentes o vacíos, pero también puede significar que Reporter no pudo leer el registro de fuentes de datos. Usa [Solución de problemas de RPT-0075](/es/reference/products/reporter/reporter-error-list#rpt-0075-crm-organization-scope-unresolved) en lugar de suponer que falta una variable de entorno.

<Danger>
  Los informes CCS deben seguir estrictamente los formatos definidos por BACEN. Reporter permite automatizar la generación de XML, pero sigues siendo responsable de validar la salida y garantizar el cumplimiento de los requisitos regulatorios.
</Danger>

## ¿Qué es CCS?

***

El **CCS (Cadastro de Clientes do Sistema Financeiro Nacional)** es un registro que mapea las **relaciones entre los clientes y las instituciones financieras**.

Su propósito es permitir que los reguladores y otras entidades autorizadas identifiquen **dónde mantiene un cliente relaciones financieras**.

Las instituciones deben presentar los informes de CCS en formato XML, siguiendo los esquemas ACCS de BACEN. Cada tipo de archivo tiene una función específica: desde actualizaciones diarias hasta transferencias de relaciones.

Reporter automatiza y estandariza este proceso, garantizando que las presentaciones de CCS sean **técnicamente válidas** y estén **alineadas con el negocio**.

## ACCS001: archivo de actualización diaria

***

### Qué es

El ACCS001 es el **archivo de actualización diaria**. Informa inclusiones, cambios o exclusiones de relaciones de clientes (personas físicas o jurídicas) con la institución. Es el archivo de CCS más frecuente, y mantiene el registro sincronizado con las operaciones diarias.

### Plantilla completa

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

Los bucles anidados cruzan plugin\_crm.aliases (cuentas) con plugin\_crm.holders (titulares), lo que permite una asociación precisa entre los datos de las cuentas y sus respectivos titulares.

* El campo `<TpPessoa>` es condicional:
  * F para **personas físicas**
  * J para **personas jurídicas**
* **Valores fijos en este ejemplo:**
  * `<TpOpCCS>` = I (Inclusión)

    Este escenario establece el campo en I. Aun así, el campo debe reflejar la operación real que informas.\
    Los valores válidos según BACEN son:

    * I = **Inclusión** (cuentas nuevas en la base de datos de la institución)
    * A = **Actualización** (cambios en la información de cuentas existentes)
    * E = **Exclusión** (el registro original debe descartarse)
  * `<QualifdrOpCCS>` = N (Normal)

    De manera similar, este campo debe representar el calificador correcto de la cuenta.\
    Los valores válidos incluyen:

    * N = **Normal**
    * P = **Popular**
    * C = **Conglomerado**
* **Funciones usadas:**
  * count\_by plugin\_crm.aliases cuenta los registros de alias por cuenta.
  * date\_time "YYYY-MM-dd" inserta dinámicamente la fecha actual en el formato especificado.

### Ejemplo 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: archivo de detalle de relaciones

***

### Qué es

Generas el ACCS005 con Reporter cuando BACEN solicita **información detallada sobre las relaciones con los clientes**. Enumera todos los vínculos entre un cliente y los activos financieros (BDV: Bens, Direitos e Valores). También puede incluir **personas relacionadas**, como socios o representantes legales.

### Plantilla completa

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

La lógica aplica bucles anidados para iterar sobre **cuentas**, **alias** y **titulares**, lo que permite una extracción estructurada de todas las entidades relevantes.

* El campo `<TpBDV>` usa lógica condicional para determinar el tipo de cuenta:
  * 1 = depósito
  * 2 = ahorro
  * 3 = pago
  * 6 = otros
* Para la extracción del CNPJ, slice:"0:8" recupera solo los primeros 8 dígitos (base del CNPJ).
* Reporter renderiza la etiqueta `<Repet_CCS0005_Vincd>` solo cuando el titular de la cuenta es una persona física **y** tiene personas asociadas (por ejemplo, un apoderado o representante legal).

El ejemplo a continuación incluye el **nombre de la madre** como marcador de posición para una persona vinculada. Esa etiqueta no se refiere a la madre. El ejemplo muestra la función en acción.

* La función `date_time` genera marcas de tiempo dinámicamente en tiempo de ejecución, lo que garantiza que el informe refleje el contexto de ejecución actual.

### Ejemplo 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: archivo de transferencia de relaciones

***

### Qué es

Generas el ACCS010 con Reporter cuando las instituciones **transfieren relaciones con clientes**, algo común en ventas de portafolios o fusiones. Enumera las relaciones transferidas e identifica a la **nueva institución responsable**.

### Plantilla completa

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

* **Bucles duales** iteran sobre los alias y los titulares.
* `<TpPessoa>` define si el titular es persona física (**F**) o persona jurídica (**J**).
* `<CNPJBaseNovRespons>` identifica a la **nueva institución responsable**.
* `<QtdOpCCS>` usa count\_by para garantizar que el número de relaciones informadas coincida con el conjunto de datos.
* Las fechas (`<DtIni>` y `<DtFim>`) hacen seguimiento de la vigencia de la relación.

### Ejemplo 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>
  Si bien Reporter proporciona la automatización técnica, las instituciones deben garantizar la **exactitud y la consistencia de los datos** presentados a BACEN. Valida siempre el XML renderizado contra el esquema oficial antes de la presentación, e involucra a los equipos de contabilidad o cumplimiento en el proceso de revisión.
</Warning>
