MobileCartBill
Itemised bill snapshot for the cart. v1 applies 5% Qatar VAT.
type MobileCartBill {
belowMov: Boolean!
cartId: ID!
customerTier: String
deliveryFee: Float
deliveryOptionId: ID
deliveryQuoteRequired: Boolean!
deliverySelectionRequired: Boolean!
discountAmount: Float!
grossSubtotal: Float!
mov: Float!
printedInvoiceFee: Float!
printedInvoiceFeeAmount: Float!
printedInvoiceIncluded: Boolean!
quantityTierDiscountAmount: Float
subtotal: Float!
taxableAmount: Float!
tierDiscountAmount: Float
tierDiscountPercentage: Float
total: Float!
vat: Float!
vatInclusive: Boolean!
vatName: String
vatRate: Float!
}
Fields
MobileCartBill.belowMov ● Boolean! non-null scalar
True when the cart is below the seller's minimum order value.
MobileCartBill.cartId ● ID! non-null scalar
The ID of the cart.
MobileCartBill.customerTier ● String scalar
Buyer's effective CUSTOMER/LOYALTY tier key (e.g. GOLD).
MobileCartBill.deliveryFee ● Float scalar
Delivery fee charged (0 when waived). Null only when deliverySelectionRequired — the store prices delivery live and no option is chosen yet; total then excludes delivery.
MobileCartBill.deliveryOptionId ● ID scalar
the live delivery option this bill's fee came from.
MobileCartBill.deliveryQuoteRequired ● Boolean! non-null scalar
Box packing: true when the order is too heavy to price delivery live (mobileDeliveryOptions code DELIVERY_FREIGHT_QUOTE) — it is placed with no delivery charge (deliveryFee 0) and the store quotes delivery afterwards. Show "Delivery quoted after ordering".
MobileCartBill.deliverySelectionRequired ● Boolean! non-null scalar
true when the store prices delivery live and the buyer has not chosen a delivery option (mobileDeliveryOptions). Pass the option as deliveryOptionId on mobileCartBill and on placement.
MobileCartBill.discountAmount ● Float! non-null scalar
Total discount separating grossSubtotal from the net. On the CART path it is SUMMED from the per-line lineDiscount figures, exactly as the customer portal builds the same row — so grossSubtotal - discountAmount can sit one minor unit away from subtotal on a half-cent line (833.50 - 375.08 = 458.42 against a true net of 458.43). It was previously back-derived as grossSubtotal - subtotal, which made the rows reconcile on screen but reported a discount a cent away from the portal's for the same cart. On the placed-order path it is the order row's own discountAmount. 0 when nothing is discounted. Not the same as tierDiscountAmount/quantityTierDiscountAmount, which are attribution buckets WITHIN this figure.
MobileCartBill.grossSubtotal ● Float! non-null scalar
GROSS pre-discount total (Σ per-line round(referencePrice × qty)). The bill's 'Item total' row. Read this — never reconstruct it client-side as subtotal + savings, which sums a ROUNDED per-unit saving and drifts by cents at quantity (buyer-app showed 833.45 instead of 833.50 on a 33.34 × 25 line). Mirrors the customer-portal bill's field of the same name (BUG-20260818).
MobileCartBill.mov ● Float! non-null scalar
Minimum order value in QAR.
MobileCartBill.printedInvoiceFee ● Float! non-null scalar
Always 0. The printed-invoice fee was removed until it has a configured source; kept so existing app builds that select it keep working.
MobileCartBill.printedInvoiceFeeAmount ● Float! non-null scalar
Always 0. The printed-invoice fee was removed until it has a configured source; kept so existing app builds that select it keep working.
MobileCartBill.printedInvoiceIncluded ● Boolean! non-null scalar
Always false. The printed-invoice fee was removed; kept so existing app builds that select it keep working.
MobileCartBill.quantityTierDiscountAmount ● Float scalar
Total QUANTITY/bulk-order pricing-tier savings across the cart (sum of each line's quantityTierUnitDiscount × quantity) — independent of tierDiscountAmount above.
MobileCartBill.subtotal ● Float! non-null scalar
CART path: the NET taxable amount — the post-discount sum of the cart's lines, where grossSubtotal - discountAmount === subtotal holds exactly. PLACED-ORDER path (cartId: 'order:<id>'): this carries the order row's PRE-discount subtotal instead — a known pre-existing divergence between the two paths, not something to rely on; use grossSubtotal/discountAmount for the breakdown rows on both.
MobileCartBill.taxableAmount ● Float! non-null scalar
The goods tax base: Total − Tax − delivery/shipping (net of discount, and of any embedded INCLUSIVE tax). Delivery is never part of it — it is its own row. Server-computed by the SAME rule on every path (cart, placed order, invoice) so this figure always matches what the admin portal shows for the same document — never derive it client-side.
MobileCartBill.tierDiscountAmount ● Float scalar
Total CUSTOMER/LOYALTY tier-discount savings across the cart.
MobileCartBill.tierDiscountPercentage ● Float scalar
Buyer's effective CUSTOMER/LOYALTY tier discount %.
MobileCartBill.total ● Float! non-null scalar
The total to pay.
MobileCartBill.vat ● Float! non-null scalar
The tax in the total.
MobileCartBill.vatInclusive ● Boolean! non-null scalar
True when some/all of vat is already embedded in subtotal (INCLUSIVE tax) and is NOT added on top of total. Clients must render the VAT line as "included" rather than additive so the breakdown reconciles.
MobileCartBill.vatName ● String scalar
Admin-configured tax display name (e.g. "VAT"/"GST"), sourced from TaxRate.name — never hardcode "VAT" client-side, since the org's configured tax can be named differently by country/config. Null when no line breakdown was resolvable (e.g. an all-exempt cart).
MobileCartBill.vatRate ● Float! non-null scalar
Effective blended VAT rate as a percentage of the taxable base (e.g. 14.7 = 14.7%), matching LineTaxInfo.rate's convention. Server-computed as vat / taxableBase * 100 — clients must render this instead of hardcoding a rate, since the org's TaxGroup can blend multiple TaxRate components.
Returned By
mobileCartBill query
Member Of
MobileInvoice object ● MobileOrder object