AccessAudi Ordering
How an order is placed on AccessAudi, the Audi US OMS. The ingestion of AccessAudi data is covered by accessaudi Source. The implementation's choices are in Ordering Decisions.
Everything here was observed in recorded dealer sessions, except the items under
Open questions and content marked dealer-reported. The capture record
lives in ppm-ordering-services under docs/oems/audi/.
Transport
Every call is an HTTP POST to /lr/group/audi-us/home with the call name in
p_p_resource_id, a form-urlencoded body, and a JSON response. Three cookies authenticate
a session: PD-H-SESSION-ID, EncryptCookie, and AMWEBJCT!%2Flr!JSESSIONID. A CSRF
token (Liferay.authToken) is fetched once per session from the home-page HTML and sent as
X-CSRF-TOKEN on every POST.
An expired session often returns HTTP 200 with SAML login HTML instead of JSON. Expiry is
detected by checking the response body for pkmslogin.lua, saml20/login, or
SAMLRequest.
The order flow
A stock order (order type 2, SHIP) is placed with this sequence:
getModels(carline, modelYear)
getExteriorColors(carline, modelYear, model)
getOptions(carline, modelYear, model) options + their rules
getInteriorColors(carline, modelYear, model, exterior)
getAdditionalCharges(modelYear, model, exterior, interior, options)
validateRemainingQuantity(carline, modelYear, quantity)
addToPendingSubmission(carline, year, model, exterior, interior,
options=<CSV>, ordertype, quantity, comments, msrp)
validateRemainingQuantity(..., requestKey=pending)
submitPendingSubmissions(idArr[]=<pending id>...)
addToPendingSubmissioncreates a pending submission with a numeric id.submitPendingSubmissionssubmits it. The order receives its commission number andorderStatus10, and the ordering flow ends there.- Transmission to the factory happens later, outside the dealer session. Until then the
order can still be modified through
updateVehicleDetails; dealers report it locks once transmitted.
Notable behavior:
- A pending submission consumes allocation before any submit.
validateRemainingQuantitychecks quantity alone, against the carline's allocation remainder. The frontend sends it a second time immediately before the submit, withrequestKey=pendingscoping the remainder to the pending submissions.- No idempotency key exists on any of these calls, so a retry is indistinguishable from a
second order. A submit whose outcome is unknown is reconciled by re-reading the pending
submissions (
ajaxGetPendingSubmissions). - The pending submission carries a free-text
commentsfield (1,000 characters).
Order type 1 (SOLD) places customer orders through separate calls and is out of scope.
Option rules
getOptions also returns modelOptionRulesBean, the option compatibility rules for its
(carline, modelYear, model). Rules attach at three levels — the model, each
exterior/interior color, and each option — and each level lists required options and
mutually exclusive options.
The OMS enforces these rules in its frontend. It offers no validation call, and it accepted a pending submission that violated them.
The frontend also auto-selects: when a required option group is unsatisfied and a member is available, it selects that member without notifying the dealer.
Allocation
Allocation is assigned per carline and consumed by ordering. A submit requires an active allocation period and remaining quantity for the carline and restriction. Pending submissions from every session count against that remaining quantity, so the frontend re-reads it immediately before submitting, and a client must do the same.
Audi will still assign all allocated units to the dealer regardless of how many configurations a dealer submits. When an unconfigured unit is assigned, Audi decides the configuration to produce. Dealers report this; it has not been observed in a capture. See Ordering Decisions.
checkSendToFactoryWebServiceFlag reports the downstream factory service's availability.
Pricing
The msrp sent with a pending submission is computed by the client: the base model price,
the destination charge (getAdditionalCharges), and the prices of the selected options and
colors, all read from the same model's responses. Prices differ per model.
Identifiers
| Field | Meaning |
|---|---|
commissionId + commissionNumYear | submitted-order key (two parameters) |
| pending-submission id | numeric surrogate, meaningful until the submit |
updateId | optimistic-concurrency token on updateVehicleDetails |
restrictionId | trim-level allocation-restriction key |
The OMS commission number (AB1234 format) is a different identifier from the factory
commission number (numeric) and is reissued when an order is traded between dealers. The
mirror maps it to order_number; see accessaudi Source.
Open questions
- Whether
submitPendingSubmissionschecks option rules. A dealer test settles it: submit one pending submission that violates a rule and record the response. - Whether a submitted row leaves the pending submissions, and what a refused
validateRemainingQuantityreturns.