CsCase
object type
A CsCase — ONE customer-support interaction (org-group-parented document; guest- OR Consumer-capable): the FSM head of a visibility-split CaseMessage thread. caseType ∈ {return_request, refund_inquiry, product_issue, complaint, general_inquiry, warranty_claim, shipping_issue, order_change, other} (canned + AT-extensible — the ContactRole registry class, never merchant free-form; MUTABLE via update, triage correction is routine CS — ruling). NO description field (ruling — the opening MESSAGE carries the narrative: one spine, zero duplicate state). origin is SERVER-STAMPED by lane (ruling — storefront = the consumer portal · staff = every staff create; IMMUTABLE, param-less). Refs are ref-ONLY (SPEC_CATALOG @375 — 'refs, not gate': validated in-tenant + non-doomed at write, but NO doom arms grow on the referenced constructs and consumer ERASE does NOT cascade here — cases are the MERCHANT's business records [ruling]; PII scrub =). consumerId/linkedFromCaseId/origin are IMMUTABLE at birth (rulings // — the edit face omits them; the CASEBOOK derived-index row a consumer-ref'd case mints in its create txn is thereby write-once). FSM: open(i) → in_progress ⇄ pending_customer (a consumer reply AUTO-RESUMES — the addMyCaseMessage engine fires caller_op:resume in the SAME commit) · in_progress ⇄ escalated · in_progress → resolved → closed (terminal ▣ immutable — REOPEN AFTER CLOSE = a NEW case linked via linkedFromCaseId, CLOSED-only [ruling]) · open|in_progress → cancelled (terminal ✦ doomed — spam/duplicate/withdrawn; drops from listings). resolved→closed also carries the DORMANT system:auto_close twin (its producer = the SLA machinery / policy build — parity-with-spec over trigger-pruning, ruling). resolve REQUIRES the typed resolution block PRESENT (the KIT gate — ruling, STRICT; deliberately NOT FSM data). priority/assignedTo/slaDueAt are MANUAL (the routing/SLA build populates them). The cs event domain's FIRST live producer (at.cs.case.* — ruling). NOT searchable (the book law covers WHO, not interactions).
Fields
| Field | Type | Notes |
|---|---|---|
id | ID ID! | The record’s id — a UUID the platform assigned when the record was created; every reference to this record uses it. |
sysId | String String! | The group-scoped human-facing system id (CS-…). |
type | String String! | The kind of record — always CsCase here. |
caption | String String! | The record’s display name — what people see it called. |
status | String String! | The FSM state: open | in_progress | pending_customer | escalated | resolved | closed | cancelled. |
parentId | ID ID! | The parent org group; for a CsCase parentId === rootId. |
rootId | ID ID! | The org-group family root. |
createdAt | String String! | When the record was created, as a UTC timestamp. |
updatedAt | String String! | When the record last changed, as a UTC timestamp. |
revisionNum | Int Int! | How many times this record has been edited; the first save is 0. |
revision | ID ID! | The OCC revision token — supply it on every mutation of this record; rotates on every write. |
refCaptions | RefCaption [RefCaption!]! | The server-composed captions of this record's declared references (the referenced-caption rule) — one row per referenced id; see RefCaption. |
caseType | String String! | return_request | refund_inquiry | product_issue | complaint | general_inquiry | warranty_claim | shipping_issue | order_change | other — the canned registry (AT-extensible, never merchant free-form). MUTABLE via update (ruling — triage correction). |
priority | String String! | low | normal | high | urgent — kit-stamped 'normal' when the caller names none; manual. |
origin | String String! | storefront | staff — WHERE the case originated, SERVER-STAMPED by lane (ruling; param-less). IMMUTABLE. |
consumerId | ID | The registered Consumer this case is FOR (absent = a guest case). ⚠ IMMUTABLE at birth (ruling — the CASEBOOK index row is write-once; guest→consumer linking = deferral 9). Ref-only: consumer erase does NOT cascade here (ruling). |
organizationId | ID | The acted-upon Organization — ref-only, in-tenant + non-doomed at set. |
orderId | ID | The disputed/acted-upon Order — ref-only (@375: no doom arm grows on it). |
appointmentId | ID | The related Appointment — ref-only (the deferral 11, RESOLVED at the landing). |
returnId | ID | The related Return — ref-only. |
fulfillmentId | ID | The related Fulfillment — ref-only. |
paymentId | ID | The related Payment — ref-only. |
warrantyId | ID | The Warranty a claim was filed against — stamped by fileClaimWarranty in the same transaction as the warranty’s claimed flip; never caller-typed. Ref-only. |
linkedFromCaseId | ID | The CLOSED case this one REOPENS (ruling — validated closed-EXACTLY at create; cancelled is NOT reopenable-by-link). IMMUTABLE at birth; the reopen provenance edge. |
assignedTo | ID | The assigned agent — an User (in-tenant + ACTIVE at set); teams/queues = (deferral 1). |
slaDueAt | String | The SLA due instant (ISO-8601) — MANUAL; / populates by policy (deferral 1; the dormant system:auto_close consumes it then). |
resolution | CaseResolution | The typed resolution block (ruling) — set via update BEFORE resolve fires. Per-kind ref law: info_only ref-LESS; every other kind names its resolving construct. |
supportBilling | CaseSupportBilling | STAFF lanes only: the consumer lanes (myCase/myCases) REDACT it structurally (the ruling- visibility law at the field axis — platform billing is the MERCHANT’s business). |