⚙ Work in Progress — Living Document  |  Dit document is actief in ontwikkeling. Informatie wordt verzameld, beslissingen worden genomen en inhoud wordt voortdurend verbeterd. Behandel de inhoud als een werkversie, niet als definitief ontwerp. This document is actively under development. Information is being gathered, decisions are being made, and content is continuously improved. Treat the content as a working draft, not a final design.
1

Executive Summary

DoelObjective

Opbouw van het Technetix Salesforce Platform — een volledig nieuw, custom gebouwd platform dat contractbeheer, productcatalogus, quoting, ordercreatie, asset- en garantiebeheer en after-sales digitaliseert en integreert met Exact Globe. De vervanging van het bestaande CPQ-pakket is hier een onderdeel van, maar het platform gaat verder dan CPQ alleen.Building the Technetix Salesforce Platform — a completely new, custom-built platform that digitises contract management, product catalogue, quoting, order creation, asset & warranty management and after-sales, integrated with Exact Globe. Replacing the existing CPQ package is part of this, but the platform goes well beyond CPQ.

Waarom custom?Why custom? StrategischStrategic

Het standaard CPQ-pakket dekte slechts een klein deel van wat nodig is. Het Technetix Salesforce Platform omvat ook nieuwe producttypes (Extended Warranty, Professional Services, Software, SLA), contractregistratie per klant, asset- en garantiebeheer met serienummers, en een nauwe integratie met Exact Globe als System of Record voor producten en prijzen. Een custom platform biedt de controle en flexibiliteit die een standaardpakket niet kan bieden.The standard CPQ package covered only a small part of what is needed. The Technetix Salesforce Platform also includes new product types (Extended Warranty, Professional Services, Software, SLA), customer contract registration, asset and warranty management with serial numbers, and tight integration with Exact Globe as System of Record for products and prices. A custom platform provides the control and flexibility that an off-the-shelf package cannot deliver.

Wat wordt gerealiseerdWhat will be delivered 9 capabilities
#CapabilityOmschrijvingDescription
1ContractregistratieContract RegistrationCustomerAgreement framework voor raamovereenkomsten met klant-specifieke afwijkingen (garantie, SLA, toekomstige contractparameters)CustomerAgreement framework for framework agreements with customer-specific deviations (warranty, SLA, future contract parameters)
2Uitgebreide productverkoopExtended product salesNiet alleen hardware, maar ook Software, Extended Warranty, Professional Services, SLA, Consultancy en TrainingNot only hardware, but also Software, Extended Warranty, Professional Services, SLA, Consultancy and Training
3Guided Selling & QuotingOpportunity → Quote → QuoteLineItems met producttype-specifiek gedrag, Extended Warranty auto-suggest, en delivery schedule planningOpportunity → Quote → QuoteLineItems with product type-specific behaviour, Extended Warranty auto-suggest, and delivery schedule planning
4Prijs- & KortingsgoedkeuringPrice & Discount ApprovalConfigureerbaar goedkeuringsframework met multi-level goedkeuring (auto-approve, Team Lead, Director) en delegated approversConfigurable approval framework with multi-level approval (auto-approve, Team Lead, Director) and delegated approvers
5Order creatie & integratieOrder creation & integrationQuote → Order conversie met automatische doorzetting naar Exact Globe via MuleSoftQuote → Order conversion with automatic forwarding to Exact Globe via MuleSoft
6Asset registratieAsset registrationAutomatische asset creatie bij levering — per serienummer (individueel) of gegroepeerd (batch). 360° klantviewAutomatic asset creation on delivery — per serial number (individual) or grouped (batch). 360° customer view
7Garantie & verlengingWarranty & extensionBase garantie per productgroep + Extended Warranty als percentage van hardware prijs per BU. Klant-specifieke overrides via contractregistratieBase warranty per product group + Extended Warranty as a percentage of hardware price per BU. Customer-specific overrides via contract registration
8Service activatieService activationNa verkoop: automatische activatietaken voor software licenties, SLA’s, trainingen, professional services en consultancyAfter sale: automatic activation tasks for software licences, SLAs, training, professional services and consultancy
9Repairs & CasesCase-afhandeling met koppeling aan assets, automatische garantievalidatie en SLA response tijdenCase handling with link to assets, automatic warranty validation and SLA response times
In scope maar onduidelijk — input Business vereistIn scope but unclear — Business input required 2 items
OnderwerpSubjectStatusWat moet duidelijk wordenWhat needs to be clarified
ForecastingOnduidelijkUnclearBusiness heeft nog niet geformuleerd wat wenselijk is. Opties: forecast per klant per maand, of verwachte productafname.
Facturatie & administratie van dienstenOnduidelijkUnclearOnduidelijk hoe SLA’s, garantieverlengingen en software gefactureerd worden in Exact Globe.

KernprincipesCore Principles

SoR
Exact Globe = Producten & Prijzen
Salesforce = Sales Cycle
Exact Globe = Products & Prices
Salesforce = Sales Cycle
Std
Hergebruik standaard objecten (Product2, Quote, Order, Asset)Reuse standard objects (Product2, Quote, Order, Asset)
JF
Junior Family code is leidend voor classificatieJunior Family code is leading for classification
MW
MuleSoft als middleware voor alle integratieMuleSoft as middleware for all integration
Wat vervangt en wat is nieuw ten opzichte van het CPQ-pakket? — Technologie mappingWhat replaces and what is new compared to the CPQ package? — Technology mapping
CPQ-functieCPQ functionVervangende oplossingReplacement solutionTechnologieTechnology
ProductconfiguratieProductType__c classificatie + gedragsregels per typeProductType__c classification + behaviour rules per typeCustom Metadata (ProductTypeBehavior__mdt)
PrijsberekeningStandaard PricebookEntry + Extended Warranty percentageStandard PricebookEntry + Extended Warranty percentageApex (ExtendedWarrantyService) + CMDT
Guided sellingAuto-suggest, producttype-filters, validatiesAuto-suggest, product type filters, validationsLWC (quoteProductSelector) + Apex
Discount schedulingConfigureerbare drempels met multi-level goedkeuringConfigurable thresholds with multi-level approvalCustom Object (ApprovalRule__c) of CMDTCustom Object (ApprovalRule__c) or CMDT
BundlesNiet nodig — producten standalone, gekoppeld via LinkedHardwareLine__cNot needed — products standalone, linked via LinkedHardwareLine__c
Quote documentStandaard Salesforce Quote PDF of toekomstig templateStandard Salesforce Quote PDF or future templateStandaard functionaliteitStandard functionality

Technologie per laagTechnology per layer

LaagLayerTechnologieTechnologyToelichtingNotes
UILightning Web Components (LWC)Alle nieuwe gebruikersinterface. Geen Aura voor nieuwe componentenAll new user interface. No Aura for new components
Business logicApex (service classes + trigger handlers)Bulk-safe, testbaar, één trigger per objectBulk-safe, testable, one trigger per object
ConfiguratieConfigurationCustom Metadata Types (CMDT)Producttype-gedrag, garantie-defaults, integratie-instellingen. Deployable, geen SOQL-limietenProduct type behaviour, warranty defaults, integration settings. Deployable, no SOQL limits
IntegratieIntegrationApex REST/Callout + Named CredentialsInbound handlers + outbound naar MuleSoftInbound handlers + outbound to MuleSoft
GoedkeuringApprovalNative Approval Process of Custom ApexNative Approval Process or Custom ApexAfhankelijk van designkeuze (sectie 6.6)Dependent on design choice (section 6.6)
AutomatiseringAutomationApex Triggers + Platform EventsGeen Flows voor complexe logicaNo Flows for complex logic
1B

Implementatieaanpak: 2 FasenImplementation Approach: 2 Phases

Leidend principeGuiding principle Het volledige programma wordt gefaseerd opgeleverd. Fase 1 vervangt het huidige Salesforce CPQ-package één-op-één door een eigen maatwerk-CPQ op standaard Salesforce, gericht op het kunnen offreren van bestaande hardware met klantspecifieke prijzen, korting + goedkeuring en een ondertekend PDF-document. Fase 2 voegt alle nieuwe producttypen, Quote → Order conversie, integratie naar Exact, Assets, garantie en post-sales toe.The full programme is delivered in phases. Phase 1 replaces the current Salesforce CPQ package one-for-one with a custom-built CPQ on standard Salesforce, focused on quoting existing hardware with customer-specific pricing, discounting + approval, and a signed PDF. Phase 2 adds all new product types, Quote → Order conversion, integration to Exact, Assets, warranty and post-sales.

Overzicht in één oogopslagOverview at a glance

Fase 1 — CPQ Replacement Quote-only · Hardware · DocuSign Blok 1 Bouwen in TechnetixDev2 Blok 2 UAT: Deploy + conv. + uninstall Blok 3 PROD: Deploy + conv. + uninstall In scope: • Pricebook + AccountProductPrice__c • Quote + QLI + custom approval-engine • PDF + DocuSign · Multi-currency • Sync alleen Hardware (BU 05-09) Geen Order/Assets/Garantie/Services Fase 2 — Uitbreiding Volledige sales- & service-cyclus In scope: • CustomerAgreement__c + WarrantyOverride__c • Nieuwe producttypen (Ext. Warranty, SLA, Software, Prof. Services, Consultancy) • ExtendedWarrantyMapping + CMDT • Quote → Order conversie • DeliverySchedule__c (split per maand) • MuleSoft Outbound (Order → Exact) • Asset-creatie + Garantie + Activatie • Repairs, Inventory, Subscriptions Pas starten na succesvolle Fase 1 go-live
Figuur 1B.1 — Faseringsoverzicht: Fase 1 (3 blokken) → Fase 2Figure 1B.1 — Phasing overview: Phase 1 (3 blocks) → Phase 2

1B.1 Fase 1 — CPQ Replacement (Quote-only)Phase 1 — CPQ Replacement (Quote-only)

Doelstelling Fase 1Phase 1 objective Vervang het huidige Salesforce CPQ-package en de huidige Advanced Approvals door een eigen, maatwerk-opzet op standaard Salesforce, waarmee Sales bestaande hardware producten kan offreren met klantspecifieke prijzen, kortingen met goedkeuring, en een ondertekend PDF-document via DocuSign. CustomerAgreement__c, nieuwe producttypen, Quote → Order, Assets en garantie zitten allemaal in Fase 2.Replace the current Salesforce CPQ package and current Advanced Approvals with a custom-built setup on standard Salesforce that allows Sales to quote existing hardware with customer-specific prices, discounts with approval, and a signed PDF via DocuSign. CustomerAgreement__c, new product types, Quote → Order, Assets and warranty are all in Phase 2.
Scope Fase 1 — Wat zit erin, wat nietPhase 1 scope — What is in, what is out
OnderdeelComponentFase 1Phase 1Fase 2Phase 2
Product2 (Hardware BU 05-09) syncIn
Pricebook2 + PricebookEntry per tier (sync)In
AccountProductPrice__c (vervanger CPQ Contracted Prices)In
Multi-currency op Pricebook + AccountProductPriceIn
Standaard Quote + QuoteLineItem + custom veldenIn
LWC quoteProductSelector + quoteLineEditor (alleen hardware)In
PriceResolver Apex service (AccountProductPrice → Pricebook ladder)In
Korting + goedkeuringsproces (custom approval-engine uit DMS CMS Solution Technetix)In
PDF-generatie + DocuSign integratie vanaf QuoteIn
Inbound MuleSoft sync (Product + Pricebook + AccountProductPrice)In
IntegrationLog__c + foutafhandeling inboundIn
CustomerAgreement__c + WarrantyOverride__cIn
Nieuwe Product2-velden (ProductType__c, IsPhysicalProduct__c, etc.)In
Nieuwe producttypen: Ext. Warranty, SLA, Software, Prof. Services, Consultancy, IPLicenseIn
ExtendedWarrantyMapping__c + ProductTypeBehavior__mdt + WarrantyDefault__mdtIn
Quote → Order conversie + DeliverySchedule__cIn
MuleSoft Outbound (Order → Exact) + OrderIntegrationStatusIn
Asset-creatie, AssetWarrantyEvent__c, ServiceActivation__cIn
Case ↔ Asset, Repairs, Inventory syncIn
Datamodel Fase 1Phase 1 data model

AccountProductPrice__cVervanger CPQ Contracted PricesCPQ Contracted Prices replacement

BelangrijkImportant Dit object wordt gesynchroniseerd vanuit Exact Globe via MuleSoft. De integratie wordt opgezet door Twan (MuleSoft). Vanuit Salesforce-zijde zorgen we voor het object, de velden, de External ID en de upsert-logica. Geen UI in Fase 1 — het is puur een achtergrond-object dat door PriceResolver wordt gelezen. Een related list op Account met productprijzen kan later in Fase 2 worden toegevoegd.This object is synchronised from Exact Globe via MuleSoft. The integration is set up by Twan (MuleSoft). From the Salesforce side we provide the object, fields, External ID and upsert logic. No UI in Phase 1 — it is purely a background object read by PriceResolver. A related list on Account with product prices can be added later in Phase 2.
VeldFieldTypeOmschrijvingDescription
Account__cLookup(Account)Klant waarvoor de prijs geldtCustomer the price applies to
Product__cLookup(Product2)Product waarvoor de prijs geldtProduct the price applies to
UnitPrice__cCurrencyKlantspecifieke prijsCustomer-specific price
CurrencyIsoCodeStandardMulti-currency ondersteundMulti-currency supported
StartDate__cDateGeldig vanafValid from
EndDate__cDateGeldig tot (optioneel)Valid until (optional)
IsActive__cCheckboxActief ja/neeActive yes/no
ExactContractPriceId__cText(External ID, Unique)Externe sleutel uit Exact — precieze structuur in afstemming met Twan/MuleSoftExternal key from Exact — exact structure in alignment with Twan/MuleSoft

Prijsresolutie ladder (PriceResolver)Price resolution ladder (PriceResolver)

  1. Zoek actief AccountProductPrice__c voor (Account, Product2) op de quote-datum → gebruik die prijsLook up active AccountProductPrice__c for (Account, Product2) on the quote date → use that price
  2. Anders: PricebookEntry uit Account.DefaultPricebook__c → gebruik die prijsOtherwise: PricebookEntry from Account.DefaultPricebook__c → use that price
  3. Anders: foutmelding — geen prijs beschikbaar voor product/account combinatieOtherwise: error — no price available for the product/account combination

Overige objecten Fase 1Other Phase 1 objects

  • Product2bestaande velden, alleen hardware (BU 05-09). Geen nieuwe ProductType-velden in Fase 1.existing fields, hardware only (BU 05-09). No new ProductType fields in Phase 1.
  • Pricebook2 + PricebookEntryéén pricebook per pricing tier, sync via MuleSoft inboundone pricebook per pricing tier, sync via MuleSoft inbound
  • AccountDefaultPricebook__c (Lookup), PricingTier__c
  • Quote + QuoteLineItemstandaard objecten met benodigde custom velden (kortingen, status, approval-velden, signed-PDF link, DocuSign envelope-id)standard objects with required custom fields (discounts, status, approval fields, signed PDF link, DocuSign envelope id)
  • IntegrationLog__cfoutafhandeling inbound integratieserror handling for inbound integrations
Approval-engine: hergebruik uit DMS CMS Solution TechnetixApproval engine: reuse from DMS CMS Solution Technetix
Bron-repoSource repo De goedkeuringsregels worden afgehandeld door de custom approval-engine uit het project DMS CMS Solution Technetix. Deze engine is daar al ontwikkeld als agnostische, configureerbare approval-engine (vergelijkbaar met Salesforce Advanced Approvals) en wordt in dit project hergebruikt. Geen nieuwe approval-engine bouwen.Discount approvals are handled by the custom approval engine from the DMS CMS Solution Technetix project. That engine has already been built there as an agnostic, configurable approval engine (comparable to Salesforce Advanced Approvals) and is reused in this project. No new approval engine is built.
  • Objecten en velden uit DMS CMS Solution Technetix moeten worden geanalyseerd om de juiste referenties op te zetten richting Quote/QuoteLineItem en korting-veldenObjects and fields from DMS CMS Solution Technetix must be analysed to set up the correct references towards Quote/QuoteLineItem and discount fields
  • Configuratie van approval-regels: thresholds 0-5% auto-approve, 5-15% Level 1 (Team Lead), 15%+ Level 2 (Director) — conform sectie 6Approval rule configuration: thresholds 0-5% auto-approve, 5-15% Level 1 (Team Lead), 15%+ Level 2 (Director) — per section 6
  • Quote-lock bij submission, re-evaluatie bij wijzigingen na approvalQuote lock on submission, re-evaluation on post-approval changes
  • Conversie van bestaande Advanced Approvals records (open + historisch) naar deze custom engine — zie Blok 2/3Conversion of existing Advanced Approvals records (open + historical) to this custom engine — see Block 2/3

1B.1.1 Blok 1 — Bouwen in TechnetixDev2Block 1 — Building in TechnetixDev2 Greenfield

UitgangssituatieStarting position Het huidige CPQ-package is al volledig verwijderd uit TechnetixDev2 (zie CPQ_CLEANUP_PLAN.md en scripts/cleanup/). Blok 1 is dus echt greenfield bouwen, zonder hinder van legacy-objecten.The current CPQ package has already been fully removed from TechnetixDev2 (see CPQ_CLEANUP_PLAN.md and scripts/cleanup/). Block 1 is therefore truly greenfield, without legacy object interference.
Werkpakketten Blok 1Block 1 work packages
1.1 Datamodel + permissiesData model + permissions
  • AccountProductPrice__c object aanmaken (velden + External ID + multi-currency)Create AccountProductPrice__c object (fields + External ID + multi-currency)
  • Account-velden: DefaultPricebook__c (Lookup), PricingTier__cAccount fields: DefaultPricebook__c (Lookup), PricingTier__c
  • Quote + QuoteLineItem custom velden (kortingen, approval-status, signed-PDF, DocuSign envelope-id)Quote + QuoteLineItem custom fields (discounts, approval status, signed PDF, DocuSign envelope id)
  • IntegrationLog__c objectobject
  • Permission Sets per rol (Sales, Sales Manager, Director, Integration User)Permission Sets per role (Sales, Sales Manager, Director, Integration User)
  • Multi-currency activeren in de org (gelijk aan huidige CPQ-setup)Enable multi-currency in the org (matching current CPQ setup)
1.2 Inbound integraties (samen met Twan/MuleSoft)Inbound integrations (jointly with Twan/MuleSoft)
  • Named Credentials voor MuleSoftNamed Credentials for MuleSoft
  • Apex REST Handler: Product sync (alleen Hardware BU 05-09)Apex REST Handler: Product sync (Hardware BU 05-09 only)
  • Apex REST Handler: Pricebook + PricebookEntry sync (per tier, multi-currency)Apex REST Handler: Pricebook + PricebookEntry sync (per tier, multi-currency)
  • Apex REST Handler: AccountProductPrice__c sync (upsert op ExactContractPriceId__c)Apex REST Handler: AccountProductPrice__c sync (upsert on ExactContractPriceId__c)
  • IntegrationErrorLogger + IntegrationLog__cIntegrationErrorLogger + IntegrationLog__c
1.3 Apex servicesApex services
  • PriceResolver — ladder AccountProductPrice → Pricebook— ladder AccountProductPrice → Pricebook
  • QuoteController — controller voor LWC, lijn-management, hercalculatie— controller for LWC, line management, recalc
  • QuoteDocumentService — PDF-generatie + DocuSign envelope— PDF generation + DocuSign envelope
  • Trigger handlers (QuoteTriggerHandler, AccountProductPriceTriggerHandler)Trigger handlers (QuoteTriggerHandler, AccountProductPriceTriggerHandler)
1.4 Lightning Web ComponentsLightning Web Components
  • quoteProductSelector — Quick Add Products (alleen hardware-catalogus)— Quick Add Products (hardware catalogue only)
  • quoteLineEditor — inline editen van regels, prijs/korting— inline editing of lines, price/discount
  • discountValidator — realtime weergave of approval nodig is— realtime display whether approval is needed
  • quoteDocumentPanel — PDF + DocuSign acties— PDF + DocuSign actions
1.5 Approval-engine inrichtingApproval engine setup
  • Custom approval-engine uit DMS CMS Solution Technetix deployen naar TechnetixDev2Deploy custom approval engine from DMS CMS Solution Technetix to TechnetixDev2
  • Approval-regels configureren voor Quote: 0-5% / 5-15% / 15%+Configure approval rules for Quote: 0-5% / 5-15% / 15%+
  • Approvers (Team Lead, Director) inrichtenConfigure approvers (Team Lead, Director)
  • Quote-lock bij submission + re-evaluatie bij wijzigingQuote lock on submission + re-evaluation on change
1.6 DocuSign + PDFDocuSign + PDF
  • PDF-template Quote (branding, regels, totalen, voorwaarden)Quote PDF template (branding, lines, totals, terms)
  • DocuSign integratie (Connected App / Named Credential)DocuSign integration (Connected App / Named Credential)
  • Envelope versturen vanaf Quote → status callback → signed-PDF opslaan op QuoteSend envelope from Quote → status callback → store signed PDF on Quote
1.7 Test & iteratie in Dev2Test & iterate in Dev2
  • Apex unit tests + LWC Jest tests (drempel: 85%+ coverage)Apex unit tests + LWC Jest tests (target: 85%+ coverage)
  • End-to-end scenario’s: Quote met klantprijs, met pricebook-prijs, korting in elke band, multi-currencyEnd-to-end scenarios: Quote with customer price, with pricebook price, discount in each band, multi-currency
  • DocuSign full-flow: opstellen → versturen → ondertekenen → signed-PDF terug op QuoteDocuSign full flow: draft → send → sign → signed PDF back on Quote
  • Iteratie met sales-key-users tot het functioneel volledig isIteration with sales key users until functionally complete

1B.1.2 Blok 2 — Deploy + conversie + uninstall op UATBlock 2 — Deploy + convert + uninstall on UAT High-risk

Belangrijk: vooraf grondig plannenImportant: thorough up-front planning Blok 2 vervangt op UAT het bestaande CPQ + Advanced Approvals door de nieuwe opzet, met data-conversie van bestaande records. Volgorde, freeze-vensters en rollback moeten vóóraf zijn vastgelegd. De nieuwe metadata leeft eerst náást de bestaande CPQ-objecten — pas ná succesvolle conversie wordt CPQ uninstalled.Block 2 replaces the existing CPQ + Advanced Approvals on UAT with the new setup, with data conversion of existing records. Order, freeze windows and rollback must be defined up front. New metadata first lives alongside existing CPQ objects — CPQ is only uninstalled after successful conversion.
Stappenplan Blok 2Block 2 steps
2.1 VoorbereidingPreparation
  • Cutover-plan + freeze-venster afstemmen met sales en managementCutover plan + freeze window aligned with sales and management
  • Read-only freeze op CPQ-data tijdens migratie (geen nieuwe quotes/contracten)Read-only freeze on CPQ data during migration (no new quotes/contracts)
  • Lopende DocuSign envelopes laten finaliseren vóór cutoverLet running DocuSign envelopes finalise before cutover
  • UAT sandbox refresh + snapshot voor rollbackUAT sandbox refresh + snapshot for rollback
  • Mapping-tabel ontwerp: oude CPQ ID → nieuwe SF ID (per object)Mapping table design: old CPQ ID → new SF ID (per object)
2.2 Deploy nieuwe metadata naar UATDeploy new metadata to UAT
  • Deploy: AccountProductPrice__c, Quote/QLI custom velden, IntegrationLog__cDeploy: AccountProductPrice__c, Quote/QLI custom fields, IntegrationLog__c
  • Deploy: Apex (PriceResolver, QuoteController, QuoteDocumentService, REST handlers)Deploy: Apex (PriceResolver, QuoteController, QuoteDocumentService, REST handlers)
  • Deploy: LWC (quoteProductSelector, quoteLineEditor, discountValidator, quoteDocumentPanel)Deploy: LWC (quoteProductSelector, quoteLineEditor, discountValidator, quoteDocumentPanel)
  • Deploy: custom approval-engine uit DMS CMS Solution TechnetixDeploy: custom approval engine from DMS CMS Solution Technetix
  • Deploy: Permission Sets, Lightning App, Page LayoutsDeploy: Permission Sets, Lightning App, Page Layouts
2.3 Initial sync vanuit ExactInitial sync from Exact
  • MuleSoft initiële sync: Product2 (Hardware), Pricebook2 + PricebookEntry per tier, AccountProductPrice__cMuleSoft initial sync: Product2 (Hardware), Pricebook2 + PricebookEntry per tier, AccountProductPrice__c
  • Validatie: aantallen, prijzen, currencies kloppen met ExactValidation: counts, prices, currencies match Exact
2.4 Data-conversie (CPQ → nieuwe objecten)Data conversion (CPQ → new objects)
Conversie omvang — alles overzettenConversion scope — convert everything Bevestigde scope: alle CPQ Quotes worden overgezet (alle statussen) en alle Advanced Approvals records worden geconverteerd naar de nieuwe custom approval-engine. Dit vereist een grondige analyse van de objecten en velden van de DMS CMS Solution Technetix approval-engine om de juiste mapping te bepalen.Confirmed scope: all CPQ Quotes are migrated (all statuses) and all Advanced Approvals records are converted to the new custom approval engine. This requires thorough analysis of the DMS CMS Solution Technetix approval engine objects and fields to determine the correct mapping.
  • CPQ Contracted Prices → AccountProductPrice__cper-account klantspecifieke prijzen overzetten (lookup naar Account + Product2, prijs, currency, geldigheidsperiode)migrate per-account customer-specific prices (lookup to Account + Product2, price, currency, validity)
  • CPQ Quotes (alle statussen) → standaard Quoteincl. metadata, status-mapping, approval-historie. Mapping CPQ-Quote-ID → SF-Quote-ID vasthoudenincl. metadata, status mapping, approval history. Keep mapping CPQ Quote ID → SF Quote ID
  • CPQ Quote Lines → QuoteLineItemaantallen, prijzen, kortingen, line-level approval statusquantities, prices, discounts, line-level approval status
  • PDF’s + ondertekende documentenPDFs + signed documentsContentDocumentLinks opnieuw leggen naar de nieuwe Quote-records (oude bestanden behouden, niet hergenereren)re-link ContentDocumentLinks to the new Quote records (preserve old files, do not regenerate)
  • DocuSign Status Records / Envelope-historiekoppelen aan nieuwe Quote-recordslink to new Quote records
  • Advanced Approvals → custom approval-enginecustom approval engine:
    • Vóóraf: analyse van objecten/velden/relaties van de DMS CMS Solution Technetix approval-engine om de mapping vast te leggenUp front: analysis of objects/fields/relations of the DMS CMS Solution Technetix approval engine to define the mapping
    • Open approval-instances → equivalente records in de custom engine met juiste referenties naar de nieuwe QuoteOpen approval instances → equivalent records in the custom engine with correct references to the new Quote
    • Historische approvals → archief-records met datum, approver, level, uitkomst, comments — juiste link naar nieuwe QuoteHistorical approvals → archive records with date, approver, level, outcome, comments — correct link to new Quote
    • Approval-rule definities migreren naar de configuratie van de custom engineMigrate approval rule definitions to the custom engine configuration
  • Conversie scripts (Apex Batch + Python via Bulk API) testen op kopie van productie-dataConversion scripts (Apex Batch + Python via Bulk API) tested on a copy of production data
  • Mapping-tabel persistent opslaan voor traceerbaarheid en eventuele rollbackPersist the mapping table for traceability and possible rollback
2.5 CPQ + Advanced Approvals uninstallCPQ + Advanced Approvals uninstall
Bestaande kennis hergebruikenReuse existing knowledge In deze repo staat veel materiaal over CPQ-uninstall — gebruik dit als basis: CPQ_CLEANUP_PLAN.md, CPQ_UNINSTALL_ERRORS_ANALYSIS.md, CPQ_UNINSTALL_ERRORS_CORRECT_ANALYSIS.md, scripts/cleanup/, deploy-empty/, manifest/, destructiveChanges-cpq-lightning-pages.xml.This repo contains substantial material on CPQ uninstall — use as a baseline: CPQ_CLEANUP_PLAN.md, CPQ_UNINSTALL_ERRORS_ANALYSIS.md, CPQ_UNINSTALL_ERRORS_CORRECT_ANALYSIS.md, scripts/cleanup/, deploy-empty/, manifest/, destructiveChanges-cpq-lightning-pages.xml.
  • Verifiëren dat alle conversies geslaagd zijn (geen openstaande referenties naar CPQ-records)Verify all conversions succeeded (no dangling references to CPQ records)
  • Flows op CPQ-objecten deactiveren via FlowDefinition API (activeVersionNumber = 0)Deactivate flows on CPQ objects via FlowDefinition API (activeVersionNumber = 0)
  • Soft-deleted custom fields permanent erasen via Setup UIPermanently erase soft-deleted custom fields via Setup UI
  • Profile page-layout assignments handmatig aanpassen (Tooling API ProfileLayout is read-only)Manually adjust profile page-layout assignments (Tooling API ProfileLayout is read-only)
  • Destructive deploy: CPQ Lightning Pages, custom velden die afhankelijk zijn van CPQDestructive deploy: CPQ Lightning Pages, custom fields dependent on CPQ
  • Package uninstall: Salesforce CPQ + Advanced ApprovalsPackage uninstall: Salesforce CPQ + Advanced Approvals
2.6 Reports, dashboards, profielen opnieuw mappenRe-map reports, dashboards, profiles
  • Reports/dashboards die op CPQ-objecten draaien herbouwen op standaard Quote/QLI + AccountProductPrice__cRebuild reports/dashboards based on CPQ objects on standard Quote/QLI + AccountProductPrice__c
  • Permission Sets toewijzen aan key-users en salesAssign Permission Sets to key users and sales
  • Lightning App + Quote-pagina’s als default voor sales-profielenLightning App + Quote pages set as default for sales profiles
2.7 Test op UATUAT testing
  • End-to-end test: nieuwe Quote → PDF → DocuSign → signedEnd-to-end test: new Quote → PDF → DocuSign → signed
  • Test op geconverteerde Quotes: kunnen open quotes verder bewerkt worden? Approvals re-evaluatie?Test on converted Quotes: can open quotes still be edited? Approvals re-evaluation?
  • Test multi-currency, korting in elke band, AccountProductPrice overrideTest multi-currency, discount in each band, AccountProductPrice override
  • UAT door key-users + sign-off door business vóór Blok 3UAT by key users + business sign-off before Block 3

1B.1.3 Blok 3 — Productie go-liveBlock 3 — Production go-live Live

Geleerde lessen uit Blok 2 verplicht verwerkenLessons learned from Block 2 must be incorporated Blok 3 herhaalt Blok 2 op productie. Geen nieuwe stappen verzinnen op productie — alle scripts, freeze-procedures en rollback-snapshots zijn op UAT al gevalideerd. Pas op productie pas zijn van Blok 2 geleerde fixes verwerkt.Block 3 repeats Block 2 on production. Do not invent new steps on production — all scripts, freeze procedures and rollback snapshots are already validated on UAT. Only fixes learned from Block 2 are applied on production.
Stappenplan Blok 3Block 3 steps
  1. Cutover-window plannenPlan cutover windowweekend / avond, communicatie naar sales en klantenweekend / evening, communicate to sales and customers
  2. Read-only freezeRead-only freeze op productie-CPQ; lopende DocuSign envelopes finaliserenon production CPQ; finalise running DocuSign envelopes
  3. Productie snapshotProduction snapshot voor rollback (data export + sandbox refresh)for rollback (data export + sandbox refresh)
  4. Deploy nieuwe metadataDeploy new metadata naar productie (zelfde package als Blok 2)to production (same package as Block 2)
  5. Initial syncInitial sync vanuit Exact: Product2 (Hardware), Pricebook+PBE per tier, AccountProductPrice__cfrom Exact: Product2 (Hardware), Pricebook+PBE per tier, AccountProductPrice__c
  6. Data-conversie scripts draaienRun data conversion scripts (zelfde scripts als UAT, geverifieerd)(same scripts as UAT, verified)
  7. CPQ + Advanced Approvals uninstallCPQ + Advanced Approvals uninstall (zelfde procedure als UAT)(same procedure as UAT)
  8. Smoke-tests op productieSmoke tests on production — kritieke flows (nieuwe Quote, geconverteerde Quote, PDF, DocuSign signed-back)— critical flows (new Quote, converted Quote, PDF, DocuSign signed-back)
  9. Go-liveGo-live + hyper-care periode (paar dagen extra ondersteuning, oncall sales)+ hyper-care period (few days extra support, sales oncall)
  10. Mapping-tabel + rollback-snapshot bewarenRetain mapping table + rollback snapshot voor minimaal de hyper-care periodefor at least the hyper-care period

1B.2 Fase 2 — Uitbreiding (volledige sales- & service-cyclus)Phase 2 — Extension (full sales & service cycle)

Start na succesvolle Fase 1 go-liveStarts after successful Phase 1 go-live Fase 2 voegt alles toe wat innovatief en nieuw is t.o.v. het oude CPQ. Aparte business case, eigen planning. Onderstaande inhoud is dezelfde als beschreven in de hoofdstukken 3 t/m 10 en de Build List (sectie 13). Hier alleen het overzicht.Phase 2 adds everything that is innovative and new compared to the old CPQ. Separate business case, own planning. The content below mirrors what is described in chapters 3-10 and the Build List (section 13). This is just the summary.
Hoofdthema’s Fase 2Phase 2 main themes
  • ContractregistratieCustomerAgreement__c + WarrantyOverride__c; klantspecifieke parameters (warranty overrides, SLA-niveau, betaaltermijnen, etc.)
  • Nieuwe producttypenNew product types — Extended Warranty (% van HW), SLA (Bronze/Silver/Gold), Software Licenses, Professional Services, Consultancy, IP Licenses; incl. Globe-inrichting (BU 10)incl. Globe configuration (BU 10)
  • Product2 nieuwe veldenProductType__c, IsPhysicalProduct__c, IsWarrantyBearing__c, BaseWarrantyMonths__c, IsEligibleForExtendedWarranty__c, PricingUnit__c, RequiresActivation__c, SLAFlavor__c
  • ExtendedWarrantyMapping__c + 12 mappings + extendedWarrantySelector LWC
  • CMDTProductTypeBehavior__mdt, WarrantyDefault__mdt, IntegrationSetting__mdt
  • Quote → Order conversie + DeliverySchedule__c (split per leveringsmaand, alleen fysieke producten)
  • MuleSoft Outbound (Order → Exact) + OrderIntegrationStatus__c (New/Sending/Sent/Accepted/Error)
  • Asset-creatie vanuit delivery-confirmaties; AssetWarrantyEvent__c, AssetWarrantyCalculator
  • WarrantyOverride__c op CustomerAgreement (klantspecifieke garantie-afwijkingen)
  • ServiceActivation__c voor SLA/Software activatie na Order; warrantyTimeline + serviceActivationList LWC
  • Case ↔ Asset koppeling, automatische warranty-validatie bij repair-cases
  • Inventory sync, dashboards, subscription-billing, auto-renewal SLA’s

1B.3 AandachtspuntenAttention points

  • Approval-engine repo-analyse: vroeg in Blok 1 starten met analyse van objecten/velden van de DMS CMS Solution Technetix approval-engine, zodat het conversie-script in Blok 2 op tijd klaar is.Approval engine repo analysis: start early in Block 1 with analysis of DMS CMS Solution Technetix approval engine objects/fields, so the conversion script is ready in time for Block 2.
  • MuleSoft afstemming met Twan: contract van het AccountProductPrice__c sync-endpoint (payload, External ID structuur, frequency) tijdig afstemmen.MuleSoft alignment with Twan: align the AccountProductPrice__c sync endpoint contract (payload, External ID structure, frequency) early.
  • Geen scope-creep van Fase 2 in Fase 1: Extended Warranty, SLA, Quote → Order, Assets — expliciet uit Fase 1 houden om go-live niet te vertragen.No scope creep from Phase 2 into Phase 1: Extended Warranty, SLA, Quote → Order, Assets — explicitly kept out of Phase 1 to avoid delaying go-live.
  • Multi-currency vanaf dag 1: bestaande CPQ heeft multi-currency, dus Fase 1 moet dit ook ondersteunen op Pricebook + AccountProductPrice + Quote.Multi-currency from day 1: existing CPQ has multi-currency, so Phase 1 must also support it on Pricebook + AccountProductPrice + Quote.
  • Order-aanmaak in Fase 1: orders worden tijdens Fase 1 nog handmatig in Exact aangemaakt door operations (zoals huidige werkwijze vóór Quote → Order automation in Fase 2).Order creation in Phase 1: orders continue to be created manually in Exact by operations during Phase 1 (current way of working before Quote → Order automation in Phase 2).
2

Systeemlandschap & IntegratieSystem Landscape & Integration

2.1 Systeem OverzichtSystem Overview

Exact Globe (System of Record) Products • Prices • Stock MuleSoft (Middleware) API Gateway • Transform Salesforce (Sales & Service) Quotes • Orders • Assets SQL Garantie DB Serienummers • Garantie Products, Prices Orders Inbound sync Outbound orders SN + Garantie (toekomstig) SN + leverdata (toekomstig via MuleSoft)
Figuur 2.1 — Systeemlandschap: Exact Globe ↔ MuleSoft ↔ Salesforce + SQL Garantie DBFigure 2.1 — System Landscape: Exact Globe ↔ MuleSoft ↔ Salesforce + SQL Warranty DB
2.2 Systeemrollen2.2 System Roles
SysteemSystemEigenaarOwnerPrimaire RolPrimary Role
SalesforceSales / Customer ServiceVerkoop (Quote→Order), 360° klantview, garantie-overzichtSales (Quote→Order), 360° customer view, warranty overview
Exact GlobeOperations / FinanceOrder processing, inpak, verzending, facturatieOrder processing, packing, shipping, invoicing
SQL Garantie DatabaseOperations / EngineeringSerienummer registratie, garantie tracking per serienummerSerial number registration, warranty tracking per serial number
MuleSoftIT / IntegrationMiddleware tussen alle systemenMiddleware between all systems
2.3 Integratie Patronen2.3 Integration Patterns 5 flows
RichtingDirectionWatWhatBron → DoelSource → Target
InboundProducten, pricebooksProducts, pricebooksExact → MuleSoft → Salesforce
InboundVoorraadbalancesInventory balancesExact → MuleSoft → Salesforce nog niet opgezetnot yet configured
InboundSerienummers, leverdata, garantieSerial numbers, delivery data, warrantySQL Garantie DB → MuleSoft → Salesforce toekomstig
InboundDelivery confirmations per deelleveringDelivery confirmations per partial deliveryExact + SQL DB → MuleSoft → Salesforce toekomstig
OutboundOrders met orderlines (incl. Ext. Warranty)Orders with order lines (incl. Ext. Warranty)Salesforce → MuleSoft → Exact

Idempotency: Alle integraties gebruiken externe keys (TechnetixId__c / ExactId__c) voor upserts.All integrations use external keys (TechnetixId__c / ExactId__c) for upserts.

2.4 Error Handling & Retry2.4 Error Handling & Retry
  • Inbound: Upsert op external ID, log errors in IntegrationLog__c
  • Outbound: Status velden (OrderIntegrationStatus__c), retry queueStatus fields (OrderIntegrationStatus__c), retry queue
  • Idempotency: Altijd unieke keys meesturen (SF Id + line number)
3

Producten & ClassificatieProducts & Classification

Belangrijk — Exact Globe inrichting:Important — Exact Globe configuration: De productmaster in Exact Globe bevat momenteel alleen hardware producten (BU 05-09). Niet-hardware producten moeten nog in Globe worden ingericht.The product master in Exact Globe currently contains only hardware products (BU 05-09). Non-hardware products still need to be set up in Globe.
Globe Inrichting Status per ProducttypeGlobe Configuration Status per Product Type 6 van 7 nog niet ingerichtof 7 not yet configured
ProductTypeStatus GlobeOpmerkingRemark
Hardware (05-09)IngerichtConfiguredProducten en prijzen worden gesynchroniseerd via MuleSoftProducts and prices are synchronised via MuleSoft
Software (1001-01)Nog nietNot yetProductcodes en licentiestructuur moeten worden aangemaaktProduct codes and licence structure must be created
Extended Warranty (10xx-04)Nog nietNot yetPercentage-berekening in Salesforce via ExtendedWarrantyMapping__cPercentage calculation in Salesforce via ExtendedWarrantyMapping__c
Professional Services (10xx-06)Nog nietNot yetUurtarief/dagtarief producten moeten worden aangemaaktHourly/daily rate products must be created
SLA (1001-03)Nog nietNot yetJaarlijkse SLA producten (Bronze/Silver/Gold)Annual SLA products (Bronze/Silver/Gold)
Consultancy (10xx-05)Nog nietNot yetDagtarief productenDaily rate products
Training (10xx-06)Nog nietNot yetDagtarief productenDaily rate products

3.1 Producthiërarchie (uit Exact Globe)Product Hierarchy (from Exact Globe)

PMCore__c (BU)2 cijfers (bijv. "05") SeniorFamily__c4 cijfers (bijv. "0504") JuniorFamily__c6 cijfers (bijv. "050407") InfantFamily__c8 cijfers (optioneel) Junior Code Decodering: XX YY ZZ XX = Business Unit YY = Senior groep ZZ = Subcategorie
Figuur 3.1 — 4-niveau producthiërarchie met 6-cijferige Junior code als leidend classificatieniveauFigure 3.1 — 4-level product hierarchy with 6-digit Junior code as leading classification level
3.2 Business Units & Producttypen3.2 Business Units & Product Types

Hardware Business Units (prefix 05-09)Hardware Business Units (prefix 05-09)

PrefixBusiness UnitSubcategorie suffixenSubcategory suffixes
05Broadband Cable01=Active, 02=Passive, 03=Filters, 04=Repeaters, 05=Upgrades, 06=Cables, 07=NeuronX HW, 08=MoCA/TFC, 09=Wall Outlets, 99=Overig01=Active, 02=Passive, 03=Filters, 04=Repeaters, 05=Upgrades, 06=Cables, 07=NeuronX HW, 08=MoCA/TFC, 09=Wall Outlets, 99=Other
06Fiber Networks01=Active, 02=Passive, 03=Installation
07Wireless Communications01=VS Modules, 02=Active Equipment
08Powering Solutions01=Power Supplies, 03=Distribution, 04=Batteries
09Overig / LegacyOther / Legacy01=Miscellaneous

Services & Software Business Unit (prefix 10)Services & Software Business Unit (prefix 10)

SuffixSubcategorieSubcategoryProductTypeFysiek?Physical?
01Software LicensesSoftwareNeeNo
03Service Level AgreementsSLANeeNo
04Extended WarrantyExtendedWarrantyNeeNo
05ConsultancyConsultancyNeeNo
06Professional Services / TrainingProfessionalServiceNeeNo
07IP Licenses / OtherIPLicenseNeeNo

BU 10 is onderverdeeld in Senior Families: 1001 = BU 05, 1002 = BU 06, 1003 = BU 07, 1004 = BU 08.BU 10 is subdivided into Senior Families: 1001 = BU 05, 1002 = BU 06, 1003 = BU 07, 1004 = BU 08.

3.3 Product Type Afleidingsregels3.3 Product Type Derivation Rules
IF JuniorFamily__c begint met "10":
    IF laatste 2 cijfers = "01" → ProductType = "Software"
    IF laatste 2 cijfers = "03" → ProductType = "SLA"
    IF laatste 2 cijfers = "04" → ProductType = "ExtendedWarranty"
    IF laatste 2 cijfers = "05" → ProductType = "Consultancy"
    IF laatste 2 cijfers = "06" → ProductType = "ProfessionalService"
    IF laatste 2 cijfers = "07" → ProductType = "IPLicense"
ELSE (05-09):
    ProductType = "Hardware"
3.4 Product2 Data Model3.4 Product2 Data Model Bestaand + NieuwExisting + New

Bestaande velden (in productie)Existing fields (in production)

VeldFieldTypeOmschrijvingDescription
ProductCodeTextExact product code
TechnetixId__cText(100) External IDUnieke Exact IDUnique Exact ID
Model__cText(20)Productmodel codeProduct model code
PMCore__cPicklistBusiness Unit (5/6/7/8/9/10)
SeniorFamiliy__cPicklistSenior Family code (4 cijfers)Senior Family code (4 digits)
JuniorFamily__cPicklistJunior Family code (6 cijfers)Junior Family code (6 digits)
InfantFamily__cPicklistInfant Family code (8 cijfers, optioneel)Infant Family code (8 digits, optional)
IsSerialNumberItem__cCheckboxSerienummer verplicht bij leveringSerial number required at delivery
IsActiveCheckboxProduct actiefProduct active

Nieuwe velden (toe te voegen)New fields (to be added)

VeldFieldTypeOmschrijvingDescription
ProductType__cPicklistHardware / Software / SLA / ExtendedWarranty / ProfessionalService / Consultancy / IPLicense
IsPhysicalProduct__cCheckboxTrue voor hardware. Bepaalt of fysieke levering nodig isTrue for hardware. Determines whether physical delivery is needed
IsWarrantyBearing__cCheckboxProduct draagt standaard garantieProduct carries standard warranty
BaseWarrantyMonths__cNumberStandaard garantie in maanden (standaard 12)Default warranty in months (default 12)
IsEligibleForExtendedWarranty__cCheckboxKomt in aanmerking voor garantie-verlengingEligible for warranty extension
ExtendedWarrantyBU__cTextBU-code voor van toepassing zijnde Ext. Warranty productenBU code for applicable Ext. Warranty products
PricingUnit__cPicklistUnit / Hour / Day / Month / Year / License
ExtendedWarrantyPercent__cPercentPercentage op hardware product (4%, 9%, 15%)Percentage on hardware product (4%, 9%, 15%)
ExtendedWarrantyYears__cNumberAantal jaren verlenging (1, 3, 5)Number of years extension (1, 3, 5)
RequiresActivation__cCheckboxVereist activatieproces na verkoopRequires activation process after sale
SLAFlavor__cPicklistBronze / Silver / Gold

ProductType kenmerken overzichtProductType characteristics overview

ProductTypeIsPhysicalIsWarrantyBearingPricingUnitActivationVoorbeeldExample
HardwareJaYesJaYesUnitNeeNoNXT-01, Amplifiers
SoftwareNeeNoNeeNoLicenseJaYesNX-NMS-STARTER
SLANeeNoNeeNoYearJaYesNX-SUPPORT-G
ExtendedWarrantyNeeNoNeeNoUnit (% van HW)Unit (% of HW)NeeNoEXT-WAR-3Y-BC
ProfessionalServiceNeeNoNeeNoHour / DayNeeNoPROF-SERV-1H-BC
ConsultancyNeeNoNeeNoDayNeeNoCONSULTANCY-1D-FN
IPLicenseNeeNoNeeNoLicenseNeeNoSPW244-IP-LICENSE
3.5 Extended Warranty Structuur3.5 Extended Warranty Structure 12 mappings

Garantie op Junior Family niveauWarranty at Junior Family level

De garantietermijn wordt bepaald op Junior Family niveau (niet per individueel product). Alle producten binnen dezelfde Junior Family hebben dezelfde garantietermijn.The warranty period is determined at Junior Family level (not per individual product). All products within the same Junior Family have the same warranty period.

Junior Family "050401" (Broadband Cable → Active Equipment)
  → IsWarrantyBearing = TRUE
  → BaseWarrantyMonths = 12
  → IsEligibleForExtendedWarranty = TRUE
  → ExtendedWarrantyBU = "05" (Broadband Cable)

Koppeling Extended Warranty ↔ Hardware BULink Extended Warranty ↔ Hardware BU

Ext. Warranty SeniorHardware BUNaamName
1001 (Junior suffix 04)05Broadband Cable
1002 (Junior suffix 04)06Fiber Networks
1003 (Junior suffix 04)07Wireless Communications
1004 (Junior suffix 04)08Powering Solutions

ExtendedWarrantyMapping__c (Custom Object)

Koppelt Ext. Warranty producten aan de juiste hardware BU, met percentage en duur. De prijs wordt berekend in Salesforce als percentage van de hardware productprijs.Links Ext. Warranty products to the correct hardware BU, with percentage and duration. The price is calculated in Salesforce as a percentage of the hardware product price.

VeldFieldTypeOmschrijvingDescription
ExtensionProduct__cLookup(Product2)Het Extended Warranty productThe Extended Warranty product
TargetBU__cTextHardware BU codeHardware BU code
TargetSeniorFamilies__cLong TextOptioneel: specifieke Senior families (comma-separated)Optional: specific Senior families (comma-separated)
ExtensionYears__cNumberAantal jaren verlenging (1, 3, 5)Number of years extension (1, 3, 5)
ExtensionMonths__cNumberAantal maanden (12, 36, 60)Number of months (12, 36, 60)
PercentOfHardware__cPercentPercentage van hardware prijs (4%, 9%, 15%)Percentage of hardware price (4%, 9%, 15%)
IsActive__cCheckboxActief ja/neeActive yes/no

Configuratiedata (12 records — 4 BUs × 3 periodes)Configuration data (12 records — 4 BUs × 3 periods)

ProductBUYearsMonthsPercent
EXT-WAR-1Y-BC051124%
EXT-WAR-3Y-BC053369%
EXT-WAR-5Y-BC0556015%
EXT-WAR-1Y-FN061124%
EXT-WAR-3Y-FN063369%
EXT-WAR-5Y-FN0656015%
EXT-WAR-1Y-WC071124%
EXT-WAR-3Y-WC073369%
EXT-WAR-5Y-WC0756015%
EXT-WAR-1Y-PS081124%
EXT-WAR-3Y-PS083369%
EXT-WAR-5Y-PS0856015%
3.6 Pricing Tiers & Pricebooks3.6 Pricing Tiers & Pricebooks
  • Pricebook2: Eén pricebook per pricing tier (Tier A, B, C, etc.). Onderhouden vanuit Exact via MuleSoft.
  • PricebookEntry: Productprijs per tier. Upsert op Pricebook2Id + Product2Id.
  • Account koppeling: PricingTier__c, DefaultPricebook__c (Lookup), WarehouseGroup__c (Lookup)
3.7 Product & Pricing Sync (Exact → Salesforce)3.7 Product & Pricing Sync (Exact → Salesforce)
Status:Status: De product- en pricebook sync werkt momenteel alleen voor hardware producten (BU 05-09). Niet-hardware producten kunnen pas worden gesynchroniseerd nadat deze in Exact Globe zijn ingericht.

Inbound API

POST /api/salesforce/products
Body: [
  {
    "technetixId": "19016488",
    "code": "EXT-WAR-1Y-BC",
    "name": "1 YEAR EXTENDED WARRANTY BROADBAND CABLE",
    "model": "EXT-WAR-1Y-BC",
    "pmCore": "10",
    "seniorFamily": "1001",
    "juniorFamily": "100104",
    "isSerialNumberItem": false,
    "isActive": true
  }
]

Pricebook Sync API

POST /api/salesforce/pricebooks
Body: {
  "pricebookName": "Tier A",
  "isActive": true,
  "entries": [
    { "technetixProductId": "19016488", "unitPrice": 150.00, "currencyCode": "EUR" }
  ]
}

Inventory Sync API nog niet opgezetnot yet configured

POST /api/salesforce/inventory
Body: [
  {
    "exactWarehouseId": "WH-001",
    "technetixProductId": "19016488",
    "onHandQty": 100,
    "reservedQty": 25,
    "snapshotDateTime": "2026-03-02T14:30:00Z"
  }
]

Sync acties in SalesforceSync actions in Salesforce

  1. Upsert Product2 op TechnetixId__cUpsert Product2 on TechnetixId__c
  2. Vul ProductType__c en IsPhysicalProduct__c op basis van Junior code afleidingPopulate ProductType__c and IsPhysicalProduct__c based on Junior code derivation
  3. Vul IsWarrantyBearing__c en BaseWarrantyMonths__cPopulate IsWarrantyBearing__c and BaseWarrantyMonths__c
  4. Upsert Pricebook2 per pricing tierUpsert Pricebook2 per pricing tier
  5. Upsert PricebookEntry per (Pricebook2 + Product2)Upsert PricebookEntry per (Pricebook2 + Product2)
  6. Upsert ExtendedWarrantyMapping__c voor garantie-productenUpsert ExtendedWarrantyMapping__c for warranty products

Belangrijk:Important: Gebruik IsActive voor de-activatie (geen deletes).Use IsActive for deactivation (no deletes).

4

Contractregistratie & KlantafsprakenContract Registration & Customer Agreements

Waarom als eerste:Why first: Klantafspraken bepalen de parameters waarmee het gehele systeem werkt. Zonder vastgelegde contracten berekent het systeem standaard waarden die mogelijk contractueel afwijken. Dit moet helder zijn vóórdat het verkoopproces, ordercreatie en garantieberekening correct kunnen functioneren.Customer agreements determine the parameters with which the entire system operates. Without recorded contracts, the system calculates default values that may deviate contractually. This must be clear before the sales process, order creation and warranty calculation can function correctly.

4.1 Het probleemThe problem

Technetix heeft met bepaalde klanten contractuele afspraken die afwijken van de standaard:Technetix has contractual agreements with certain customers that deviate from the standard:

  • Afwijkende base garantie: Klant X heeft contractueel 24 maanden i.p.v. 12Deviating base warranty: Customer X contractually has 24 months instead of 12
  • SLA-afspraken: Specifieke response/fix tijden (al in productie via Customer_SLA__c)SLA agreements: Specific response/fix times (already in production via Customer_SLA__c)
  • Onbekende contractparameters die invloed hebben op het verkoop- en leveringsprocesUnknown contract parameters that affect the sales and delivery process
Concreet risico:Concrete risk: Orders worden straks automatisch aangemaakt. Als een klant contractueel 24 maanden garantie heeft maar dit niet is vastgelegd, berekent het systeem 12 maanden. Geen handmatige correctie meer mogelijk.Orders will soon be created automatically. If a customer contractually has 24 months warranty but this is not recorded, the system calculates 12 months. No manual correction possible.
4.2 Huidige Situatie vs. Nieuw4.2 Current Situation vs. New BLOKKERBLOCKER
ComponentComponentStatusDetails
Customer_SLA__cBestaatExists2 records in productie. Gekoppeld aan Cases.2 records in production. Linked to Cases.
Customer_SLA__c → CaseBestaatExistsResponse/fix tijden worden al toegepast.Response/fix times are already being applied.
CustomerAgreement__cNieuwNewParaplu-object voor raamovereenkomsten.Umbrella object for framework agreements.
WarrantyOverride__cNieuwNewKlant-specifieke garantie-afwijkingen.Customer-specific warranty deviations.
WarrantyOverrideResolverNieuwNewApex class voor override lookup.Apex class for override lookup.
ContractinhoudOnbekendUnknownBLOKKERBLOCKERinput van Business/Legal vereist.input from Business/Legal required.
4.3 Design: Twee-lagen Model (diagram)4.3 Design: Two-Layer Model (diagram)
Account (Klant) CustomerAgreement__c (Raamovereenkomst) Customer_SLA__c BESTAAND — wordt child WarrantyOverride__c NIEUW — garantie overrides ??? Onbekend BLOKKER — input vereist Response/fix tijden Support level, werkdagen Afwijkende base garantie Per productgroep/BU INPUT VAN BUSINESS/ LEGAL VEREIST
Figuur 4.1 — Twee-lagen model: CustomerAgreement__c als paraplu met sub-agreement typesFigure 4.1 — Two-layer model: CustomerAgreement__c as umbrella with sub-agreement types
4.4 CustomerAgreement__c Data Model — Alle contractparameters4.4 CustomerAgreement__c Data Model — All contract parameters

Identiteit & looptijdIdentity & validity

VeldFieldTypeOmschrijvingDescription
NameAuto NumberAGR-{0000}
Account__cLookup(Account)KlantCustomer
ParentAgreement__cLookup(CustomerAgreement__c)Bovenliggend raamcontract (voor sub-agreements)Parent framework agreement (for sub-agreements)
AgreementType__cPicklistFramework / Project / ProductLine / Standard
Status__cPicklistDraft / Active / Expired / Terminated
StartDate__cDateIngangsdatumEffective date
EndDate__cDateEinddatum (leeg = onbepaalde tijd)End date (empty = indefinite)
AutoRenew__cCheckboxAutomatisch verlengen bij verstrijkenAuto-renew upon expiry
RenewalNoticeDays__cNumberAantal dagen voor einddatum dat Sales een alert ontvangtNumber of days before end date that Sales receives an alert
ContractReference__cTextExtern contractnummer (referentie naar Legal documentatie)External contract number (reference to Legal documentation)
Notes__cLong TextOpmerkingen / bijzonderhedenNotes / special conditions

Pricing & kortingPricing & discount

VeldFieldTypeOmschrijvingDescription
PricebookId__cLookup(Pricebook2)Overeengekomen prijslijst voor deze klant. Overschrijft de Account default.Agreed pricebook for this customer. Overrides the Account default.
MaxDiscountPct__cPercentMaximaal toegestane korting zonder escalatie voor deze klant. Overschrijft de globale kortingsdrempel.Maximum allowed discount without escalation for this customer. Overrides the global discount threshold.
PricingNotes__cText AreaToelichting op bijzondere prijsafsprakenNotes on special pricing agreements

Betalings- en leveringsvoorwaardenPayment & delivery terms

VeldFieldTypeOmschrijvingDescription
PaymentTermsDays__cNumberOvereengekomen betaaltermijn in dagen (bijv. 30, 60). Indien leeg: standaard Technetix-voorwaarden.Agreed payment term in days (e.g. 30, 60). If empty: standard Technetix terms apply.
PaymentTermsNotes__cText AreaAfwijkende betalingsconstructies (bijv. deelbetaling, vooruitbetaling)Non-standard payment arrangements (e.g. instalment, prepayment)
IncotermsCode__cPicklistOvereengekomen Incoterm (EXW / DAP / DDP / FCA / …). Indien leeg: standaard Technetix.Agreed Incoterm (EXW / DAP / DDP / FCA / …). If empty: standard Technetix.
DeliveryNotes__cText AreaBijzondere leveringsafsprakenSpecial delivery conditions

Volume- en afnameverplichtingenVolume & purchase commitments

VeldFieldTypeOmschrijvingDescription
MinOrderValue__cCurrencyMinimale contractuele afname (bedrag) binnen de looptijd of per periode.Minimum contractual purchase value within the term or per period.
MinOrderPeriod__cPicklistPeriode waarover MinOrderValue geldt: Per maand / Per kwartaal / Per jaar / Totaal over looptijdPeriod over which MinOrderValue applies: Per month / Per quarter / Per year / Total over term
CommitmentNotes__cText AreaToelichting op product-specifieke afnameverplichtingenNotes on product-specific volume obligations

Afwijkingen van standaard T&CDeviations from standard T&C

VeldFieldTypeOmschrijvingDescription
HasTCDeviations__cCheckboxVlag: dit contract bevat afwijkingen van standaard Technetix T&C. Zorgt voor zichtbare waarschuwing op Quote.Flag: this contract contains deviations from standard Technetix T&Cs. Triggers a visible warning on the Quote.
TCDeviationSummary__cLong TextSamenvatting van de T&C-afwijkingen (voor weergave op Quote / Order). Geen vervanging voor het juridisch document.Summary of T&C deviations (displayed on Quote / Order). Not a replacement for the legal document.
Opmerking:Note: Warranty-afspraken en SLA-afspraken worden niet op het CustomerAgreement__c record zelf opgeslagen, maar in aparte child-records: WarrantyOverride__c (zie 4.5) en Customer_SLA__c. Dit maakt het mogelijk meerdere product-specifieke overrides te registreren per contract.Warranty agreements and SLA agreements are not stored on the CustomerAgreement__c record itself, but in separate child records: WarrantyOverride__c (see 4.5) and Customer_SLA__c. This allows multiple product-specific overrides to be registered per contract.
4.4b Logica: Geen contract of verlopen contract4.4b Logic: No contract or expired contract Nader te bepalenTo be confirmed

Het systeem moet weten wat er moet gebeuren als een klant geen actief CustomerAgreement__c heeft op het moment dat een quote of order wordt aangemaakt. Er zijn drie scenario's:The system must know what to do when a customer has no active CustomerAgreement__c at the time a quote or order is created. There are three scenarios:

ScenarioScenarioSituatieSituationHuidig voorstelCurrent proposalBeslissing vereist vanDecision required from
A Geen contract aanwezig — klant heeft nooit een raamovereenkomst gehadNo contract present — customer has never had a framework agreement Systeem staat bestellen toe op basis van standaard Technetix-voorwaarden: standaard prijslijst, standaard betaal- en leveringsvoorwaarden, standaard garantie. Quote wordt gemarkeerd met label "No framework agreement — standard terms apply".System allows ordering under standard Technetix terms: standard pricebook, standard payment and delivery conditions, standard warranty. Quote is flagged with label "No framework agreement — standard terms apply". Legal / SalesLegal / Salesbevestigen of dit is toegestaan en onder welke exacte voorwaardenconfirm whether this is permitted and under which exact conditions
B Contract verlopen — er was een actief contract maar de einddatum is verstreken en niet verlengdContract expired — an active contract existed but the end date has passed and it has not been renewed Systeem staat bestellen toe op basis van standaard Technetix-voorwaarden (niet de verlopen contractvoorwaarden). Quote wordt gemarkeerd met label "Contract expired [datum] — standard terms apply". Sales ontvangt een alert. Optioneel: hogere prijslijst activeerbaar per klant (NoContractPricebook__c).System allows ordering under standard Technetix terms (not the expired contract terms). Quote is flagged with label "Contract expired [date] — standard terms apply". Sales receives an alert. Optional: a higher-rate pricebook can be activated per customer (NoContractPricebook__c). Legal / SalesLegal / Salesbepalen of verlopen contracten blokkeren of alleen waarschuwen; of hogere tarieven van toepassing zijndetermine whether expired contracts block or only warn; whether higher rates apply
C Contract beëindigd (Terminated) — contract is actief opgezegdContract terminated — contract was actively cancelled Systeem blokkeert het aanmaken van een nieuwe quote totdat Sales een bewuste beslissing neemt. Quote kan handmatig worden vrijgegeven door een Sales Manager. Dit voorkomt ongewenst bestellen zonder opnieuw nadenken over de klantrelatie.System blocks creation of a new quote until Sales makes a deliberate decision. Quote can be manually released by a Sales Manager. This prevents inadvertent ordering without reconsidering the customer relationship. Legal / SalesLegal / Salesbevestigen of blokkering gewenst isconfirm whether blocking is desired

Implementatie: ContractStatus veld op AccountImplementation: ContractStatus field on Account

Om de quote-logica eenvoudig te houden, wordt de contractstatus samengevat als een formula-veld op het Account:To keep the quote logic simple, the contract status is summarised as a formula field on the Account:

Account.ActiveContractStatus__c (Formula / Text)
  = "Active"      — actief CustomerAgreement__c gevonden, binnen looptijd
  = "Expired"     — meest recente CustomerAgreement__c is verlopen
  = "Terminated"  — meest recente CustomerAgreement__c is beëindigd
  = "None"        — geen CustomerAgreement__c record aanwezig

Gebruikt door:
  QuoteTriggerHandler  → waarschuwingslabel op Quote
  discountValidator LWC → toon juiste pricing context aan sales rep
  OrderTriggerHandler  → blokkeer bij "Terminated" (scenario C)
Open beslissing:Open decision: Of klanten zonder of met verlopen contract een hogere prijslijst krijgen (bijv. een apart "Standard Rate" pricebook) is een commerciële keuze die door Sales/Legal moet worden genomen. Het systeem ondersteunt dit via het veld NoContractPricebook__c op het Account, maar activeert dit alleen als het expliciet is geconfigureerd.Whether customers without or with an expired contract get a higher rate pricebook (e.g. a separate "Standard Rate" pricebook) is a commercial decision to be made by Sales/Legal. The system supports this via the field NoContractPricebook__c on the Account, but only activates it if explicitly configured.
4.5 WarrantyOverride__c Data Model4.5 WarrantyOverride__c Data Model
VeldFieldTypeOmschrijvingDescription
NameAuto NumberWO-{0000}
CustomerAgreement__cMaster-DetailBovenliggend contractParent contract
Account__cLookup(Account)Klant (formula, voor rapportage)Customer (formula, for reporting)
Scope__cPicklistAllProducts / BusinessUnit / JuniorFamily / SpecificProduct
BusinessUnit__cTextBU code (alleen bij Scope = BusinessUnit)BU code (only when Scope = BusinessUnit)
JuniorFamily__cTextJunior Family code (alleen bij Scope = JuniorFamily)Junior Family code (only when Scope = JuniorFamily)
Product__cLookup(Product2)Specifiek product (alleen bij Scope = SpecificProduct)Specific product (only when Scope = SpecificProduct)
OverrideBaseWarrantyMonths__cNumberAfwijkende base garantie in maandenOverride base warranty in months
IsActive__cCheckboxActiefActive
StartDate__c / EndDate__cDateGeldigheidsperiodeValidity period

Scope hiërarchie (meest specifieke wint)Scope hierarchy (most specific wins)

1. SpecificProduct> 2. JuniorFamily> 3. BusinessUnit> 4. AllProducts

VoorbeeldExample

Klant: Cablemas
CustomerAgreement: AGR-0001 (Active)

  WO-0001: Scope = BusinessUnit, BU = "05", OverrideMonths = 24
    → Alle BC producten: 24 mnd base garantie
  WO-0002: Scope = SpecificProduct, Product = NXT-01, OverrideMonths = 36
    → NXT-01: 36 mnd (wint van BU override)
4.6 Impact op Garantie Berekening4.6 Impact on Warranty Calculation
FUNCTION getBaseWarrantyMonths(Account, Product):
  // Check actief CustomerAgreement
  agreement = query CustomerAgreement__c WHERE Account, Active, within dates

  IF agreement != NULL:
    // Zoek meest specifieke WarrantyOverride
    overrides = query WarrantyOverride__c WHERE agreement, Active
                ORDER BY Scope (SpecificProduct > JuniorFamily > BU > All)

    FOR each override:
      IF matches Product → RETURN override.OverrideBaseWarrantyMonths__c

  // Geen override → standaard garantie
  RETURN Product.BaseWarrantyMonths__c
4.7 Sub-Agreement Types — Overzicht & status4.7 Sub-Agreement Types — Overview & status

De meeste contractparameters worden direct op CustomerAgreement__c opgeslagen (zie 4.4). De volgende sub-agreement typen worden als aparte child-objecten gemodelleerd omdat ze meerdere records per klant kunnen hebben (bijv. meerdere product-specifieke warranty overrides):Most contract parameters are stored directly on CustomerAgreement__c (see 4.4). The following sub-agreement types are modelled as separate child objects because they can have multiple records per customer (e.g. multiple product-specific warranty overrides):

ObjectObjectVoorbeeld parametersExample parametersImpact opImpact onStatus
WarrantyOverride__cAfwijkende base garantie per product / BU / familyNon-standard base warranty per product / BU / familyAsset aanmaak, garantieberekeningAsset creation, warranty calculationGeplandPlanned
Customer_SLA__cResponse- en fix-tijden, support scope, werkdagenResponse and fix times, support scope, working daysCases, AssetsCases, AssetsBestaat alAlready exists
Overig — nader te bepalenOther — to be determinedProductlijn-specifieke prijsafspraken, volume-commitments per productProduct-line specific pricing, per-product volume commitmentsQuote, OrderQuote, OrderInput vereistInput required

De definitieve set sub-agreement typen wordt bepaald op basis van de contractparameter-inventarisatie door Legal en Sales.The definitive set of sub-agreement types will be determined based on the contract parameter inventory from Legal and Sales.

4.8 Blokkerende Afhankelijkheid4.8 Blocking Dependency BLOKKERBLOCKER
AspectStatusImpact
Welke klanten hebben afwijkende base garantie?Which customers have a non-standard base warranty?OnbekendUnknownSysteem past standaard garantie toe — mogelijk te kortSystem applies default warranty — may be too short
Welke producten/productgroepen zijn betrokken?Which products/product groups are involved?OnbekendUnknownNodig voor WarrantyOverride__c recordsRequired for WarrantyOverride__c records
Overige contractparameters met procesimpact?Other contract parameters with process impact?OnbekendUnknownOnmogelijk te bepalen welke sub-agreement types nodig zijnImpossible to determine which sub-agreement types are needed
Contracten met begin- en einddatum?Contracts with start and end date?OnbekendUnknownNodig voor CustomerAgreement__c recordsRequired for CustomerAgreement__c records
Gevraagde actie:Required action:
  1. Contracten aanleveren van klanten met afwijkende afsprakenSubmit contracts from customers with non-standard agreements
  2. Overzicht van alle contractparameters met impact op garantie, pricing, levering, betalingOverview of all contract parameters with impact on warranty, pricing, delivery, payment
  3. Per parameter: welke klanten, welke producten, welke waarden, begin/einddatumPer parameter: which customers, which products, which values, start/end date

Advies:Recommendation: Plan een workshop met Sales, Legal en Operations om bovenstaande helder te krijgen.Plan a workshop with Sales, Legal and Operations to clarify the above.

5

Verkoopproces: OfferteSales Process: Quote

5.1 Quote Data Model5.1 Quote Data Model Quote + QLI + DeliverySchedule

Quote (Standaard, uitgebreid)Quote (Standard, extended)

VeldFieldTypeOmschrijvingDescription
ExpectedDeliveryDate__cDateGewenste leverdatumDesired delivery date
MaxDiscountOnQuote__cPercentMaximum korting op quoteMaximum discount on quote
TotalDiscountAmount__cCurrencyTotale korting in valutaTotal discount in currency
DiscountTier__cPicklistNone / Low / Medium / High
DiscountApprovalStatus__cPicklistNone / Pending Level 1 / Pending Level 2 / Approved / Rejected
MaxPriceDeviation__cPercent (Formula)Grootste procentuele afwijking van lijstprijs over alle QLIsLargest percentage deviation from list price across all QLIs
ApprovalSubmittedDate__cDateTimeWanneer ter goedkeuring ingediendWhen submitted for approval
ApprovalCompletedDate__cDateTimeWanneer volledig goedgekeurd of afgewezenWhen fully approved or rejected
ApprovalNotes__cLong TextOpmerkingen van goedkeurder(s)Comments from approver(s)

QuoteLineItem (Standaard, uitgebreid)QuoteLineItem (Standard, extended)

VeldFieldTypeOmschrijvingDescription
DiscountPercent__cPercentKorting percentageDiscount percentage
DiscountAmount__cCurrencyKorting bedragDiscount amount
DiscountReason__cPicklistRenewal / Competitive / Volume / Project / Other
ListPrice__cCurrency (Formula)Lijstprijs uit PricebookEntryList price from PricebookEntry
PriceDeviation__cPercent (Formula)((ListPrice - UnitPrice) / ListPrice) × 100
LinkedHardwareLine__cLookup(QLI)Koppeling naar hardware quoteregelLink to hardware quote line
ServiceStartDate__cDateGewenste startdatum voor Software/SLADesired start date for Software/SLA
ServiceQuantityUnit__cText"Hour" / "Day" / "Year"

DeliverySchedule__c (Custom) Alleen fysieke producten

VeldFieldTypeOmschrijvingDescription
QuoteLineItem__cLookupKoppeling naar quoteregelLink to quote line
OrderItem__cLookupKoppeling naar orderregel (na conversie)Link to order line (after conversion)
Month__cDateLevermaand (eerste dag)Delivery month (first day)
DeliveryDate__cDateExacte leverdatumExact delivery date
Quantity__cNumberAantal te leverenQuantity to deliver
RevenueAmount__cCurrencyOmzet voor deze deliveryRevenue for this delivery
Status__cPicklistPlanned / Confirmed / In Transit / Delivered / Cancelled

5.2 Offerte Stappen (Guided Selling)Quote Steps (Guided Selling)

1. Account selecteren1. Select Account 2. Opportunity 3. Quote genereren3. Generate Quote 4. Producten toevoegen4. Add Products 5. Delivery Schedule 6. Korting6. Discount 7. Quote verzenden7. Send Quote
5.3 Product Toevoegen — UX per ProductType (LWC mockup)5.3 Add Product — UX per ProductType (LWC mockup)

De quoteProductSelector LWC is het hart van het quoting-gedeelte van het Technetix Salesforce Platform. Gedrag per producttype wordt aangestuurd door Custom Metadata (ProductTypeBehavior__mdt).The quoteProductSelector LWC is the heart of the quoting module within the Technetix Salesforce Platform. Behaviour per product type is driven by Custom Metadata (ProductTypeBehavior__mdt).

Add Products to Quote: Q-2026-001 Search product... Hardware Software Ext. Warranty SLA PRODUCT CATALOGUE NXT-01 NeuronX Transponder v1 €500.00 (Tier A) Warranty: 12 mo • In stock (47) + Add NX-NMS-STARTER Requires activation NeuronX NMS Starter • €2,000.00 License + Add SLA-GOLD-1Y-BC SLA Gold Gold SLA • €3,500.00 / year SLA • 1 year + Add PROF-SERV-1D-BC Prof. Service Expert per day • €1,200.00 / day Professional Service + Add QUOTE LINES NXT-01 Qty: 25 • Price: €500.00 • Discount: 10% Subtotal: €11,250.00 Warranty: 12 mo • Delivery: Split + EXTEND WARRANTY FOR NXT-01 (via WarrantyExtensionMapping__c) Select duration — price calculated as: unit price × % × qty + 1 year (4%) €500 + 3 years (9%) €1,125 ✓ selected + 5 years (15%) €1,875 EXT-WAR-3Y-BC +3 year warranty (9%) • €45.00/unit • Qty: 25 Subtotal: €1,125.00 PROF-SERV-1D-BC Expert per day • 3 days • €1,200/day = €3,600.00 Total: €15,975.00 Discount: €1,125.00 (7%) NET: €14,850.00 Save
Figuur 5.1 — quoteProductSelector LWC: Productcatalogus (links) + Offerte regels (rechts) met garantie-verlengknop direct gekoppeld aan de hardware-regel. Opties worden opgezocht via WarrantyExtensionMapping__c.Figure 5.1 — quoteProductSelector LWC: Product catalogue (left) + Quote lines (right) with warranty extension buttons directly linked to the hardware line. Options are resolved via WarrantyExtensionMapping__c.

Producttype-specifiek gedrag in de cartProduct type-specific behaviour in the cart

ProductTypeQty alsQty asVoorraadInventoryDelivery SplitGarantie badgeWarranty badgeActivatie badgeActivation badge
HardwarestuksunitsJaYes na inv. syncafter inv. syncJaYesJaYesNeeNo
ExtendedWarrantystuks (= HW qty)units (= HW qty)NeeNoNeeNoToon verlengingShow extensionNeeNo
ProfessionalServiceuren / dagenhours / daysNeeNoNeeNoNeeNoNeeNo
ConsultancydagendaysNeeNoNeeNoNeeNoNeeNo
SoftwarelicentieslicensesNeeNoNeeNoNeeNoJaYes
SLAjarenyearsNeeNoNeeNoNeeNoJaYes
5.4 Extended Warranty — Verkooplogica5.4 Extended Warranty — Sales Logic

Stappen in het verkoopprocesSteps in the sales process

  1. Gebruiker voegt een hardware product toe aan de offerte (bijv. NXT-01, Junior 050407, BU 05).User adds a hardware product to the quote (e.g. NXT-01, Junior 050407, BU 05).
  2. Systeem detecteert op de QuoteLineItem:System detects on the QuoteLineItem: IsWarrantyBearing__c = TRUE enand IsEligibleForExtendedWarranty__c = TRUE.
  3. De extendedWarrantySelector LWC toont direct onder de hardware-regel een uitklapbare garantie-verlengbalk met drie knoppen (1/3/5 jaar) inclusief prijspreview.The extendedWarrantySelector LWC renders an expandable warranty extension bar directly below the hardware line, with three buttons (1/3/5 year) including a price preview.
  4. Bij klik op een knop wordt automatisch een nieuwe QuoteLineItem aangemaakt voor het bijbehorende Extended Warranty product.On button click, a new QuoteLineItem is automatically created for the corresponding Extended Warranty product.

PrijsberekeningPrice calculation

ExtWarranty line price = hardware_unit_price × percentage × hardware_quantity

Example: 25× NXT-01 @ €500/unit + 3Y Extended Warranty (9%)
→ ExtWarranty = €500 × 9% × 25 = €1,125.00

Koppeling via WarrantyExtensionMapping__cLookup via WarrantyExtensionMapping__c

Salesforce bepaalt welk Extended Warranty product bij een hardware product hoort aan de hand van de WarrantyExtensionMapping__c records. De opzoeklogica werkt op basis van twee niveaus (meest specifiek wint):Salesforce determines which Extended Warranty product belongs to a hardware product using WarrantyExtensionMapping__c records. The lookup logic works on two levels (most specific wins):

PrioriteitPriorityMatchMatchOmschrijvingDescription
1 meest specifiekmost specificTargetBU__c + TargetSeniorFamilies__cGarantieverlenging geldt alleen voor bepaalde Senior families binnen de BU (bijv. alleen 050407 en 050408).Warranty extension applies only to specific Senior families within the BU (e.g. only 050407 and 050408).
2 fallbackfallbackTargetBU__cGarantieverlenging geldt voor alle hardware in de BU (bijv. alle producten in BU 05).Warranty extension applies to all hardware in the BU (e.g. all products in BU 05).

Voorbeeld mapping records voor BU 05 (Hardware):Example mapping records for BU 05 (Hardware):

ExtensionProduct__cTargetBU__cTargetSeniorFamilies__cWarrantyDurationMonths__cPricePercentage__c
EXT-WAR-1Y-BC05(leeg = alle families)(empty = all families)124%
EXT-WAR-3Y-BC05(leeg = alle families)(empty = all families)369%
EXT-WAR-5Y-BC05(leeg = alle families)(empty = all families)6015%

Vastleggen van de koppeling op de QuoteLineItemRecording the link on QuoteLineItem

Wanneer een Extended Warranty wordt toegevoegd, legt Salesforce de koppeling vast op zowel de warranty-regel als de hardware-regel:When an Extended Warranty is added, Salesforce records the link on both the warranty line and the hardware line:

ObjectObjectVeldFieldWaardeValue
QuoteLineItem (hardware)LinkedWarrantyLine__cLookup naar de warranty QuoteLineItemLookup to the warranty QuoteLineItem
QuoteLineItem (warranty)ParentHardwareLine__cLookup terug naar de hardware QuoteLineItemLookup back to the hardware QuoteLineItem
QuoteLineItem (warranty)WarrantyExtensionMapping__cLookup naar het gebruikte mapping-recordLookup to the mapping record used

Deze koppeling is essentieel voor de latere Asset-aanmaak: bij leveringsbevestiging (inbound MuleSoft) worden de velden HasExtendedWarranty__c, ExtendedWarrantyMonths__c en ExtendedWarrantyProduct__c op het Asset-record gezet op basis van de warranty-regel die aan de hardware-regel gekoppeld is.This link is essential for later Asset creation: upon delivery confirmation (inbound MuleSoft), the fields HasExtendedWarranty__c, ExtendedWarrantyMonths__c and ExtendedWarrantyProduct__c are set on the Asset record based on the warranty line linked to the hardware line.

Validatie:Validation: Extended Warranty kan alleen worden toegevoegd bij hardware van de juiste BU. Als er geen WarrantyExtensionMapping__c record bestaat voor de BU van het hardware product, toont de LWC geen garantie-verlengbalk.Extended Warranty can only be added for hardware of the correct BU. If no WarrantyExtensionMapping__c record exists for the hardware product's BU, the LWC shows no warranty extension bar.

5.5 Professional Services & Consultancy5.5 Professional Services & Consultancy
ModelTypePricingUnitVoorbeeldExample
PROF-SERV-1H-xxProfessionalServiceHour€150/uur€150/hour
PROF-SERV-1D-xxProfessionalServiceDay€1,200/dag€1,200/day
TRAINING-1D-xxProfessionalServiceDay€1,500/dag€1,500/day
CONSULTANCY-1D-xxConsultancyDay€1,800/dag€1,800/day

IsPhysicalProduct__c = FALSE → geen DeliverySchedule, geen voorraad check, geen garantie.

5.6 Software & SLA — Verkooplogica5.6 Software & SLA — Sales Logic

Software producten (NeuronX):Software products (NeuronX): Getoond met software icoon + badge "Vereist activatie na verkoop". ServiceStartDate__c op QuoteLineItem is optioneel op quote-moment.Shown with software icon + badge "Requires activation after sale". ServiceStartDate__c on QuoteLineItem is optional at quote stage.

Open punt:Open issue: Of software licenties per periode (maand/jaar) of eenmalig zijn, is nog niet volledig bepaald. Subscriptie/renewal logica wordt in een latere fase uitgewerkt.Whether software licences are per period (month/year) or one-off has not yet been fully determined. Subscription/renewal logic will be worked out in a later phase.

SLA producten:SLA products: Getoond met SLA icoon + badge. Toon SLA niveau vergelijking (Bronze vs Silver vs Gold).Shown with SLA icon + badge. Display SLA level comparison (Bronze vs Silver vs Gold).

Subscription/Revenue:Subscription/Revenue: SLA’s worden per jaar betaald. Er wordt momenteel GEEN rekening gehouden met subscription management, recurring billing, of revenue recognition. Dit wordt in een latere fase opgepakt.SLAs are paid annually. Currently NO account is taken of subscription management, recurring billing, or revenue recognition. This will be addressed in a later phase.
6

Prijs- & KortingsgoedkeuringPricing & Discount Approval

6.1 Wat moet worden goedgekeurdWhat requires approval

Goedkeuring is vereist wanneer de verkoopprijs afwijkt van de lijstprijs:Approval is required when the selling price deviates from the list price:

PriceDeviation% = ((ListPrice - ActualUnitPrice) / ListPrice) × 100

Voorbeelden:
  Lijstprijs €500, verkoopprijs €475 → afwijking 5%
  Lijstprijs €500, verkoopprijs €400 → afwijking 20%
  Lijstprijs €500, korting 10%       → afwijking 10%

6.2 Goedkeuringsregels — ConfigureerbaarApproval Rules — Configurable

Afwijking van lijstprijsDeviation from list priceActieActionGoedkeurder(s)Approver(s)
0-5%Auto-approveGeen goedkeuring nodigNo approval required
5-15%Level 1Goedkeurder A (bijv. Team Lead)Approver A (e.g. Team Lead)
15%+Level 1 + Level 2Goedkeurder A en daarna Goedkeurder B (bijv. Sales Director)Approver A and then Approver B (e.g. Sales Director)
6.3 Goedkeuringsproces Flow (diagram)6.3 Approval Process Flow (diagram)
Quote + QuoteLineItems Bereken MaxPriceDeviation% over alle QLIs ≤ 5% Auto-approve Approved → Quote door 5-15% Level 1 Notificatie Goedkeurder A Approved Rejected > 15% Level 1 + 2 Stap 1: Goedkeurder A × Stap 2: Goedkeurder B Rejected Approved Rejected
Figuur 6.1 — Goedkeuringsproces: auto-approve (≤5%), Level 1 (5-15%), Level 1+2 (>15%)Figure 6.1 — Approval process: auto-approve (≤5%), Level 1 (5-15%), Level 1+2 (>15%)
6.4 ApprovalRule__c Data Model6.4 ApprovalRule__c Data Model ConfigureerbaarConfigurable
VeldFieldTypeOmschrijvingDescription
NameTextNaam van de regelName of the rule
ObjectType__cPicklistObject (Quote)Object (Quote)
FieldToEvaluate__cTextVeld (bijv. MaxPriceDeviation__c)Field (e.g. MaxPriceDeviation__c)
MinThreshold__cPercentOndergrensLower threshold
MaxThreshold__cPercentBovengrens (leeg = onbeperkt)Upper threshold (empty = unlimited)
ApprovalLevel__cNumberVolgorde: 1, 2, 3...Order: 1, 2, 3...
Approver__cLookup(User)GoedkeurderApprover
DelegatedApprover__cLookup(User)Vervanger bij afwezigheidSubstitute when absent
ProductGroup__cTextOptioneel: specifieke productgroepOptional: specific product group
IsActive__cCheckboxRegel actiefRule active

Voorbeeld dataExample data

NameMinMaxLevelApproverDelegated
Standaard L1Standard L15%15%1Jan (Team Lead)Piet (Sr. Sales)
Standaard L2Standard L215%1Jan (Team Lead)Piet (Sr. Sales)
Standaard L2Standard L215%2Maria (Sales Director)Kees (Finance)
6.5 Validaties & Regels6.5 Validations & Rules
  1. DiscountReason__c verplicht bij PriceDeviation > 0%required when PriceDeviation > 0%
  2. Quote vergrendeling tijdens goedkeuringsproces (Pending Level 1/2)Quote locked during approval process (Pending Level 1/2)
  3. Quote kan niet naar “Sent” of “Signed” als DiscountApprovalStatus ≠ ApprovedQuote cannot move to “Sent” or “Signed” if DiscountApprovalStatus ≠ Approved
  4. Re-evaluatie: wijziging QLIs na goedkeuring → status terug naar NoneRe-evaluation: modifying QLIs after approval → status resets to None
  5. Audit trail via ProcessInstanceStep (standaard Salesforce)Audit trail via ProcessInstanceStep (standard Salesforce)
6.6 Implementatie Opties6.6 Implementation Options Besluit vereistDecision required
OptieOptionBeschrijvingDescriptionVoordelenAdvantagesNadelenDisadvantages
1. Native Approval AanbevolenRecommendedStandaard SF Approval ProcessStandard SF Approval ProcessGeen custom code, standaard UI + mobile, audit trail, delegated approverNo custom code, standard UI + mobile, audit trail, delegated approverMinder flexibel bij frequente wijzigingenLess flexible with frequent changes
2. AppExchangeConga Approvals, ServiceRocket, etc.Zeer flexibel, parallelle goedkeuringen, betere UIVery flexible, parallel approvals, better UIExtra licentiekosten, derde partijAdditional licence costs, third party
3. Custom ApexVolledig maatwerk op ApprovalRule__cFully custom on ApprovalRule__cMaximale flexibiliteit, admin beheerbaarMaximum flexibility, admin-manageable3-5 weken extra dev, zelf UI/notificaties bouwen3-5 weeks additional dev, build UI/notifications yourself

Aanbeveling:Recommendation: Start met Optie 1 voor MVP 2. Opschalen naar Optie 2 of 3 als complexere regels nodig zijn.Start with Option 1 for MVP 2. Scale to Option 2 or 3 if more complex rules are needed.

7

Orders & Integratie naar ExactOrders & Integration to Exact

7.1 Order Data Model7.1 Order Data Model

Order (Standaard, uitgebreid)Order (Standard, extended)

VeldFieldTypeOmschrijvingDescription
Quote__cLookup(Quote)Bron quoteSource quote
OrderIntegrationStatus__cPicklistNew / Sent / Accepted / Error
ErrorMessage__cLong TextIntegratie foutmeldingIntegration error message
ExactOrderId__cText(External ID)Order ID in Exact

OrderItem (Standaard, uitgebreid)OrderItem (Standard, extended)

VeldFieldTypeOmschrijvingDescription
ActualDeliveryDate__cDateWerkelijke leverdatumActual delivery date
LinkedHardwareOrderItem__cLookup(OrderItem)Koppeling naar hardware orderregelLink to hardware order line
Aanname — Delivery op OrderItem-niveau:Assumption — Delivery at OrderItem level: Het ontwerp gaat ervan uit dat één OrderItem als geheel wordt geleverd. Als Exact Globe orders opsplitst over meerdere magazijnen, moet het delivery-datamodel worden aangepast.The design assumes that one OrderItem is delivered as a whole. If Exact Globe splits orders across multiple warehouses, the delivery data model will need to be adjusted.

7.2 Quote → Order ConversieQuote → Order Conversion

Trigger: Quote.Status = Signed OF Quote.OrderConfirmed__c = TRUEQuote.Status = Signed OR Quote.OrderConfirmed__c = TRUE

1. Valideer1. Validate 2. Groepeer DS per maand2. Group DS per month 3. Maak Orders + OIs3. Create Orders + OIs 4. ServiceActivation records4. ServiceActivation records 5. Activeer → Exact5. Activate → Exact
7.3 Order naar Exact (Outbound) — met diagram & payload7.3 Order to Exact (Outbound) — with diagram & payload
Salesforce(Order) MuleSoft Exact GlobeVerwerkt orderStuurt naar warehouse SQL Garantie DBKoppelt SN aan orderKent garantietermijn toe Order + ExtWarranty Pakbon + SN
Figuur 7.1 — Outbound order flow: Salesforce → MuleSoft → Exact Globe → SQL Garantie DBFigure 7.1 — Outbound order flow: Salesforce → MuleSoft → Exact Globe → SQL Warranty DB

Outbound API Payload

POST /api/exact/orders
{
  "salesforceOrderId": "801xxx",
  "exactCustomerId": "12345",
  "orderDate": "2026-03-02",
  "requestedDeliveryDate": "2026-04-15",
  "pricebookTier": "Tier A",
  "lines": [
    {
      "lineNumber": 1,
      "technetixProductId": "19015835",
      "quantity": 25,
      "unitPrice": 500.00,
      "discountPercent": 10,
      "netAmount": 11250.00,
      "productType": "Hardware"
    },
    {
      "lineNumber": 2,
      "technetixProductId": "19016489",
      "quantity": 25,
      "unitPrice": 45.00,
      "netAmount": 1125.00,
      "productType": "ExtendedWarranty",
      "linkedHardwareLineNumber": 1,
      "warrantyExtensionMonths": 12
    }
  ]
}
8

Levering, Assets & GarantieDelivery, Assets & Warranty

8.1 Warehouse & Voorraad8.1 Warehouse & Inventory Integratie nog niet actiefIntegration not yet active
Status:Status: Objecten bestaan al, maar de MuleSoft-integratie die voorraaddata vanuit Exact Globe synchroniseert is nog niet opgezet.Objects already exist, but the MuleSoft integration that synchronises inventory data from Exact Globe has not yet been set up.

WarehouseGroup__c / Warehouse__c / InventoryBalance__c

ObjectKey veldenKey fields
WarehouseGroup__cName, Description__c
Warehouse__cName, WarehouseGroup__c (Lookup), ExactWarehouseId__c (External ID), IsActive__c
InventoryBalance__cWarehouse__c, Product__c, OnHandQty__c, ReservedQty__c, AvailableQty__c (Formula), SnapshotDateTime__c, ExactBalanceId__c (External ID)

8.2 Asset Definitie & GroeperingsregelsAsset Definition & Grouping Rules

Fundamentele designbeslissing:Fundamental design decision: Niet elk fysiek item is per se een individueel asset record. De definitie bepaalt het datavolume, de granulariteit van garantie-tracking, en de bruikbaarheid van de 360° klantview.Not every physical item is necessarily an individual asset record. The definition determines data volume, warranty-tracking granularity, and the usefulness of the 360° customer view.
Regel 1: Serienummer-dragende producten → 1 Asset per SNRule 1: Serial number items → 1 Asset per SN

Producten met IsSerialNumberItem__c = TRUE krijgen altijd 1 asset record per individueel serienummer.Products with IsSerialNumberItem__c = TRUE always receive 1 asset record per individual serial number.

Order 1001: 100× NXT-01 (IsSerialNumberItem = TRUE)
  Zending 1: 60× NXT-01 → SN-001 t/m SN-060 → 60 Asset records
  Zending 2: 40× NXT-01 → SN-061 t/m SN-100 → 40 Asset records
  Totaal: 100 Asset records
Regel 2: Niet-serienummer producten → 1 Asset per groepRule 2: Non-serial number items → 1 Asset per group

Gegroepeerd per unieke combinatie van OrderItem + Leverdatum + Extended Warranty type.Grouped per unique combination of OrderItem + Delivery date + Extended Warranty type.

Order 1002: 500× coax connector + Extended Warranty 1Y
  Zending 1 (15 feb): 300× → 1 Asset (Qty=300)
  Zending 2 (02 mrt): 200× → 1 Asset (Qty=200)
  Totaal: 2 Asset records (i.p.v. 500)
Regel 3: Niet-fysieke producten — wel of geen Asset?Rule 3: Non-physical products — Asset or not?
ProductTypeAsset?WaaromWhyTrigger
HardwareJa (Regel 1 of 2)Yes (Rule 1 or 2)Fysiek item, garantie-trackingPhysical item, warranty trackingDelivery Confirmation
SoftwareJa — 1 per licentieYes — 1 per licenceDraait bij klant, activatiedatumRuns at customer site, activation dateService Activation
IPLicenseJa — 1 per licentieYes — 1 per licenceRecht dat bij klant draaitRight running at customer siteService Activation
SLANeeNoEigen object Customer_SLA__cOwn object Customer_SLA__c
ExtendedWarrantyNeeNoEigenschap van hardware assetProperty of hardware asset
ProfService / ConsultancyNeeNoEenmalige dienstOne-time service
8.3 Asset Data Model8.3 Asset Data Model 22 veldenfields
VeldFieldTypeOmschrijvingDescription
AccountIdLookup(Account)KlantCustomer
Product2IdLookup(Product2)Product
SerialNumberTextSerienummer (uniek)Serial number (unique)
StatusPicklistShipped / Installed / Registered / In-Repair / Retired
QuantityNumber1 (SN) of N (batch)1 (SN) or N (batch)
Garantie veldenWarranty fields
WarrantyStartDate__cDateGarantie ingangsdatum = leverdatumWarranty start date = delivery date
BaseWarrantyMonths__cNumberBasis garantietermijnBase warranty period
BaseWarrantyEndDate__cDateWarrantyStartDate + BaseWarrantyMonths
HasExtendedWarranty__cCheckboxExtended Warranty bijgekochtExtended Warranty purchased
ExtendedWarrantyMonths__cNumberExtra garantie maandenAdditional warranty months
ExtendedWarrantyProduct__cLookup(Product2)Welk Ext. Warranty productWhich Ext. Warranty product
EffectiveWarrantyEndDate__cFormula(Date)MAX(BaseEnd, ExtendedEnd)
WarrantyStatus__cFormula(Text)Active / Expiring Soon / Expired / Extended
Traceability veldenTraceability fields
Order__c / OrderItem__cLookupBron order(regel)Source order (line)
ExactAssetId__cText(External ID)Asset ID in Exact
DeliveryDate__cDateLeverdatumDelivery date
ShipmentNumber__cNumberVolgnummer deelleveringShipment sequence number
AssetType__cText‘Hardware - Serial’ / ‘Hardware - Batch’ / ‘Software’
8.4 Garantie Berekening (pseudocode)8.4 Warranty Calculation (pseudocode)
// STAP 1: Bepaal base garantie (met klant-specifieke override)
// Lookup: WarrantyOverride__c → WarrantyDefault__mdt → Product2.BaseWarrantyMonths__c
baseWarrantyMonths = getBaseWarrantyMonths(Account, Product)
Asset.BaseWarrantyEndDate__c = ADD_MONTHS(WarrantyStartDate, baseWarrantyMonths)

// STAP 2: Extended Warranty (indien verkocht)
IF Extended Warranty verkocht op dezelfde Order:
  Asset.HasExtendedWarranty__c = TRUE
  Asset.ExtendedWarrantyStartDate__c = BaseWarrantyEndDate + 1 dag
  Asset.ExtendedWarrantyEndDate__c = ADD_MONTHS(ExtWarrantyStart, ExtWarrantyMonths)

// STAP 3: Formules
EffectiveWarrantyEndDate__c =
  IF(HasExtendedWarranty, ExtendedWarrantyEndDate, BaseWarrantyEndDate)

WarrantyStatus__c =
  IF(TODAY() > EffectiveWarrantyEndDate, "Expired",
    IF(TODAY() > EffectiveWarrantyEndDate - 90, "Expiring Soon",
      IF(HasExtendedWarranty, "Extended", "Active")))
8.5 AssetWarrantyEvent__c — Audit Trail8.5 AssetWarrantyEvent__c — Audit Trail
VeldFieldTypeOmschrijvingDescription
Asset__cLookup(Asset)Gekoppeld assetLinked asset
EventType__cPicklistBaseWarrantySet / ExtendedWarrantyAdded / WarrantyExtended / WarrantyExpired
PreviousEndDate__c / NewEndDate__cDateEinddatum voor/na mutatieEnd date before/after change
ExtensionMonths__cNumberMaanden verlengingMonths of extension
RelatedProduct__cLookup(Product2)Ext. Warranty product
RelatedOrder__cLookup(Order)Order waarmee verlenging is gekochtOrder through which extension was purchased
8.6 Delivery Confirmation — Toekomstig Integratieproces8.6 Delivery Confirmation — Future Integration Process
Momenteel niet geïmplementeerd.Not currently implemented. Dit proces raakt 4 systemen en 3 afdelingen — zie sectie 9 voor de volledige analyse.

Trigger: Delivery confirmation event vanuit MuleSoft (per deellevering).Delivery confirmation event from MuleSoft (per partial delivery).

  1. Valideer:Validate: Order bestaat, status = Activated, lineNumbers matchenOrder exists, status = Activated, lineNumbers match
  2. Update OrderItem:Update OrderItem: ActualDeliveryDate, DeliveredQuantity, DeliveryStatus
  3. Asset Creatie (conform regels 8.2):Asset Creation (per rules 8.2): per SN of per batchper SN or per batch
  4. Update DeliverySchedule__c:Update DeliverySchedule__c:Partially Delivered of DeliveredPartially Delivered or Delivered
  5. Check completheid:Check completeness: Alle OIs volledig → Fully DeliveredAll OIs complete → Fully Delivered
9

Garantie Integratie: Multi-Systeem (Toekomstig)Warranty Integration: Multi-System (Future)

Apart project:Separate project: Vereist samenwerking tussen Sales, Warehouse/Operations en IT/Engineering.Requires collaboration between Sales, Warehouse/Operations and IT/Engineering.
9.1 Huidige Situatie (As-Is) — met gap analyse9.1 Current Situation (As-Is) — with gap analysis
SALESFORCE (Verkoop) EXACT (Logistiek) SQL DATABASE (Garantie) Quote + QLIs Order + OrderItems Order ontvangen Inpakken + Scan Zending versturen SN + Order opslaan Leverdatum + 12 mnd ??? Geen terugkoppeling SF weet niet welke SN bij welke order Geen 360° klantview Alleen base garantie Geen Extended Warranty registratie Geen koppeling naar SF orders
Figuur 9.1 — As-Is: geen terugkoppeling SN/leverdata naar Salesforce, geen Ext. Warranty in SQL DBFigure 9.1 — As-Is: no feedback of SN/delivery data to Salesforce, no Ext. Warranty in SQL DB
9.2 Gewenst Resultaat (To-Be)9.2 Desired Result (To-Be)

Per klant een 360° view met: welke order → welke serienummers, leverdatum per deellevering = ingangsdatum garantie, base + extended warranty datums.Per customer a 360° view with: which order → which serial numbers, delivery date per partial delivery = warranty start date, base + extended warranty dates.

Order 1001: 100× NXT-01 + Extended Warranty 3Y
  ├─ Zending 1 (2026-03-15, Warehouse NL): 60× (SN001-SN060)
  │  → Base warranty: tot 2027-03-15, Extended: tot 2030-03-15
  └─ Zending 2 (2026-04-02, Warehouse UK): 40× (SN061-SN100)
     → Base warranty: tot 2027-04-02, Extended: tot 2030-04-02
9.3 Design Oplossingen A/B/C9.3 Design Solutions A/B/C Besluit vereistDecision required
OplossingSolutionBeschrijvingDescriptionVoordelenAdvantagesNadelenDisadvantages
A: SQL Master AanbevolenRecommendedSQL DB berekent totale garantie → MuleSoft synct naar SFSQL DB calculates total warranty → MuleSoft syncs to SFBestaand proces intact, SF als read-only consumerExisting process intact, SF as read-only consumerSQL DB uitbreiden met Ext. Warranty veldenExtend SQL DB with Ext. Warranty fields
B: SF MasterMuleSoft stuurt SN+leverdatum → SF maakt Assets + berekent garantieMuleSoft sends SN+delivery date → SF creates Assets + calculates warrantySF is single source of truthSF is single source of truthSQL DB raakt out of syncSQL DB becomes out of sync
C: HybrideSQL voor Base, SF voor ExtendedSQL for Base, SF for ExtendedMinimale impact, snelste implementatieMinimal impact, fastest implementationTwee bronnen van waarheidTwo sources of truth
9.4 Delivery Confirmation API (Toekomstig)9.4 Delivery Confirmation API (Future)
Voorbeeld payload:Example payload: Definitieve structuur hangt af van hoe Exact Globe leveringen structureert.Definitive structure depends on how Exact Globe structures deliveries.
POST /api/salesforce/deliveries
{
  "exactOrderId": "ORD-2026-12345",
  "salesforceOrderId": "801xxx",
  "deliveryDate": "2026-02-15",
  "warehouseId": "WH-BREDA",
  "shipmentNumber": 1,
  "totalShipmentsExpected": 2,
  "deliveries": [
    {
      "lineNumber": 1,
      "technetixProductId": "19015835",
      "quantity": 60,
      "serialNumbers": ["SN-001", "SN-002", "...SN-060"],
      "batchNumber": null
    }
  ],
  "warrantyInfo": [
    {
      "lineNumber": 1,
      "hasExtendedWarranty": true,
      "extensionMonths": 12,
      "extWarrantyProductId": "19016489"
    }
  ]
}

Idempotency: Combinatie salesforceOrderId + shipmentNumber is uniek.Combination salesforceOrderId + shipmentNumber is unique.

9.5 Delivery Status: Huidige Stand9.5 Delivery Status: Current State

Er is momenteel geen automatische delivery confirmation. Bestaande Shipment__c objecten zijn uitsluitend voor Sample Requests.There is currently no automatic delivery confirmation. Existing Shipment__c objects are exclusively for Sample Requests.

Aanbeveling:Recommendation: Eerste stap: in kaart brengen hoe Exact Globe leveringen structureert. Tot die tijd handmatig ActualDeliveryDate__c invullen.First step: map out how Exact Globe structures deliveries. Until then, manually fill in ActualDeliveryDate__c.

10

Post-Sales: Activatie, SLA & RepairsPost-Sales: Activation, SLA & Repairs

10.1 ServiceActivation__c — Overzicht10.1 ServiceActivation__c — Overview 6 types

Na verkoop van niet-fysieke producten wordt automatisch een uitvoeringsproces aangemaakt. Fungeert als “taak” die Operations door het activatie/uitvoeringsproces leidt.After selling non-physical products, an execution process is automatically created. Functions as a “task” that guides Operations through the activation/execution process.

VeldFieldTypeOmschrijvingDescription
NameAuto NumberSA-{0000}
Account__c / Order__c / OrderItem__cLookupsKlant, bron order(regel)Customer, source order (line)
Product__cLookup(Product2)Product dat geactiveerd moet wordenProduct to be activated
ActivationType__cPicklistSoftwareLicense / SLA / ExtendedWarranty / Training / ProfessionalService / Consultancy
Status__cPicklistPending / Scheduled / InProgress / Completed / Activated / Failed / Cancelled
Planning & UitvoeringPlanning & Execution
RequestedStartDate__cDateGewenste startdatumDesired start date
ScheduledDate__c / ActualStartDate__c / ActualEndDate__cDatePlanning en werkelijke datumsPlanned and actual dates
AssignedExpert__cLookup(User)Toegewezen expert/trainerAssigned expert/trainer
PlannedQuantity__c / DeliveredQuantity__cNumberGeplande vs werkelijke uren/dagenPlanned vs actual hours/days
QuantityUnit__cText“Hour” / “Day”
Dienst-specifiekService-specific
Customer_SLA__cLookupAangemaakte SLA record (SLA type)Created SLA record (SLA type)
LicenseKey__cTextLicentiesleutel (Software type)Licence key (Software type)
CompletedBy__c / CompletedDate__cLookup / DateTimeWie / wanneer afgerondWho / when completed

ActivationType-specifiek gedragActivationType-specific behaviour

TypeStatus FlowStatus FlowEinddoelEnd goalAsset?
SoftwareLicensePending → InProgress → ActivatedLicentie actief, key gecommuniceerdLicence active, key communicatedJaYes
SLAPending → InProgress → ActivatedCustomer_SLA__c actiefCustomer_SLA__c activeNeeNo
ExtendedWarrantyPending → ActivatedHW asset warranty velden bijgewerktHW asset warranty fields updatedNeeNo
TrainingPending → Scheduled → InProgress → CompletedTraining uitgevoerd, rapport opgeleverdTraining delivered, report submittedNeeNo
ProfessionalServicePending → Scheduled → InProgress → CompletedService geleverd, uren verantwoordService delivered, hours accounted forNeeNo
ConsultancyPending → Scheduled → InProgress → CompletedConsultancy afgerondConsultancy completedNeeNo
10.2 Service Activatie Proces Flow (diagram)10.2 Service Activation Process Flow (diagram)
Order Geactiveerd Software / IPLicense Pending → Activated → Software Asset SLA Pending → Activated → Customer_SLA__c ExtendedWarranty Pending → Activated → HW Asset update Prof. Service Scheduled → InProgress → Completed Consultancy Scheduled → InProgress → Completed Automatisch: Email notificatie + Dashboard “Pending Service Activations”
Figuur 10.1 — Service Activatie per ProductType: Software/SLA eindigen op Activated, Services op CompletedFigure 10.1 — Service Activation per ProductType: Software/SLA end on Activated, Services on Completed
10.3 Customer_SLA__c10.3 Customer_SLA__c Bestaand + uitbreidingExisting + extension

Bestaande velden (in productie)Existing fields (in production)

Account__c, Support_Level__c, Agreement dates, Working_Days__c, Response/Fix tijden per severity (Critical/Major/Minor), Software_Fixes_included__c, etc.Account__c, Support_Level__c, Agreement dates, Working_Days__c, Response/Fix times per severity (Critical/Major/Minor), Software_Fixes_included__c, etc.

Nieuwe veldenNew fields

VeldFieldTypeOmschrijvingDescription
CustomerAgreement__cLookupBovenliggend raamcontract (optioneel)Parent framework contract (optional)
SourceQuote__cLookup(Quote)Quote waaruit SLA verkocht isQuote from which SLA was sold
SourceOrder__cLookup(Order)Order waaruit geactiveerdOrder from which activated
SLAProduct__cLookup(Product2)Verkochte SLA productSold SLA product
BillingFrequency__cPicklistAnnual / Quarterly / Monthly
AnnualPrice__cCurrencyJaarlijkse prijsAnnual price
AutoRenew__cCheckboxAutomatisch verlengenAuto-renew
10.4 Repairs & Cases10.4 Repairs & Cases
VeldFieldTypeOmschrijvingDescription
Asset__cLookup(Asset)Gekoppeld assetLinked asset
Customer_SLA__cLookupSLA agreement
RepairType__cPicklistWarranty / Out-of-Warranty / DOA / RMA

Logica:Logic: Bij case aanmaak: zoek Asset op SerialNumber + Account, auto-populate Asset__c, valideer garantie status, koppel aan SLA voor response tijden.On case creation: look up Asset by SerialNumber + Account, auto-populate Asset__c, validate warranty status, link to SLA for response times.

10.5 Blokkerende Afhankelijkheden & Open Punten10.5 Blocking Dependencies & Open Issues 3 items
#Open PuntOpen IssueSectieSectionImpact
1Design beslissing garantie-integratie (A/B/C)Design decision warranty integration (A/B/C)9.3Bepaalt hoe SN-garantie naar SF komtDetermines how SN-warranty comes to SF
2Keuze Approval implementatieChoice of Approval implementation6.6Bepaalt technische aanpak MVP 2Determines technical approach MVP 2
3Contractparameters van Business/LegalContract parameters from Business/Legal4.8BLOKKERBLOCKER voor correcte garantie en orderverwerkingfor correct warranty and order processing
11

Rapportage & DashboardsReporting & Dashboards

Pipeline
Quote Approval Kanban
Conversion rates
Quote Approval Kanban
Conversion rates
Delivery
Backlog per maand
Order fulfillment status
Backlog per month
Order fulfillment status
Assets
Warranty expiring (<90d)
Ext. Warranty attach rate
Warranty expiring (<90d)
Ext. Warranty attach rate
Service
Pending activations
SLA overzicht
Pending activations
SLA overview
11.1-11.5 Dashboard Details11.1-11.5 Dashboard Details

11.1 Pipeline & Quotes

  • Quote Approval Pipeline: Kanban view op DiscountApprovalStatus__c
  • Quote Conversion: conversion rate, average quote value

11.2 Delivery & BacklogDelivery & Backlog

  • Delivery Backlog per Maand: DeliverySchedule__c matrix (Product × Maand)Delivery Backlog per Month: DeliverySchedule__c matrix (Product × Month)
  • Order Fulfillment Status: Orders in ERP, pending delivery

11.3 Assets & Warranty

  • Asset Overzicht per Klant: Filter op Status, warranty expiring (< 90 dagen)Asset Overview per Customer: Filter on Status, warranty expiring (< 90 days)
  • Warranty Expiration Dashboard: WarrantyStatus__c = “Expiring Soon” → sales opportunity
  • Extended Warranty Dekking: % assets met ext. warranty, revenue per BU, attach rateExtended Warranty Coverage: % assets with ext. warranty, revenue per BU, attach rate
  • Repair Analytics: MTBF, repair volume, warranty vs out-of-warranty ratio

11.4 Service Activations

  • Pending Activations: per ActivationType, gemiddelde activatietijd, overdue (>5 werkdagen)Pending Activations: per ActivationType, average activation time, overdue (>5 working days)
  • SLA Overzicht: actieve SLA’s per klant, verlopende SLA’s, niveau verdelingSLA Overview: active SLAs per customer, expiring SLAs, level distribution

11.5 Inventory na inventory syncafter inventory sync

  • Voorraad overzicht: InventoryBalance__c matrix (Product × Warehouse)Inventory overview: InventoryBalance__c matrix (Product × Warehouse)
12

Technische ArchitectuurTechnical Architecture

12.1 Technologie Keuze — CPQ VervangingTechnology Choice — CPQ Replacement

UI — Lightning Web Components (LWC) quoteProductSelector • productCatalogCard • warrantyTimeline • discountValidator Business Logic — Apex Service Classes QuoteToOrderConverter • ExtendedWarrantyService • AssetWarrantyCalculator • ApprovalRuleEvaluator Configuratie — CMDT ProductTypeBehavior__mdt • WarrantyDefault__mdt Integratie — Apex REST + Named Creds ProductSyncHandler • OrderIntegrationService Goedkeuring — Native / Custom ApprovalRule__c • Delegated Approvers Automatisering — Triggers + Platform Events 1 trigger per object → Handler → Service
Figuur 12.1 — Technologie stack: LWC (UI) → Apex (Logic) → CMDT (Config) + Integratie + Goedkeuring + TriggersFigure 12.1 — Technology stack: LWC (UI) → Apex (Logic) → CMDT (Config) + Integration + Approval + Triggers
Waarom CMDT — vergelijking met alternatievenWhy CMDT — comparison with alternatives
AspectCMDTCustom SettingsHardcoded
DeploymentVia metadata API (Git/CI/CD)Deels via APIPartially via APICode deploy
Governor limitsGeen SOQL-limieten (cached)No SOQL limits (cached)Telt mee in SOQLCounts towards SOQLn.v.t.n/a
TestbaarheidZichtbaar zonder SeeAllDataVisible without SeeAllDataVereist SeeAllDataRequires SeeAllDataNiet configureerbaarNot configurable
Admin wijzigbaarJa, via SetupYes, via SetupJaYesNeeNo
VersiebeheerJa (XML in repo)Yes (XML in repo)BeperktLimitedJa (in code)Yes (in code)
12.2 Volume Verwachtingen12.2 Volume Expectations
~10K
ProductenProducts
~50K
PricebookEntries
~5K/jr
Quotes
~10K/jr
Orders
~100K
Assets (cumulatief)Assets (cumulative)
~50-100
CMDT records
12.3 Security & Governance12.3 Security & Governance
  • FLS: Kortingsvelden alleen zichtbaar voor sales + management. ERP velden read-only.Discount fields visible to sales + management only. ERP fields read-only.
  • Sharing: Private Account sharing (role hierarchy). Quote/Order/Asset/ServiceActivation volgen Account.Private Account sharing (role hierarchy). Quote/Order/Asset/ServiceActivation follow Account.
12.4 Apex Classes Overzicht12.4 Apex Classes Overview 15+ classes
ClassTypeOmschrijvingDescription
Integratie — InboundIntegration — Inbound
ProductSyncHandlerInvocable/RESTUpsert Product2, afleiding ProductType via CMDTUpsert Product2, derive ProductType via CMDT
PricebookSyncHandlerInvocable/RESTUpsert Pricebook2 + PricebookEntry
InventorySyncHandlerInvocable/RESTUpsert InventoryBalance__c nog te bouwenyet to be built
DeliveryConfirmationHandlerInvocable/RESTCreate/update Assets toekomstig
Integratie — OutboundIntegration — Outbound
OrderIntegrationServiceServiceBuild payload, call MuleSoft via Named Credential
IntegrationErrorLoggerUtilityLog fouten naar IntegrationLog__cLog errors to IntegrationLog__c
CPQ — Quote & Product
QuoteProductControllerAuraEnabledProduct search, cart, save. Leest ProductTypeBehavior__mdtProduct search, cart, save. Reads ProductTypeBehavior__mdt
ExtendedWarrantyServiceServiceEligible warranty, prijsberekening via ExtendedWarrantyMapping__cEligible warranty, price calculation via ExtendedWarrantyMapping__c
QuoteToOrderConverterServiceQuote → Orders obv DeliverySchedule__cQuote → Orders based on DeliverySchedule__c
CPQ — KortingCPQ — Discount
DiscountApprovalValidatorTrigger HelperBereken MaxPriceDeviationCalculate MaxPriceDeviation
ApprovalRuleEvaluatorServiceEvalueer ApprovalRule__c, bepaal niveauEvaluate ApprovalRule__c, determine level
Garantie & AssetsWarranty & Assets
AssetWarrantyCalculatorServiceBase + Extended warranty berekeningBase + Extended warranty calculation
WarrantyOverrideResolverServiceKlant-specifieke override (scope-hiërarchie)Customer-specific override (scope hierarchy)
AssetWarrantyEventLoggerServiceLog events naar AssetWarrantyEvent__cLog events to AssetWarrantyEvent__c
Post-Sales
ServiceActivationServiceServiceAuto-creatie activations, software asset creatieAuto-create activations, software asset creation

Trigger → Handler PatroonTrigger → Handler Pattern

QuoteTrigger.trigger
  → QuoteTriggerHandler.cls
    → DiscountApprovalValidator.validate(quotes)
    → ExtendedWarrantyService.autoSuggest(quoteLineItems)

OrderTrigger.trigger
  → OrderTriggerHandler.cls
    → OrderIntegrationService.sendToExact(orders)

DeliveryScheduleTrigger.trigger
  → DeliveryScheduleTriggerHandler.cls
    → validatie: totalen matchen met QLI qty
12.5 Custom Metadata Types (CMDT)12.5 Custom Metadata Types (CMDT) 3 types

ProductTypeBehavior__mdt

Stuurt gedrag van quoteProductSelector LWC per producttype.Controls behaviour of quoteProductSelector LWC per product type.

DevNameShowQtyInventoryDeliverySplitWarrantyActivationLinkedHWCreateAssetAssetTrigger
HardwarestuksunitstruetruetruefalsefalsetrueDeliveryConfirmation
ExtendedWarrantystuksunitsfalsefalsetruefalsetruefalseNone
SoftwarelicentieslicensesfalsefalsefalsetruefalsetrueServiceActivation
ProfServicedagendaysfalsefalsefalsefalsefalsefalseNone
ConsultancydagendaysfalsefalsefalsefalsefalsefalseNone
SLAjaaryearfalsefalsefalsetruefalsefalseNone
IPLicenselicentieslicensesfalsefalsefalsetruefalsetrueServiceActivation

WarrantyDefault__mdt

DevNameScopeScopeValueBaseWarrantyMonthsIsWarrantyBearing
BU05_DefaultBusinessUnit0512true
BU06_DefaultBusinessUnit0612true
BU07_DefaultBusinessUnit0724true
BU08_DefaultBusinessUnit0812true

Lookup volgorde:Lookup order: 1. WarrantyOverride__c (klant) → 2. WarrantyDefault__mdt (JuniorFamily) → 3. WarrantyDefault__mdt (BU) → 4. Product2.BaseWarrantyMonths__c1. WarrantyOverride__c (customer) → 2. WarrantyDefault__mdt (JuniorFamily) → 3. WarrantyDefault__mdt (BU) → 4. Product2.BaseWarrantyMonths__c

IntegrationSetting__mdt

DevNameNamedCredentialEndpointPathRetriesTimeoutActive
OrderOutboundMuleSoft_Exact/api/exact/orders330strue
ProductSyncMuleSoft_Exact/api/salesforce/products260strue
PricebookSyncMuleSoft_Exact/api/salesforce/pricebooks260strue
InventorySyncMuleSoft_Exact/api/salesforce/inventory230sfalse
DeliveryConfirmationMuleSoft_Exact/api/salesforce/deliveries330sfalse
12.6 LWC Components12.6 LWC Components 8 componentencomponents
ComponentComponentOmschrijvingDescriptionConfiguratie bronConfiguration source
quoteProductSelectorMain “Quick Add Products” — filters en auto-suggestMain “Quick Add Products” — filters and auto-suggestProductTypeBehavior__mdt
productCatalogCardProduct kaartje met type-specifieke badgesProduct card with type-specific badgesProductTypeBehavior__mdt
quoteLineEditorOfferte regels editor met inline editingQuote lines editor with inline editingProductTypeBehavior__mdt
discountValidatorReal-time discount validatieReal-time discount validationApprovalRule__c
extendedWarrantySelectorWarranty keuze UI (1/3/5 jaar, percentage preview)Warranty selection UI (1/3/5 year, percentage preview)ExtendedWarrantyMapping__c
serviceActivationListOverzicht pending activationsOverview of pending activations
warrantyTimelineVisuele warranty timeline op Asset pageVisual warranty timeline on Asset page
approvalDashboardOpenstaande goedkeuringenOutstanding approvals
13

Build List (Implementatie Volgorde)Build List (Implementation Order)

Build List volgt de fasering uit sectie 1BBuild List follows the phasing from section 1B Eerst Fase 1 (3 blokken: Dev2 → UAT → PROD), daarna Fase 2 (uitbreiding). Onderstaande blokken zijn de uitwerking op werkpakket-niveau.First Phase 1 (3 blocks: Dev2 → UAT → PROD), then Phase 2 (extension). The blocks below are the work-package level breakdown.

Fase 1 — CPQ Replacement (Quote-only)Phase 1 — CPQ Replacement (Quote-only)

Blok 1: Bouwen in TechnetixDev2Block 1: Building in TechnetixDev2 Greenfield

1.1 Datamodel + permissiesData model + permissions

  • AccountProductPrice__c aanmaken (Account__c, Product__c, UnitPrice__c, CurrencyIsoCode, StartDate__c, EndDate__c, IsActive__c, ExactContractPriceId__c External ID)create (Account__c, Product__c, UnitPrice__c, CurrencyIsoCode, StartDate__c, EndDate__c, IsActive__c, ExactContractPriceId__c External ID)
  • Account-velden: DefaultPricebook__c Lookup, PricingTier__c PicklistAccount fields: DefaultPricebook__c Lookup, PricingTier__c Picklist
  • Quote custom velden: discount-percentage, approval-status, signed-PDF link, DocuSign envelope-idQuote custom fields: discount-percentage, approval-status, signed-PDF link, DocuSign envelope id
  • QuoteLineItem custom velden: line-discount, original-list-price, applied-pricebook-sourceQuoteLineItem custom fields: line-discount, original-list-price, applied-pricebook-source
  • IntegrationLog__c object aanmakenobject created
  • Permission Sets: TX_Sales, TX_SalesManager, TX_Director, TX_IntegrationUserPermission Sets: TX_Sales, TX_SalesManager, TX_Director, TX_IntegrationUser
  • Multi-currency activeren in de orgEnable multi-currency in the org

1.2 Inbound integraties (samen met Twan/MuleSoft)Inbound integrations (with Twan/MuleSoft)

  • Named Credentials voor MuleSoftNamed Credentials for MuleSoft
  • ProductSyncHandler Apex REST (alleen Hardware BU 05-09 in Fase 1)Apex REST (Hardware BU 05-09 only in Phase 1)
  • PricebookSyncHandler Apex REST (multi-currency)Apex REST (multi-currency)
  • AccountProductPriceSyncHandler Apex REST (upsert op ExactContractPriceId__c)Apex REST (upsert on ExactContractPriceId__c)
  • IntegrationErrorLogger + IntegrationLog__c

1.3 Apex services + triggersApex services + triggers

  • PriceResolver (ladder AccountProductPrice → Pricebook)(ladder AccountProductPrice → Pricebook)
  • QuoteController (LWC controller, line management, hercalc)(LWC controller, line management, recalc)
  • QuoteDocumentService (PDF + DocuSign envelope)(PDF + DocuSign envelope)
  • QuoteTriggerHandler, AccountProductPriceTriggerHandler
  • Apex unit tests (85%+ coverage)

1.4 Lightning Web ComponentsLightning Web Components

  • quoteProductSelector (Quick Add Products, alleen hardware-catalogus)(Quick Add Products, hardware catalogue only)
  • quoteLineEditor (inline editen, prijs/korting)(inline edit, price/discount)
  • discountValidator (realtime weergave approval-noodzaak)(realtime approval-needed display)
  • quoteDocumentPanel (PDF + DocuSign acties)(PDF + DocuSign actions)
  • LWC Jest tests

1.5 Approval-engine inrichtingApproval engine setup

  • Analyseren van objecten/velden van de approval-engine in repo DMS CMS Solution TechnetixAnalyse approval engine objects/fields in repo DMS CMS Solution Technetix
  • Engine deployen naar TechnetixDev2Deploy engine to TechnetixDev2
  • Approval-regels configureren: 0-5% auto, 5-15% Level 1 (Team Lead), 15%+ Level 2 (Director)Configure approval rules: 0-5% auto, 5-15% Level 1 (Team Lead), 15%+ Level 2 (Director)
  • Quote-lock + re-evaluatie logicaQuote lock + re-evaluation logic

1.6 PDF + DocuSignPDF + DocuSign

  • PDF-template Quote (branding, regels, totalen, voorwaarden)PDF template Quote (branding, lines, totals, terms)
  • DocuSign Connected App / Named CredentialDocuSign Connected App / Named Credential
  • Envelope verzenden + status callback + signed-PDF terug op QuoteSend envelope + status callback + signed PDF back on Quote

1.7 Test & iteratie in Dev2Test & iterate in Dev2

  • End-to-end scenario’s (klantprijs, pricebook-prijs, korting in elke band, multi-currency)End-to-end scenarios (customer price, pricebook price, discount in each band, multi-currency)
  • DocuSign full-flow getestDocuSign full flow tested
  • Iteratie met sales-key-users tot functioneel volledigIteration with sales key users until functionally complete
Blok 2: Deploy + conversie + uninstall op UATBlock 2: Deploy + convert + uninstall on UAT High-risk

2.1 VoorbereidingPreparation

  • Cutover-plan + freeze-venster afgestemd met sales en managementCutover plan + freeze window aligned with sales and management
  • Read-only freeze op CPQ-data tijdens migratieRead-only freeze on CPQ data during migration
  • Lopende DocuSign envelopes finaliseren vóór cutoverFinalise running DocuSign envelopes before cutover
  • UAT sandbox refresh + snapshot voor rollbackUAT sandbox refresh + snapshot for rollback
  • Mapping-tabel ontwerp: oude CPQ ID → nieuwe SF IDMapping table design: old CPQ ID → new SF ID

2.2 Deploy nieuwe metadata naar UATDeploy new metadata to UAT

  • Objecten + velden + IntegrationLogObjects + fields + IntegrationLog
  • Apex (PriceResolver, QuoteController, QuoteDocumentService, REST handlers)
  • LWC (quoteProductSelector, quoteLineEditor, discountValidator, quoteDocumentPanel)
  • Custom approval-engine uit DMS CMS Solution TechnetixCustom approval engine from DMS CMS Solution Technetix
  • Permission Sets, Lightning App, Page Layouts

2.3 Initial sync vanuit ExactInitial sync from Exact

  • Product2 (Hardware), Pricebook2 + PBE per tier, AccountProductPrice__c
  • Validatie: aantallen, prijzen, currencies kloppen met ExactValidation: counts, prices, currencies match Exact

2.4 Data-conversie — alles overzettenData conversion — convert everything

  • CPQ Contracted Prices → AccountProductPrice__c
  • CPQ Quotes (alle statussen) → standaard Quote + mapping vasthoudenretain mapping
  • CPQ Quote Lines → QuoteLineItem (aantallen, prijzen, kortingen, line-status)(quantities, prices, discounts, line status)
  • PDF’s + ondertekende documentenPDFs + signed documentsContentDocumentLinks opnieuw leggenre-link ContentDocumentLinks
  • DocuSign envelope-historie koppelen aan nieuwe Quote-recordslinked to new Quote records
  • Advanced Approvals → custom approval-enginecustom approval engine:
    • Object/veld-mapping bepalen op basis van DMS CMS Solution Technetix analyseDetermine object/field mapping based on DMS CMS Solution Technetix analysis
    • Open approvals → live records in custom engine met juiste Quote-referentiesOpen approvals → live records in custom engine with correct Quote references
    • Historische approvals → archief-records (datum, approver, level, uitkomst, comments)Historical approvals → archive records (date, approver, level, outcome, comments)
    • Approval-rule definities migreren naar custom engine configuratieMigrate approval rule definitions to custom engine config
  • Conversiescripts (Apex Batch + Python via Bulk API) getest op productiekopieConversion scripts (Apex Batch + Python via Bulk API) tested on production copy
  • Mapping-tabel persistent opgeslagen voor traceabilityMapping table persisted for traceability

2.5 CPQ + Advanced Approvals uninstallCPQ + Advanced Approvals uninstall

  • Verifiëren dat conversies geslaagd zijn (geen openstaande CPQ-referenties)Verify conversions succeeded (no dangling CPQ references)
  • Flows op CPQ-objecten deactiveren via FlowDefinition APIDeactivate flows on CPQ objects via FlowDefinition API
  • Soft-deleted custom fields permanent erasen via Setup UIPermanently erase soft-deleted custom fields via Setup UI
  • Profile page-layout assignments handmatig aanpassenManually adjust profile page-layout assignments
  • Destructive deploys (zie scripts/cleanup/, deploy-empty/, destructiveChanges-cpq-lightning-pages.xml)Destructive deploys (see scripts/cleanup/, deploy-empty/, destructiveChanges-cpq-lightning-pages.xml)
  • Package uninstall: Salesforce CPQ + Advanced Approvals (zie CPQ_CLEANUP_PLAN.md, CPQ_UNINSTALL_ERRORS_*.md)Package uninstall: Salesforce CPQ + Advanced Approvals (see CPQ_CLEANUP_PLAN.md, CPQ_UNINSTALL_ERRORS_*.md)

2.6 Reports, dashboards, profielenReports, dashboards, profiles

  • Reports/dashboards op CPQ-objecten herbouwen op standaard Quote/QLI + AccountProductPriceRebuild reports/dashboards on standard Quote/QLI + AccountProductPrice
  • Permission Sets toewijzen aan key-users en salesAssign Permission Sets to key users and sales
  • Lightning App + Quote-pagina’s als default voor sales-profielenLightning App + Quote pages default for sales profiles

2.7 Test op UAT + sign-offUAT testing + sign-off

  • End-to-end: nieuwe Quote → PDF → DocuSign → signedEnd-to-end: new Quote → PDF → DocuSign → signed
  • Test op geconverteerde Quotes (bewerkbaar? approvals re-eval?)Test on converted Quotes (editable? approvals re-eval?)
  • Multi-currency, korting elke band, AccountProductPrice overrideMulti-currency, discount each band, AccountProductPrice override
  • UAT door key-users + business sign-off vóór Blok 3UAT by key users + business sign-off before Block 3
Blok 3: Productie go-liveBlock 3: Production go-live Live
Herhaling van Blok 2 op productieRepeat of Block 2 on production met de op UAT gevalideerde scripts en alle geleerde fixes verwerkt.with UAT-validated scripts and all learned fixes applied.
  1. Cutover-window plannen (weekend/avond, communicatie sales + klanten)Plan cutover window (weekend/evening, communicate sales + customers)
  2. Read-only freeze op productie-CPQ; lopende DocuSign envelopes finaliserenRead-only freeze on production CPQ; finalise running DocuSign envelopes
  3. Productie snapshot voor rollbackProduction snapshot for rollback
  4. Deploy nieuwe metadata naar productieDeploy new metadata to production
  5. Initial sync vanuit Exact (Product2 hardware, Pricebook+PBE, AccountProductPrice)Initial sync from Exact (Product2 hardware, Pricebook+PBE, AccountProductPrice)
  6. Data-conversie scripts draaien (zelfde scripts als UAT)Run data conversion scripts (same as UAT)
  7. CPQ + Advanced Approvals uninstallCPQ + Advanced Approvals uninstall
  8. Smoke-tests op productie (kritieke flows)Smoke tests on production (critical flows)
  9. Go-live + hyper-care periodeGo-live + hyper-care period
  10. Mapping-tabel + rollback-snapshot bewaren tijdens hyper-careRetain mapping table + rollback snapshot during hyper-care

Fase 2 — Uitbreiding (volledige sales- & service-cyclus)Phase 2 — Extension (full sales & service cycle)

Start na succesvolle Fase 1 go-liveStarts after successful Phase 1 go-live Aparte business case en planning. Onderstaande blokken zijn een herstructurering van de oorspronkelijke MVP 1/2/3 + Post-MVP fasering.Separate business case and planning. The blocks below are a restructured version of the original MVP 1/2/3 + Post-MVP phasing.
F2-Stap 0: Contractregistratie & KlantafsprakenP2-Step 0: Contract Registration & Customer Agreements
  • Workshop met Sales, Legal, OperationsWorkshop with Sales, Legal, Operations
  • Contracten van klanten met afwijkende afspraken aanleverenSubmit contracts from customers with non-standard agreements
  • CustomerAgreement__c + WarrantyOverride__c objecten aanmakenobjects created
  • Bestaande Customer_SLA__c records koppelen aan CustomerAgreement__cLink existing Customer_SLA__c records to CustomerAgreement__c
  • WarrantyOverrideResolver Apex classWarrantyOverrideResolver Apex class
F2-Blok A: Producten uitbreiden + nieuwe typesP2-Block A: Product extension + new types

Globe inrichting (parallel)Globe configuration (parallel)

  • Globe: Extended Warranty (12 producten, 4 BUs × 3 periodes)Globe: Extended Warranty (12 products, 4 BUs × 3 periods)
  • Globe: Software (NeuronX NMS + NGC)Globe: Software (NeuronX NMS + NGC)
  • Globe: SLA producten (Bronze / Silver / Gold)Globe: SLA products (Bronze / Silver / Gold)
  • Globe: Professional Services / Training / ConsultancyGlobe: Professional Services / Training / Consultancy
  • Globe: Junior Family classificatie (10xx) validerenGlobe: Validate Junior Family classification (10xx)

Salesforce data model + CMDTSalesforce data model + CMDT

  • Product2 nieuwe velden: ProductType__c, IsPhysicalProduct__c, IsWarrantyBearing__c, BaseWarrantyMonths__c, IsEligibleForExtendedWarranty__c, PricingUnit__c, RequiresActivation__c, SLAFlavor__cProduct2 new fields: ProductType__c, IsPhysicalProduct__c, IsWarrantyBearing__c, BaseWarrantyMonths__c, IsEligibleForExtendedWarranty__c, PricingUnit__c, RequiresActivation__c, SLAFlavor__c
  • ExtendedWarrantyMapping__c + 12 records
  • ProductTypeBehavior__mdt + 8 records
  • WarrantyDefault__mdt + records per BU/JF
  • IntegrationSetting__mdt endpoint config

Quote uitbreidenQuote extension

  • ExtendedWarrantyService + extendedWarrantySelector LWC
  • SLA / Software / Services regels in quoteProductSelectorSLA / Software / Services lines in quoteProductSelector
  • Validation rules per ProductTypeValidation rules per ProductType
F2-Blok B: Quote → Order + integratie naar ExactP2-Block B: Quote → Order + integration to Exact
  • Order + OrderItem custom velden (incl. OrderIntegrationStatus__c: New/Sending/Sent/Accepted/Error)
  • DeliverySchedule__c object + LWC (split per leveringsmaand, alleen fysieke producten)object + LWC (split per delivery month, physical products only)
  • QuoteToOrderConverter Apex
  • OrderIntegrationService Apex (MuleSoft outbound)OrderIntegrationService Apex (MuleSoft outbound)
  • End-to-end: Quote → Order → ExactEnd-to-end: Quote → Order → Exact
F2-Blok C: Levering, Assets, GarantieP2-Block C: Delivery, Assets, Warranty
Multi-systeem project.Multi-system project. Eerst vaststellen hoe Exact Globe leveringen structureert.First establish how Exact Globe structures deliveries.
  • Design: Exact levering structuur + SQL DB koppelingDesign: Exact delivery structure + SQL DB link
  • MuleSoft Delivery Confirmation API + SF HandlerMuleSoft Delivery Confirmation API + SF Handler
  • Asset custom velden (alle warranty velden)Asset custom fields (all warranty fields)
  • AssetWarrantyEvent__c + AssetWarrantyCalculator + AssetWarrantyEventLogger
  • Asset creatie (SN + batch) + warranty berekeningAsset creation (SN + batch) + warranty calculation
F2-Blok D: Post-Sales — Activatie, SLA, RepairsP2-Block D: Post-Sales — Activation, SLA, Repairs
  • ServiceActivation__c object + ServiceActivationService Apex (auto-creatie bij Order activatie)object + ServiceActivationService Apex (auto-create on Order activation)
  • Software activatie + SLA activatie UI (LWC)Software + SLA activation UI (LWC)
  • warrantyTimeline + serviceActivationList LWC
  • Case.Asset__c + auto-populate + garantie validatiewarranty validation
  • End-to-end: Order → Activatie → Asset → Warranty → CaseEnd-to-end: Order → Activation → Asset → Warranty → Case
F2-Blok E: Inventory, Subscriptions, OptimalisatiesP2-Block E: Inventory, Subscriptions, Optimisations
  • Inventory sync (read-only inbound)Inventory sync (read-only inbound)
  • Subscription billing voor SLA/SoftwareSubscription billing for SLA/Software
  • Recurring facturatie via Exact GlobeRecurring invoicing via Exact Globe
  • Auto-renewal SLA’sAuto-renewal SLAs
  • Advanced bundling rules
  • Quote templates
  • Mobile UI
  • Customer portal
A

Appendix A: Object Relationship Diagram

Account CustomerAgreement__c Opportunity Product2 Customer_SLA__c WarrantyOverride__c Quote PricebookEntry ExtWarrantyMapping QuoteLineItem DeliverySchedule__c Order OrderItem ServiceActivation__c Asset AssetWarrantyEvent__c Case 1:n 1:n 1:n M-D 1:n 1:n 1:n 1:n 1:n
Figuur A.1 — Volledig Object Relationship Diagram: Account → Opportunity → Quote → Order → AssetFigure A.1 — Full Object Relationship Diagram: Account → Opportunity → Quote → Order → Asset
B

Appendix B: Status Values & Picklists

Alle picklist waardenAll picklist values
Object.VeldObject.FieldWaardenValues
ProductType__cHardware, Software, SLA, ExtendedWarranty, ProfessionalService, Consultancy, IPLicense
PricingUnit__cUnit, Hour, Day, Month, Year, License
ServiceActivation.Status__cPending, Scheduled, InProgress, Completed, Activated, Failed, Cancelled
ServiceActivation.ActivationType__cSoftwareLicense, SLA, ExtendedWarranty, Training, ProfessionalService, Consultancy
Asset.WarrantyStatus__cActive, Expiring Soon (<90d), Extended, Expired
AssetWarrantyEvent.EventType__cBaseWarrantySet, ExtendedWarrantyAdded, WarrantyExtended, WarrantyExpired
Quote.StatusDraft, In Review, Presented, Accepted/Signed, Denied
Quote.DiscountApprovalStatus__cNone, Pending Level 1, Pending Level 2, Approved, Rejected
DiscountReason__cRenewal, Competitive, Volume, Project, Other
Order.OrderIntegrationStatus__cNew, Sending, Sent, Accepted, Error
DeliverySchedule.Status__cPlanned, Confirmed, In Transit, Delivered, Cancelled
Asset.StatusShipped, Installed, Registered, In Repair, Retired
Case.RepairType__cWarranty, Out-of-Warranty, DOA, RMA
C

Appendix C: Junior Code → ClassificatieAppendix C: Junior Code → Classification

BU 05 — Broadband Cable (Hardware)BU 05 — Broadband Cable (Hardware)
0501 — Power Supplies & Chassis (050101-050199)
0502 — Optical Equipment (050201-050299)
0503 — Headend Equipment (050301-050399)
0504 — Amplifiers & Active (050401-050499)
  050407 = NeuronX Hardware (NXT-01, NXHG-01, NXNGC-01)
0505 — DAA/RPD (050501-050599)
0506 — Cables & Accessories (050601-050699)
0507 — In-Home / CPE (050701-050799)
0508 — Passive Network (050801-050899)
  050802=Taps, 050803=Filters, 050809=Wall Outlets
0509 — Installation Materials (050901-050999)
0510 — Test Equipment (051001-051099)
0511 — Webshop / Consumer (051101-051199)
0512 — Components (051201-051299)
BU 06-09 — Fiber, Wireless, Power, Other (Hardware)BU 06-09 — Fiber, Wireless, Power, Other (Hardware)
BU 06 — Fiber Networks
  0601 — Fiber Active (OLTs, SFP, PON, Routers)
  0602 — Fiber Passive (Splitters, Patch Panels)
  0603 — Fiber Installation

BU 07 — Wireless Communications
  0701 — VS Modules
  0702 — Wireless Active Equipment

BU 08 — Powering Solutions
  0801 — Power Supplies
  0803 — Power Distribution
  0804 — Batteries & UPS

BU 09 — Other / Legacy
  0901 — Miscellaneous
BU 10 — Services & Software (Niet-fysiek)BU 10 — Services & Software (Non-physical)
1001 — Broadband Cable Services
  100101=Software, 100103=SLA, 100104=ExtWarranty,
  100105=Consultancy, 100106=ProfServices, 100107=IP

1002 — Fiber Networks Services
  100201=Software, 100203=SLA, 100204=ExtWarranty,
  100205=Consultancy, 100206=ProfServices

1003 — Wireless Communication Services
  100301=Software, 100303=SLA, 100304=ExtWarranty,
  100305=Consultancy, 100306=ProfServices

1004 — Power Solutions Services
  100404=ExtWarranty, 100405=Consultancy, 100406=ProfServices
D

Appendix D: Productcatalogus ReferentieAppendix D: Product Catalogue Reference

Let op:Note: Niet-hardware productcodes zijn het ontwerp. Deze moeten nog in Exact Globe worden ingericht.
Extended Warranty (12 producten)Extended Warranty (12 products)
ModelProduct NameJunior%BU
EXT-WAR-1Y-BC1Y Ext. Warranty Broadband Cable1001044%05
EXT-WAR-3Y-BC3Y Ext. Warranty Broadband Cable1001049%05
EXT-WAR-5Y-BC5Y Ext. Warranty Broadband Cable10010415%05
EXT-WAR-1Y-FN1Y Ext. Warranty Fiber Networks1002044%06
EXT-WAR-3Y-FN3Y Ext. Warranty Fiber Networks1002049%06
EXT-WAR-5Y-FN5Y Ext. Warranty Fiber Networks10020415%06
EXT-WAR-1Y-WC1Y Ext. Warranty Wireless1003044%07
EXT-WAR-3Y-WC3Y Ext. Warranty Wireless1003049%07
EXT-WAR-5Y-WC5Y Ext. Warranty Wireless10030415%07
EXT-WAR-1Y-PS1Y Ext. Warranty Powering1004044%08
EXT-WAR-3Y-PS3Y Ext. Warranty Powering1004049%08
EXT-WAR-5Y-PS5Y Ext. Warranty Powering10040415%08
Professional Services & Consultancy (12 producten)Professional Services & Consultancy (12 products)
ModelProduct NameJuniorUnit
TRAINING-1D-BC/FN/WC/PSTraining per Day (per BU)10x106Day
PROF-SERV-1H-BC/FN/WC/PSExpert per Hour (per BU)10x106Hour
CONSULTANCY-1D-BC/FN/WC/PSConsultancy per Day (per BU)10x105Day
Software (7), SLA (3), NeuronX Hardware (3)Software (7), SLA (3), NeuronX Hardware (3)

Software

ModelNameJunior
NX-NMS-STARTERNeuronX NMS Starter License100101
NX-NMS-BASICNeuronX NMS Basic License100101
NX-NMS-PREMIUMNeuronX NMS Premium License100101
NX-NMS-PREMIUMAINeuronX NMS Premium AI License100101
NX-NGC-STARTERNeuronX NGC Starter License100101
NX-NGC-BASICNeuronX NGC Basic License100101
NX-NGC-PREMIUMNeuronX NGC Premium License100101

SLA

ModelNameFlavor
NX-SUPPORT-BNeuronX Support BronzeBronze
NX-SUPPORT-SNeuronX Support SilverSilver
NX-SUPPORT-GNeuronX Support GoldGold

NeuronX Hardware

ModelNameJuniorSN?
NXT-01NeuronX Transponder v1050407JaYes
NXHG-01NeuronX Headend Gateway v1050407JaYes
NXNGC-01NeuronX Node Gateway Controller v1050407NeeNo
E

Appendix E: Deployment Checklist

Pre-Deployment & Deployment & Post-DeploymentPre-Deployment & Deployment & Post-Deployment

Pre-DeploymentPre-Deployment

  • Backup productieomgevingBack up production environment
  • Validate all tests pass in UAT
  • Prepare rollback plan

Deployment Steps

  • Deploy metadata (custom objects, fields, profiles)
  • Run data migration scripts (ProductType, warranty flags)
  • Load ExtendedWarrantyMapping__c data
  • Validate integrations
  • Smoke tests

Post-Deployment

  • Monitor error logs (first 24 hours)
  • User training sessions
  • Hypercare period (1 week)

Presentation — Why Contract Registration in Salesforce?

Meeting preparation deck — Legal, Sales & PLM — March 2026 • All slides in English

1
We Are Building a New Salesforce Platform — And Contracts Are the Foundation
Legal • Sales • PLM — March 2026

Technetix is building the Technetix Salesforce Platform — a completely new, custom-built commercial platform that covers the full customer lifecycle:

📋
Contracts
Customer agreements drive pricing, warranty, SLA and order conditions across the entire platform.
💰
Products & Quoting
New product types: hardware, extended warranty, software, SLA, professional services — all quotable in Salesforce.
📦
Orders & Assets
Orders sent to Exact Globe via MuleSoft. Delivered hardware becomes an Asset with warranty tracking in Salesforce.
The starting point for this platform is Contract Registration. Without it, the system cannot correctly apply pricing, warranty terms, SLA levels or order conditions — for any customer, on any quote.
2
The Situation Today: Customer Agreements Are Not in Salesforce
The gap that needs to be closed before the platform can go live

Customer-specific agreements — pricing tiers, warranty terms, SLA levels, payment conditions — currently exist outside of Salesforce. The new platform needs this information to function correctly. Without it, the system has no basis for:

Correct pricing & discount validation
The approval workflow must know the agreed price for a customer — not just the list price — to determine whether a discount needs escalation or is already within the agreed range.
🛡
Correct warranty on delivered assets
When hardware is delivered, Salesforce creates an Asset with a warranty end date. If a customer has agreed-upon non-standard warranty terms, the system must know — otherwise the Asset is created with incorrect data.
🛒
Correct order conditions to Exact Globe
Payment terms, delivery conditions and any T&C deviations flow from the contract into the order sent to Exact Globe. Without a contract record, the order uses standard defaults — which may not match what was agreed with the customer.
📋
Contracted SLA on cases & support
Response time commitments and support scope are defined in the customer agreement. Without a contract record in Salesforce, the system cannot enforce or report on SLA compliance per customer.
3
What We Gain: Benefits of Contract Registration in Salesforce
For Sales, Legal, PLM and Operations
Automatic application of agreed terms
Every quote automatically uses the correct pricebook, maximum discount, warranty terms and SLA level for that customer. No manual lookup required.
👁
Full visibility across teams
Sales, Legal, PLM and Operations all see the same agreed terms on the Account. One source of truth — no version conflicts between teams or individuals.
📈
Proactive contract management
Validity dates, renewal conditions and volume commitments are tracked by the system. Sales can be alerted before a contract expires or a commitment is at risk of not being met.
📄
Reliable audit trail
Every quote, order and asset is linked to the contract terms that were active at that moment. Legal can always answer: what was agreed, when, and on what basis was this order created?
🔒
Controlled exceptions
Orders placed outside a framework agreement are explicitly flagged and handled under defined default conditions — not silently processed with unknown terms.
🚀
Scalable for new product types
As Technetix introduces extended warranty, SLA products, and professional services, contract registration ensures the correct pricing and conditions apply from day one — per customer, per product type.
4
What a Contract Record in Salesforce Is — and Is Not
A structured parameter set, not a copy of the legal document

A CustomerAgreement record in Salesforce is not a replacement for the legal contract PDF. It is a structured set of parameters that the system reads at quote and order time to apply the correct rules automatically.

💰
Pricing & Discounts
Agreed price tier or pricebook, maximum discount % without escalation — applied automatically on every quote for this customer.
🛡
Warranty Terms
Customer-specific warranty duration or extended warranty agreements per product group — overrides the product default when creating assets.
📋
SLA Level
Contracted SLA level (Bronze / Silver / Gold) — used to determine response time targets on Cases and Assets.
📦
Volume & Commitments
Minimum order value or product-specific volume obligations within a period — tracked automatically against actual orders.
📅
Validity & Renewal
Contract start date, end date, and renewal conditions — enables proactive renewal management.
🔧
Delivery & Payment Terms
Agreed Incoterms, payment terms and any deviations from standard T&Cs — passed through to every order for this customer.
5
Master Agreements & Sub-Agreements
One customer can have multiple agreement scopes — Salesforce handles both

Some customers may have a master agreement covering general terms, with separate sub-agreements for specific product lines, projects or periods. Salesforce supports this with a parent–child structure.

📁 Master Agreement (parent)
General terms applicable to all orders: payment conditions, T&C deviations, overall contract value, validity period.

Example: "Customer X — Framework Agreement 2025–2027"
📄 Sub-Agreement (child)
Specific terms for a product line, BU or project: special pricing, extended warranty for specific products, volume commitment for a campaign.

Example: "Customer X — NeuronX Volume Deal Q1 2026"
How Salesforce resolves the right terms at quote time
  1. Look up active agreements on the Account
  2. Check for a sub-agreement matching the product type or product group
  3. If found: apply sub-agreement terms (most specific wins)
  4. If not found: fall back to master agreement terms
  5. If no agreement at all: apply standard Technetix terms and flag the quote
Result: The sales rep never needs to look up contract details manually. Salesforce applies the correct terms automatically — every time.
6
What We Need to Model: Contract Parameter Inventory
Known parameters — to be confirmed, extended and prioritised by Legal, Sales and PLM

The table below lists the parameters we expect to need. This is not exhaustive — Legal and Sales must review, add any missing parameters, confirm ownership, and indicate priority.

ParameterDescriptionOwnerPriority
Agreed price tier / pricebookWhich pricebook applies to this customer (Tier A / B / custom)SalesMust have
Maximum discount %The highest discount Sales may apply without escalation for this customerSalesMust have
Warranty termsStandard or agreed warranty duration per product / product group; deviations from defaultMust have
SLA levelContracted SLA level (Bronze / Silver / Gold) with response time commitmentsMust have
Payment termsStandard or agreed deviation (e.g. 60 days, prepayment)Must have
Delivery terms (Incoterms)EXW, DAP, DDP, etc. — agreed per contract or customerMust have
Contract validity periodStart date, end date, and renewal conditionsMust have
Minimum order value / volumeContracted minimum spend or quantity within a defined periodSalesTo confirm
Volume commitment (product-specific)Obligation to purchase specific products or product lines within a periodSalesTo confirm
T&C deviationsAny clauses that deviate from standard Technetix Terms & ConditionsTo confirm
Ordering without contractConditions under which a customer may order without a framework agreement, and which default terms applyTo confirm
Training & consultancy conditionsSpecial pricing or conditions for Professional Services / Consultancy productsPLMOpen
Software licence termsPer-seat, per-year, perpetual — agreed per customer or always standard?PLMOpen
7
Actions: What Each Team Needs to Deliver
To unblock the design and build of the contract data model
  • Legal Deliver the complete list of all contractual parameters and clauses that can deviate from standard terms — including conditions under which customers may order without a framework agreement.
  • Sales Provide an overview of all active customers with customer-specific pricing, discount levels or volume commitments that need to be registered as the first contract records in Salesforce.
  • PLM Confirm the warranty defaults per product and product group (BU). Identify any product groups where customer-specific warranty deviations are already in use.
  • PLM Clarify licensing and service terms for Software, Training and Consultancy products — needed to determine which parameters apply per customer agreement.
  • All teams Review the parameter table on the previous slide. Add any missing parameters, confirm ownership, and indicate which are needed for initial go-live versus a later phase.
  • Legal Sales Confirm whether sub-agreements (per product line or project) are needed for existing customers — or whether a single agreement per Account is sufficient for the first phase.
Goal: Complete parameter inventory delivered to the Salesforce team within 2 weeks. This unblocks the design of the CustomerAgreement__c data model — which is Step 0 of the entire platform build.

VersiehistorieVersion History

Alle versiesAll versions
VersieVersionDatumDateWijzigingenChanges
1.02026-01-15Initiële architectuurInitial architecture
2.02026-01-19Dynamische forecast, kortingsgoedkeuring, assets, repairsDynamic forecast, discount approval, assets, repairs
3.02026-03-02Forecast module verwijderdForecast module removed
v4.02026-03-03Volledige documentherstructurering. Business lifecycle als rode draad. Producten → Offerte → Korting → Orders → Levering → Post-Sales. Contractregistratie als Stap 0. Extended Warranty (% per BU), Professional Services, Software, SLA, ServiceActivation. Asset groeperingsregels, Multi-systeem garantie-integratie. CMDT (ProductTypeBehavior, WarrantyDefault, IntegrationSetting). Technische architectuur met Apex classes en LWC components.Full document restructuring. Business lifecycle as the guiding thread. Products → Quote → Discount → Orders → Delivery → Post-Sales. Contract Registration as Step 0. Extended Warranty (% per BU), Professional Services, Software, SLA, ServiceActivation. Asset grouping rules, Multi-system warranty integration. CMDT (ProductTypeBehavior, WarrantyDefault, IntegrationSetting). Technical architecture with Apex classes and LWC components.
v5.02026-04-28Gefaseerde implementatieaanpak ingevoerd. Nieuwe sectie 1B “Implementatieaanpak: 2 Fasen” toegevoegd. Fase 1 — CPQ Replacement (Quote-only): vervangt Salesforce CPQ + Advanced Approvals door custom CPQ op standaard Salesforce, met nieuw AccountProductPrice__c object (vervanger CPQ Contracted Prices, sync vanuit Exact via MuleSoft door Twan), PriceResolver ladder, custom approval-engine uit DMS CMS Solution Technetix, PDF + DocuSign, multi-currency. Alleen hardware (BU 05-09). Opgeleverd in 3 blokken: Blok 1 (bouwen in TechnetixDev2), Blok 2 (deploy + alles converteren + uninstall op UAT), Blok 3 (zelfde op productie). Fase 2 — Uitbreiding: CustomerAgreement__c, nieuwe producttypen, Quote → Order, Assets, garantie en post-sales. Build List (sectie 13) herschreven volgens dezelfde fasering. CustomerAgreement verschoven van Stap 0 naar Fase 2.Phased implementation approach introduced. New section 1B “Implementation Approach: 2 Phases” added. Phase 1 — CPQ Replacement (Quote-only): replaces Salesforce CPQ + Advanced Approvals with custom CPQ on standard Salesforce, with new AccountProductPrice__c object (CPQ Contracted Prices replacement, synced from Exact via MuleSoft by Twan), PriceResolver ladder, custom approval engine from DMS CMS Solution Technetix, PDF + DocuSign, multi-currency. Hardware only (BU 05-09). Delivered in 3 blocks: Block 1 (build in TechnetixDev2), Block 2 (deploy + convert all + uninstall on UAT), Block 3 (same on production). Phase 2 — Extension: CustomerAgreement__c, new product types, Quote → Order, Assets, warranty and post-sales. Build List (section 13) rewritten following the same phasing. CustomerAgreement moved from Step 0 to Phase 2.