Configuring and using FNP pricing
FNP availability depends on the supplier's network terms, the vehicle manufacturer and franchise, and the provider data attached to the enquiry. OEC pricing also depends on the enquiry's FNP band and fleet level. A customer integration switch alone does not establish all of these conditions.
Choose the correct network terms first
The enquiry's rateCardType determines which supplier record the eligibility check reads. Changing the other network's FNP settings will not enable this enquiry.
| Enquiry rate card | Terms used for the supplier eligibility check |
|---|---|
VISN_WITH_DI_NETWORK | Supplier service unit's diNetworkTerms |
VISN_NETWORK_OFFERING_SAVI | Supplier service unit's diNetworkTerms |
COST_TYPE_HYBRID_VISN with terms: DI_NETWORK_TERMS | Supplier service unit's diNetworkTerms |
COST_TYPE_HYBRID_VISN with terms: LEASE_TERMS, or no terms value | Customer's supplier service unit terms |
Other rate cards, including the default VISN | Customer's supplier service unit terms |
The records to inspect are:
| Scope | Firestore record | FNP fields |
|---|---|---|
| DI network | accounts/{accountId}/serviceUnits/{serviceUnitId} | diNetworkTerms.fnp.isEnabled, diNetworkTerms.fnp.fnpBand, diNetworkTerms.franchises |
| Customer network | leasecompany/{leaseCompanyId}/suppliers/{accountId}/serviceUnits/{serviceUnitId} | fnp.isEnabled, fnp.fnpBand, franchises |
| Customer configuration | leasecompany/{leaseCompanyId} | config.integrations, fleetLevel |
| Enquiry pricing inputs | The relevant enquiry document's enquiry object | enquiry.fnp, enquiry.fleetLevel, vehicle data in enquiry.car |
Source: network selection in the supplier service and DI network rate card predicate.
Enable FNP on DI network terms
- In Admin, open Supplier Search and select the supplier service unit.
- Select the DI Network Terms tab on Supplier Details.
- Choose Edit, or Add if terms have not yet been recorded. The supplier group must belong to the DI network; the details page displays a message when it does not.
- In Fleet National Pricing (FNP), turn on the switch.
- Choose the agreed FNP Band.
- Confirm the manufacturer is included in the franchise/labour rates section. Use Add Franchise where needed and enter the applicable commercial rates.
- Save the DI network terms and reopen the details to verify the FNP indicator and FNP Band Name.
The DI network edit action requires the Admin permission pair SUPPLIER / EDIT_DI_NETWORK_TERMS. Ordinary supplier editing uses SUPPLIER / EDITOR; it is a different permission. The editor route is /supplier/edit-di-network-terms.
The FNP controls bind to fnp.isEnabled and fnp.fnpBand in the form; saving writes them beneath diNetworkTerms. The band is required by this form even when the FNP switch is off. Select NONE when an explicit no-band value is intended. The form also validates other supplier terms, including the nominated dealer manager, so an unrelated validation failure can prevent the FNP change from being saved.
Franchise rows without any labour rate or parts discount are removed by the save transformation. Merely adding a manufacturer label and leaving all its commercial values blank may therefore fail to retain the franchise.
Sources: tab, action and permissions, FNP controls and allowed bands, and validation and save transformation.
Enable FNP on customer network terms
For customer network terms, use the established Supplier Import to set the supplier's has FNP and FNP Band columns, together with its manufacturer/franchise rates. The import's has FNP value is Y or N; it becomes the boolean fnp.isEnabled in the customer supplier service unit record. Use the DI Network Import when updating the DI network in bulk.
The customer web application displays Fleet National Pricing (FNP) and FNP Band in the supplier details products/services summary. This card is a display of the selected network record, not an FNP editor. The summary chooses customer terms for a customer-network record and diNetworkTerms otherwise.
Do not assume that enabling the DI network supplier also enables the same service unit for every customer's own network. Verify the record selected by the enquiry's rate card.
Source: supplier summary terms selection and FNP display.
FNP bands and customer fleet level
The current Admin band dropdown contains:
| Family | Values |
|---|---|
| LA1 | Band 1 LA1, Band 2 LA1, Band 3 LA1, Band 5 (M25) LA1 |
| LA2 | Band 1 LA2, Band 2 LA2, Band 3 LA2, Band 5 (M25) LA2 |
| LA3 | Band 1 LA3, Band 2 LA3, Band 3 LA3, Band 5 (M25) LA3 |
| Ford | Ford Region 22, Ford Region 23 |
| No band | NONE |
In Admin, open Customer Search → Customer Details → Edit and set Fleet Level in the customer details form. Customer editing requires CUSTOMER / EDITOR. The form stores a top-level fleetLevel object with a type and label.
| Fleet Level label | Stored fleetLevel.type |
|---|---|
| Service4Fleet | SERVICE_4_FLEET |
| Platinum Service4Fleet | PLATINUM_SERVICE_4_FLEET |
| Lex Auto | LEX_AUTO |
For OEC descriptions, the backend filters saved menu prices using the fleet level and band supplied from the enquiry. NONE produces no band-matched OEC descriptions; legacy numeric bands are treated as an empty band. MODULUS and OEM do not use this same OEC band-filtering branch. See FNP Bands for price-group and band mappings, including Ford's separate region handling.
Sources: Fleet Level field, fleet level values, and enquiry description filtering.
Customer integration configuration
The Admin customer edit form includes an Integrations section:
- Open Customer Search → Customer Details → Edit → Integrations.
- Edit an existing integration, or choose Add Integration.
- Choose Type label from the environment's lookup list. The form derives Type, Source, and Source label; these derived fields are disabled for direct editing.
- Set Enabled and save the drawer.
- Save the enclosing customer form. Saving the drawer only changes the parent form's integration array.
- Verify the persisted
config.integrationsentry, including itssourceandenabledvalue.
The lookup list is read from configuration data rather than being a complete hard-coded list of currently supported FNP manufacturers. Recognized FNP integrations have Stubbed Service disabled in the UI; the drawer forces useStub to false for sources it recognizes as FNP.
Current integration editor limitation
In the reviewed Admin source, getIntergrationSourceFromType explicitly maps Haynes Pro and DVLA integration types and otherwise defaults to HAYNES_PRO. It does not contain the FNP type-to-source mappings. Therefore, selecting a newly added FNP type can derive an incorrect source even if an FNP label appears in the environment's lookup list. Verify the persisted source before treating a customer as provisioned. If it is wrong or the FNP option is missing, raise the configuration/editor issue through the normal support process; the UI label alone is insufficient evidence.
For the generic backend integration check, MODULUS and OEC use source names FNP_MODULUS and FNP_OEC. OEM uses FNP_<UPPERCASE MANUFACTURER>, for example FNP_KIA. These source identifiers differ from the saved job description providers MODULUS, OEC, and OEM.
Sources: integration form, drawer save and stub behavior, type-to-source mapping, and customer persistence.
Integration switch bypass in current pricing eligibility
The callable helper that decides whether to save FNP descriptions explicitly passes the integration-enabled check for these provider/manufacturer combinations:
| Provider | Manufacturers that bypass this integration-enabled check |
|---|---|
OEC | Vauxhall, Ford |
MODULUS | Peugeot, Citroen |
OEM | Kia and VWG manufacturers: Volkswagen, Audi, Skoda, Seat, Cupra |
This bypass occurs before the generic fnpIntegration.enabled check. It does not bypass supplier fnp.isEnabled, the supported manufacturer/provider mapping, franchise matching, or provider data requirements. The supplier UI eligibility endpoint separately checks the live network terms' FNP flag and franchise; it does not check customer integration switches.
Consequently, an absent/disabled customer FNP integration is not, by itself, proof of why pricing failed for these manufacturers. Conversely, switching it off is not a reliable way to disable their supplier pricing in this implementation. Use the appropriate supplier/network FNP setting when controlling supplier eligibility. Other processes, such as manufacturer VIN exports, have their own integration checks; this bypass is specific to the pricing eligibility helper and must not be generalized to all FNP processing.
Sources: explicit exceptions and remaining gates and supplier UI eligibility. See also Manufacturer VIN File Export.
Provider-specific setup
VWG supplier partner key and service credentials
In Admin, open Supplier Search → Supplier Details → Supplier Information → Edit for the existing service unit. Enter ppsoPartner Key and save. This uses the ordinary SUPPLIER / EDITOR permission. The field is shown only when editing an existing supplier, accepts alphanumeric characters and has a maximum length of 10. Supplier Information displays the saved value as ppsoPartnerKey, with the note Used in PPSO API Call.
The value is saved at accounts/{accountId}/serviceUnits/{serviceUnitId}.ppsoPartnerKey, outside diNetworkTerms. The runtime combines this key with the manufacturer's PPSO brand code. A missing key makes the VWG lookup return no descriptions even when FNP and the franchise are enabled.
The callable service also needs VWG_CLIENT_CREDENTIALS in Secret Manager: the code decodes a base64 JSON array and selects a matching uppercase manufacturer and vehicle type. Configure valid client ID, secret and wholesaler key entries for each required brand/type, using the environment's established secret-management process. Verify the deployed API endpoint and the imported VWG parts/fluid/blacklist data. These are service configuration dependencies, not fields in the customer FNP integration drawer. See Providers and data.
Sources: supplier partner-key editor, field validation, and VWG credential selection.
Kia FNP labour rate
Kia's FNP hourly rate comes from config/settings.kiaFnpLabourRate in the default Firestore database. The aggregated enquiry-details service reads this setting when the enquiry's stored car.make.label is Kia and returns it in partsAndLabourConfig.kiaFnpLabourRate. The jobsheet selects that rate when a Kia FNP description is chosen.
This is an environment-level setting, separate from supplier FNP enablement, supplier band and customer fleet level. No dedicated Admin editor for it was found in the reviewed code; maintain it through the normal environment-configuration workflow. If Kia menus load but labour is missing or wrong, inspect this value and the aggregated response, including whether the stored make agrees with the lookup make. Do not assume the ordinary supplier labour rate is the Kia FNP rate.
Source: aggregated pricing configuration.
Vehicle and franchise prerequisites
The vehicle's manufacturer must map to a supported provider and match the supplier franchise in the relevant network terms. Matching trims whitespace and ignores case. The supplier franchise helper also removes supported LCV suffix forms before comparison. A franchise for another brand in the same manufacturer group is not automatically a match.
The UI prefers car.vrmLookup.make.label when requesting eligibility/descriptions, with fallbacks to other enquiry make fields. Check both lookup data and manually entered make when diagnosing a mismatch. A correct display label elsewhere in the enquiry does not prove the preferred lookup make is correct.
FNP data must also exist for the provider's vehicle key: setting the FNP switch cannot create missing imported vehicle/menu records or a VWG response. Provider-specific VIN, vehicle code, model, and parts prerequisites are described in Providers and Data.
Sources: franchise normalization and manufacturer passed by the enquiry page.
Configuration changes and existing enquiries
There are separate live and saved layers:
| Layer | When it is used | Implication of a configuration change |
|---|---|---|
| Live supplier/network FNP flag and franchises | Supplier eligibility check when opening the enquiry | A reload/reopen rechecks current eligibility. |
Enquiry's fnp and fleetLevel | Inputs passed by the job sheet to retrieve/filter saved descriptions | Updating the supplier band or customer fleet level does not by itself rewrite these enquiry values. |
| Provider descriptions saved for the enquiry | Read by the description retrieval endpoint | Importing new prices or changing enablement does not by itself prove an existing enquiry's saved descriptions have been regenerated. |
| Chosen job lines and parts | The supplier's saved job sheet | Existing selections require separate review; a refreshed menu is not evidence that saved job lines have been repriced. |
Creation paths copy FNP terms to the enquiry. Reassignment has explicit logic to choose the new supplier's relevant terms. Treat corrections to an existing enquiry as a data/reprocessing workflow, following Enquiry Pricing Flow and the debugging runbook, rather than assuming a configuration change has updated every layer.
The web app performs the eligibility check on enquiry-page mount. Its job-sheet FNP fetch effect depends on the enquiry ID and third-party-description mode, rather than every FNP/configuration value. After correcting configuration, save any in-progress work and reopen/reload the enquiry to re-run the UI checks. This reload fetches saved descriptions; it is not a provider import or forced regeneration operation.
Sources: walk-in enquiry snapshot, reassignment terms, and job-sheet retrieval effect.
Supplier job-sheet workflow
- Open the enquiry in the supplier application and open the job sheet.
- Add or amend a supported service/maintenance job line. Existing-line editing remains subject to enquiry state and supplier job-sheet permissions; draft-line editing checks
ALLOW_AMEND_JOB_SHEET. - Search the job description or open the components list. Where eligibility is true and FNP descriptions are available, the description field shows FNP/manufacturer branding and the component list starts with the manufacturer's FNP tab.
- Review the menu description and its parts information. Use the plus/select action to choose the package.
- Complete the applicable parts/fluids and fixed-price selections, then save the parts dialog and job sheet.
The visible branding varies by make:
| Make | FNP label configured in the web app |
|---|---|
| Kia | Business Service Promise |
| Vauxhall | Fleet Service |
| Peugeot, Citroen | Fleet Charter Pricing |
| Ford | Fleet National Pricing |
| Volkswagen, Audi, Skoda, Seat, Cupra | PPSO in the label lookup; the current tab renders the brand icon without the text label |
| Fallback | FNP Job Descriptions |
The FNP icon depends on both eligibility and a non-empty FNP description list. Its absence can therefore mean there are no retrieved descriptions, not just that FNP is disabled. Search requires enough text for the description field's search threshold; the service-line field uses four characters. FNP matches use the loaded descriptions rather than making a new provider request for every search.
View More in the FNP tab reveals the additional Haynes Pro Job Descriptions (With Labour Time) tab, when enabled, and VISN Job Descriptions. It does not retry the FNP request, import additional prices, or refresh provider data. Closing the dialog restores the initial tab visibility.
Sources: service-line eligibility and selection, manufacturer labels, and component dialog and View More.
What changes when a menu is selected
| Provider/workflow | Supplier experience |
|---|---|
| OEC, including Vauxhall | The job is a catalogue line with an aggregate menu price. A separate editable labour charge is not added to that aggregate menu price. The parts tooltip omits individual prices. |
| Ford, carried through OEC | Manufacturer-specific parts and fixed-price selection exists. If multiple fixed prices are supplied, the supplier must select one; the dialog reports Selection of fixed price is required otherwise. |
| MODULUS | Non-catalogue line with imported labour time and a parts-selection workflow. The UI does not treat the menu as an OEC aggregate fixed price. |
| OEM, including Kia and VWG | Non-catalogue line with labour time and parts/fluids selection. Kia uses the dedicated Kia FNP labour rate when selected. Missing non-fluid VWG part prices prevent package selection; fluid prices are entered by the supplier. |
All three provider configurations skip the standard parts-discount rule. This does not mean all providers use the same price calculation or allow the same edits. Provider metadata declares OEC parts as READ_ONLY and MODULUS/OEM as USER_SELECTION, but the current parts-dialog rendering also uses job state and manufacturer-specific behavior; the metadata alone does not determine whether a dialog is editable. See Enquiry Pricing Flow for calculation details.
An incomplete package can be visible in the FNP list with the warning This cannot be added because there is missing information in this package. The select action is withheld, and incomplete packages are excluded from the service-line search results. This is different from the entire menu failing to load. Use the package-data checks in the debugging runbook.
Parts selection must be saved. Closing a selection dialog without completing it can leave an isFnpPartLinesNotSaved validation state on the job line. This is a job-sheet completion issue, not a missing FNP integration.
Sources: provider UI configuration, labour-line setup, Ford selection and parts validation, and incomplete-package display.
Verify a new setup
Use a vehicle known to have provider data in the target environment and a supplier with the correct franchise. Confirm the relevant network's FNP flag, band, customer fleet level, and any required upstream integration configuration before creating the test enquiry. Open its supplier job sheet, select a menu, complete its parts selections, and verify the saved job-line price and source.
For an older enquiry, compare its saved pricing inputs and provider descriptions with the current configuration before assuming the setup failed. The debugging runbook provides the evidence to collect and the order of checks.