Objects / Product
Product
Canonical catalog entry combining pricing, lifecycle, and merchandising metadata.
Generated from @oods/foundry 0.10.1
Screens
Every screen below was generated from this object by OODS Foundry 0.10.1, in React and Vue, and shows the calls that made it and its content hash. Each runs as its generated app runs, in this site's brand, Aquex, in the theme you choose, with the sample records this object's own file carries. A value no record gives shows as a neutral one, such as an empty value or "Not recorded"; OODS Foundry invents none.
sha256:2b1c273af032…Open full size: Product detail screen generated by OODS Foundry in Reactsha256:3aaef40d4608…Open full size: Product detail screen generated by OODS Foundry in Vuesha256:49490b217ccd…Open full size: Product list screen generated by OODS Foundry in Reactsha256:f441433eac48…Open full size: Product list screen generated by OODS Foundry in Vuesha256:3e5238ea5790…Open full size: Product form screen generated by OODS Foundry in Reactsha256:c1dcd487cd2f…Open full size: Product form screen generated by OODS Foundry in Vuesha256:7df233de552c…Open full size: Product timeline screen generated by OODS Foundry in Reactsha256:e5b1ac2042bc…Open full size: Product timeline screen generated by OODS Foundry in Vuesha256:f460c8dbc0b0…Open full size: Product card screen generated by OODS Foundry in Reactsha256:337eb5a42379…Open full size: Product card screen generated by OODS Foundry in Vuesha256:1eb19c705343…Open full size: Product inline screen generated by OODS Foundry in Reactsha256:b5572b3850db…Open full size: Product inline screen generated by OODS Foundry in Vuesha256:30aa2b34cae5…Open full size: Product workflow screen generated by OODS Foundry in Reactsha256:26f207ed0bd1…Open full size: Product workflow screen generated by OODS Foundry in VueThe calls that made the Product detail apps, in React and Vue
design_compose {
"object": "Product",
"context": "detail",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-7c9240cb",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-7c9240cb",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:2b1c273af03264916b588e4da283b125c1b58b3ad31bc92e0d92ab796a93e490. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:3aaef40d4608b5af66dfa7e76f70a2a6ba691cfb09581b28a3964c8d0c6ec985. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Product list apps, in React and Vue
design_compose {
"object": "Product",
"context": "list",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-1ac02821",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-1ac02821",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:49490b217ccdb5fd63cc449bc1b84f714da13c23e024bb372f60c4a7834201fe. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:f441433eac484314c27eda01d16ab1b9c2f11b99f445d89096b0581846d5dc87. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Product form apps, in React and Vue
design_compose {
"object": "Product",
"context": "form",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-4ba065fa",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-4ba065fa",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:3e5238ea57906f1f419abbae8d3ee0bdfb55a544e02cb6cc9885fabade48759e. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:c1dcd487cd2f255cdc558b02c8b5fdcd2b58c66126aa3970c2e1f1ff8859de51. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Product timeline apps, in React and Vue
design_compose {
"object": "Product",
"context": "timeline",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-b21937cd",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-b21937cd",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:7df233de552c5da9aba81bb34386ab2f5cfaea9bf396b8181388247a8b6795ac. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:e5b1ac2042bc76b81ee92451d6ad1602d3483f30047cf2d35c78d1f1b35f7f3b. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Product card apps, in React and Vue
design_compose {
"object": "Product",
"context": "card",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-921a6ccb",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-921a6ccb",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:f460c8dbc0b042c0c38a1a347668147681d8e4a36d78a8df3215ea0e3635c8b3. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:337eb5a423790498c06ac721736eefae95994a7e4b6702204ae58f290fa5a3bb. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Product inline apps, in React and Vue
design_compose {
"object": "Product",
"context": "inline",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-ddb9a0ce",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-ddb9a0ce",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:1eb19c705343f7255e3e65fe54f4be17b1cd85055cbf3cb78121b03a0ddd38f9. Its src/ folder: App.tsx, GeneratedUI.tsx, app.css, main.tsx, oods-brand-aquex.css
The Vue app's content hash: sha256:b5572b3850dbc3786c8b2c842b5abf164c535a0266c962618b392e2ac05bca5a. Its src/ folder: App.vue, GeneratedUI.vue, app.css, main.ts, oods-brand-aquex.css
The calls that made the Product workflow apps, in React and Vue
design_compose {
"object": "Product",
"context": "workflow",
"preferences": {
"brand": "Aquex",
"theme": "light"
}
}
code_generate {
"schemaRef": "compose-3f27a1bc",
"framework": "react",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}
code_generate {
"schemaRef": "compose-3f27a1bc",
"framework": "vue",
"profile": "build",
"options": {
"output": "application",
"brand": "Aquex",
"theme": "light",
"payloadMode": "file"
}
}The React app's content hash: sha256:30aa2b34cae510adf0c248ec295a6dd8631f335cee3a67412ecb6042cf4ada54. Its src/ folder: App.tsx, actions.ts, app.css, application.ts, main.tsx, oods-brand-aquex.css, sample-data.ts, screens/, ssr.tsx, store.ts
The Vue app's content hash: sha256:26f207ed0bd1256ada6bbe863c3fcccc6d3b44779975b31b879adb65d68a12ca. Its src/ folder: App.vue, actions.ts, app.css, application.ts, main.ts, oods-brand-aquex.css, sample-data.ts, screens/, ssr.ts, store.ts
Fields
| Field | Type | Description |
|---|---|---|
labelrequired | string | Human-readable display name rendered in primary surfaces. |
description | string | Supporting description used in detail and card contexts. |
placeholder | string | Hint copy surfaced in form fields when the label is empty. |
statusrequired | string | Canonical lifecycle state derived from the states parameter. MoreThis is the single source of truth for the entity's current lifecycle position. Consumed by Colorized to resolve visual tokens, and by view extensions to render StatusBadge and StatusTimeline. |
state_history | StateTransition[] | Chronological log of state transitions. MoreEach entry records the before/after states, timestamp, and (when governance is enabled) the actor, reason, and transition metadata. Rendered by StatusTimeline in the detail and timeline views. Entry structure: - from: string (previous state) - to: string (new state) - timestamp: ISO 8601 datetime - actor_id: string (user/system who triggered the transition, optional) - reason: string (human-readable justification, required when requireTransitionReason is true) - transition_metadata: Record<string, unknown> (arbitrary context, optional) |
allowed_transitions | string[] | Materialized list of valid next states from the current status, computed from the
transitionRules parameter. MoreWhen transitionRules is null (open model), this contains all states except the current one. Used by StatusSelector to disable invalid options and by StatusBadge to indicate available paths. |
created_atrequired | datetime | Timestamp recording when the entity was first created. |
updated_at | datetime | Timestamp for the most recent modification, when available. |
last_eventrequired | string | Lifecycle event associated with the most recent timestamp mutation. |
last_event_at | datetime | Timestamp for the lifecycle event captured in last_event. |
unit_amount_centsrequired | number | Base unit price expressed in the smallest currency denomination. |
currencyrequired | string | ISO currency code for the unit amount. |
pricing_modelrequired | string | Monetization model applied to the entity. |
billing_interval | string | Billing cadence when pricing_model indicates recurring revenue. |
tax_behaviorrequired | string (exclusive, inclusive) | Defines whether taxes are included in the displayed price. |
classification_metadatarequired | ClassificationMetadata | Operational metadata describing mode, storage model, governance rules, and audit timestamps. |
categories | CategoryNode[] | Ordered taxonomy nodes scoped to the object. |
primary_category_id | string | Identifier of the canonical taxonomy node. |
primary_category_path | string | Human-readable breadcrumb path (Electronics > Mobile > Android). |
tags | Tag[] | Canonical tag collection after synonym collapse. |
tag_count | number | Number of canonical tags assigned to the object. |
tag_preview | string | Denormalized comma-delimited preview for list renders. |
searchQuery | string | The current search query string entered by the user. |
searchActive | boolean | Whether the search input is currently focused or has a non-empty query. |
filters | object[] | Array of available filter descriptors. MoreEach entry defines a filterable dimension: - field: string (the schema field to filter on) - label: string (display label) - type: "select" | "multi-select" | "range" | "boolean" | "date-range" - options: array of { value, label } for select/multi-select types |
activeFilters | object[] | Array of currently applied filter values: - field: string (matches a filter descriptor field) - operator: "eq" | "in" | "range" | "gt" | "lt" | "between" - value: unknown (the selected filter value or values) |
filterCountrequired | number | Computed count of currently active filters. |
pagerequired | number | Current page number (1-based). |
pageSizerequired | number | Number of items displayed per page. |
totalItems | number | Total number of items across all pages. MoreUsed to compute total page count. |
totalPages | number | Computed total number of pages (ceil(totalItems / pageSize)). |
product_idrequired | uuid | Primary identifier for the product listing. |
skurequired | string | Merchandising SKU exposed to commerce systems. |
inventory_statusrequired | string (in_stock, low_stock, backorder, discontinued) | Availability state synchronized with inventory service. |
release_channelrequired | string (alpha, beta, limited, general_availability) | Channel describing how the product is released to customers. |
requires_subscriptionrequired | boolean | Indicates whether access to the product requires an active subscription. |
support_level | string (standard, premium, enterprise) | SLA tier associated with the product. |
summary_blurb | string | Short merchandising description surfaced in marketing contexts. |
Traits
Each trait adds fields and behaviour. Every object with the trait gets the same.
Relationships
These arrows show declared relationships between object types. They don't join live records.
The object file
The Product object definition in YAML: objects/core/Product.object.yaml
object:
name: Product
version: 1.1.0
domain: core.catalog
description: Canonical catalog entry combining pricing, lifecycle, and merchandising metadata.
tags:
- universal
- product
- commerce
- taxonomy
traits:
- name: content/Labelled
alias: ProductLabel
- name: lifecycle/Stateful
parameters:
states:
- draft
- in_review
- active
- retired
initialState: draft
- name: lifecycle/Timestampable
parameters:
recordedEvents:
- created
- spec_updated
- price_changed
- retired
timezone: UTC
- name: financial/Priceable
parameters:
supportedCurrencies:
- USD
- EUR
- GBP
- AUD
defaultCurrency: USD
pricingModels:
- one_time
- subscription
- usage_based
billingIntervals:
- one_time
- month
- year
taxBehavior: exclusive
- name: core/Classifiable
alias: ProductClassification
parameters:
classification_mode: taxonomy
hierarchy_storage_model: materialized_path
tag_policy: locked
max_tags: 8
require_primary_category: true
- name: behavioral/Searchable
parameters:
placeholder: "Search products..."
debounceMs: 300
- name: behavioral/Filterable
parameters:
filterMode: immediate
showFilterCount: true
- name: behavioral/Pageable
parameters:
defaultPageSize: 25
pageSizeOptions: [10, 25, 50, 100]
schema:
product_id:
type: uuid
required: true
description: Primary identifier for the product listing.
sku:
type: string
required: true
description: Merchandising SKU exposed to commerce systems.
inventory_status:
type: string
required: true
default: in_stock
description: Availability state synchronized with inventory service.
validation:
enum:
- in_stock
- low_stock
- backorder
- discontinued
release_channel:
type: string
required: true
default: general_availability
description: Channel describing how the product is released to customers.
validation:
enum:
- alpha
- beta
- limited
- general_availability
requires_subscription:
type: boolean
required: true
default: false
description: Indicates whether access to the product requires an active subscription.
support_level:
type: string
required: false
description: SLA tier associated with the product.
validation:
enum:
- standard
- premium
- enterprise
summary_blurb:
type: string
required: false
description: Short merchandising description surfaced in marketing contexts.
validation:
maxLength: 160
semantics:
# The one-line summary under the product's name in lists (content/Labelled's description, marked as the summary).
description:
semantic_type: text.summary
token_mapping: tokenMap(text.body.*)
ui_hints:
component: TextBody
maxLengthParameter: maxDescriptionLength
product_id:
semantic_type: product.id
token_mapping: tokenMap(product.id.primary)
sku:
semantic_type: product.sku
token_mapping: tokenMap(product.sku.primary)
inventory_status:
semantic_type: product.inventory.status
token_mapping: tokenMap(inventory.status.*)
release_channel:
semantic_type: product.release.channel
token_mapping: tokenMap(product.release.channel)
requires_subscription:
semantic_type: product.access.requires_subscription
token_mapping: tokenMap(product.access.subscription)
tokens:
product.sku.primary: "var(--text-strong)"
inventory.status.low_stock: "var(--status-warning)"
inventory.status.discontinued: "var(--status-danger)"
metadata:
owners:
- product@oods.systems
- commerce@oods.systems
steward: merchandising@oods.systems
changelog:
- version: 1.1.0
date: "2025-11-18"
description: Added Classifiable trait (taxonomy mode) for hierarchical categories + breadcrumbs.
- version: 1.0.0
date: "2025-10-16"
description: Initial Universal Quintet baseline.
# Eight authored sample products from one point-of-sale catalog: card readers, printers, supplies, software and support.
# Each follows the catalog lifecycle from draft through review; the last event is the latest recorded catalog change.
samples:
- label: Counter Card Reader
description: Tap, chip and swipe reader for counters
sku: HW-CR-200
unit_amount_cents: 14900
currency: USD
pricing_model: one_time
billing_interval: one_time
tax_behavior: exclusive
inventory_status: in_stock
release_channel: general_availability
requires_subscription: true
support_level: standard
summary_blurb: Accepts contactless, chip and swipe payments and pairs with the till over Bluetooth.
primary_category_id: hardware-payments
primary_category_path: Hardware > Payments
tag_preview: contactless, bluetooth
status: active
state_history:
- { title: Created, from: null, to: draft, at: '2025-11-03T16:00:00Z', reason: Added from the supplier spec sheet }
- { title: In review, from: draft, to: in_review, at: '2025-11-17T16:00:00Z', reason: Submitted for launch review }
- { title: On sale, from: in_review, to: active, at: '2025-12-01T15:00:00Z', reason: Approved for sale }
created_at: '2025-11-03T16:00:00Z'
updated_at: '2026-06-01T15:00:00Z'
last_event: price_changed
last_event_at: '2026-06-01T15:00:00Z'
- label: Thermal Receipt Printer
description: 80 mm printer with an automatic cutter
sku: HW-RP-80
unit_amount_cents: 22900
currency: USD
pricing_model: one_time
billing_interval: one_time
tax_behavior: exclusive
inventory_status: low_stock
release_channel: general_availability
requires_subscription: false
support_level: standard
summary_blurb: Prints 250 mm of receipt a second over USB-C, Ethernet or Wi-Fi.
primary_category_id: hardware-printers
primary_category_path: Hardware > Printers
tag_preview: receipts, usb-c
status: active
state_history:
- { title: Created, from: null, to: draft, at: '2025-08-04T09:00:00Z', reason: Added from the supplier spec sheet }
- { title: In review, from: draft, to: in_review, at: '2025-08-18T09:00:00Z', reason: Submitted for launch review }
- { title: On sale, from: in_review, to: active, at: '2025-09-01T09:00:00Z', reason: Approved for sale }
created_at: '2025-08-04T09:00:00Z'
updated_at: '2026-08-12T09:00:00Z'
last_event: spec_updated
last_event_at: '2026-08-12T09:00:00Z'
- label: Label Printer K2
description: Shipping-label printer for UK carriers
sku: HW-LP-K2
unit_amount_cents: 18900
currency: GBP
pricing_model: one_time
billing_interval: one_time
tax_behavior: inclusive
inventory_status: backorder
release_channel: limited
requires_subscription: false
support_level: premium
summary_blurb: Prints Royal Mail and DPD labels from the order screen; back in stock in October.
primary_category_id: hardware-printers
primary_category_path: Hardware > Printers
tag_preview: labels, shipping
status: active
state_history:
- { title: Created, from: null, to: draft, at: '2026-03-02T10:00:00Z', reason: Added for the UK launch }
- { title: In review, from: draft, to: in_review, at: '2026-03-16T10:00:00Z', reason: Submitted for launch review }
- { title: On sale, from: in_review, to: active, at: '2026-04-01T09:00:00Z', reason: Approved for a limited UK release }
created_at: '2026-03-02T10:00:00Z'
updated_at: '2026-04-01T09:00:00Z'
last_event: price_changed
last_event_at: '2026-04-01T09:00:00Z'
- label: Thermal Paper Rolls (50 pack)
description: BPA-free 80 mm rolls, 50 per case
sku: SUP-TP-50
unit_amount_cents: 3900
currency: USD
pricing_model: one_time
billing_interval: one_time
tax_behavior: exclusive
inventory_status: in_stock
release_channel: general_availability
requires_subscription: false
support_level: null
summary_blurb: Fits every receipt printer we sell; ships in two days.
primary_category_id: supplies-paper
primary_category_path: Supplies > Paper
tag_preview: consumables
status: active
state_history:
- { title: Created, from: null, to: draft, at: '2025-08-04T09:30:00Z', reason: Added with the receipt printer }
- { title: In review, from: draft, to: in_review, at: '2025-08-18T09:30:00Z', reason: Submitted for launch review }
- { title: On sale, from: in_review, to: active, at: '2025-09-01T09:30:00Z', reason: Approved for sale }
created_at: '2025-08-04T09:30:00Z'
updated_at: '2026-02-02T09:30:00Z'
last_event: price_changed
last_event_at: '2026-02-02T09:30:00Z'
- label: Handheld Barcode Scanner
description: Wireless 2D scanner for stock counts
sku: HW-BS-10
unit_amount_cents: 7900
currency: EUR
pricing_model: one_time
billing_interval: one_time
tax_behavior: inclusive
inventory_status: in_stock
release_channel: beta
requires_subscription: false
support_level: standard
summary_blurb: Scans shelf labels and QR codes into stock counts, with a 12-hour battery.
primary_category_id: hardware-scanners
primary_category_path: Hardware > Scanners
tag_preview: inventory, wireless
status: in_review
state_history:
- { title: Created, from: null, to: draft, at: '2026-08-24T08:00:00Z', reason: Added for the beta programme }
- { title: In review, from: draft, to: in_review, at: '2026-09-14T08:00:00Z', reason: Spec updated with beta feedback }
created_at: '2026-08-24T08:00:00Z'
updated_at: '2026-09-14T08:00:00Z'
last_event: spec_updated
last_event_at: '2026-09-14T08:00:00Z'
- label: Point of Sale Software
description: Checkout, stock and reports in one app
sku: SW-POS-STD
unit_amount_cents: 4900
currency: USD
pricing_model: subscription
billing_interval: month
tax_behavior: exclusive
inventory_status: in_stock
release_channel: general_availability
requires_subscription: true
support_level: premium
summary_blurb: Runs checkout on any tablet, keeps stock in sync and emails the day's takings.
primary_category_id: software-point-of-sale
primary_category_path: Software > Point of sale
tag_preview: subscription, tablets
status: active
state_history:
- { title: Created, from: null, to: draft, at: '2025-06-02T09:00:00Z', reason: Packaged the checkout app for sale }
- { title: In review, from: draft, to: in_review, at: '2025-06-16T09:00:00Z', reason: Submitted for launch review }
- { title: On sale, from: in_review, to: active, at: '2025-07-01T09:00:00Z', reason: Approved for sale }
created_at: '2025-06-02T09:00:00Z'
updated_at: '2026-09-01T09:00:00Z'
last_event: spec_updated
last_event_at: '2026-09-01T09:00:00Z'
- label: Priority Support
description: 24/7 phone support, named engineer
sku: SVC-SUP-PRI
unit_amount_cents: 99000
currency: USD
pricing_model: subscription
billing_interval: year
tax_behavior: exclusive
inventory_status: in_stock
release_channel: limited
requires_subscription: true
support_level: enterprise
summary_blurb: A named support engineer, one-hour response and quarterly health checks.
primary_category_id: services-support
primary_category_path: Services > Support
tag_preview: services
status: draft
state_history:
- { title: Created, from: null, to: draft, at: '2026-09-01T14:00:00Z', reason: Drafted from the support team proposal }
- { title: In review, from: draft, to: in_review, at: '2026-09-15T14:00:00Z', reason: Submitted for pricing review }
- { title: Back to draft, from: in_review, to: draft, at: '2026-09-22T14:00:00Z', reason: Price sent back for a margin check }
created_at: '2026-09-01T14:00:00Z'
updated_at: '2026-09-22T14:00:00Z'
last_event: spec_updated
last_event_at: '2026-09-22T14:00:00Z'
- label: Cash Drawer CD-1
description: Steel cash drawer, replaced by the CD-2
sku: HW-CD-01
unit_amount_cents: 12900
currency: AUD
pricing_model: one_time
billing_interval: one_time
tax_behavior: inclusive
inventory_status: discontinued
release_channel: general_availability
requires_subscription: false
support_level: standard
summary_blurb: Five-note, eight-coin steel drawer that opens from the receipt printer.
primary_category_id: hardware-cash-handling
primary_category_path: Hardware > Cash handling
tag_preview: legacy
status: retired
state_history:
- { title: Created, from: null, to: draft, at: '2024-03-04T09:00:00Z', reason: Added from the supplier spec sheet }
- { title: In review, from: draft, to: in_review, at: '2024-03-18T09:00:00Z', reason: Submitted for launch review }
- { title: On sale, from: in_review, to: active, at: '2024-04-01T09:00:00Z', reason: Approved for sale }
- { title: Retired, from: active, to: retired, at: '2026-07-31T09:00:00Z', reason: Replaced by the CD-2 }
created_at: '2024-03-04T09:00:00Z'
updated_at: '2026-07-31T09:00:00Z'
last_event: retired
last_event_at: '2026-07-31T09:00:00Z'