Saltar al contenido principal
Esta integración es opcional. Matcher es un producto independiente que funciona de forma autónoma. Use esta guía solo si desea integrar Matcher con Midaz Ledger.
Matcher puede integrarse de forma nativa con Midaz Ledger, habilitando la conciliación fluida de transacciones del libro mayor contra fuentes externas como extractos bancarios y pasarelas de pago.

Descripción general


La integración con Midaz proporciona:
  • Acceso directo al libro mayor: Consulta transacciones directamente desde Midaz sin exportaciones de archivos
  • Sincronización en tiempo real: Sincronización automática de transacciones a medida que se registran los asientos
  • Autenticación unificada: Sistema de autenticación único a través de lib-auth
  • Aislamiento de inquilinos: Arquitectura de esquema por inquilino que garantiza la separación de datos

Prerrequisitos


Antes de configurar la integración con Midaz:
  • Instancia de Midaz Ledger en ejecución y accesible
  • Credenciales de API con permisos de lectura de transacciones
  • Conectividad de red entre Matcher y Midaz
  • Configuración de inquilino coincidente en ambos sistemas

Configuración


Variables de entorno

Configure Matcher para conectarse a su instancia de Midaz:
# Conexión con Midaz
MIDAZ_BASE_URL=https://api.midaz.example.com
MIDAZ_GRPC_ADDRESS=midaz-grpc.example.com:50051

# Autenticación (compartida con Midaz)
AUTH_SERVICE_URL=https://auth.example.com
AUTH_CLIENT_ID=matcher-service
AUTH_CLIENT_SECRET=your-secret

# Configuración de conexión
MIDAZ_CONNECTION_TIMEOUT=30s
MIDAZ_REQUEST_TIMEOUT=60s
MIDAZ_MAX_RETRIES=3

Crear fuente Midaz

Cree una fuente de tipo MIDAZ a través de la API de configuración de fuentes.
Referencia de API: Crear fuente

Configuración de fuente

ConfiguraciónTipoDescripción
ledger_idStringID del libro mayor de destino en Midaz
account_filter.typeStringFiltro por tipo de cuenta (ASSET, LIABILITY, etc.)
account_filter.path_prefixStringPrefijo de ruta de cuenta a incluir
account_filter.accountsArrayIDs de cuentas específicas a incluir
sync_modeStringrealtime o batch
lookback_daysIntegerDías de datos históricos a incluir
exclude_pendingBooleanExcluir asientos pendientes

Autenticación


Matcher utiliza el mismo sistema de autenticación que Midaz a través de la biblioteca compartida lib-auth.

Autenticación servicio a servicio

Matcher se autentica con Midaz usando credenciales de cliente OAuth 2.0:
# El intercambio de tokens ocurre automáticamente
# Matcher solicita: POST /oauth/token
{
 "grant_type": "client_credentials",
 "client_id": "matcher-service",
 "client_secret": "your-secret",
 "scope": "ledger:read transactions:read"
}

Alcances requeridos

AlcancePermiso
ledger:readLeer metadatos del libro mayor
transactions:readLeer asientos de transacciones
accounts:readLeer información de cuentas

Contexto del inquilino

Todas las solicitudes incluyen el encabezado de contexto del inquilino:
X-Tenant-ID: tenant_001
Esto asegura que las transacciones se consulten desde el esquema correcto del inquilino.

Consulta de transacciones


Sincronización automática

Con sync_mode: realtime, Matcher se suscribe a eventos de Midaz y recibe transacciones a medida que se registran. Cuando se crea una transacción en Midaz, publica un evento en la cola de mensajes. Matcher consume el evento, almacena la transacción localmente y la pone en cola para el emparejamiento—todo sin intervención manual.
Consulta de transacciones

Filtros de consulta

Filtre transacciones al sincronizar:
{
  "date_from": "2024-01-01",
  "date_to": "2024-01-31",
  "filters": {
    "operation_types": [
      "CREDIT",
      "DEBIT"
    ],
    "min_amount": 100.0,
    "currencies": [
      "USD",
      "EUR"
    ],
    "metadata": {
      "source_system": "treasury"
    }
  }
}

Mapeo de transacciones


Las transacciones de Midaz se mapean automáticamente al esquema de Matcher:
Campo MidazCampo MatcherNotas
idtransaction_idID único del asiento
amountamountMonto decimal
asset_codecurrencyCódigo de moneda ISO
created_atdateFecha del asiento
descriptionreferenceDescripción del asiento
metadata.external_refexternal_idReferencia externa si está presente
operationtypeCREDIT o DEBIT

Mapeo de campos personalizado

Sobrescriba el mapeo predeterminado para casos de uso específicos:
{
  "settings": {
    "field_mapping": {
      "reference": "metadata.invoice_number",
      "counterparty": "metadata.vendor_name",
      "external_id": "metadata.bank_reference"
    }
  }
}

Aislamiento de inquilinos


Matcher hereda el modelo de aislamiento de esquema por inquilino de Midaz.

Cómo funciona

  1. Cada inquilino tiene un esquema PostgreSQL dedicado
  2. Todas las consultas tienen alcance al esquema del inquilino
  3. El pool de conexiones mantiene el contexto del esquema
  4. No es posible el acceso a datos entre inquilinos
Base de datos: matcher_db
├── tenant_001 (esquema)
│ ├── transactions
│ ├── matches
│ └── exceptions
├── tenant_002 (esquema)
│ ├── transactions
│ ├── matches
│ └── exceptions
└── shared (esquema)
 ├── field_maps
 └── rules_templates

Resolución del inquilino

El inquilino se determina desde el token de autenticación:
{
  "sub": "user_123",
  "tenant_id": "tenant_001",
  "roles": [
    "reconciliation_admin"
  ]
}

Manejo de errores


Errores de conexión

{
  "error": "MIDAZ_CONNECTION_ERROR",
  "message": "Error al conectar con Midaz en midaz-grpc.example.com:50051",
  "details": {
    "retry_count": 3,
    "last_error": "connection refused"
  },
  "suggestion": "Verifique la conectividad de red y el estado del servicio Midaz"
}

Errores de autenticación

{
  "error": "MIDAZ_AUTH_ERROR",
  "message": "Error al autenticarse con Midaz",
  "details": {
    "status_code": 401,
    "reason": "invalid_client"
  },
  "suggestion": "Verifique las credenciales del cliente y los alcances requeridos"
}

Errores de sincronización

{
  "error": "MIDAZ_SYNC_ERROR",
  "message": "Fallo parcial de sincronización",
  "details": {
    "total_expected": 5000,
    "fetched": 4500,
    "failed_batches": [
      {
        "batch": 10,
        "error": "timeout"
      }
    ]
  },
  "suggestion": "Reintente los lotes fallidos o aumente el tiempo de espera"
}

Mejores prácticas


Habilite sync_mode: realtime para contextos con conciliación diaria. Esto asegura que las transacciones estén disponibles para emparejamiento inmediatamente después de registrarse.
Use account_filter.path_prefix para limitar las transacciones a cuentas relevantes. Esto reduce el volumen de datos y mejora el rendimiento del emparejamiento.
Configure lookback_days según su ciclo de conciliación. La conciliación diaria típicamente necesita 7-14 días; la mensual necesita 45-60 días.
Rastree el retraso entre los registros de Midaz y la disponibilidad en Matcher. Un retraso alto puede indicar acumulación en la cola o problemas de procesamiento.
Almacene datos relevantes para el emparejamiento en campos de metadatos de Midaz (números de factura, referencias bancarias) y mapéelos a campos de Matcher para mejores tasas de coincidencia.

Próximos pasos