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

# Simular una regla de coincidencia contra un contexto (simulación de solo lectura)

> Previsualiza cómo una única regla — una regla configurada existente (ruleId) O una regla candidata en línea (rule) — coincidiría con las transacciones sin coincidencia de un contexto, SIN comprometer nada. Devuelve el número de grupos 1:1 que la regla formaría, una muestra acotada de pares que coincidirían (cada uno con una puntuación de confianza, una justificación por componente (el "por qué") y claves compuestas coincidentes), y los recuentos sin coincidencia por lado. Impulsa la previsualización de creación de reglas "¿esta regla coincidirá realmente?". Alcance: puntuado por el motor de reglas determinista sobre importes de transacción sin procesar; NO aplica normalización de comisiones en tiempo de ejecución ni la banda de varianza FX, y solo previsualiza agrupación 1:1 por pares (sin asignación 1:N/N:M). Nada se persiste; el tenant se toma del JWT, nunca del cuerpo.



## OpenAPI

````yaml es/openapi/v3-current/matcher.yaml post /v1/matching/simulate
openapi: 3.1.0
info:
  title: Matcher APIs
  description: >-
    Referencia completa de la API para el motor de conciliación Matcher, que
    proporciona conciliación automatizada de transacciones entre Midaz Ledger y
    sistemas externos.
  version: 4.1.0
  license:
    name: Elastic License 2.0
    url: https://www.elastic.co/licensing/elastic-license
servers:
  - url: https://matcher.sandbox.lerian.net
security: []
paths:
  /v1/matching/simulate:
    post:
      tags:
        - Matching
      summary: >-
        Simular una regla de coincidencia contra un contexto (simulación de solo
        lectura)
      description: >-
        Previsualiza cómo una única regla — una regla configurada existente
        (ruleId) O una regla candidata en línea (rule) — coincidiría con las
        transacciones sin coincidencia de un contexto, SIN comprometer nada.
        Devuelve el número de grupos 1:1 que la regla formaría, una muestra
        acotada de pares que coincidirían (cada uno con una puntuación de
        confianza, una justificación por componente (el "por qué") y claves
        compuestas coincidentes), y los recuentos sin coincidencia por lado.
        Impulsa la previsualización de creación de reglas "¿esta regla
        coincidirá realmente?". Alcance: puntuado por el motor de reglas
        determinista sobre importes de transacción sin procesar; NO aplica
        normalización de comisiones en tiempo de ejecución ni la banda de
        varianza FX, y solo previsualiza agrupación 1:1 por pares (sin
        asignación 1:N/N:M). Nada se persiste; el tenant se toma del JWT, nunca
        del cuerpo.
      operationId: simulateMatchRule
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SimulateMatchRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimulateMatchResponse'
          description: OK
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
      security:
        - BearerAuth: []
components:
  schemas:
    SimulateMatchRequest:
      additionalProperties: false
      properties:
        contextId:
          description: ID del contexto contra cuyas transacciones se simula la regla
          format: uuid
          type: string
        rule:
          $ref: '#/components/schemas/SimulateRuleDefinition'
          description: >-
            Regla candidata en línea a previsualizar. Proporcione esta O ruleId,
            no ambas.
        ruleId:
          description: >-
            Identificador de una regla configurada existente a previsualizar.
            Proporcione esta O rule, no ambas.
          format: uuid
          type: string
        sampleLimit:
          default: 25
          description: Número máximo de pares que coincidirían a devolver en la muestra
          format: int64
          maximum: 200
          minimum: 1
          type: integer
      required:
        - contextId
      type: object
    SimulateMatchResponse:
      additionalProperties: false
      properties:
        matchedGroups:
          description: Número de grupos 1:1 que la regla formaría en el contexto
          examples:
            - 12
          format: int64
          minimum: 0
          type: integer
        ruleId:
          description: >-
            Identificador de la regla previsualizada. Vacío para una regla
            candidata en línea (no persistida).
          examples:
            - 550e8400-e29b-41d4-a716-446655440000
          type: string
        ruleType:
          description: Estrategia de la regla previsualizada
          examples:
            - EXACT
          type: string
        sample:
          description: Muestra acotada de pares que coincidirían (mayor puntuación primero)
          items:
            $ref: '#/components/schemas/SimulateMatchPairResponse'
          maxItems: 200
          type:
            - array
            - 'null'
        sampleTruncated:
          description: Si matchedGroups excede la longitud de la muestra devuelta
          examples:
            - false
          type: boolean
        unmatchedLeft:
          description: Transacciones del lado izquierdo que quedarían sin coincidencia
          examples:
            - 3
          format: int64
          minimum: 0
          type: integer
        unmatchedRight:
          description: Transacciones del lado derecho que quedarían sin coincidencia
          examples:
            - 5
          format: int64
          minimum: 0
          type: integer
      required:
        - ruleType
        - matchedGroups
        - unmatchedLeft
        - unmatchedRight
        - sampleTruncated
        - sample
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Código de error de dominio estable y legible por máquina con alcance
            al servicio emisor (formato: <SERVICE>-NNNN).
          examples:
            - ERR-0001
          type: string
        detail:
          description: >-
            Una explicación legible por humanos específica de esta ocurrencia
            del problema.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Lista opcional de detalles de errores individuales
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            Una referencia URI que identifica la ocurrencia específica del
            problema.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: Código de estado HTTP
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            Un resumen breve y legible por humanos del tipo de problema. Este
            valor no debería cambiar entre ocurrencias del error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: >-
            Una referencia URI a documentación legible por humanos para el
            error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
      type: object
    SimulateRuleDefinition:
      additionalProperties: false
      properties:
        config:
          additionalProperties: {}
          description: >-
            Configuración de regla, misma forma que la config de una regla de
            coincidencia almacenada (p. ej. matchAmount, matchCurrency, ajustes
            de tolerancia)
          type: object
        type:
          description: Estrategia de la regla del candidato en línea
          examples:
            - EXACT
          type: string
      required:
        - type
        - config
      type: object
    SimulateMatchPairResponse:
      additionalProperties: false
      properties:
        amountDelta:
          description: right.amount - left.amount como cadena decimal con signo
          examples:
            - '0.00'
          type: string
        dateDeltaDays:
          description: Diferencia de días enteros con signo (right - left) en días UTC
          examples:
            - 0
          format: int64
          type: integer
        left:
          $ref: '#/components/schemas/CandidateTransactionView'
          description: >-
            Transacción del pool izquierdo (el lado izquierdo de la regla) que
            el par agruparía
        right:
          $ref: '#/components/schemas/CandidateTransactionView'
          description: >-
            Transacción del pool derecho (el lado derecho de la regla) que el
            par agruparía
        score:
          description: Puntuación de confianza del motor para este par (0..100)
          examples:
            - 90
          format: int64
          maximum: 100
          minimum: 0
          type: integer
        why:
          $ref: '#/components/schemas/CandidateWhy'
          description: Justificación por componente de la puntuación
      required:
        - left
        - right
        - score
        - why
        - amountDelta
        - dateDeltaDays
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Dónde ocurrió el error, p. ej. 'body.items[3].tags' o
            'path.thing-id'
          type: string
        message:
          description: Texto del mensaje de error
          type: string
        value:
          description: El valor en la ubicación indicada
      type: object
    CandidateTransactionView:
      additionalProperties: false
      properties:
        amount:
          description: Importe candidato como cadena decimal
          examples:
            - '100.50'
          type: string
        baseAmount:
          description: >-
            Importe candidato en moneda base, cuando la transacción fue
            convertida por FX
          examples:
            - '100.50'
          type: string
        currency:
          description: Código de moneda candidato ISO 4217
          examples:
            - USD
          type: string
        date:
          description: Fecha de la transacción candidata (marca de tiempo RFC 3339)
          examples:
            - '2025-01-15T10:30:00Z'
          type: string
        externalId:
          description: Referencia/id externo de la transacción candidata
          examples:
            - INV-1234
          type: string
        id:
          description: ID de la transacción candidata (UUID)
          examples:
            - 550e8400-e29b-41d4-a716-446655440000
          type: string
        sourceId:
          description: Fuente a la que pertenece el candidato (UUID)
          examples:
            - 550e8400-e29b-41d4-a716-446655440001
          type: string
      required:
        - id
        - sourceId
        - amount
        - currency
        - date
      type: object
    CandidateWhy:
      additionalProperties: false
      properties:
        amountMatch:
          description: >-
            Si los importes son literalmente iguales en el eje de signo de la
            regla coincidente (no solo dentro de la tolerancia)
          examples:
            - true
          type: boolean
        currencyMatch:
          description: Si los códigos de moneda son literalmente iguales y ambos no vacíos
          examples:
            - true
          type: boolean
        dateMatch:
          description: >-
            Si ambas transacciones caen en el mismo día calendario UTC (no la
            ventana completa DATE_LAG)
          examples:
            - true
          type: boolean
        matchedKeys:
          description: >-
            Concordancia por clave para los campos de coincidencia compuestos
            configurados de la regla coincidente (matchFields), en orden de
            nombre de campo. Vacío cuando la regla coincidente no declara
            matchFields activos.
          items:
            $ref: '#/components/schemas/CandidateMatchedKey'
          type:
            - array
            - 'null'
        referenceScore:
          description: Contribución de similitud de referencia graduada de 0 a 1
          examples:
            - 1
          format: double
          maximum: 1
          minimum: 0
          type: number
      required:
        - amountMatch
        - currencyMatch
        - dateMatch
        - referenceScore
      type: object
    CandidateMatchedKey:
      additionalProperties: false
      properties:
        agreed:
          description: >-
            Si las dos transacciones concuerdan en esta clave bajo el
            modo/tolerancia configurado del campo — la propia decisión de
            compuerta por campo del motor
          examples:
            - true
          type: boolean
        field:
          description: >-
            Nombre del campo de coincidencia compuesto configurado (clave de
            metadatos)
          examples:
            - payment_id
          type: string
      required:
        - field
        - agreed
      type: object
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Autenticación con token Bearer (formato: "Bearer {token}")'

````