[{"data":1,"prerenderedAt":122},["ShallowReactive",2],{"work-/work/reconciliation-automation":3,"work-siblings-/work/reconciliation-automation":96},{"id":4,"title":5,"body":6,"client":74,"confidential":75,"description":66,"extension":76,"featured":75,"meta":77,"navigation":78,"order":79,"path":80,"period":81,"secondary":82,"seo":83,"sitemap":84,"slug":85,"stack":86,"stem":92,"summary":93,"track":94,"__hash__":95},"work/work/reconciliation-automation.md","Automating end-of-day reconciliation",{"type":7,"value":8,"toc":65},"minimark",[9,14,18,22,25,29,39,43,50,54],[10,11,13],"h2",{"id":12},"context","Context",[15,16,17],"p",{},"ReachAfrika ran a reward-advertising and bill-payment platform. Bill payments went out over Nigerian utility-payment APIs. I was a full-stack developer there from 2019 to 2020.",[10,19,21],{"id":20},"the-problem","The problem",[15,23,24],{},"At the end of each day, the platform's ledger and the providers' records had to agree, and they did not always. Reconciliation was not automated, so mismatches were found late, by people, after the money had already moved.",[10,26,28],{"id":27},"what-i-did","What I did",[30,31,32,36],"ul",{},[33,34,35],"li",{},"Automated the end-of-day reconciliation: pull each provider's records, match them against the ledger, and surface every mismatch with enough context to act on it.",[33,37,38],{},"Integrated the Nigerian utility-payment APIs the reconciliation ran against.",[10,40,42],{"id":41},"what-it-cost","What it cost",[30,44,45,48],{},[33,46,47],{},"Every provider format is its own parser, and every parser is a maintenance commitment.",[33,49],{},[10,51,53],{"id":52},"outcome","Outcome",[30,55,56,59,62],{},[33,57,58],{},"Financial errors down over 75%.",[33,60,61],{},"Transaction volume up 20% after the utility-payment integrations.",[33,63,64],{},"Customer acquisition up over 25% on the platform as a whole.",{"title":66,"searchDepth":67,"depth":67,"links":68},"",2,[69,70,71,72,73],{"id":12,"depth":67,"text":13},{"id":20,"depth":67,"text":21},{"id":27,"depth":67,"text":28},{"id":41,"depth":67,"text":42},{"id":52,"depth":67,"text":53},"ReachAfrika",false,"md",{},true,8,"/work/reconciliation-automation","2019 to 2020",null,{"title":5,"description":66},{"loc":80},"reconciliation-automation",[87,88,89,90,91],"PHP (Laravel)","Python","MySQL","Redis","Linux","work/reconciliation-automation","Financial errors down over 75% after end-of-day reconciliation stopped being a job someone did by hand.","engineering","RsNYHayuKSWZQtVMCjoeBfzJskItnP_07eSzwPWwuXk",[97,100,103,106,109,112,115,118,119],{"title":98,"path":99},"Rebuilding a remittance platform, then getting it licensed","/work/remittance-rebuild",{"title":101,"path":102},"What changes between eight engineers and thirty","/work/scaling-to-thirty",{"title":104,"path":105},"Estimating engineering work you then have to deliver","/work/scoping-fixed-price-work",{"title":107,"path":108},"Making a versioned datastore queryable without losing its history","/work/versioned-data-analytics-replica",{"title":110,"path":111},"Making three custody providers interchangeable behind one wallet interface","/work/provider-agnostic-wallet-layer",{"title":113,"path":114},"Onboarding and identity for a regulated crypto platform","/work/identity-and-onboarding",{"title":116,"path":117},"A promotion framework for a consultancy that does not fit product-company ladders","/work/engineering-ladder",{"title":5,"path":80},{"title":120,"path":121},"Reporting to a foreign regulator out of a core banking system","/work/fatca-regulatory-reporting",1789350680299]