Device Lifecycle Reference Guide¶
Visual reference for all status flows and state machines in the device inventory system.
1. Device Status Flow (device_status field on stock.lot)¶
Values: available, reserved, sold, returned
+----------------+
| available | <- Initial state after receiving
+-------+--------+
|
+------------+------------+
| | |
v v v
+-----------+ +----------+ +----------+
| reserved | | sold | | returned |
| (SO alloc)| |(manifest | |(customer |
| (retail | | complete | | return) |
| reserve) | | or retail| | |
+-----+-----+ | confirm) | +-----+----+
| +----------+ |
| |
v v
+-----------+ +----------------+
| sold | | available |
+-----------+ | (re-processed) |
+----------------+
Transitions:
| From | To | Trigger |
|---|---|---|
| available | reserved | Device allocated to SO line (sale.order.line.device create) or retail reservation activated |
| reserved | sold | Delivery manifest marked complete OR retail sale confirmed |
| available | sold | Direct sale — retail sale of non-reserved device |
| sold | returned | Customer return processing |
| returned | available | After re-processing / re-QC |
2. QC Status Flow (qc_status field on stock.lot)¶
Values: pending_qc, in_qc, qc_complete, qc_failed
+-------------+
| pending_qc | <- Initial state after device received
+------+------+
|
| QC Handoff wizard
v
+-------------+
| in_qc | <- Being tested / graded
+------+------+
|
+---+---+
| |
v v
+-----------+ +------------+
|qc_complete| | qc_failed |
|(M360 sync + |(diagnostic |
| grade set)| | failure) |
+-----------+ +-----+------+
|
| Reset
v
+-------------+
| pending_qc |
+-------------+
Transitions:
| From | To | Method / Trigger |
|---|---|---|
| pending_qc | in_qc | QC Handoff wizard — selects devices and assigns to QC team |
| in_qc | qc_complete | action_mark_qc_complete() — requires M360 session ID AND grade set |
| in_qc | qc_failed | action_mark_qc_failed() — device failed diagnostics |
| qc_failed | pending_qc | action_reset_to_qc() — reset for re-testing |

3. Settlement Status Flow (settlement_status field on stock.lot)¶
Values: not_applicable, pending, settled
+-----------------+
| not_applicable | <- Non-consignment devices (owner = seller)
+-----------------+
+-----------------+
| pending | <- Consignment device sold, awaiting settlement
+--------+--------+
|
| Settlement report marked as paid
v
+-----------------+
| settled | <- Payment reconciled
+-----------------+
Notes:
- not_applicable applies when the selling company owns the device outright (no consignor).
- pending is set automatically when action_mark_sold() is called during manifest completion.
- settled is set when the paired consignment settlement report is marked as paid.
4. Manifest States (state field on device.manifest)¶
Values: draft, awaiting_upload, uploaded, in_progress, done, cancelled
+-------+ +----------------+ +----------+ +-------------+ +------+
| draft | -> | awaiting_upload| -> | uploaded | -> | in_progress | -> | done |
+-------+ +----------------+ +----------+ +-------------+ +------+
|
+---> cancelled (at any point before done)
State Descriptions:
| State | Description |
|---|---|
draft |
Just created, not yet associated with a confirmed PO |
awaiting_upload |
PO confirmed — waiting for IMEI CSV file upload |
uploaded |
CSV uploaded and parsed, manifest lines created with IMEIs |
in_progress |
Receiving / picking has started (at least 1 device scanned) |
done |
All devices received / picked, manifest marked complete |
cancelled |
Manifest cancelled — devices not received |
5. Consignment Agreement States (state field on device.consignment.agreement)¶
Values: draft, active, suspended, terminated
+-------+ +--------+ +-----------+ +------------+
| draft | -> | active | -> | suspended | -> | terminated |
+-------+ +----+---+ +-----+-----+ +------------+
| |
| v
| +--------+
+-------> | active | (reactivate from suspended)
+--------+
State Descriptions:
| State | Description |
|---|---|
draft |
Agreement created, not yet in effect |
active |
Agreement in force — consignment transactions can occur |
suspended |
Temporarily paused — no new transactions, existing ones still valid |
terminated |
Agreement ended — no further transactions allowed |
6. Settlement Report States (state field on consignment.settlement.report)¶
Values: draft, confirmed, paid
+-------+ +-----------+ +------+
| draft | -> | confirmed | -> | paid |
+-------+ +-----------+ +------+
State Descriptions:
| State | Description |
|---|---|
draft |
Report created with device lines, not yet finalized |
confirmed |
PDF generated; vendor bill created (for consignee report) |
paid |
Owner has been paid; paired devices marked as settled |
Report Types:
- owner — Sent to the consignor (e.g., Axis Mobile). Contains only IMEI, model, storage, grade, commission, owner amount. Does NOT contain customer name, SO number, or sale price.
- consignee — Internal Reyder report. Contains full details including customer, SO, and sale price.
7. Sale Order Line Device States (state field on sale.order.line.device)¶
Values: draft, reserved, confirmed, delivered, cancelled
+-------+ +----------+ +-----------+ +-----------+ +-----------+
| draft | -> | reserved | -> | confirmed | -> | delivered | -> | cancelled |
+-------+ +----------+ +-----------+ +-----------+ +-----------+
Notes:
- draft: Device allocation record created but SO not yet confirmed.
- reserved: SO confirmed — device status on stock.lot set to reserved.
- confirmed: Manifest created and delivery is in progress.
- delivered: Manifest completed — device marked sold.
- cancelled: Allocation cancelled — device status reverts to available.
8. Packing Box States (state field on device.packing.box)¶
Values: draft, packing, ready, shipped, cancelled
+-------+ +---------+ +-------+ +--------+ +-----------+
| draft | -> | packing | -> | ready | -> |shipped | -> | cancelled |
+-------+ +---------+ +-------+ +--------+ +-----------+
State Descriptions:
| State | Description |
|---|---|
draft |
Box created, not yet being filled |
packing |
Devices are being added to the box |
ready |
Box sealed and ready for shipment |
shipped |
Box dispatched to destination |
cancelled |
Box cancelled — contents returned to inventory |
9. Retail Reservation States (state field on device.retail.reservation)¶
Values: draft, active, released, cancelled
+-------+ +--------+ +----------+ +-----------+
| draft | -> | active | -> | released | -> | cancelled |
+-------+ +---+----+ +----------+ +-----------+
|
| (auto-close on retail sale confirm or expiry)
v
+----------+
| released |
+----------+
State Descriptions:
| State | Description |
|---|---|
draft |
Reservation created but not yet activated |
active |
Device reserved for customer — device_status set to reserved |
released |
Reservation fulfilled (retail sale confirmed) or expired — device freed |
cancelled |
Reservation cancelled manually — device status reverts to available |
Auto-close behavior: Active reservations are automatically released when: - A retail sale referencing the reservation is confirmed. - The reservation expiry date passes (scheduled action).
Summary: Status Field Locations¶
| Field | Model | Managed By |
|---|---|---|
device_status |
stock.lot |
Allocation, manifest, retail sale flows |
qc_status |
stock.lot |
QC handoff wizard, QC action buttons |
settlement_status |
stock.lot |
Settlement report action_mark_paid() |
state |
device.manifest |
PO confirmation, CSV upload, picking |
state |
device.consignment.agreement |
Manual state buttons |
state |
consignment.settlement.report |
Auto-confirmed on creation, paid button |
state |
sale.order.line.device |
SO confirmation, manifest completion |
state |
device.packing.box |
Box packing workflow |
state |
device.retail.reservation |
Reservation activation, retail sale confirm |