Skip to content

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

Device Form - QC Status


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