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/contexts/{contextId}/sources/{sourceId}/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/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/contexts/{contextId}/sources/{sourceId}/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


Reglas de conciliación

Define cómo se comparan y agrupan las transacciones.

Subir archivos

Importa transacciones usando tus mapeos de campos.