Volledig gescheiden interface van de leveranciersomgeving. Draagkleur rood
(leveranciersomgeving = blauw), eigen inlog op admin.epdatlas.nl, eigen navigatie.
Toegang loopt via de rollenmatrix: users.role_id wijst naar een rol met
roles.side = 'platform', en users.organisation_id = NULL.
Alle schermen tonen data over alle organisaties heen; de organisatiefilter is overal aanwezig.
Herkomst van de voorbeelddata. Organisaties, contactpersonen, websites, producten,
categorieën, materialen, eenheden, levensduur en milieuwaarden (GWP, MKI) komen letterlijk uit de
CO2spot-database, seed van 22-06-2026: 84 bedrijven, 939 producten, 5 hoofdcategorieën / 24 categorieën /
86 subcategorieën, 84 materialen, 7 eenheden. De 423 producten zonder bedrijf staan hier onder de
verzamelorganisatie Niet toegewezen, conform de migratieafspraak.
Verzonnen (want niet in CO2spot aanwezig): KvK- en BTW-nummers, adressen,
licentiegegevens en bedragen, gebruikersaccounts, EPD-nummers, upload- en verificatiedatums,
audit-logregels en alle tellingen van EPD's. Die dienen alleen om het scherm te vullen.
Beheerderaccounts worden alleen door een bestaande beheerder aangemaakt. Login-pogingen komen in het audit log (scherm 17).
Vergrendeling: na 5 mislukte pogingen 60 minuten op slot (users.failed_login_attempts, users.locked_until). "Vergrendeld" bewust een ander woord dan "Geblokkeerd" (dat betekent elders administratief geblokkeerd/gearchiveerd door een beheerder — iets anders dan tijdelijk op slot door foute pogingen). Wachtwoord vergeten blijft altijd bereikbaar, ook vergrendeld: dat is een andere manier om je identiteit te bewijzen.
Schemapunt: wachtwoordherstel gebruikt de tabel password_resets (token, geldig tot, gebruikt op, doel invite/reset) — staat in schema.sql.
Nice to have: tweefactorauthenticatie. users kent email, password_hash, full_name, role_id, status, last_login_at, failed_login_attempts en locked_until — een 2FA-veld en een sessietabel zouden er eerst bij moeten.
2. Dashboard
Algemeen overzicht over het hele platform. Bewust compact; later uit te breiden.
Elke teller is een filterlink naar de bijbehorende lijst (bijv. "Verlopen EPD's" → EPD-lijst met status-filter voorgezet).
Producten, organisaties en de verdeling per organisatie komen uit v_dashboard_counts; "Open signalen" is open_flags, "Wacht op controle" is epds_awaiting_review.
3. Organisaties — lijst met filters
Centrale ingang voor klantbeheer. Zoeken, filteren, sorteren, bulkacties.
EA EPDatlasBeheeromgeving
SUPERADMIN beheer@epdatlas.nl ▾
Organisaties
84 organisaties · 50 met producten · 1 verzamelorganisatie
Actief normaal in gebruikGeblokkeerd login geweigerd, data blijftGearchiveerd onzichtbaar in CO2spot
Kolommen sluiten aan op organisations + afgeleide tellingen. Status komt uit organisations.status (active / suspended / archived).
De kolom Plaats is hier vervangen door Website: CO2spot bevat geen adresgegevens, wél de bedrijfswebsite en de contactpersoon. Adres, KvK en BTW blijven bestaande kolommen in organisations, ze zijn na migratie alleen nog leeg.
De verzamelorganisatie Niet toegewezen (id 1) houdt de 423 CO2spot-producten zonder bedrijf vast, met een interne licentie.
4. Organisatie — nieuw / bewerken
Volledig formulier op basis van de tabel organisations. Zelfde scherm voor aanmaken en wijzigen.
"Inloggen als klant" opent de blauwe leveranciersomgeving in impersonatie-modus; die sessie wordt altijd in het audit log vastgelegd.
De verdeling per categorie is de echte Wavin-verdeling in CO2spot.
6. Licenties — lijst
Alle licenties over alle organisaties, met verloop- en limietsignalering.
Historische licenties worden bewaard; per organisatie is er één lopende (is_current).
1–6 van 53 12›
Sluit aan op licences (plan, start_date, end_date, max_products, max_epds, amount, status, is_current).
Status kent vier waarden: active, expired, cancelled, trial. "Verloopt over 21 dgn" en "Boven limiet" zijn geen statussen maar afgeleide signalen (uit end_date respectievelijk max_products versus het werkelijke aantal).
7. Licentie toewijzen / bewerken
Modaal venster, vanuit de licentielijst of vanaf de organisatie.
Licentie toewijzen✕
Wavin Nederland B.V. heeft al een lopende licentie (Trial, t/m 15-10-2026).
Bij opslaan krijgt die de status Beëindigd en blijft in de historie staan;
de nieuwe licentie wordt de lopende.
Wavin Nederland B.V.
PlusVrij tekstveld (licences.plan) met suggesties: Basis · Plus · Enterprise · Trial
ActiefActief · Verlopen · Beëindigd · Trial
Leeg = doorlopend
Leeg = onbeperkt
Bij verlagen van het maximum onder het huidige aantal producten volgt een waarschuwing; bestaande producten blijven staan, nieuwe worden geweigerd.
"Automatisch verlengen" is uit het formulier gehaald: licences heeft daar geen kolom voor. Wil je het toch, dan komt er een kolom auto_renew bij.
8. Gebruikers — lijst
Alle accounts: leveranciergebruikers én beheerders.
EA EPDatlasBeheeromgeving
SUPERADMIN beheer@epdatlas.nl ▾
Gebruikers
51 accounts · 48 leveranciers · 3 beheerders
Rol: alleStatus: alleOrganisatie: alleLaatste login: alle
De kolom Rol toont roles.label via users.role_id; het filter "Rol: alle" vult zich dus vanzelf met elke rol
die in scherm 18 wordt aangemaakt. Status blijft users.status (active / invited / disabled).
De vaste ENUM users.role is vervallen. Wat er nu in staat komt uit seed_reference.sql: Leverancier (side supplier)
en Platformbeheerder (side platform). roles.side bepaalt in welke helft van de applicatie iemand terechtkomt;
de rechten binnen die helft komen uit de matrix.
De namen en e-mailadressen zijn de echte CO2spot-contactpersonen; bij migratie worden zij de hoofdgebruiker van hun organisatie.
9. Gebruiker — nieuw + credentials
Aanmaken, koppelen aan organisatie, en toegang regelen zonder wachtwoorden te tonen.
Nieuwe gebruiker✕
Tevens inlognaam · moet uniek zijn
LeverancierKeuzelijst uit roles · rollen met side platform geven toegang tot deze beheeromgeving
Betoncentrale Rouwmaat Groenlo B.V.Leeg bij een rol met side platform
Alleen-lezen: rechten hangen aan de rol, niet aan de gebruiker
Uitgenodigd
MVP-regel: één gebruiker per organisatie. Betoncentrale Rouwmaat Groenlo heeft er nog geen — dit account wordt de hoofdgebruiker.
Wachtwoorden worden nooit getoond of teruggelezen (password_hash). Beheerder kan alleen resetten of een tijdelijk wachtwoord uitgeven; beide acties komen in het audit log.
De velden Taal en "Tweefactorauthenticatie verplichten" zijn verwijderd: users heeft daar geen kolommen voor. Beide zijn nice to have en vragen eerst een schemawijziging.
De uitnodigingslink met geldigheidsduur gebruikt password_resets met purpose='invite' — staat in schema.sql.
10. Categorieën — L1 / L2 / L3
Boomstructuur links, detail rechts. Slepen wijzigt de volgorde. Drie niveaus, precies zoals CO2spot.
Niveau: alleToon: ook inactieveGetallen = aantal gekoppelde producten
Structuur
⠿Openbare ruimte49
⠿Afrastering 6
⠿Wegmeubilair 31
⠿Verlichting 12
⠿Wegen353
⠿Asfalt 71
⠿Elementen 102
⠿Kantopsluiting 126
⠿Water & klimaat262
⠿Riolering 201
⠿Buis 167
⠿Duiker 11
⠿Kolk 8
⠿Kousrenovatie 6
⠿Put 6
⠿Uitstroombak 3
⠿Infiltratie & berging 40
⠿Leidingwerken 11
⠿Bemaling 10
⠿Civiele constructies78
⠿(Bouw)materialen197
Subcategorie bewerken — Buis
Water & klimaat › Riolering
Kolom title — wordt in CO2spot boven de lijst getoond
Kolom info_text
img
Kolom image
1 m1Kolom default_unit_id — voorinvulling bij nieuwe producten
Actief
167 producten gebruiken deze subcategorie. Bij verwijderen moet eerst een vervangende subcategorie worden gekozen.
Sluit aan op categories_l1 / l2 / l3: alleen name, title, info_text, image, default_unit_id (op L2 en L3), sort_order en is_active.
De velden "Naam (EN)", "Code" en "CO2spot-mapping" zijn vervallen — die kolommen bestaan niet, en een mapping is overbodig omdat de id's identiek zijn aan die van CO2spot.
Een vierde niveau is er niet; het derde niveau ís het producttype.
11. Referentielijsten
Eén scherm voor alle vaste lijsten; links de lijstkeuze, rechts de CRUD-tabel.
EA EPDatlasBeheeromgeving
SUPERADMIN beheer@epdatlas.nl ▾
Referentielijsten
Vaste keuzelijsten die leveranciers gebruiken bij product- en EPD-registratie
Lijsten
Eenheden 7
Programmahouders 9
LCA-platformen 9
Bronsoorten 5
Materialen 84
Modules (A1–D) 22
Indicatoren 41
Status: alle
Naam
Afkorting
Land
Website
EPD's
Status
Nationale Milieudatabase
NMD
NL
milieudatabase.nl
412
Actief
EPD Nederland
EPD-NL
NL
epdnederland.nl
288
Actief
MRPI
MRPI
NL
mrpi.nl
96
Actief
The International EPD System
EPD International
SE
environdec.com
142
Actief
EPD Hub
EPD Hub
GB
epdhub.com
61
Actief
Institut Bauen und Umwelt
IBU
DE
ibu-epd.com
54
Actief
Rijen met gekoppelde EPD's kunnen niet worden verwijderd, alleen op inactief gezet.
1–6 van 9 12›
Aantallen komen uit seed_reference.sql: 7 eenheden, 9 programmahouders, 9 LCA-platformen, 5 bronsoorten, 84 materialen, 22 modules (A1–D), 41 indicatoren.
De kolom heet Afkorting, want programme_operators kent short_name en geen code.
De lijst "Abonnementstypen" is verwijderd: licences.plan is een vrij tekstveld zonder eigen tabel.
12. Producten — alle organisaties
Platformbrede productlijst met organisatiefilter, categoriefilter en EPD-status.
EA EPDatlasBeheeromgeving
SUPERADMIN beheer@epdatlas.nl ▾
Producten
939 producten · 939 zichtbaar in CO2spot
Organisatie: alleHoofdcategorieCategorieSubcategorieMateriaal: alleEPD-status: alleCO2spot: alle
Bij "verplaatsen naar organisatie" verhuizen de gekoppelde EPD's, bronbestanden, uitleespogingen en indicatorwaarden altijd mee — de tenantsleutel (id, organisation_id) loopt door de hele keten.
De beheerder ziet altijd de kolom Organisatie; in de leveranciersomgeving ontbreekt die, omdat daar de tenantfilter vastligt.
Productnamen, categoriepaden, materialen, eenheden, diameters en GWP-waarden komen uit CO2spot; de EPD-tellingen en -statussen zijn voorbeeld.
13. Product — detail met gekoppelde EPD's
Beheerdersweergave: alle velden bewerkbaar, EPD-koppelingen direct te beheren.
Versieketen: 1.0 → 2.0 · CO2spot toont automatisch de nieuwste actieve versie, tenzij er één is vastgezet
De tab "Bestanden" is verwijderd: bestanden hangen in epd_files altijd onder een EPD-versie, nooit onder een product. Ze zijn te vinden via de EPD-detailpagina (scherm 15, tab Bronbestand).
Het veld "Producttype" is vervallen — er zijn drie categorieniveaus en het derde is het producttype.
"Vastzetten" schrijft product_epd.pin_requested: de leverancier of beheerder dwingt dan één specifieke versie af in CO2spot. Maximaal één vastgezette versie per product.
14. EPD's — lijst en uploadcontrole
Platformbrede EPD-lijst. Het tabblad Uploadcontrole toont wat menselijke aandacht nodig heeft (MVP §11).
Kolom Status = epds.status (actief / vervangen / verlopen) plus de afgeleide waarschuwing uit valid_until.Kolom Controle mengt twee bronnen: epds.review_status (pending / in_review / approved) en een mislukte epd_extractions.status.
De kolom NMD-categorie (epds.nmd_category, 1/2/3) is toegevoegd — die staat in v_co2spot_products en wordt dus publiek getoond.
15. EPD — detail (admin-weergave)
Zelfde inhoud als de leveranciersweergave, plus bewerkrechten, uitleeslog en handmatige statuswijziging.
Herkomst per veld komt uit field_provenance, signalen uit quality_flags, uitleespogingen uit epd_extractions.
De teller onderaan de indicatortabel telt waarden (epd_indicator_values) tegen het aantal gedefinieerde indicatoren (41 in indicators).
Onder Bronbestand kunnen naast de EPD-PDF ook bijlagen en afbeeldingen staan: epd_files.kind kent annex, image en other.
16. Verwijderen bevestigen (patroon)
Eén patroon voor alle destructieve acties: gevolgen tonen, naam laten intypen, alternatief aanbieden.
Organisatie verwijderen✕
Dit verwijdert alle onderliggende gegevens van Wavin Nederland B.V.:
Status gewijzigd naar Geblokkeerd — reden: licentie verlopen
31-08-2026 14:22
ronald.bal@orbia.com
Wavin Nederland B.V.
EPD
Aangemaakt
NEPD-3841 v2.0 geüpload en uitgelezen
30-08-2026 16:35
beheer@epdatlas.nl
— (platform)
Categorie
Gewijzigd
Subcategorie "Uitstroombak" van standaard eenheid 1 st naar 1 m1
29-08-2026 09:04
beheer@epdatlas.nl
Amiblu Netherlands B.V.
Sessie
Impersonatie
Ingelogd als klant (12 minuten)
Details tonen de oude en nieuwe waarde per veld.
1–6 van 8.412 12…›
Sluit aan op audit_log. Impersonatiesessies en wachtwoordresets worden altijd vastgelegd.
Dezelfde tabel voedt, gefilterd op organisation_id, de activiteitenlog in de leveranciersomgeving.
18. Rollen & rechten — matrix
Rollen als rijen, rechten als kolommen, vinkjes als koppeling. Een nieuwe rol samenstellen uit bestaande rechten kan hier zonder code-wijziging.
EA EPDatlasBeheeromgeving
SUPERADMIN beheer@epdatlas.nl ▾
Rollen & rechten
2 rollen · 10 rechten · vinkjes zijn rijen in role_permissions
10 rechten in 2 categorieën · een vinkje aan- of uitzetten is een INSERT of DELETE in role_permissions
Kolom toevoegen = nieuwe rol
Rollen
Rol
Sleutel
Kant
Rechten
Gebruikers
Status
Leverancier
supplier
supplier
3
48
Actief
Platformbeheerder
platform_admin
platform
7
3
Actief
Een rol met gebruikers kan niet worden verwijderd, alleen op inactief gezet.+ Nieuwe rol
Nieuwe rol✕
Uniek, kleine letters — hierop checkt de code
platformBepaalt welke helft van de applicatie de rol ziet
Actief
PlatformbeheerderKopieert de vinkjes; daarna in de matrix bijstellen
De rol verschijnt als extra kolom in de matrix en als
keuze bij het aanmaken van een gebruiker. Rechten die nog niet bestaan, kunnen hier niet worden
bedacht — daarvoor is eerst een nieuw recht (en de bijbehorende controle in de code) nodig.
Sluit aan op de drie nieuwe tabellen: roles (key_name, label, side, is_active),
permissions (key_name, label, category) en de koppeltabel role_permissions — dat is de matrix zelf.
users.role_id is een FK naar roles; de oude ENUM users.role bestaat niet meer.
De kolom Support staat er grijs bij als illustratie van wat een nieuwe rol doet; die rol zit niet in seed_reference.sql.
Grens van dit scherm: de matrix combineert bestaande rechten, hij verzint er geen. Een scherm of actie die nog niet bestaat,
vraagt eerst een rij in permissions plus de bijbehorende user_can()-controle in de code. Daarna is het samenstellen van rollen hier zelfbediening.
Het recht roles.manage beveiligt dit scherm zelf; wijzigingen komen in het audit log (scherm 17).