Generar Reportes

Generar Reportes

POST /cl/consent_manager/generate_report

Genera un reporte sobre los consentimientos del cliente autenticado. Soporta cinco tipos distintos (RDC30, por persona, por institución, estadísticas, compliance) y tres formatos de respuesta (json, csv, excel).

  • URL completa (prod): https://api.floid.app/cl/consent_manager/generate_report
  • URL sandbox: https://sandbox.floid.app/cl/consent_manager/generate_report

Sandbox vs prod: los reportes incluyen únicamente los consentimientos del ambiente correspondiente al host (los reportes históricos quedan persistidos en gestor_reportes_generados separados por ambiente). El reporte RDC30 se persiste para que después puedas recuperarlo con get_report.


Headers requeridos

Authorization: Bearer {{TOKEN}}
Content-Type: application/json

Parámetros del body

CampoTipoRequeridoDescripción
tipo_reportestringRDC30 | PERSONAS | INSTITUCIONES | ESTADISTICAS | COMPLIANCE
formatostringNojson (default) | csv | excel
fecha_desdestringDependeYYYY-MM-DD. Default hoy - 30 días para RDC30/INSTITUCIONES/ESTADISTICAS/COMPLIANCE; ignorado para PERSONAS
fecha_hastastringDependeMismo comportamiento
codigo_institucionstringSí en INSTITUCIONES, opcional en RDC30Filtra a una institución específica
person_rutstringSí en PERSONASRUT del titular
incluir_detallebooleanNotrue (default) — incluye lista de registros además del agregado. false — sólo estadísticas

Validaciones de fecha

  • fecha_desde y fecha_hasta deben tener formato YYYY-MM-DD.
  • fecha_desde no puede ser mayor que fecha_hasta.
  • El rango no puede exceder 366 días.

El parámetro de formato se llama formato (en español) en este endpoint. El módulo export_consents usa format (en inglés). Son endpoints distintos con convenciones distintas.

id_cliente y caseId se inyectan por el gateway. Si los enviás, se ignoran/sobreescriben.


Tipos de reporte

1. RDC30 — cumplimiento normativo CMF

Lista de consentimientos en el período + estadísticas por estado, finalidad y medio. Se persiste en gestor_reportes_generados y puede recuperarse con get_report.

curl --location 'https://api.floid.app/cl/consent_manager/generate_report' \
  --header 'Authorization: Bearer {{TOKEN}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tipo_reporte": "RDC30",
    "formato": "json",
    "fecha_desde": "2026-05-01",
    "fecha_hasta": "2026-05-31"
  }'

Respuesta formato: json

{
  "code": "200",
  "msg": "Report generated successfully",
  "caseid": "",
  "data": {
    "reporte": {
      "tipo": "RDC30",
      "formato": "json",
      "estadisticas": {
        "total": 145,
        "activos": 132,
        "revocados": 10,
        "expirados": 3,
        "por_finalidad": { "1": 58, "2": 87 },
        "por_medio": { "1": 120, "2": 15, "3": 10 }
      },
      "registros": [
        {
          "codigo_institucion": "123456789",
          "codigo_interno_consentimiento": "BCH-NAT-001",
          "timestamp_otorgamiento_fecha": "20260512",
          "timestamp_otorgamiento_hora": "143022",
          "timestamp_expiracion_fecha": "20270512",
          "timestamp_expiracion_hora": "143022",
          "person_rut": "12345678-9",
          "medio": 1,
          "finalidad": 2,
          "objetivo": "02",
          "rut_ejecutivo": "98765432-1",
          "current_state": "ACTIVE",
          "timestamp_revocacion_fecha": null,
          "timestamp_revocacion_hora": null,
          "fecha_hora_otorgamiento": "20260512143022",
          "fecha_hora_expiracion": "20270512143022",
          "fecha_hora_revocacion": null
        }
      ]
    },
    "metadata": {
      "generado_en": "2026-05-12 19:00:00",
      "periodo": { "desde": "2026-05-01", "hasta": "2026-05-31" }
    }
  }
}

Si pasás incluir_detalle: false, el campo data.reporte.registros no aparece — solo estadisticas.

2. PERSONAS — análisis por titular

Devuelve todos los consentimientos de un RUT + su historial de auditoría. Requiere person_rut.

curl --location 'https://api.floid.app/cl/consent_manager/generate_report' \
  --header 'Authorization: Bearer {{TOKEN}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tipo_reporte": "PERSONAS",
    "person_rut": "12345678-9"
  }'

Respuesta

{
  "code": "200",
  "msg": "Report generated successfully",
  "caseid": "",
  "data": {
    "reporte": {
      "tipo": "PERSONAS",
      "formato": "json",
      "person_rut": "12345678-9",
      "person_name": "GARCIA/PEREZ/JUAN CARLOS",
      "person_email": "[email protected]",
      "estadisticas": {
        "total_consentimientos": 4,
        "activos": 3,
        "revocados": 1,
        "expirados": 0,
        "instituciones_unicas": 2
      },
      "consentimientos": [ /* lista completa de consentimientos del RUT */ ],
      "historial_auditoria": [ /* todos los eventos de audit de esos consentimientos */ ]
    },
    "metadata": { "generado_en": "..." }
  }
}

3. INSTITUCIONES — análisis por institución

Requiere codigo_institucion. Acepta fecha_desde/fecha_hasta.

curl --location 'https://api.floid.app/cl/consent_manager/generate_report' \
  --header 'Authorization: Bearer {{TOKEN}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tipo_reporte": "INSTITUCIONES",
    "codigo_institucion": "123456789",
    "fecha_desde": "2026-01-01",
    "fecha_hasta": "2026-05-31"
  }'

Respuesta similar a PERSONAS pero agrupada por institución (estadisticas incluye total, activos, revocados, personas_unicas).

4. ESTADISTICAS — métricas agregadas

curl --location 'https://api.floid.app/cl/consent_manager/generate_report' \
  --header 'Authorization: Bearer {{TOKEN}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tipo_reporte": "ESTADISTICAS",
    "fecha_desde": "2026-01-01",
    "fecha_hasta": "2026-05-31"
  }'

Respuesta

{
  "code": "200",
  "msg": "Report generated successfully",
  "caseid": "",
  "data": {
    "reporte": {
      "tipo": "ESTADISTICAS",
      "formato": "json",
      "totales": {
        "total": "237",
        "activos": "200",
        "revocados": "30",
        "expirados": "7",
        "personas_unicas": "189",
        "instituciones_unicas": "12"
      },
      "por_finalidad": { "1": 95, "2": 142 },
      "por_medio": { "1": 200, "2": 25, "3": 12 },
      "timeline": [
        { "fecha": "20260101", "count": 5 },
        { "fecha": "20260102", "count": 7 }
      ]
    },
    "metadata": { "generado_en": "...", "periodo": { "desde": "...", "hasta": "..." } }
  }
}

5. COMPLIANCE — auditoría de cumplimiento

Detecta consentimientos con problemas (sin contacto, expirando pronto, sin auditoría). Devuelve un score 0-100.

curl --location 'https://api.floid.app/cl/consent_manager/generate_report' \
  --header 'Authorization: Bearer {{TOKEN}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tipo_reporte": "COMPLIANCE",
    "fecha_desde": "2026-01-01",
    "fecha_hasta": "2026-05-31"
  }'

Respuesta

{
  "code": "200",
  "msg": "Report generated successfully",
  "caseid": "",
  "data": {
    "reporte": {
      "tipo": "COMPLIANCE",
      "formato": "json",
      "compliance_score": 80,
      "total_issues": 2,
      "issues": [
        {
          "type": "NO_CONTACT_INFO",
          "severity": "MEDIUM",
          "count": 5,
          "description": "Consentimientos sin email ni teléfono"
        },
        {
          "type": "EXPIRING_SOON",
          "severity": "LOW",
          "count": 23,
          "description": "Consentimientos que expiran en los próximos 30 días"
        }
      ]
    },
    "metadata": { "generado_en": "...", "periodo": { "desde": "...", "hasta": "..." } }
  }
}

Tipos de issue (issues[].type)

typeseveritySignificado
NO_CONTACT_INFOMEDIUMConsentimientos sin person_email ni person_cellphone
EXPIRING_SOONLOWConsentimientos ACTIVE que expiran en los próximos 30 días
MISSING_AUDITHIGHConsentimientos sin ningún registro en gestor_consentimientos_auditoria

compliance_score se calcula como max(0, 100 - (cantidad_de_issues * 10)).


Respuesta formato: csv o formato: excel

Para RDC30 y ESTADISTICAS, los formatos csv y excel devuelven un JSON envelope con el archivo en base64 (mismo formato que export_consents):

{
  "code": "200",
  "msg": "OK",
  "format": "csv",
  "filename": "reporte_rdc30_20260512190000.csv",
  "mime": "text/csv; charset=utf-8",
  "rows": 145,
  "encoding": "base64",
  "data": "PHRhYmxlPjx0cj48dGg+aWQ8L3RoPi4uLg=="
}

Para los demás tipos (PERSONAS, INSTITUCIONES, COMPLIANCE), el formato se ignora y siempre devuelve JSON estructurado.

Cómo procesar la respuesta

const buffer = Buffer.from(response.data, 'base64');
fs.writeFileSync(response.filename, buffer);
import base64
with open(response['filename'], 'wb') as f:
    f.write(base64.b64decode(response['data']))

Posibles errores

error_codeHTTPdisplay_message típico
INVALID_REQUEST400"Missing required parameter: tipo_reporte"
INVALID_REQUEST400"Invalid tipo_reporte. Supported values: RDC30, PERSONAS, INSTITUCIONES, ESTADISTICAS, COMPLIANCE"
INVALID_REQUEST400"Invalid formato. Supported values: json, csv, excel"
INVALID_REQUEST400"Missing required parameter: person_rut" (en PERSONAS)
INVALID_REQUEST400"Missing required parameter: codigo_institucion" (en INSTITUCIONES)
INVALID_DATES400"Invalid date format. Use YYYY-MM-DD"
INVALID_DATES400"fecha_desde cannot be greater than fecha_hasta"
INVALID_DATES400"Date range exceeds the maximum allowed of 1 year"
NO_DATA_AVAILABLE400"No records found for the specified date range"
NOT_FOUND400"No consents found for this person" (en PERSONAS)
INTERNAL_ERROR500Error de DB / excepción no controlada

Última actualización: 12 de mayo de 2026.