Skip to content
§P03ProductTransformations

Mapping that is declared, not scripted.

Fields are mapped explicitly, with types. Derivations come from a typed function library. Records that break a rule are quarantined with a reason, never silently dropped.

FIG P2.1Transformations · where it sits
Field mappingSample data
  • customer.first_name

    directfirst_namestrREQ

  • customer.last_name

    directlast_namestr

  • customer.email

    lower() → trim()email_addressstrREQ

  • customer.phone

    e164(region:"IN")phone_numberstr

  • customer.created_date

    to_timestamp(utc)created_attsREQ

  • customer.account_id

    —external_idstrREQ

§MMechanisms

How it works

Mechanisms, not promises.

  • 01

    Typed on both sides

    Every source and destination field carries a type tag. A mismatch raises a warning and offers the coercion that fixes it, applied on click.

  • 02

    Suggestions are confirmed, never applied

    Auto-map proposes matches by exact and normalised name. They are shown as suggestions you accept — nothing is mapped silently on your behalf.

  • 03

    Transform chains

    Each mapping can carry a chain of typed functions — string, number, date, boolean, object and lookup — shown inline in monospace and previewed against a real sampled record.

  • 04

    Rules with a severity

    A rule either rejects (quarantine the record) or warns (pass it and log). Reasons are structured codes, not strings, so they can be counted and alerted on.

  • 05

    Required fields are enforced

    An unmapped required destination field is an error that blocks deploy — which is exactly the failure that silently produces empty columns in hand-written integrations.

  • 06

    No arbitrary code

    Transformation is deterministic and sandboxed. There is no user-supplied code execution in the engine, so a transform cannot make a network call or read the file system.

§AAPI

In the API

The same thing, from a terminal.

json
{  "mappings": [    { "source": "customer.email",      "chain": ["lower()", "trim()"],      "destination": "email_address",      "type": "string", "required": true },    { "source": "customer.created_date",      "chain": ["to_timestamp(utc)"],      "destination": "created_at",      "type": "timestamp", "required": true }  ],  "rules": [    { "name": "email_required", "field": "email_address",      "condition": "is_not_null", "severity": "reject",      "message": "email required" }  ]}

An excerpt of a flow definition. Definitions are exportable and importable as JSON.

Function categories
String, number, date and time, boolean, object and array, lookup against a connection.
Constants and derivations
A destination can be filled by a constant or a function such as now(), not only by a source field.
Preview
One sampled record shown as source JSON beside destination JSON, updating as mappings change.
Quarantine
Failed records keep their payload reference and reason code, and can be re-run on their own.