Skip to main content

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>...)
  • addToPendingSubmission creates a pending submission with a numeric id.
  • submitPendingSubmissions submits it. The order receives its commission number and orderStatus 10, 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.
  • validateRemainingQuantity checks quantity alone, against the carline's allocation remainder. The frontend sends it a second time immediately before the submit, with requestKey=pending scoping 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 comments field (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

FieldMeaning
commissionId + commissionNumYearsubmitted-order key (two parameters)
pending-submission idnumeric surrogate, meaningful until the submit
updateIdoptimistic-concurrency token on updateVehicleDetails
restrictionIdtrim-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 submitPendingSubmissions checks 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 validateRemainingQuantity returns.