DPP-UNI-1 Schema

De Publieke Partner – Universal Job Posting Schema v1.5

ERD DPP-UNI-1 v1.5

Overzicht

Gestandaardiseerde structuur voor Nederlandse publieke sector freelance/interim vacatures gescraped van DAS-platformen.

Voor een niet-technisch overzicht, zie: /docs/handboek/techniek/data-model-overzicht

Conventies

AspectDatabasePublic-facing
Datum/tijdISO 8601 (YYYY-MM-DDTHH:mm:ssZ)DD-MM-YYYY HH:MM
Decimalen. (100000.00), (100.000,00) nl-NL
IDsBIGSERIAL (auto-increment)-
NullOnbekend/niet gespecificeerd-

Timestamp Conventie

Alle tabellen gebruiken:

FieldTypeDescription
created_atTIMESTAMPRecord aangemaakt (DEFAULT CURRENT_TIMESTAMP)
updated_atTIMESTAMPRecord laatst gewijzigd (DEFAULT CURRENT_TIMESTAMP)

Enums

job_status_enum

ValueDescription
draftConcept - nog niet gepubliceerd
publishedGepubliceerd - live
closedGesloten - deadline verstreken
archivedGearchiveerd - niet meer actief

org_sector_enum

ValueDescription
publicPubliek (overheid)
privatePrivaat
nonprofitNon-profit
otherAnders

platform_type_enum

ValueDescription
dasDynamisch Aankoop Systeem
otherAndere bron

Core Tables

1. job

Kern vacature tabel.

FieldTypeDescription
Platform
platform_idBIGINTFK naar platform
platform_job_idTEXTOriginele ID bronsysteem
Job Info
job_dpp_reference_idTEXTDPP referentie
schema_versionNUMERIC(5,2)Schema versie
job_scraped_datetimeTIMESTAMPWanneer gescraped
job_source_urlTEXTOriginele URL
job_titleTEXT NOT NULLFunctietitel
job_description_htmlTEXTOmschrijving (HTML)
job_requirementsJSONBEisen (array)
job_selection_criteriaJSONBGunningscriteria
job_statusENUMStatus
Dates
job_start_datetimeTIMESTAMPStartdatum
job_end_datetimeTIMESTAMPEinddatum
job_closure_datetimeTIMESTAMPSluitingsdatum
job_published_atTIMESTAMPGepubliceerd
job_closed_atTIMESTAMPGesloten
Classification
sector_idBIGINTFK naar sector
education_levelTEXTOpleidingsniveau

v1.5 Note: role_id and theme_id removed. Use job_role and job_theme junction tables for M:M. | Contract | | | | contract_min_rate_eur | NUMERIC(10,2) | Min uurtarief | | contract_max_rate_eur | NUMERIC(10,2) | Max uurtarief | | contract_duration_months | INT | Duur (maanden) | | contract_min_hours_per_week | INT | Min uren/week | | contract_max_hours_per_week | INT | Max uren/week | | contract_extension | JSONB | Verlengingen | | contract_gdpr_requirements | TEXT[] | AVG vereisten | | contract_submission_requirements | JSONB | Indieningsvereisten | | contract_das_requirements | JSONB | DAS vereisten | | Location | | | | work_location_id | BIGINT | FK naar work_location |

contract_extension Sub-schema

{
  "status": "yes",
  "count": 2,
  "extension_months": 6
}
FieldValues
statusyes, no, possible, onbekend
countAantal verlengingen
extension_monthsMaanden per verlenging

contract_submission_requirements

{
  "motivation_required": true,
  "max_candidates": 3,
  "allowed_file_types": ["pdf", "docx"],
  "max_cv_pages": 5,
  "max_motivation_chars": 2000
}

2. platform

DAS bronnen.

FieldTypeDescriptionExample
nameTEXTPlatform naamSTRIIVE
typeENUMTypedas
descriptionTEXTBeschrijving
websiteTEXTURLhttps://striive.com

Actieve Platformen: STRIIVE, Flextender, Yacht, Maandag


3. headquarters

Opdrachtgever organisaties.

FieldTypeDescriptionExample
nameTEXTNaamGemeente Utrecht
streetTEXTStraatStadhuisplein
street_numberTEXTNummer1
street_number_suffixTEXTToevoegingA
postal_codeTEXTPostcode3511 AA
cityTEXTStadUtrecht
phoneVARCHAR(20)Telefoon+31 30 286 0000
websiteTEXTWebsitehttps://www.utrecht.nl
logo_urlTEXTLogo (intern)
source_logo_urlTEXTLogo (origineel)
socialsJSONBSocial links{"linkedin":"..."}
region_idBIGINTFK naar region
org_type_idBIGINTFK naar org_type

4. contact

Contactpersonen.

FieldTypeDescription
first_nameTEXTVoornaam
last_nameTEXTAchternaam
emailCITEXTE-mail (validated)
phone_numberVARCHAR(20)Telefoon
websiteTEXTWebsite

5. work_location

Standplaats.

FieldTypeDescriptionExample
headquarters_idBIGINTFK headquarters
contact_idBIGINTFK contact
coordinatesJSONBGPS{"lat": 52.0907, "lng": 5.1214}

6. domain

Multi-site support.

FieldTypeDescription
nameTEXTDomain naam
descriptionTEXTBeschrijving
urlTEXTURL
hosting_domainTEXTHosting
cmsTEXTCMS type

7. job_contract_type

Junction tabel (M:M job ↔ contract_type).

FieldTypeDescription
job_idBIGINTFK job
contract_type_idBIGINTFK contract_type

8. job_role (NEW v1.5)

Junction tabel (M:M job ↔ role).

FieldTypeDescription
job_idBIGINTFK job
role_idBIGINTFK role

A job can have multiple roles (e.g., "Developer" + "Tech Lead").


9. job_theme (NEW v1.5)

Junction tabel (M:M job ↔ theme).

FieldTypeDescription
job_idBIGINTFK job
theme_idBIGINTFK theme

A job can have multiple themes (e.g., "Digitalisering" + "Datagedreven werken").


10. job_document

Bijlagen (1:M met job).

FieldTypeDescription
job_idBIGINTFK job
doc_typeTEXTsource_html, tender_pdf, annex, terms
filenameTEXTBestandsnaam
file_size_bytesBIGINTGrootte
storage_pathTEXTSupabase path
urlTEXTURL
content_typeTEXTMIME type
blobBYTEABinary (kleine files)
parsed_textTEXTAI-geparsed
parse_statusTEXTpending, completed, failed

11. job_posting

Schema snapshots.

FieldTypeDescription
job_idBIGINTFK job
schema_versionTEXTVersie
schema_jsonJSONBJSON
schema_hashTEXTHash

Integration Tables

integration_system

FieldTypeDescription
job_idBIGINTFK job
system_idTEXTTESS, Flowlu
portfolio_idTEXTPortfolio ID
org_idTEXTOrg ID
project_idTEXTProject ID

integration_frontend

FieldTypeDescription
job_idBIGINTFK job
domain_idBIGINTFK domain
post_idBIGINTWordPress ID
post_urlTEXTURL
body_rawTEXTContent
metadata_descriptionTEXTSEO
featured_mediaTEXTImage

newsletter_job

FieldTypeDescription
newsletter_idBIGINTFK newsletter
job_idBIGINTFK job

Reference Tables

region

Nederlandse provincies: Noord-Holland, Zuid-Holland, Utrecht, Gelderland, Noord-Brabant, Overijssel, Limburg, Flevoland, Groningen, Friesland, Drenthe, Zeeland

sector

Vakgebieden: Beleid en Bestuurlijke zaken, Communicatie en Voorlichting, Financien en Economische zaken, ICT en Automatisering, Juridisch, HR en Personeel

role

Functierollen (intern beheerd).

theme

Website thema's (intern beheerd).

org_type

FieldTypeDescription
org_sectorENUMpublic/private/nonprofit/other
nameTEXTGemeente, Waterschap, etc.

contract_type

idnamedescription
1ZZPZelfstandige zonder personeel
2DetacheringVia payroll organisatie
3PayrollPayroll constructie
4InterimTijdelijke management positie

newsletter

VBout shortcodes.


Version History

VersionDateChanges
v1.52026-01-23M:M roles/themes via job_role and job_theme junction tables
v1.42026-01-22DDL alignment, flat ContractType, M:M junction, domain/job_posting tables
v1.32026-01-22Platform rename, contact table, timestamps
v1.22026-01Initial documented version
v1.12026-01ISO-8601 dates, reference tables

Versiegeschiedenis wordt intern beheerd.


DPP-UNI-1 – De Publieke Partner Universal Job Posting Schema v1.5