⚙ 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 delivered9 capabilities
#
Capability
OmschrijvingDescription
1
ContractregistratieContract Registration
CustomerAgreement 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)
2
Uitgebreide productverkoopExtended product sales
Niet 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
3
Guided Selling & Quoting
Opportunity → 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
Configureerbaar 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
5
Order creatie & integratieOrder creation & integration
Quote → Order conversie met automatische doorzetting naar Exact Globe via MuleSoftQuote → Order conversion with automatic forwarding to Exact Globe via MuleSoft
6
Asset registratieAsset registration
Automatische 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
7
Garantie & verlengingWarranty & extension
Base 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
8
Service activatieService activation
Na 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
9
Repairs & Cases
Case-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 required2 items
OnderwerpSubject
Status
Wat moet duidelijk wordenWhat needs to be clarified
Forecasting
OnduidelijkUnclear
Business heeft nog niet geformuleerd wat wenselijk is. Opties: forecast per klant per maand, of verwachte productafname.
Facturatie & administratie van diensten
OnduidelijkUnclear
Onduidelijk hoe SLA’s, garantieverlengingen en software gefactureerd worden in Exact Globe.
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 function
Vervangende oplossingReplacement solution
TechnologieTechnology
Productconfiguratie
ProductType__c classificatie + gedragsregels per typeProductType__c classification + behaviour rules per type
Leidend principeGuiding principleHet 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
Figuur 1B.1 — Faseringsoverzicht: Fase 1 (3 blokken) → Fase 2Figure 1B.1 — Phasing overview: Phase 1 (3 blocks) → Phase 2
Doelstelling Fase 1Phase 1 objectiveVervang 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
BelangrijkImportantDit 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.
VeldField
Type
OmschrijvingDescription
Account__c
Lookup(Account)
Klant waarvoor de prijs geldtCustomer the price applies to
Product__c
Lookup(Product2)
Product waarvoor de prijs geldtProduct the price applies to
Externe sleutel uit Exact — precieze structuur in afstemming met Twan/MuleSoftExternal key from Exact — exact structure in alignment with Twan/MuleSoft
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
Anders: PricebookEntry uit Account.DefaultPricebook__c → gebruik die prijsOtherwise: PricebookEntry from Account.DefaultPricebook__c → use that price
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
Product2 — bestaande 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
Quote + QuoteLineItem — standaard 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__c — foutafhandeling inbound integratieserror handling for inbound integrations
Approval-engine: hergebruik uit DMS CMS Solution TechnetixApproval engine: reuse from DMS CMS Solution Technetix
Bron-repoSource repoDe 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
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 TechnetixDev2Greenfield
UitgangssituatieStarting positionHet 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)
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%+
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 UATHigh-risk
Belangrijk: vooraf grondig plannenImportant: thorough up-front planningBlok 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)
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 everythingBevestigde 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.
PDF’s + ondertekende documentenPDFs + signed documents — ContentDocumentLinks 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-historie — koppelen aan nieuwe Quote-recordslink to new Quote records
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
Bestaande kennis hergebruikenReuse existing knowledgeIn 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
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-liveLive
Geleerde lessen uit Blok 2 verplicht verwerkenLessons learned from Block 2 must be incorporatedBlok 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
Cutover-window plannenPlan cutover window — weekend / avond, communicatie naar sales en klantenweekend / evening, communicate to sales and customers
Deploy nieuwe metadataDeploy new metadatanaar productie (zelfde package als Blok 2)to production (same package as Block 2)
Initial syncInitial syncvanuit Exact: Product2 (Hardware), Pricebook+PBE per tier, AccountProductPrice__cfrom Exact: Product2 (Hardware), Pricebook+PBE per tier, AccountProductPrice__c
Data-conversie scripts draaienRun data conversion scripts(zelfde scripts als UAT, geverifieerd)(same scripts as UAT, verified)
CPQ + Advanced Approvals uninstallCPQ + Advanced Approvals uninstall(zelfde procedure als UAT)(same procedure as UAT)
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)
Go-liveGo-live+ hyper-care periode (paar dagen extra ondersteuning, oncall sales)+ hyper-care period (few days extra support, sales oncall)
Mapping-tabel + rollback-snapshot bewarenRetain mapping table + rollback snapshotvoor 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-liveFase 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.
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)
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).
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 Type6 van 7 nog niet ingerichtof 7 not yet configured
ProductType
Status Globe
OpmerkingRemark
Hardware (05-09)
IngerichtConfigured
Producten en prijzen worden gesynchroniseerd via MuleSoftProducts and prices are synchronised via MuleSoft
Software (1001-01)
Nog nietNot yet
Productcodes en licentiestructuur moeten worden aangemaaktProduct codes and licence structure must be created
Extended Warranty (10xx-04)
Nog nietNot yet
Percentage-berekening in Salesforce via ExtendedWarrantyMapping__cPercentage calculation in Salesforce via ExtendedWarrantyMapping__c
Professional Services (10xx-06)
Nog nietNot yet
Uurtarief/dagtarief producten moeten worden aangemaaktHourly/daily rate products must be created
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)
Services & Software Business Unit (prefix 10)Services & Software Business Unit (prefix 10)
Suffix
SubcategorieSubcategory
ProductType
Fysiek?Physical?
01
Software Licenses
Software
NeeNo
03
Service Level Agreements
SLA
NeeNo
04
Extended Warranty
ExtendedWarranty
NeeNo
05
Consultancy
Consultancy
NeeNo
06
Professional Services / Training
ProfessionalService
NeeNo
07
IP Licenses / Other
IPLicense
NeeNo
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 ModelBestaand + NieuwExisting + New
Bestaande velden (in productie)Existing fields (in production)
VeldField
Type
OmschrijvingDescription
ProductCode
Text
Exact product code
TechnetixId__c
Text(100) External ID
Unieke Exact IDUnique Exact ID
Model__c
Text(20)
Productmodel codeProduct model code
PMCore__c
Picklist
Business Unit (5/6/7/8/9/10)
SeniorFamiliy__c
Picklist
Senior Family code (4 cijfers)Senior Family code (4 digits)
JuniorFamily__c
Picklist
Junior Family code (6 cijfers)Junior Family code (6 digits)
InfantFamily__c
Picklist
Infant Family code (8 cijfers, optioneel)Infant Family code (8 digits, optional)
IsSerialNumberItem__c
Checkbox
Serienummer verplicht bij leveringSerial number required at delivery
IsActive
Checkbox
Product actiefProduct active
Nieuwe velden (toe te voegen)New fields (to be added)
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.
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.
VeldField
Type
OmschrijvingDescription
ExtensionProduct__c
Lookup(Product2)
Het Extended Warranty productThe Extended Warranty product
TargetBU__c
Text
Hardware BU codeHardware BU code
TargetSeniorFamilies__c
Long Text
Optioneel: specifieke Senior families (comma-separated)Optional: specific Senior families (comma-separated)
ExtensionYears__c
Number
Aantal jaren verlenging (1, 3, 5)Number of years extension (1, 3, 5)
ExtensionMonths__c
Number
Aantal maanden (12, 36, 60)Number of months (12, 36, 60)
PercentOfHardware__c
Percent
Percentage van hardware prijs (4%, 9%, 15%)Percentage of hardware price (4%, 9%, 15%)
IsActive__c
Checkbox
Actief ja/neeActive yes/no
Configuratiedata (12 records — 4 BUs × 3 periodes)Configuration data (12 records — 4 BUs × 3 periods)
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.
Sync acties in SalesforceSync actions in Salesforce
Upsert Product2 op TechnetixId__cUpsert Product2 on TechnetixId__c
Vul ProductType__c en IsPhysicalProduct__c op basis van Junior code afleidingPopulate ProductType__c and IsPhysicalProduct__c based on Junior code derivation
Vul IsWarrantyBearing__c en BaseWarrantyMonths__cPopulate IsWarrantyBearing__c and BaseWarrantyMonths__c
Upsert Pricebook2 per pricing tierUpsert Pricebook2 per pricing tier
Upsert PricebookEntry per (Pricebook2 + Product2)Upsert PricebookEntry per (Pricebook2 + Product2)
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).
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. NewBLOKKERBLOCKER
ComponentComponent
Status
Details
Customer_SLA__c
BestaatExists
2 records in productie. Gekoppeld aan Cases.2 records in production. Linked to Cases.
Customer_SLA__c → Case
BestaatExists
Response/fix tijden worden al toegepast.Response/fix times are already being applied.
CustomerAgreement__c
NieuwNew
Paraplu-object voor raamovereenkomsten.Umbrella object for framework agreements.
Apex class voor override lookup.Apex class for override lookup.
Contractinhoud
OnbekendUnknown
BLOKKERBLOCKER — input van Business/Legal vereist.input from Business/Legal required.
4.3 Design: Twee-lagen Model (diagram)4.3 Design: Two-Layer Model (diagram)
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
Einddatum (leeg = onbepaalde tijd)End date (empty = indefinite)
AutoRenew__c
Checkbox
Automatisch verlengen bij verstrijkenAuto-renew upon expiry
RenewalNoticeDays__c
Number
Aantal dagen voor einddatum dat Sales een alert ontvangtNumber of days before end date that Sales receives an alert
ContractReference__c
Text
Extern contractnummer (referentie naar Legal documentatie)External contract number (reference to Legal documentation)
Notes__c
Long Text
Opmerkingen / bijzonderhedenNotes / special conditions
Pricing & kortingPricing & discount
VeldField
Type
OmschrijvingDescription
PricebookId__c
Lookup(Pricebook2)
Overeengekomen prijslijst voor deze klant. Overschrijft de Account default.Agreed pricebook for this customer. Overrides the Account default.
MaxDiscountPct__c
Percent
Maximaal 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__c
Text Area
Toelichting op bijzondere prijsafsprakenNotes on special pricing agreements
Betalings- en leveringsvoorwaardenPayment & delivery terms
VeldField
Type
OmschrijvingDescription
PaymentTermsDays__c
Number
Overeengekomen 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.
Volume- en afnameverplichtingenVolume & purchase commitments
VeldField
Type
OmschrijvingDescription
MinOrderValue__c
Currency
Minimale contractuele afname (bedrag) binnen de looptijd of per periode.Minimum contractual purchase value within the term or per period.
MinOrderPeriod__c
Picklist
Periode 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__c
Text Area
Toelichting op product-specifieke afnameverplichtingenNotes on product-specific volume obligations
Afwijkingen van standaard T&CDeviations from standard T&C
VeldField
Type
OmschrijvingDescription
HasTCDeviations__c
Checkbox
Vlag: 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__c
Long Text
Samenvatting 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 contractNader 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:
ScenarioScenario
SituatieSituation
Huidig voorstelCurrent proposal
Beslissing 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 / Sales — bevestigen 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 / Sales — bepalen 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 / Sales — bevestigen 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
VeldField
Type
OmschrijvingDescription
Name
Auto Number
WO-{0000}
CustomerAgreement__c
Master-Detail
Bovenliggend contractParent contract
Account__c
Lookup(Account)
Klant (formula, voor rapportage)Customer (formula, for reporting)
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
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):
ObjectObject
Voorbeeld parametersExample parameters
Impact opImpact on
Status
WarrantyOverride__c
Afwijkende base garantie per product / BU / familyNon-standard base warranty per product / BU / family
Response- en fix-tijden, support scope, werkdagenResponse and fix times, support scope, working days
Cases, AssetsCases, Assets
Bestaat alAlready exists
Overig — nader te bepalenOther — to be determined
Productlijn-specifieke prijsafspraken, volume-commitments per productProduct-line specific pricing, per-product volume commitments
Quote, OrderQuote, Order
Input 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.
Welke klanten hebben afwijkende base garantie?Which customers have a non-standard base warranty?
OnbekendUnknown
Systeem 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?
OnbekendUnknown
Nodig voor WarrantyOverride__c recordsRequired for WarrantyOverride__c records
Overige contractparameters met procesimpact?Other contract parameters with process impact?
OnbekendUnknown
Onmogelijk 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?
OnbekendUnknown
Nodig voor CustomerAgreement__c recordsRequired for CustomerAgreement__c records
Gevraagde actie:Required action:
Contracten aanleveren van klanten met afwijkende afsprakenSubmit contracts from customers with non-standard agreements
Overzicht van alle contractparameters met impact op garantie, pricing, levering, betalingOverview of all contract parameters with impact on warranty, pricing, delivery, payment
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 ModelQuote + QLI + DeliverySchedule
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).
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
Stappen in het verkoopprocesSteps in the sales process
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).
Systeem detecteert op de QuoteLineItem:System detects on the QuoteLineItem:IsWarrantyBearing__c = TRUEenandIsEligibleForExtendedWarranty__c = TRUE.
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.
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.
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):
PrioriteitPriority
MatchMatch
OmschrijvingDescription
1 meest specifiekmost specific
TargetBU__c + TargetSeniorFamilies__c
Garantieverlenging 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 fallbackfallback
TargetBU__c
Garantieverlenging 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__c
TargetBU__c
TargetSeniorFamilies__c
WarrantyDurationMonths__c
PricePercentage__c
EXT-WAR-1Y-BC
05
(leeg = alle families)(empty = all families)
12
4%
EXT-WAR-3Y-BC
05
(leeg = alle families)(empty = all families)
36
9%
EXT-WAR-5Y-BC
05
(leeg = alle families)(empty = all families)
60
15%
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:
ObjectObject
VeldField
WaardeValue
QuoteLineItem (hardware)
LinkedWarrantyLine__c
Lookup naar de warranty QuoteLineItemLookup to the warranty QuoteLineItem
QuoteLineItem (warranty)
ParentHardwareLine__c
Lookup terug naar de hardware QuoteLineItemLookup back to the hardware QuoteLineItem
QuoteLineItem (warranty)
WarrantyExtensionMapping__c
Lookup 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
Model
Type
PricingUnit
VoorbeeldExample
PROF-SERV-1H-xx
ProfessionalService
Hour
€150/uur€150/hour
PROF-SERV-1D-xx
ProfessionalService
Day
€1,200/dag€1,200/day
TRAINING-1D-xx
ProfessionalService
Day
€1,500/dag€1,500/day
CONSULTANCY-1D-xx
Consultancy
Day
€1,800/dag€1,800/day
IsPhysicalProduct__c = FALSE → geen DeliverySchedule, geen voorraad check, geen garantie.
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.
Optioneel: specifieke productgroepOptional: specific product group
IsActive__c
Checkbox
Regel actiefRule active
Voorbeeld dataExample data
Name
Min
Max
Level
Approver
Delegated
Standaard L1Standard L1
5%
15%
1
Jan (Team Lead)
Piet (Sr. Sales)
Standaard L2Standard L2
15%
—
1
Jan (Team Lead)
Piet (Sr. Sales)
Standaard L2Standard L2
15%
—
2
Maria (Sales Director)
Kees (Finance)
6.5 Validaties & Regels6.5 Validations & Rules
DiscountReason__cverplicht bij PriceDeviation > 0%required when PriceDeviation > 0%
Quote vergrendeling tijdens goedkeuringsproces (Pending Level 1/2)Quote locked during approval process (Pending Level 1/2)
Quote kan niet naar “Sent” of “Signed” als DiscountApprovalStatus ≠ ApprovedQuote cannot move to “Sent” or “Signed” if DiscountApprovalStatus ≠ Approved
Re-evaluatie: wijziging QLIs na goedkeuring → status terug naar NoneRe-evaluation: modifying QLIs after approval → status resets to None
Audit trail via ProcessInstanceStep (standaard Salesforce)Audit trail via ProcessInstanceStep (standard Salesforce)
3-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)
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
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
8.1 Warehouse & Voorraad8.1 Warehouse & InventoryIntegratie 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.
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.
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
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.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.
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.
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.
VeldField
Type
OmschrijvingDescription
Name
Auto Number
SA-{0000}
Account__c / Order__c / OrderItem__c
Lookups
Klant, bron order(regel)Customer, source order (line)
Product__c
Lookup(Product2)
Product dat geactiveerd moet wordenProduct to be activated
Training uitgevoerd, rapport opgeleverdTraining delivered, report submitted
NeeNo
ProfessionalService
Pending → Scheduled → InProgress → Completed
Service geleverd, uren verantwoordService delivered, hours accounted for
NeeNo
Consultancy
Pending → Scheduled → InProgress → Completed
Consultancy afgerondConsultancy completed
NeeNo
10.2 Service Activatie Proces Flow (diagram)10.2 Service Activation Process Flow (diagram)
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
Quote waaruit SLA verkocht isQuote from which SLA was sold
SourceOrder__c
Lookup(Order)
Order waaruit geactiveerdOrder from which activated
SLAProduct__c
Lookup(Product2)
Verkochte SLA productSold SLA product
BillingFrequency__c
Picklist
Annual / Quarterly / Monthly
AnnualPrice__c
Currency
Jaarlijkse prijsAnnual price
AutoRenew__c
Checkbox
Automatisch verlengenAuto-renew
10.4 Repairs & Cases10.4 Repairs & Cases
VeldField
Type
OmschrijvingDescription
Asset__c
Lookup(Asset)
Gekoppeld assetLinked asset
Customer_SLA__c
Lookup
SLA agreement
RepairType__c
Picklist
Warranty / 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 Issues3 items
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
Overzicht pending activationsOverview of pending activations
—
warrantyTimeline
Visuele warranty timeline op Asset pageVisual warranty timeline on Asset page
—
approvalDashboard
Openstaande 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 1BEerst 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.
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
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 UATHigh-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
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
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
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-liveLive
Herhaling van Blok 2 op productieRepeat of Block 2 on productionmet de op UAT gevalideerde scripts en alle geleerde fixes verwerkt.with UAT-validated scripts and all learned fixes applied.
Smoke-tests op productie (kritieke flows)Smoke tests on production (critical flows)
Go-live + hyper-care periodeGo-live + hyper-care period
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-liveAparte 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.
ServiceActivation__cobject + ServiceActivationService Apex (auto-creatie bij Order activatie)object + ServiceActivationService Apex (auto-create on Order activation)
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
Look up active agreements on the Account
Check for a sub-agreement matching the product type or product group
If found: apply sub-agreement terms (most specific wins)
If not found: fall back to master agreement terms
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.
Parameter
Description
Owner
Priority
Agreed price tier / pricebook
Which pricebook applies to this customer (Tier A / B / custom)
Sales
Must have
Maximum discount %
The highest discount Sales may apply without escalation for this customer
Sales
Must have
Warranty terms
Standard or agreed warranty duration per product / product group; deviations from default
Legal
Must have
SLA level
Contracted SLA level (Bronze / Silver / Gold) with response time commitments
Legal
Must have
Payment terms
Standard or agreed deviation (e.g. 60 days, prepayment)
Legal
Must have
Delivery terms (Incoterms)
EXW, DAP, DDP, etc. — agreed per contract or customer
Legal
Must have
Contract validity period
Start date, end date, and renewal conditions
Legal
Must have
Minimum order value / volume
Contracted minimum spend or quantity within a defined period
Sales
To confirm
Volume commitment (product-specific)
Obligation to purchase specific products or product lines within a period
Sales
To confirm
T&C deviations
Any clauses that deviate from standard Technetix Terms & Conditions
Legal
To confirm
Ordering without contract
Conditions under which a customer may order without a framework agreement, and which default terms apply
Legal
To confirm
Training & consultancy conditions
Special pricing or conditions for Professional Services / Consultancy products
PLM
Open
Software licence terms
Per-seat, per-year, perpetual — agreed per customer or always standard?
PLM
Open
This list is illustrative, not exhaustive. Legal and Sales are responsible for delivering the complete inventory of all contractual parameters so they can be correctly modelled in the Salesforce data model.
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.
LegalSales
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.
Volledige 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.0
2026-04-28
Gefaseerde 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.