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