Geschreven door Robbert Nillessen, Software Architect.

Robbert Nillessen is een Software Architect gespecialiseerd in het ontwerpen van schaalbare en robuuste systemen die naadloos integreren met bestaande infrastructuren.

Robbert's ervaring met CRM/ERP systeemintegratie en API ontwikkeling biedt waardevolle inzichten in het ontwerpen van een source-of-truth matrix voor legacy systemen.

Afkadering: Robbert's expertise richt zich op de technische aspecten van systeemintegratie, niet op de operationele of organisatorische implementatie.

Om legacy ERP- of CRM-systemen te verbinden zonder verwarring over autoriteit, is het essentieel om een Source-of-Truth matrix te gebruiken die per veld en workflowfase vastlegt welk systeem de autoriteit heeft. Dit voorkomt dat verschillende systemen elkaar overschrijven en zorgt voor duidelijke eigenaarschapregels.

Source-of-Truth matrix voor ERP en CRM integraties

Een Source-of-Truth matrix is cruciaal bij het integreren van legacy ERP- en CRM-systemen om verwarring over gegevensautoriteit te voorkomen. Het biedt een gestructureerde aanpak om te bepalen welk systeem op welk moment leidend is.

  • Wijs autoriteit toe op veld- en procesfaseniveau in plaats van monolithisch per systeem.
  • Gebruik een Anti-Corruption Layer binnen Laravel om verouderde ERP-structuren te ontkoppelen van moderne applicaties.
  • Vang asynchrone latentie op met expliciete state machines en visuele synchronisatiestatus in de interface.
  • Zorg voor expliciete state transitions en veldspecifieke autoriteitsregels bij meerdere muterende kanalen.
  • Implementeer een tussenlaag met Redis voor veerkracht tegen tijdelijke ERP-uitval.

Waarom een Source-of-Truth matrix essentieel is voor legacy ERP- en CRM-integraties

Tussenlaag beheert tijdelijk voorraadreserveringen terwijl het legacy ERP nog niet is bijgewerkt.

Een legacy ERP- of CRM-integratie wordt onduidelijk zodra medewerkers, applicaties of processen dezelfde gegevens vanuit verschillende systemen mogen interpreteren of wijzigen zonder vastgelegde autoriteit. Een Source-of-Truth matrix maakt die autoriteit expliciet. De matrix legt niet alleen vast welk systeem een bedrijfsobject bevat, maar vooral welk systeem op een bepaald moment en voor een bepaald gebruik als leidende bron geldt. Daarmee ontstaat een gedeeld referentiepunt voor de vraag waar een waarde, status of beslissing vandaan moet komen.

Die precisie is nodig omdat een bron die gegevens registreert niet automatisch voor iedere workflowfase de bron is waarop een ander proces kan vertrouwen. De matrix maakt daarom ruimte voor tijdelijk autoritatief eigenaarschap. Wanneer een legacy ERP uitsluitend periodieke batch-synchronisatie ondersteunt, bijvoorbeeld elk uur of ’s nachts, kan een tussenlaag tijdelijk optreden als autoritatieve bron voor realtime voorraadreserveringen. In die specifieke situatie voorkomt de tussenlaag dat een nieuw kanaal wacht op een ERP-mutatie die pas later zichtbaar wordt. De autoriteit is dan niet onbegrensd verplaatst; zij is gekoppeld aan de realtime reservering en aan de periode waarin het ERP nog niet heeft bijgewerkt.

Zo’n afbakening voorkomt dat teams een technische koppeling verwarren met een werkbare procesafspraak. Zonder matrix kan de verkoopomgeving een reservering als beschikbaar behandelen, terwijl het ERP pas na de batchverwerking een ander beeld toont. De discussie gaat dan niet over een defecte verbinding, maar over de niet-beantwoorde vraag welke registratie voor die workflowstap telt. Door autoriteit per situatie vast te leggen, wordt zichtbaar wanneer een systeem schrijft, wanneer het alleen leest en wanneer een tussenlaag een tijdelijke beslisrol heeft.

De matrix krijgt meer gewicht wanneer afwijkingen achteraf verklaarbaar moeten blijven. Gedetailleerde audit trails tonen welke stap plaatsvond en wanneer. Idempotency tracking per payload helpt vaststellen of een bericht opnieuw is verwerkt zonder onbedoeld een tweede mutatie te veroorzaken. Continue monitoring van wachtrijen en latentie binnen managed services maakt zichtbaar of de tijdelijke informatievoorziening nog aansluit op de afgesproken verwerking. Daardoor is de matrix niet uitsluitend documentatie: zij vormt de grens waarbinnen autoriteit, verwerking en controleerbaarheid samenkomen.

Bronnen bij deze sectie: ibm.com, salesforce.com

De kloof tussen technische integratie en proceshelderheid

Een technisch werkende integratie beantwoordt nog niet automatisch de procesvraag wie een gegeven mag duiden of wijzigen. Legacy ERP-systemen bevatten vaak tabelstructuren en vastgelegde bedrijfsregels die voor een moderne applicatie niet direct de betekenis van een klant, order of status beschrijven. Wanneer die interne structuren rechtstreeks worden overgenomen, kan een nieuw systeem technisch gegevens ontvangen terwijl gebruikers onvoldoende houvast hebben voor de betekenis ervan in hun eigen werkproces.

Daar ontstaat de kloof tussen technische integratie en proceshelderheid. Een verbinding kan gegevens transporteren, maar transport verklaart niet welke gegevenswaarde binnen een workflow leidend is. De verwerking van een veld uit een oudere tabelstructuur kan een andere zakelijke betekenis hebben dan dezelfde benaming in een nieuwe applicatie. Ook kunnen hardcoded regels in het legacy systeem invloed hebben op de interpretatie van een status. Als die betekenis stilzwijgend doorsijpelt naar een moderne toepassing, wordt de nieuwe laag afhankelijk van aannames die buiten het zicht van het proces blijven.

Een Anti-Corruption Layer binnen een Laravel backend biedt hier een gerichte architectuurgrens. Deze laag fungeert als semantische vertaler en als validatiebarrière tussen cryptische legacy ERP-tabelstructuren en moderne domeinevents. De moderne applicatie hoeft daardoor niet rechtstreeks te redeneren vanuit de structuur van het ERP. In plaats daarvan ontvangt zij een vertaalde representatie die past bij het domein waarvoor de applicatie is ontworpen. De validatiebarrière vormt tegelijk een punt waarop kan worden beoordeeld of informatie vanuit het legacy systeem in de verwachte betekenis kan worden doorgegeven.

Dit is geen vervanging voor afspraken over eigenaarschap. De laag kan betekenis vertalen en gegevens tegenhouden die niet aan de verwachte vorm voldoen, maar bepaalt niet zelfstandig welke afdeling of welk systeem een mutatie mag autoriseren. Proceshelderheid ontstaat pas wanneer de vertaling aansluit op vastgelegde bronverantwoordelijkheid. De Anti-Corruption Layer houdt het oudere datamodel en de hardcoded regels op afstand van de moderne applicatielaag; de ownership-afspraken bepalen vervolgens welke vertaalde informatie in een workflow als geldig geldt. Daarmee worden technische compatibiliteit en zakelijke autoriteit twee afzonderlijke, toetsbare ontwerpvragen.

Bronnen bij deze sectie: microsoft.com

Wanneer is een Source-of-Truth matrix cruciaal?

Verwerking van mutaties tijdens tijdelijke ERP-uitval.
Verwerking van mutaties tijdens tijdelijke ERP-uitval.

Een Source-of-Truth matrix krijgt direct gewicht zodra meer dan één kanaal dezelfde gegevens kan muteren. Denk aan een combinatie van een zelfservice klantportaal, e-commerce, mobiele apps en een ERP-binnendienst. In die situatie ontstaat niet alleen de vraag welk systeem een klant of order kent, maar ook welk kanaal welke onderdelen van die informatie op welk moment mag aanpassen. Zonder expliciete afbakening kunnen meerdere kanalen ieder vanuit hun eigen proces als eigenaar handelen.

De noodzaak zit daardoor niet uitsluitend in het aantal systemen, maar in het aantal muterende routes. Een kanaal dat uitsluitend leest, introduceert een andere vorm van afhankelijkheid dan een kanaal dat status, voorwaarden of stamgegevens verandert. Zodra verschillende routes een wijziging kunnen starten, ontstaat het risico dat een latere verwerking een eerdere wijziging overschrijft of dat twee systemen dezelfde status verschillend uitleggen. Datacorruptie is dan geen abstract risico: de gegevensverzameling kan een combinatie worden van mutaties waarvoor geen eenduidige autoriteit meer is vast te stellen.

In dergelijke omgevingen vragen veldspecifieke autoriteitsregels om een expliciete keuze. De matrix behandelt een bedrijfsobject dus niet als één ondeelbaar gegeven. Per veld wordt vastgelegd welk kanaal of systeem autoriteit heeft. Daarmee kan bijvoorbeeld een wijziging vanuit een klantportaal beperkt blijven tot de velden waarvoor dat portaal bevoegd is, terwijl andere waarden buiten het bereik van die route blijven. Deze granulariteit voorkomt dat een toegestane wijziging impliciet wordt gelezen als toestemming om het hele object te beheersen.

Daarnaast vragen muterende kanalen om expliciete state transitions. Een status wordt dan niet slechts beschouwd als een tekstwaarde die door ieder systeem kan worden vervangen, maar als een overgang met een vastgelegde herkomst. De matrix maakt zichtbaar welke route een bepaalde overgang mag initiëren en welke routes de resulterende status volgen. Zo wordt een integratieontwerp bruikbaar op het moment dat processen elkaar kruisen: niet omdat alle systemen dezelfde rol krijgen, maar omdat de grenzen tussen hun rollen aantoonbaar zijn.

Bronnen bij deze sectie: salesforce.com

Belangrijke factoren bij het ontwerpen van een Source-of-Truth matrix

Het ontwerp begint niet met het aanwijzen van één leidend systeem voor ieder bedrijfsobject. De onderstaande factoren helpen juist voorkomen dat een brede toewijzing onbedoeld geldige gegevens uit een ander procesdomein vervangt.

FactorVraag in de matrixWaarom deze factor verwarring beperkt
Reikwijdte van eigenaarschapGaat de autoriteit over het volledige object, of over afzonderlijke onderdelen ervan?Een universeel System of Record voor een compleet object kan te grof zijn. Een klant- of orderobject bevat vaak gegevens met verschillende functies. Wanneer één systeem als eigenaar van het hele object wordt aangewezen, kan een mutatie die vanuit één functie logisch lijkt, ook onderdelen raken die buiten die functie vallen. De matrix moet daarom de reikwijdte van eigenaarschap expliciet begrenzen in plaats van autoriteit automatisch aan het volledige object te koppelen.
Aard van de mutatieWelke gegevens mogen door een niet-financieel kanaal worden gewijzigd, en welke niet?Niet-financiële CRM-mutaties kunnen gevalideerde ERP-betaalcondities of BTW-statussen onbedoeld overschrijven wanneer beide systemen hetzelfde object als één wijzigbare verzameling behandelen. Dit patroon laat zien dat de herkomst van een mutatie alleen onvoldoende is. De matrix moet onderscheiden welke velden door het CRM mogen veranderen en welke velden onder ERP-autoriteit blijven, ook wanneer zij technisch naast elkaar in hetzelfde object voorkomen.
ValidatiestatusWelke gegevenswaarde blijft leidend wanneer een andere toepassing een wijziging aanlevert?Betaalcondities en BTW-statussen die in het ERP zijn gevalideerd, hebben een andere positie dan een algemene wijziging vanuit het CRM. Als de matrix die validatiestatus niet zichtbaar maakt, kan een integratie een CRM-mutatie behandelen alsof deze dezelfde autoriteit heeft als een gevalideerde ERP-waarde. Het resultaat is niet alleen een verschil tussen systemen, maar een overschrijving van informatie waarvan de status in de verwerking anders is.
Schrijfrichting per veldMag een veld vanuit meerdere systemen teruggeschreven worden, of is er één toegestane schrijver?De waarschuwing tegen één universele bron impliceert niet dat alle systemen vrij mogen schrijven. Het tegenovergestelde geldt: zodra meerdere systemen op objectniveau kunnen muteren, moet de matrix per veld aangeven waar schrijven is toegestaan en waar een systeem uitsluitend informatie volgt. Die afbakening voorkomt dat een CRM-bewerking via een brede synchronisatie meer gegevens aanpast dan het proces toestaat.

Bronnen bij deze sectie: ibm.com, salesforce.com

Een praktisch raamwerk voor het implementeren van een Source-of-Truth matrix

Wanneer point-to-point integraties geen centrale wachtrijen hebben, kan de implementatie van de matrix worden uitgewerkt als een operationele keten rond tijdelijke uitval van het legacy ERP. De focus ligt dan niet op een extra directe verbinding, maar op een tussenlaag die vastgelegde eigenaarschapregels gecontroleerd door de uitvalperiode heen draagt.

  • Onderzoek eerst de verwerkingsgrens van de bestaande koppelingen. Het uitgangspunt is een omgeving waarin point-to-point integraties geen centrale wachtrijen bieden. In zo’n opzet bestaat er geen centrale plaats die mutaties kan vasthouden wanneer het legacy ERP tijdelijk niet beschikbaar is. Dat is relevant voor een Source-of-Truth matrix omdat autoriteit niet alleen op papier moet zijn beschreven: tijdens een onderbreking moet ook duidelijk blijven welke wijziging wacht, welke informatie nog niet door het ERP is verwerkt en welke processtap daardoor niet als definitief kan worden behandeld. Leg vervolgens de tussenlaag vast als begrensde uitvoeringslaag. Een Laravel-tussenlaag met Redis kan in deze situatie de nodige veerkracht bieden. De tussenlaag vormt een afzonderlijk punt tussen de bestaande koppelingen en het legacy ERP. Daardoor hoeft tijdelijke onbereikbaarheid van het ERP niet meteen te worden vertaald naar verlies van de te verwerken informatie. De matrix kan aan deze laag koppelen welke mutaties binnen de wachtrij vallen en welke autoriteitsregel daarop van toepassing blijft totdat verwerking mogelijk is. Behandel herverwerking als onderdeel van de procesafspraak. Exponential backoff bepaalt dat nieuwe verwerkingspogingen niet als een ononderbroken stroom tegen het tijdelijk uitgevallen ERP worden gestuurd. De tijd tussen pogingen neemt toe. Dat biedt ruimte aan het legacy ERP om terug beschikbaar te komen en voorkomt dat een tijdelijke storing automatisch leidt tot een voortdurende belasting door herhaalde pogingen. In de matrix kan deze fase worden gekoppeld aan een herkenbare toestand: de mutatie is ontvangen en wacht op verwerking, maar is nog geen bevestigde ERP-verwerking. Maak de uitvalgrens zichtbaar in de werkafspraken. De toegevoegde waarde van Redis en exponential backoff ligt niet alleen in technische veerkracht. Zij maken een onderscheid mogelijk tussen wat een nieuw kanaal heeft aangeleverd en wat het ERP heeft verwerkt. Daardoor voorkomt het ontwerp dat een medewerker een wachtrij-item gelijkstelt aan een afgeronde mutatie. De Laravel-tussenlaag ondersteunt dus een implementatie waarin tijdelijke ERP-uitval een afgebakende verwerkingsstatus krijgt, in plaats van een onverklaarbaar verschil tussen systemen.

Bronnen bij deze sectie: salesforce.com

Veelgestelde vragen over Source-of-Truth matrices

Een formele matrix voorafgaand aan de technische implementatie geeft antwoord op terugkerende vragen die anders pas tijdens ontwikkeling, testen of beheer naar boven komen.

  • “Is een Source-of-Truth matrix niet te administratief voor een integratie?” De matrix is geen los document naast de techniek wanneer zij per bedrijfsobject, veld en workflowfase wordt opgesteld. Juist die drie niveaus maken zichtbaar waar een integratiebeslissing betrekking op heeft. Een afspraak op objectniveau kan bijvoorbeeld onvoldoende zijn wanneer verschillende velden binnen hetzelfde object een andere herkomst of autoriteit hebben. De workflowfase voegt daar de tijdsdimensie aan toe: een waarde kan binnen een eerdere stap een andere rol hebben dan binnen een vervolgstap. “Kunnen we de eigenaarschapregels niet bepalen zodra de koppeling wordt gebouwd?” De formele matrix hoort vóór de start van de technische integratie-implementatie beschikbaar te zijn. Daarmee worden eigenaarschap en autoriteit een uitgangspunt voor het werk, niet een correctie nadat systemen al gegevens uitwisselen. Wanneer deze keuzes pas tijdens de realisatie ontstaan, kunnen technische aannames ongemerkt de procesafspraken gaan bepalen. Vooraf vastgelegde regels maken zichtbaar welke vragen nog openstaan voordat zij in de koppeling worden ingebouwd. “Waarom moet de matrix per veld zijn en niet alleen per klant of order?” Een bedrijfsobject is vaak te breed om één autoritatieve bron toe te wijzen. Door een matrix per veld te hanteren, kan de autoriteit worden gekoppeld aan de specifieke informatie die een proces gebruikt. Dit voorkomt dat een algemene uitspraak als “het CRM beheert klanten” of “het ERP beheert orders” onbedoeld wordt geïnterpreteerd als onbeperkte schrijfrechten. “Wat voegt een workflowfase toe?” Een workflowfase plaatst een gegevenswaarde in de context waarin zij wordt gebruikt. Daardoor bevat de matrix niet alleen een lijst van systemen en velden, maar ook een vastlegging van de stap waarin een bron als autoritatief geldt. Teams kunnen daarmee verschillen bespreken aan de hand van een concrete fase, in plaats van aan de hand van brede systeemlabels. De matrix reduceert verwarring doordat zij dezelfde vragen vooraf en op hetzelfde detailniveau beantwoordt.

Bronnen bij deze sectie: ibm.com, salesforce.com

Belangrijke overwegingen bij het ontwerpen van een Source-of-Truth matrix

De matrix krijgt pas praktische waarde wanneer de architectuur ook de grenzen rond legacy systemen bewaakt. Drie ontwerpvragen verbinden eigenaarschap met die beschermende functie.

  • 1. Blijft het legacy datamodel buiten de moderne domeinlaag? Een aantoonbare toepassing van een Anti-Corruption Layer (ACL) is een concrete overweging wanneer een nieuwe applicatie met een ouder systeem samenwerkt. De ACL vormt een grens waar de oudere representatie kan worden afgeschermd van de moderne laag. Voor de matrix betekent dit dat autoriteitsregels niet hoeven te leunen op de interne structuur van het legacy systeem. De eigenaarschapafspraak kan worden gekoppeld aan de betekenis die aan de grens beschikbaar wordt gemaakt, terwijl de legacy structuur aan de andere zijde beschermd blijft. 2. Hoe wordt statusinformatie doorgegeven zonder het legacy systeem direct te belasten? Het Transactional Outbox-patroon is een tweede architectuurpatroon dat als onderdeel van de bescherming van legacy systemen kan worden opgenomen. Deze overweging richt de aandacht op de manier waarop wijzigingen of statusinformatie vanuit een transactie worden doorgegeven. De matrix beschrijft welke status autoriteit heeft; het patroon maakt deel uit van de architecturale invulling waarmee die statuspropagatie niet als een ongecontroleerde directe belasting van het legacy systeem wordt behandeld. 3. Wie bewaakt de uitvoering wanneer verwerking via wachtrijen verloopt? Queue-orchestratie via Laravel Horizon is de derde concrete overweging. Wanneer autoriteit per workflowfase is beschreven, vraagt de uitvoering om zicht op de verwerking die tussen die fasen plaatsvindt. Laravel Horizon wordt hierbij toegepast als onderdeel van de queue-orchestratie ter bescherming van het legacy systeem. Zonder die beschermende grens kunnen mutaties die volgens de matrix correct zijn toegewezen, alsnog op een moment en in een volume bij het legacy ERP aankomen dat de operationele continuïteit onder druk zet.

Bronnen bij deze sectie: microsoft.com