Learning path · 5 lessons

ERP and CRM reconciliation pipeline

Generate a synthetic, deliberately messy enterprise resource planning (ERP) and customer relationship management (CRM) dataset, then reconcile the two divergent exports back into a single source of truth by matching customers, invoices, and payments on name, email, phone, and date and amount proximity, never on ID-format shortcuts.

5 of 5 availableAll lessons are available
5 of 5

Expected outcome

What you will build

A reproducible synthetic ERP and CRM dataset, a reconciliation pipeline run that produces a crosswalk, quarantine log, and Markdown report, and a precision, recall, and F1 score of that run against a ground_truth.json answer key.

Before you begin

Prerequisites

  • Python 3.12 or later
  • uv (the Python package and project manager)
  • A local clone of the erp-crm-reconciliation-pipeline repository with dependencies installed
  • Docker (optional, only needed for the Postgres lesson)

5 available · 0 upcoming

Lessons in this series

  1. Lesson 1Generate a synthetic ERP and CRM datasetA synthetic dataset in data/, an ERP-style flat CSV export and a CRM-style nested JSON export of the same underlying customers, invoices, and payments, plus a ground_truth.json answer key, all reproducible from a single seed. Available nowAbout 25 minutes
  2. Lesson 2Compare ERP and CRM field mappings and the ground truth answer keyThe ability to find the same underlying customer, invoice, or payment across the ERP CSV export and the CRM JSON export, and to read a ground_truth.json entry to state whether a given record is expected to match, be an orphan, or carry a legitimate amount drift. Available nowAbout 20 minutes
  3. Lesson 3Customize messiness and build a reproducible configuration fileA custom generation_config.yaml with tuned messiness ratios, and evidence that regenerating from that file reproduces byte-identical output on every run. Available nowAbout 20 minutes
  4. Lesson 4Reconcile ERP and CRM records with the pipelineA reconcile run over a generated dataset that produces crosswalk.json, quarantine_log.json, and RECONCILIATION_REPORT.md, matching customers by fuzzy name and email or phone, invoices by exact date, currency, and amount, and payments by exact date within an already-resolved parent. Available nowAbout 30 minutes
  5. Lesson 5Score match quality and load results into PostgresA precision, recall, and F1 score for a reconcile run, computed against the ground_truth.json answer key generated in Lesson 1, plus an optional Postgres load of the same crosswalk and quarantine data. Available nowAbout 25 minutes