BMW ZA Inventory Source
Status (2026-07-03): All ZA path mappings below are implemented in
sources/za_inventory.py(_ZaInventoryProductEntity). Only rows where a ZA path exists are included here.
ZA (ZoneAvailability) is the US market inventory feed. BQ US InvSearch uses its own coding (single-letter codes, Title Case strings, short numeric codes) that differs from Stolo's EU enums.
BmwInventoryEntity field mapping
Columns: BQ (source of truth) | Entity field | ZA path | BQ backfill
Legend: ✓ = direct mapping · — = not available / not applicable · ✅ N = BQ check passed, N matching rows · ❌ fmt = concept maps but value format differs · ❌ EU = EU-only value
Manual check procedure: For each row, values were pulled from the ZA fixture and BQ public_invsearchvehicles and compared by eye. A ✓ in the manual check column means the mapping was confirmed by a human reviewer.
Fields with ZA source
| BQ column | Entity field | ZA path | BQ backfill | manual check | code note |
|---|---|---|---|---|---|
| vin | vin | vin | ✓ | ✓ | |
| modelcode | manufacturer_code | manufacturerCode | ✓ | ✓ | |
| modeldescription | model_description | title | ✓ | ✓ | ZA title = e.g. X5 xDrive40i (✅ 15,155 rows in BQ) |
| modelyear | model_year | modelYear | ✓ | ✓ | Stolo has no model year; ZA is the source for this field |
| bodystyle_code | body_type | bodyType | ✓ | ✓ | different format (ZA: 2-letter abbreviation e.g. SH, BQ: numeric code e.g. 05) |
| fueltype | fuel_type | fuelType | ✓ | ✓ | different format (ZA: Petrol, BQ: O) |
| enginedrivetype_name | drive_type | driveTrain | ✓ | ✓ | different format (ZA: Rear Wheel Drive, BQ: xDrive) |
| exteriorgenericcolor | exterior_color | exteriorColour | ✓ | ✓ | ZA exteriorColour gives specific paint name (Skyscraper Grey metallic), not a generic cluster — no better ZA field exists |
| interiorgenericcolor | interior_color | interiorColour | ✓ | ✓ | ZA interiorColour gives specific upholstery name (Veganza perforated Black), not a generic cluster — no better ZA field exists |
| interiorupholsterytype | interior_code | interiorCode | ✓ | ✓ | different format (ZA: option code e.g. KUSW, BQ: Leatherette) |
| totalmsrp | price | cashPaymentOption.totalCost | ✓ | ✓ | |
| mileage | mileage | mileage | ✓ | ✓ | Stolo has no mileage; ZA is the source for this field |
Fields not available in ZA
The following entity fields have no ZA path — they come from Stolo or BQ backfill only:
model_range— ZA does not expose marketing model rangefeature_refs[].code— ZA does not expose equipment option codes- All "New fields to add" from the inventory entity (production dates, order data, logistics fields, option detail fields) — ZA provides only the core inventory record
See stolo-source.md for the full new-fields mapping with Stolo paths and BQ backfill targets.