Saltar al contenido principal
El mapeo de campos convierte datos de transacciones específicos de la fuente al esquema canónico de Matcher. Esta normalización es necesaria para comparar transacciones entre sistemas y aplicar reglas de conciliación de manera consistente.

¿Por qué mapeo de campos?


Los sistemas externos rara vez comparten los mismos nombres de campos, formatos o convenciones de signo. Por ejemplo:
SistemaCampo de montoCampo de fechaCampo de referencia
Banco AtransactionAmountpostDatecheckNumber
Banco Bamttransaction_dateref_num
ERPAMOUNT_USDGL_DATEDOC_NUM
Los mapeos de campos estandarizan estas variaciones en un único esquema que Matcher puede validar, normalizar y conciliar.

Esquema estándar de Matcher


Campos requeridos

Cada transacción debe proporcionar estos campos después del mapeo:
CampoTipoDescripciónEjemplo
transaction_idStringIdentificador único dentro de la fuente"TXN-2024-001"
amountDecimalMonto de la transacción (hasta 4 decimales)1234.56
currencyStringCódigo de moneda ISO 4217"USD"
dateDateFecha de la transacción (YYYY-MM-DD)"2024-01-15"

Campos opcionales

CampoTipoDescripciónEjemplo
referenceStringReferencia externa o descripción"Factura #1234"
counterpartyStringOtra parte en la transacción"Acme Corp"
typeStringDirección/tipo de transacción"credit", "debit"
categoryStringCategoría de transacción"payment", "fee"
posting_dateDateFecha de contabilización"2024-01-16"
value_dateDateFecha de valor/liquidación"2024-01-17"
external_idStringIdentificador del sistema externo"BANK-REF-999"
metadataObjectCampos específicos de la fuente{"department": "sales"}

Creando mapeos de campos


Mapeo de campos básico

cURL
curl -X POST "https://api.matcher.example.com/v1/field-maps" \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "name": "Formato de extracto de Chase Bank",
   "description": "Mapea exportaciones CSV de Chase Bank al esquema de Matcher",
   "source_type": "csv",
   "mappings": [
     {
       "source_field": "Transaction ID",
       "target_field": "transaction_id"
     },
     {
       "source_field": "Amount",
       "target_field": "amount"
     },
     {
       "source_field": "Currency",
       "target_field": "currency"
     },
     {
       "source_field": "Post Date",
       "target_field": "date"
     },
     {
       "source_field": "Description",
       "target_field": "reference"
     }
   ]
 }'
Respuesta
{
  "id": "{fieldMapId}",
  "name": "Formato de extracto de Chase Bank",
  "description": "Mapea exportaciones CSV de Chase Bank al esquema de Matcher",
  "source_type": "csv",
  "mappings": [
    {
      "source_field": "Transaction ID",
      "target_field": "transaction_id"
    },
    {
      "source_field": "Amount",
      "target_field": "amount"
    },
    {
      "source_field": "Currency",
      "target_field": "currency"
    },
    {
      "source_field": "Post Date",
      "target_field": "date"
    },
    {
      "source_field": "Description",
      "target_field": "reference"
    }
  ],
  "created_at": "2024-01-15T10:00:00Z"
}
API Reference: Crear mapeo de campos
Los mapeos de campos se crean para una fuente específica dentro de un contexto. La asignación se realiza automáticamente al crear el mapeo usando el endpoint /v1/config/contexts/{contextId}/sources/{sourceId}/field-maps.

Transformaciones de datos


Los mapeos de campos pueden aplicar transformaciones para normalizar formatos y convenciones antes de la conciliación.

Transformaciones disponibles

TransformaciónDescripciónEjemplo
uppercaseConvertir a mayúsculas"abc""ABC"
lowercaseConvertir a minúsculas"ABC""abc"
trimEliminar espacios al inicio/final" abc ""abc"
parse_dateAnalizar fecha por formato"01/15/2024""2024-01-15"
parse_numberAnalizar número con configuración regional"1,234.56"1234.56
absValor absoluto-100100
negateNegar número100-100
multiplyMultiplicar por factor100 × 0.011
replaceReemplazo de cadena"USD$""USD"
extractExtracción con regexExtraer números de cadena
defaultValor por defecto si está vacíonull"UNKNOWN"
concatConcatenar camposfield1 + field2

Ejemplos de transformación

cURL
curl -X POST "https://api.matcher.example.com/v1/field-maps" \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "name": "Formato de banco legacy con transformaciones",
   "source_type": "csv",
   "mappings": [
     {
       "source_field": "TXN_NUM",
       "target_field": "transaction_id",
       "transformations": [
         {
           "type": "trim"
         },
         {
           "type": "uppercase"
         }
       ]
     },
     {
       "source_field": "AMOUNT",
       "target_field": "amount",
       "transformations": [
         {
           "type": "parse_number",
           "options": {
             "locale": "en-US"
           }
         },
         {
           "type": "multiply",
           "options": {
             "factor": 0.01
           }
         }
       ]
     },
     {
       "source_field": "TXN_DATE",
       "target_field": "date",
       "transformations": [
         {
           "type": "parse_date",
           "options": {
             "format": "MM/DD/YYYY"
           }
         }
       ]
     },
     {
       "source_field": "CURR",
       "target_field": "currency",
       "transformations": [
         {
           "type": "replace",
           "options": {
             "search": "$",
             "replace": ""
           }
         },
         {
           "type": "uppercase"
         },
         {
           "type": "default",
           "options": {
             "value": "USD"
           }
         }
       ]
     }
   ]
 }'
Respuesta
{
  "id": "{fieldMapId}",
  "name": "Formato de banco legacy con transformaciones",
  "mappings": [
    {
      "source_field": "TXN_NUM",
      "target_field": "transaction_id",
      "transformations": [
        {
          "type": "trim"
        },
        {
          "type": "uppercase"
        }
      ]
    },
    {
      "source_field": "AMOUNT",
      "target_field": "amount",
      "transformations": [
        {
          "type": "parse_number",
          "options": {
            "locale": "en-US"
          }
        },
        {
          "type": "multiply",
          "options": {
            "factor": 0.01
          }
        }
      ]
    },
    {
      "source_field": "TXN_DATE",
      "target_field": "date",
      "transformations": [
        {
          "type": "parse_date",
          "options": {
            "format": "MM/DD/YYYY"
          }
        }
      ]
    },
    {
      "source_field": "CURR",
      "target_field": "currency",
      "transformations": [
        {
          "type": "replace",
          "options": {
            "search": "$",
            "replace": ""
          }
        },
        {
          "type": "uppercase"
        },
        {
          "type": "default",
          "options": {
            "value": "USD"
          }
        }
      ]
    }
  ]
}

Patrones de formato de fecha

Patrones comunes de parse_date:
PatrónEntrada de ejemploSalida
YYYY-MM-DD2024-01-152024-01-15
MM/DD/YYYY01/15/20242024-01-15
DD/MM/YYYY15/01/20242024-01-15
YYYY-MM-DDTHH:mm:ssZ2024-01-15T10:30:00Z2024-01-15
MMM DD, YYYYJan 15, 20242024-01-15
DD-MMM-YYYY15-Jan-20242024-01-15

Campos calculados


Usa campos calculados cuando los valores deben derivarse en lugar de copiarse de un único campo de origen.

Concatenación

{
  "target_field": "reference",
  "computed": true,
  "expression": {
    "type": "concat",
    "fields": [
      "DOC_TYPE",
      "DOC_NUM"
    ],
    "separator": "-"
  }
}
Entrada: DOC_TYPE: "INV", DOC_NUM: "12345" Salida: reference: "INV-12345"

Mapeo condicional

{
  "target_field": "type",
  "computed": true,
  "expression": {
    "type": "conditional",
    "conditions": [
      {
        "if": {
          "field": "DR_CR",
          "equals": "D"
        },
        "then": "debit"
      },
      {
        "if": {
          "field": "DR_CR",
          "equals": "C"
        },
        "then": "credit"
      }
    ],
    "default": "unknown"
  }
}

Signo de monto basado en tipo

{
  "target_field": "amount",
  "computed": true,
  "expression": {
    "type": "conditional",
    "conditions": [
      {
        "if": {
          "field": "TXN_TYPE",
          "equals": "DEBIT"
        },
        "then": {
          "type": "negate",
          "field": "AMOUNT"
        }
      }
    ],
    "default": {
      "field": "AMOUNT"
    }
  }
}

Ejemplos de mapeo por tipo de fuente


Extractos bancarios (csv)

Formato de origen

Transaction ID,Post Date,Description,Amount,Balance
CHK001,01/15/2024,Cheque #1234,-500.00,10500.00
DEP001,01/15/2024,Depósito móvil,1500.00,12000.00
FEE001,01/15/2024,Cuota de servicio mensual,-12.00,11988.00

Mapeo de campos

{
  "name": "CSV de extracto bancario",
  "source_type": "csv",
  "mappings": [
    {
      "source_field": "Transaction ID",
      "target_field": "transaction_id"
    },
    {
      "source_field": "Post Date",
      "target_field": "date",
      "transformations": [
        {
          "type": "parse_date",
          "options": {
            "format": "MM/DD/YYYY"
          }
        }
      ]
    },
    {
      "source_field": "Description",
      "target_field": "reference"
    },
    {
      "source_field": "Amount",
      "target_field": "amount",
      "transformations": [
        {
          "type": "parse_number",
          "options": {
            "locale": "en-US"
          }
        }
      ]
    },
    {
      "target_field": "currency",
      "computed": true,
      "expression": {
        "type": "constant",
        "value": "USD"
      }
    },
    {
      "target_field": "type",
      "computed": true,
      "expression": {
        "type": "conditional",
        "conditions": [
          {
            "if": {
              "field": "Amount",
              "less_than": 0
            },
            "then": "debit"
          }
        ],
        "default": "credit"
      }
    }
  ]
}

Resultado

[
  {
    "transaction_id": "CHK001",
    "date": "2024-01-15",
    "reference": "Cheque #1234",
    "amount": -500.0,
    "currency": "USD",
    "type": "debit"
  },
  {
    "transaction_id": "DEP001",
    "date": "2024-01-15",
    "reference": "Depósito móvil",
    "amount": 1500.0,
    "currency": "USD",
    "type": "credit"
  }
]

Sistemas ERP (json)

Formato de origen

{
  "entries": [
    {
      "DOC_ID": "JE-2024-001",
      "GL_DATE": "2024-01-15",
      "GL_ACCOUNT": "1000",
      "AMOUNT_USD": 150000,
      "DR_CR": "D",
      "DESCRIPTION": "Pago a proveedor - Acme Corp"
    }
  ]
}

Mapeo de campos

{
  "name": "Formato de asiento contable ERP",
  "source_type": "json",
  "root_path": "entries",
  "mappings": [
    {
      "source_field": "DOC_ID",
      "target_field": "transaction_id"
    },
    {
      "source_field": "GL_DATE",
      "target_field": "date"
    },
    {
      "source_field": "AMOUNT_USD",
      "target_field": "amount",
      "transformations": [
        {
          "type": "multiply",
          "options": {
            "factor": 0.01
          }
        }
      ]
    },
    {
      "target_field": "currency",
      "computed": true,
      "expression": {
        "type": "constant",
        "value": "USD"
      }
    },
    {
      "source_field": "DESCRIPTION",
      "target_field": "reference"
    },
    {
      "target_field": "type",
      "computed": true,
      "expression": {
        "type": "conditional",
        "conditions": [
          {
            "if": {
              "field": "DR_CR",
              "equals": "D"
            },
            "then": "debit"
          },
          {
            "if": {
              "field": "DR_CR",
              "equals": "C"
            },
            "then": "credit"
          }
        ]
      }
    },
    {
      "source_field": "GL_ACCOUNT",
      "target_field": "metadata.gl_account"
    }
  ]
}

Resultado

{
  "transaction_id": "JE-2024-001",
  "date": "2024-01-15",
  "amount": 1500.0,
  "currency": "USD",
  "reference": "Pago a proveedor - Acme Corp",
  "type": "debit",
  "metadata": {
    "gl_account": "1000"
  }
}

Pasarelas de pago (xml)

Formato de origen

<transactions>
 <transaction>
 <id>PAY-2024-001</id>
 <timestamp>2024-01-15T14:30:00Z</timestamp>
 <amount currency="USD">99.99</amount>
 <merchant>Tienda #123</merchant>
 <status>completed</status>
 </transaction>
</transactions>

Mapeo de campos

{
  "name": "Formato XML de pasarela de pago",
  "source_type": "xml",
  "root_path": "transactions/transaction",
  "mappings": [
    {
      "source_field": "id",
      "target_field": "transaction_id"
    },
    {
      "source_field": "timestamp",
      "target_field": "date",
      "transformations": [
        {
          "type": "parse_date",
          "options": {
            "format": "ISO8601"
          }
        }
      ]
    },
    {
      "source_field": "amount",
      "target_field": "amount",
      "transformations": [
        {
          "type": "parse_number"
        }
      ]
    },
    {
      "source_field": "amount@currency",
      "target_field": "currency"
    },
    {
      "source_field": "merchant",
      "target_field": "reference"
    },
    {
      "target_field": "type",
      "computed": true,
      "expression": {
        "type": "constant",
        "value": "credit"
      }
    }
  ]
}

Resultado

{
  "transaction_id": "PAY-2024-001",
  "date": "2024-01-15",
  "amount": 99.99,
  "currency": "USD",
  "reference": "Tienda #123",
  "type": "credit"
}

Mejores prácticas


Haz explícitos los cambios de formato (por ejemplo, CSV Banco v2.0) para preservar la reimportación y auditabilidad.
Agrega descripciones para transformaciones que cambian la semántica (por ejemplo, “Monto en centavos, dividir por 100”).
Usa default solo para campos opcionales y elige valores que hagan explícito el comportamiento posterior.
Estandariza débitos y créditos entre fuentes antes de conciliar.
Cuando los formatos de origen cambian, crea un nuevo mapeo de campos en lugar de modificar uno existente.

Próximos pasos