Pular para o conteúdo principal
O mapeamento de campos converte dados de transações específicos da fonte para o schema canônico do Matcher. Esta normalização é necessária para comparar transações entre sistemas e aplicar regras de matching de forma consistente.

Por que mapeamento de campos?


Sistemas externos raramente compartilham os mesmos nomes de campos, formatos ou convenções de sinal. Por exemplo:
SistemaCampo de valorCampo de dataCampo de referência
Banco AtransactionAmountpostDatecheckNumber
Banco Bamttransaction_dateref_num
ERPAMOUNT_USDGL_DATEDOC_NUM
Mapas de campos padronizam essas variações em um único schema que o Matcher pode validar, normalizar e conciliar.

Schema padrão do Matcher


Campos obrigatórios

Toda transação deve fornecer estes campos após o mapeamento:
CampoTipoDescriçãoExemplo
transaction_idStringIdentificador único dentro da fonte"TXN-2024-001"
amountDecimalValor da transação (até 4 casas decimais)1234.56
currencyStringCódigo de moeda ISO 4217"USD"
dateDateData da transação (YYYY-MM-DD)"2024-01-15"

Campos opcionais

CampoTipoDescriçãoExemplo
referenceStringReferência externa ou descrição"Fatura #1234"
counterpartyStringOutra parte na transação"Acme Corp"
typeStringDireção/tipo da transação"credit", "debit"
categoryStringCategoria da transação"payment", "fee"
posting_dateDateData de lançamento"2024-01-16"
value_dateDateData de valor/liquidação"2024-01-17"
external_idStringIdentificador do sistema externo"BANK-REF-999"
metadataObjectCampos específicos da fonte{"department": "sales"}

Criando mapas de campos


Mapa de campos básico

Mapas de campos são criados para uma fonte específica dentro de um contexto. O objeto mapping define como os campos da fonte mapeiam para o schema do Matcher.
cURL
curl -X POST "https://api.matcher.example.com/v1/config/contexts/{contextId}/sources/{sourceId}/field-maps" \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "mapping": {
     "Transaction ID": "transaction_id",
     "Amount": "amount",
     "Currency": "currency",
     "Post Date": "date",
     "Description": "reference"
   }
 }'
Response
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "contextId": "969a11cd-6b7d-4e71-b82b-0828e0603149",
  "sourceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "mapping": {
    "Transaction ID": "transaction_id",
    "Amount": "amount",
    "Currency": "currency",
    "Post Date": "date",
    "Description": "reference"
  },
  "version": 1,
  "createdAt": "2024-01-15T10:00:00Z",
  "updatedAt": "2024-01-15T10:00:00Z"
}
Referência da API: Criar mapa de campos

Transformações de dados


Mapas de campos podem aplicar transformações para normalizar formatos e convenções antes do matching.

Transformações disponíveis

TransformaçãoDescriçãoExemplo
uppercaseConverter para maiúsculas"abc""ABC"
lowercaseConverter para minúsculas"ABC""abc"
trimRemover espaços em branco" abc ""abc"
parse_dateParsear data por formato"01/15/2024""2024-01-15"
parse_numberParsear número com locale"1,234.56"1234.56
absValor absoluto-100100
negateNegar número100-100
multiplyMultiplicar por fator100 × 0.011
replaceSubstituição de string"USD$""USD"
extractExtração com regexExtrair números de string
defaultPadrão se vazionull"UNKNOWN"
concatConcatenar camposfield1 + field2

Exemplos de transformação

cURL
curl -X POST "https://api.matcher.example.com/v1/field-maps" \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "name": "Formato Banco Legado com Transformações",
   "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"
           }
         }
       ]
     }
   ]
 }'
Response
{
  "id": "fmap_002",
  "name": "Formato Banco Legado com Transformações",
  "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"
          }
        }
      ]
    }
  ]
}

Padrões de formato de data

Padrões comuns de parse_date:
PadrãoExemplo de entradaSaída
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 computados


Use campos computados quando valores devem ser derivados em vez de copiados de um único campo da fonte.

Concatenação

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

Mapeamento 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"
  }
}

Sinal do valor baseado em tipo

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

Exemplos de mapeamento por tipo de fonte


Extratos bancários (csv)

Formato da fonte

Transaction ID,Post Date,Description,Amount,Balance
CHK001,01/15/2024,Check #1234,-500.00,10500.00
DEP001,01/15/2024,Mobile Deposit,1500.00,12000.00
FEE001,01/15/2024,Monthly Service Fee,-12.00,11988.00

Mapa de campos

{
  "name": "CSV de Extrato Bancário",
  "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": "Check #1234",
    "amount": -500.0,
    "currency": "USD",
    "type": "debit"
  },
  {
    "transaction_id": "DEP001",
    "date": "2024-01-15",
    "reference": "Mobile Deposit",
    "amount": 1500.0,
    "currency": "USD",
    "type": "credit"
  }
]

Sistemas ERP (json)

Formato da fonte

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

Mapa de campos

{
  "name": "Formato de Lançamento 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": "Vendor Payment - Acme Corp",
  "type": "debit",
  "metadata": {
    "gl_account": "1000"
  }
}

Gateways de pagamento (xml)

Formato da fonte

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

Mapa de campos

{
  "name": "Formato XML Gateway de Pagamento",
  "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": "Store #123",
  "type": "credit"
}

Boas práticas


Torne mudanças de formato explícitas (por exemplo, CSV Banco v2.0) para preservar reimportação e auditabilidade.
Adicione descrições para transformações que mudam a semântica (por exemplo, “Valor em centavos, dividir por 100”).
Use default apenas para campos opcionais e escolha valores que tornem o comportamento downstream explícito.
Padronize débitos e créditos entre fontes antes do matching.
Quando formatos da fonte mudam, crie um novo mapa de campos em vez de modificar um existente.

Próximos passos


Regras de match

Defina como transações são comparadas e agrupadas.

Upload de arquivos

Importe transações usando seus mapas de campos.