Files
karung-counting-feedmill-se…/docs/do-erd.md
T
2026-09-24 15:45:12 +07:00

2.5 KiB

ERD — DO-gated manual batch (delivery orders)

Mermaid ER for karung feedmill counter. Soft FK: no DB foreign keys enforced; delivery_orders.batch_id is informational once a batch row exists. While a batch is active, membership lives in current_batch.json (do_ids).

erDiagram
    batches ||--o{ delivery_orders : "soft via do_numbers / batch_id"
    batches ||--o{ daily_summaries : "rolls up by counting_date"

    batches {
        INTEGER id PK
        TEXT counting_date
        INTEGER batch_number
        TEXT camera_name
        TEXT object_label
        INTEGER count
        TEXT start_time
        TEXT end_time
        INTEGER box_loading
        INTEGER box_unloading
        TEXT model_mode
        TEXT plate
        TEXT do_numbers
        INTEGER expected_sack
        INTEGER expected_box
        INTEGER net_sack
        INTEGER net_box
        TIMESTAMP created_at
    }

    delivery_orders {
        INTEGER id PK
        TEXT counting_date
        TEXT photo_path
        TEXT no_do
        TEXT plate
        INTEGER expected_sack
        INTEGER expected_box
        TEXT ocr_raw
        TEXT status
        INTEGER batch_id
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }

    daily_summaries {
        INTEGER id PK
        TEXT counting_date
        TEXT camera_name
        TEXT object_label
        INTEGER total_count
        INTEGER total_batches
        TIMESTAMP updated_at
    }

Relationships (logical)

From To How
delivery_orders → batches N—1 On stop: batches.do_numbers JSON array of No. DO; delivery_orders.batch_id set best-effort. Active batch: current_batch.json.do_ids.
batches → daily_summaries N—1 Same counting_date/camera/label; stop recompute SUM(count).

Status (delivery_orders.status)

draft → staged (saved/edited) → attached (in active/stopped batch) | discarded (deleted). Discarded stop (both nets 0) returns DOs to staged.

JSON sidecars + photo tree (not in SQLite)

Path Role
$OUTPUT_DIR/batch_mode.json {mode: auto|do_manual|manual}
$OUTPUT_DIR/current_batch.json active batch + do_ids, plate, expected_*, nets inputs
$OUTPUT_DIR/do_settings.json require_plate, require_do, ocr_engine
$OUTPUT_DIR/do_photos/YYYY-MM-DD/do_<uuid>.jpg source photos (7-day retention)

Schema DDL: counter_dashboard.py _ensure_db() (additive PRAGMA migrations on batches + CREATE TABLE delivery_orders).