A clean-looking CSV can still lose information during migration.
I built Migration Control, a self-initiated Python demo that accounts for every row: ambiguous records go to a traceable review queue, refunds stay in the totals, currencies remain separate, and unknown amounts remain unknown.
The synthetic fixture reconciles $185.34 into $82.34 accepted + $103.00 quarantined. Its second local target run produces six NOOPs with the same fingerprint. All 23 regression tests pass, plus a separate SQL totals check.
The target is a local simulation, not a live CRM integration. The useful design decision: make uncertainty visible before importing.