4PS Integration
Sync bouwnummers, verkooptypen, available options and per-verkooptype option prices from 4PS Construct (Business Central) into the woningconfigurator
4PS Construct (Business Central) integration
The 4PS integration lets the woningconfigurator pull project data straight from 4PS Construct (Microsoft Dynamics 365 Business Central): bouwnummers (plots), verkooptypen (sales types / house models), the available options per verkooptype, and the option prices per verkooptype. It reads from 4PS on a schedule and can be triggered manually; buyer choices (koperskeuzes) are written back separately.
The integration is configured per tenant under Settings → Integrations → 4PS Construct and requires the MANAGE_INTEGRATIONS permission.
What gets synced
- Bouwnummers: 4PS plots are matched to existing Alpha houses by BNR (
House.id == plotNo). When a plot has a buyer (principal), the matched house is promoted to SOLD. The sync never creates houses and never downgrades a house that is already further along. - Verkooptypen: a plot's 4PS
houseModelis the verkooptype. In Alpha it is matched to the house's variant name, so a project's variants should be named after their 4PS house models (e.g.A1,C2). Only the house models the project's plots actually use are imported; the 4PS project catalogue also contains master/reference lists (e.g.STANDAARD) for house models no plot uses, and those are skipped so the import stays relevant to the project's types. - Beschikbare opties: the 4PS option catalogue (the catalogue rows, i.e. options with an empty plot number) defines which options each verkooptype offers. In the configurator, a CONSUMER-phase (koperskeuze) option code that is not in the catalogue for the house's verkooptype is marked unavailable (
valid = false); the standaard (base) code of each option always stays selectable. PLAN/structural options (woningtype, beukmaat, kapvorm, garage-elementen, …) are never part of the 4PS koperskeuze catalogue, so they are never gated. Verkooptypen without an imported catalogue are not gated either; every Type option stays available, exactly as before. - Optieprijzen per bouwnummer: catalogue prices are imported per verkooptype, one row per option code and 4PS subGroup. A subGroup is either an optiotype (the technical house model, e.g.
TKN,RTA) or functional:ALG(algemeen) andGAR(garage). The same code under two subGroups is a genuinely different product, so every row is stored. In the configurator, the price of an option resolves in this order: verkooptype-specific 4PS price → project-wide manual override → the Type's base price. A code whose rows disagree on price is ambiguous: no 4PS price is applied for it (it falls through to override/base price) until the ambiguity is resolved. Because a house's verkooptype follows from its variant, prices are effectively per bouwnummer.
Viewing the imported prices per variant
Open a project and go to the Models tab. Every variant tab has two 4PS-badged sub-tabs:
- Prijzen: the imported price table for that verkooptype: option code, description, subGroup badge and price, with ambiguous codes flagged as Conflict;
- Uitsluitingen: which of the Type's CONSUMER-phase options are not available for this verkooptype (the configurator shows these as "Niet beschikbaar voor dit verkooptype"). PLAN/structural options are never listed here.
Both show when the catalogue was last synced and a Nu synchroniseren button (requires MANAGE_INTEGRATIONS) to re-import immediately.
Viewing this screen only requires READ_PROJECTS.
Configuration
- Credentials: enter the Business Central tenant id, environment (e.g.
Test), API version, the app-registration client id, and the client secret. The secret is write-only: once stored it is never returned, and an empty field leaves it unchanged. Use Verbinding testen to confirm the credentials and list the reachable companies; when exactly one company is found, the Company id field (required for syncing) is filled in automatically. - Projectkoppelingen: map each 4PS project number (e.g.
21702) to an Alpha project. Only mapped projects are synced. - Optiecode-mapping: describe how an Alpha option code is built from the 4PS key. The Whoon default is delimiter
-with segmentsmainGroup,group,optionNo(e.g.01-01-02); the 4PSsubGroupis descriptive and left out of the code. The missingsubGroupis resolved from the catalogue when writing a choice back.
Running a sync
- Scheduled: every enabled integration is synced hourly.
- Manual: Nu synchroniseren runs an immediate sync for the tenant's integration and reports what it did: plots fetched, houses updated, verkooptypen imported, prices imported, available options imported, and any price conflicts or unmatched plots.
When the same Alpha option code maps to two catalogue rows with different prices (because the subGroup is not part of the code), all rows are stored (visible per subGroup in the Prijzen (4PS) screen), but the configurator applies no imported price for that code rather than guessing. The option still counts as available.