Модель данных#
1. weigh_session#
Назначение: карточка полного или частичного цикла взвешивания.
Ключевые поля:
idtenant_id,site_id,industry_codelane_id,directionvehicle_platetrip_tokenstatus(detected|stabilizing|tare_recorded|gross_recorded|completed|rejected|manual_review)operation_mode(automatic|assisted|manual_review)phase_sequence(single_partial|tare_then_gross|gross_then_tare)active_phase(tare|gross|none)tare_kg,gross_kg,net_kgtare_captured_at,gross_captured_attare_direction,gross_directiontare_lane_id,gross_lane_idstability_state(moving|stabilizing|stable|unstable)stability_window_msdriver_identity_idcargo_media_idplate_media_in_id,plate_media_out_idscale_indicator_idanpr_sourcereview_reasonclose_reasoncreated_at,updated_at
1.1. Правила состояния#
detected:сессия создана по факту въезда или ANPR, но вес еще не признан стабильным;
stabilizing:ТС находится на платформе, идет ожидание стабильного веса;
tare_recorded:записана фаза
tare, вторая фаза еще не завершена;
gross_recorded:записана фаза
gross, вторая фаза еще не завершена;
completed:есть обе фазы и рассчитан
net_kg;
rejected:цикл признан невалидным;
manual_review:цикл не может быть автоматически завершен и требует разбора.
1.2. State machine phase-1#
detected -> stabilizing -> tare_recorded|gross_recorded -> completed
Ветка исключений:
detected|stabilizing|tare_recorded|gross_recorded -> manual_review|rejected
1.3. Инварианты#
vehicle_plateобязателен для automatic flow;net_kgвычисляется только если одновременно заданыtare_kgиgross_kg;completedзапрещен без двух фаз;manual_reviewдопускает частичную карточку и пропуск identity enrichment;manual_reviewобязателен дляanpr_mismatch,missing_required_media,missing_phaseи неразрешенногоduplicate_session;rejectedне используется как silent fallback и задается только явным review-решением после exception flow;повторный
detectв той же фазе должен переиспользовать существующийsession_id, а не создавать дубль карточки;tare_directionиgross_directionмогут отличаться на двусторонних весах.
2. driver_identity#
Назначение: контур идентификации водителя и сопроводительных данных рейса.
Ключевые поля:
idtenant_id,site_iddriver_iddriver_namecarrier_idvehicle_platetrailer_platerfid_uidqr_payloadtrip_referencecargo_referencesource(rfid|qr|mixed|manual_override)resolved_at
Правило:
identity contour может отсутствовать в automatic baseline и не должен блокировать карточку;
если QR и RFID оба присутствуют,
source=mixed.
3. media_evidence#
Назначение: фото и кадры, прикрепленные к карточке взвешивания.
Ключевые поля:
idtenant_id,site_idsession_idkind(plate_in|plate_out|cargo_top|overview)phase(tare|gross|unknown)camera_idstorage_refpreview_refcaptured_atclassifier_payloadhashrequired_for_close
Правило media policy:
cargo_topсphase=grossобязателен для automatic close;cargo_topсphase=tareобязателен только для спорных и непустых кейсов;отсутствие обязательного evidence переводит сессию в
manual_review;storage_refхранит оригинальный evidence path и не должен заменяться preview-ссылкой;preview_refдопустим только как пользовательская копия для UI/handover и не является основанием для automatic close;для
manual_reviewиrejectedstorage refs сохраняются вместе с alarm/evidence bundle до завершенного handover и ERP sync.
4. weigh_alarm_event#
Назначение: ошибки цикла, отказ оборудования и антифрод.
Ключевые поля:
idtenant_id,site_idsession_idalarm_codeseverity,prioritystatus(open|acknowledged|resolved|closed)messagesourcecorrelation_idpayloadtriggered_at,acked_at,resolved_at
Базовые alarm codes phase-1:
weighbridge_weight_unstableweighbridge_duplicate_entryweighbridge_partial_exitweighbridge_anpr_mismatchweighbridge_camera_unavailableweighbridge_scale_timeoutweighbridge_gate_interlock_fault
5. Связи#
weigh_session.driver_identity_id -> driver_identity.idmedia_evidence.session_id -> weigh_session.idweigh_alarm_event.session_id -> weigh_session.id
6. Duplicate session policy#
duplicate определяется по сочетанию
vehicle_plate,lane_id, активной фазы и текущего открытого cycle context;runtime должен вернуть уже существующую карточку и поднять
weighbridge_duplicate_entryвместо создания второйweigh_session;если duplicate возникает на фоне failover или рассинхронизации панелей, authoritative session определяется по последнему подтвержденному
correlation_id.
7. Минимальный phase-1 storage scope#
В первую реализационную очередь обязательно входят:
weigh_sessiondriver_identitymedia_evidenceweigh_alarm_event
Во phase-1 не требуется отдельный реестр ERP-документов и номенклатуры; они могут приходить как refs в driver_identity.