Take an article in for repair
Opens a repair order in the intake state — the article is now in the store’s custody. article.label is the only required article field; add skuId and serial when the unit is identifiable and purchasedAt when the original sale date is known. purchasedAt is RECORDED ONLY — the server derives nothing from it and never adjusts a price; the warranty helper that reads it lives in the till UI, and quoteAmountCents is entirely caller-supplied either way. MONEY: quoteAmountCents is the price quoted to the customer and depositAmountCents the acompte ALREADY captured at the counter (typically 30%; send 0 if none was taken). This endpoint captures nothing itself — take the acompte first, then record it here. There is NO update route: once open, neither the quote nor the acompte can ever be revised, so do not open an order on a provisional estimate. id is CALLER-SUPPLIED and is the dedup key: on a timeout retry with the SAME id — a 409 CONFLICT then means your first attempt committed, so read it back with getRepairOrder rather than minting a new id. 422 when depositAmountCents exceeds quoteAmountCents, or when expectedPickupDate is not in the future. Note article.serial is stored EXACTLY as sent — unlike the sale and warranty paths it is neither upper-cased/trimmed nor IMEI-checksummed here, so send an already-canonical value if you want it to match a serial captured elsewhere.
Authorizations
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Body
110 < x <= 90071992547409910 <= x <= 9007199254740991^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$11Response
The opened order: intake, updatedAt equal to createdAt, attributed to the calling actor.
The opened order: intake, updatedAt equal to createdAt, attributed to the calling actor.
-9007199254740991 <= x <= 9007199254740991-9007199254740991 <= x <= 9007199254740991intake, in_workshop, ready, collected, unrepairable 
