Skip to main content

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