Wateranalyses controlesysteem
Een van de mooiste en meest waardevolle projecten waaraan ik heb meegewerkt. Voor een van de grootste drinkwaterbedrijven van Nederland heb ik bijgedragen aan de ontwikkeling van een intern systeem dat waterkwaliteitsmetingen borgt en tegelijkertijd het onderliggende bedrijfsproces optimaliseert.
Project info
- Start
- maart 2024
- End
- juli 2025
- Complexity
- 8 / 10
- Team size
- 3
- Type
- QAS
- Stack
- C# Javascript HTML & CSS SQL PowerShell YAML Blazor WASM Entity Framework Core xUnit / NUnit MudBlazor GIT IIS Scrum Kanban CI/CD DevOps
Over het project
Voor een van de grootste drinkwaterbedrijven van Nederland heb ik meegewerkt aan de ontwikkeling van een nieuw intern systeem dat de betrouwbaarheid en integriteit van waterkwaliteitsmetingen borgt. Het bedrijf levert dagelijks schoon drinkwater aan miljoenen inwoners en voert daarnaast onafhankelijke metingen uit voor een groot aantal externe klanten. De nauwkeurigheid en betrouwbaarheid van deze data zijn daarom cruciaal.
Het project had als doel het grote aantal bestaande Excel-processen met complexe macro’s te vervangen door een centraal, controleerbaar en reproduceerbaar systeem. Het resultaat is een applicatie die volledige meetruns analyseert, correcties toepast op basis van interne standaarden, afwijkingen automatisch detecteert en resultaten gecontroleerd vrijgeeft richting het LIMS-systeem. Daarmee is niet alleen de efficiëntie verhoogd, maar ook de betrouwbaarheid en traceerbaarheid van het proces.
Het team, mijn rol en de samenwerking
Het team bestond uit een senior lead developer, een tweede ontwikkelaar, een tester en een product owner vanuit de klantorganisatie. Ongeveer drie maanden na de start van het project ben ik fulltime aangesloten. De actieve ontwikkelfase duurde daarna nog circa een jaar.
Mijn rol ging verder dan alleen ontwikkelen. In nauwe samenwerking met analisten werkten we vaak vanuit bestaande Excel-schermen en macro’s als vertrekpunt. Die hebben we niet één-op-één overgezet, maar kritisch geanalyseerd en opnieuw ontworpen met als doel de onderliggende bedrijfsprocessen te optimaliseren. Het ging daarbij niet alleen om digitalisering, maar om het structureren, vereenvoudigen en toekomstbestendig maken van een kritisch werkproces. Hierdoor waren we intensief betrokken bij het functioneel ontwerp, de workflow en de gebruikerservaring, waarbij we veel vertrouwen en ruimte kregen om inhoudelijk mee te denken.
Na het vertrek van de senior lead developer heb ik de verantwoordelijkheid voor het project op mij genomen. Kort daarna is het systeem gefaseerd in productie genomen, wat gecontroleerd en zonder noemenswaardige verstoringen verliep.
Inhoudelijke werking van het systeem
Het systeem ondersteunt het volledige analyseproces van laboratoriumruns en borgt daarbij de kwaliteit en integriteit van de meetresultaten van diverse meetinstrumenten en methoden. Een run bestaat uit een reeks monsters die gezamenlijk op een analysemachine worden verwerkt. Binnen zo’n run bevinden zich verschillende typen monsters, elk met een specifieke rol binnen de kwaliteitsborging.
Naast klantmonsters bevat een run onder andere eerste lijns controlemonsters, blanco monsters en monsters met interne standaarden. Deze worden niet alleen individueel beoordeeld, maar altijd in samenhang met de volledige run. De kwaliteit van één meting staat namelijk niet op zichzelf; de betrouwbaarheid wordt bepaald door het totaalbeeld.
Op basis van interne standaarden worden correctiefactoren berekend en toegepast op de gemeten waarden. Blanco monsters worden gebruikt om eventuele vervuiling of carry-over te signaleren. Vervolgens voert het systeem geautomatiseerde validaties uit op zowel monster- als runniveau. Denk hierbij aan controles op acceptatiegrenzen, onderlinge consistentie en afwijkingen ten opzichte van historische of statistische verwachtingen.
Wanneer een run niet aan de gestelde criteria voldoet, wordt dit expliciet gesignaleerd. De analist krijgt inzicht in de afwijkingen en kan onderbouwd besluiten tot vrijgave, correctie of afkeur. Pas na deze validatiestap worden de eerste lijns controlemonsters verwerkt in de ELC-kaarten en worden de definitieve resultaten weggeschreven naar het LIMS-systeem.
Daarnaast faciliteert het systeem periodieke rapportages en jaarevaluaties, waarmee trends en structurele afwijkingen inzichtelijk worden gemaakt. Hierdoor ondersteunt het niet alleen de dagelijkse operatie, maar ook structurele kwaliteitsbewaking op langere termijn.
De kracht van het systeem zit in de combinatie van geautomatiseerde validatie, transparante besluitvorming en menselijke controle. Daarmee wordt geborgd dat meetresultaten niet alleen technisch correct zijn, maar ook uitlegbaar, reproduceerbaar en aantoonbaar betrouwbaar.
Architectuur en technische keuzes
Gezien de complexiteit van de domeinlogica is bewust gekozen voor een architectuur die scheiding van verantwoordelijkheden afdwingt en langdurige onderhoudbaarheid ondersteunt. De applicatie is opgezet volgens Clean Architecture, waarbij de kern van het systeem, de validatie- en correctielogica, volledig losstaat van infrastructuur en presentatie. Hierdoor blijft de domeinlogica leidend en testbaar, onafhankelijk van technische implementatiedetails.
Binnen de applicatielaag is gekozen voor een CQRS-aanpak in combinatie met MediatR. Commands en queries zijn expliciet gescheiden, waardoor use cases helder zijn afgebakend en de verwerkingsstappen van een run transparant blijven. Dit sluit goed aan bij een systeem waarin traceerbaarheid en controle essentieel zijn.
Verder is voor de data laag Entity Framework Core gebruikt, met een zorgvuldige modellering van runs en monsters waarbij samenhang en performance centraal staan. De front-end is gebouwd met Blazor WebAssembly en de applicatie wordt gehost in IIS, ondersteund door een CI/CD-pipeline voor gecontroleerde en reproduceerbare deployments, inclusief database-migraties.
De gekozen architectuur en stack ondersteunen daarmee wat voor dit systeem het belangrijkst is: betrouwbaarheid, testbaarheid en langdurige beheersbaarheid van complexe domeinlogica.
Terugblik
Voor mij is dit een erg bijzonder project geweest. De complexe materie, de sterke samenwerking en het actieve meedenken over het functionele ontwerp maakten het inhoudelijk en technisch zeer uitdagend. Gedurende het traject kregen we veel vertrouwen en vrijheid om het systeem zorgvuldig uit te werken, wat heeft geleid tot een succesvolle gefaseerde livegang en een stabiel eindresultaat. Dit alles maakt het voor mij een van de mooiste en meest waardevolle projecten waaraan ik heb mogen meewerken.
Opmerking: Vanwege de aard van het systeem en de gevoeligheid van de onderliggende data ben ik beperkt in wat ik publiekelijk kan delen. Daarom bevat deze website geen schermafbeeldingen, codevoorbeelden of technische detailuitwerkingen over dit project.