Het datamodel is de kindpagina onder ons profiel: hoe NimbusCode fruit als object beschrijft. Lars de Wit ontwerpt velden zo dat kwaliteit, inkoop en IT dezelfde JSON kunnen lezen. Geen UML-poster. Een contract van objecten: Crop, Cultivar, Lot, Measurement, QualityEvent, Instrument.

Wij forceren geen microservices-religie. Een CSV-export die de velden eert, is beter dan een REST-laag die ze verbreekt. Wie een API wil, krijgt hem; wie een nachtelijk bestand wil, krijgt hem. Beide moeten hetzelfde schema spreken. Zie de modules onder Catalogus.
Kernobjecten
| Object | Sleutel | Relatie |
|---|---|---|
| Cultivar | cultivar_id | 1–n Lot |
| Lot | lot_id | n Measurement |
| Measurement | meas_id | Instrument + protocol |
| QualityEvent | event_id | hold / class change |
| Instrument | instrument_id | kalibratielog |
{
"lot_id": "LOT-2026-0828-014",
"cultivar_id": "MNG-KENT",
"measurements": [
{ "type": "brix_bx", "n": 12, "mean": 16.4, "sd": 0.7 }
],
"quality": { "class": "I", "hold": false }
}
Identiteit en tijd
Elke meting heeft UTC en Europe/Amsterdam. Elke hold heeft een actor. Elke overwrite is verboden; updates zijn nieuwe events. Dat is trager in de demo en juister in de audit. Wij kiezen de audit.
Enumerations zijn gesloten: quality_class, ripeness_stage, meas_type. Vrije tekst mag in note, nooit in het veld dat het WMS filtert. Die regel voorkomt dat „bijna Extra” een klasse wordt.
Versiebeheer van het schema is semver. Minor voegt optionele velden toe. Major breekt mapping. Wij kondigen major minstens één seizoen van tevoren aan. Fruit wacht niet op een breaking change in week 24.
Null versus ontbrekend veld is een bewuste keuze. null betekent gemeten en leeg of niet van toepassing (avocado.brix_bx = null). Een ontbrekend veld betekent: deze versie van het schema kende het niet. Importroutines mogen null niet stil naar 0.0 omzetten. 0.0 °Bx is een meting. null is een categorie. Die twee verwarren is hoe een WMS pitaya als defect suikergehalte gaat zien.
Tijdzones schrijven wij dubbel: UTC in het event, Europe/Amsterdam in het rapport. Ploegen denken in lokale klok. Audits denken in UTC. Het model draagt beide. Operator-ID’s zijn interne sleutels, geen e-mailadressen in het lotobject. PII hoort in het HR- of toegangsregister, niet in de mango.
Wie een GraphQL-laag wil, mag die zelf zetten op onze JSON. Wij onderhouden geen tweede contract. Eén contract, twee transporten (bestand en HTTPS). Dat houdt de catalogus saai, en daarom bruikbaar wanneer de mango-piek de sprintreview overschreeuwt.
Veelgestelde vragen
Welk formaat leveren jullie?
JSON primair, CSV secundair. XML alleen als uw WMS niets anders lust.
Hosting?
Uw stack of onze begrensde instantie. Geen publieke fruit-API zonder contract.
PII in het model?
Operator-ID ja, geen privéadressen van panelisten in het lotrecord.
Documentatie?
Veldlijst + voorbeelden. Geen 200 pagina’s architectuurproza.
Werkgebied Amsterdam
Wij meten, coderen en documenteren verse AGF voor handelshuizen, importeurs, packingstations en retailinkopers in Amsterdam. Onderstaande stadsdelen zijn geen marketinglijst, maar de dagelijkse routes tussen Food Center, Sloterdijk en de verse markt.
- Westpoort
- Sloterdijk
- Bos en Lommer
- Westerpark
- Oud-West
- De Pijp
- Centrum
- Amsterdam-Noord
NimbusCode Fresh Produce Database B.V.
Uw aanspreekpunt: Lars de Wit
Naritaweg 12
1043 CA Amsterdam
Telefoon: +31 20 760 4188
E-mail: [email protected]