Files

GRT SCADA Business Category

Ringkasan

grt_scada_business_category adalah modul layer terpisah untuk menambahkan Business Category pada area SCADA tanpa memaksa perubahan agresif ke modul grt_scada.

Tujuan utama modul ini adalah:

  • mempersiapkan segregasi SCADA per business category
  • menjaga migrasi production bisa dilakukan bertahap
  • mempertahankan endpoint lama tetap hidup
  • menyediakan endpoint baru khusus business category dengan prefix /api/scada/bc/...

Mengapa Dipisah dari grt_scada

Modul ini sengaja dipisah agar rollout lebih aman.

Keuntungan pendekatan ini:

  • frontend lama tidak perlu langsung diubah
  • route lama di grt_scada tetap berjalan
  • tim bisa migrasi per halaman atau per dashboard
  • data legacy yang belum punya category masih bisa dibaca jika diperlukan
  • risiko regresi di production lebih rendah

Dependensi

Modul bergantung pada:

  • grt_scada
  • grt_business_category_base
  • grt_inventory_business_category
  • grt_mrp_business_category

Cakupan Model

scada.equipment

Penambahan:

  • business_category_id

Fungsi:

  • menandai equipment SCADA per business category
  • menjadi sumber category untuk sensor, log, failure, dan beberapa record SCADA lain

Default:

  • mencoba ambil dari mrp.workcenter jika work center nantinya punya category
  • fallback ke default category user melalui mixin

Record SCADA yang kini BC-aware

Model berikut disiapkan dengan business_category_id:

  • scada.equipment.oee
  • scada.equipment.oee.line
  • scada.material.consumption
  • scada.quality.control
  • scada.sensor.reading
  • scada.api.log
  • scada.equipment.failure
  • scada.equipment.material
  • scada.mo.data
  • scada.mo.weight

Sumber nilai category mengikuti konteks record, misalnya:

  • dari mrp.production.business_category_id
  • dari scada.equipment.business_category_id
  • dari product.business_category_id
  • dari stock.move.business_category_id

Integrasi dengan MRP dan Inventory

Modul juga menambahkan validasi category pada object yang terhubung ke SCADA:

  • mrp.bom.scada_equipment_id
  • mrp.bom.line.scada_equipment_id
  • mrp.production.scada_equipment_id
  • stock.move.scada_equipment_id

Tujuan:

  • equipment SCADA yang dipakai pada BoM, MO, dan stock move harus tetap konsisten dengan business category manufacturing

Alur Category pada Record SCADA

scada.equipment.oee

Category mengikuti:

  • manufacturing_order_id.business_category_id

scada.equipment.oee.line

Category mengikuti:

  • oee_id.business_category_id

scada.material.consumption

Urutan fallback category:

  1. manufacturing_order_id.business_category_id
  2. equipment_id.business_category_id
  3. material_id.business_category_id
  4. move_id.business_category_id

scada.quality.control

Category mengikuti:

  • product_id.business_category_id

scada.sensor.reading, scada.api.log, scada.equipment.failure

Category mengikuti:

  • equipment_id.business_category_id

scada.equipment.material

Urutan fallback category:

  1. manufacturing_order_id.business_category_id
  2. equipment_id.business_category_id
  3. product_id.business_category_id

scada.mo.data dan scada.mo.weight

Category mengikuti:

  • manufacturing_order_id.business_category_id

Security Rule dan Strategi Migrasi Bertahap

Security rule modul ini sekarang berjalan ketat:

  • record harus memiliki business_category_id yang masuk effective_business_category_ids
  • record legacy business_category_id = False tidak lagi dibuka untuk role operasional

Artinya:

  • segregasi antar business category menjadi lebih kuat sejak awal
  • migrasi data legacy harus diselesaikan sebelum user operasional memakai endpoint BC secara penuh

Model yang sudah dibatasi:

  • scada.equipment
  • scada.equipment.oee
  • scada.equipment.oee.line
  • scada.quality.control
  • scada.sensor.reading
  • scada.api.log
  • scada.equipment.failure
  • scada.material.consumption
  • scada.equipment.material
  • scada.mo.data
  • scada.mo.weight

Endpoint Baru untuk Frontend

Modul ini tidak mengganti endpoint lama.

Endpoint baru yang disiapkan:

  • /api/scada/bc/context
  • /api/scada/bc/equipments
  • /api/scada/bc/products
  • /api/scada/bc/products-by-category
  • /api/scada/bc/boms
  • /api/scada/bc/mo-list-confirmed
  • /api/scada/bc/mo-detail
  • /api/scada/bc/mo-list-detailed
  • /api/scada/bc/oee-detail
  • /api/scada/bc/oee-equipment-avg
  • /api/scada/bc/kpi-product-report
  • /api/scada/bc/today-reports
  • /api/scada/bc/periodic-report
  • /api/scada/bc/equipment-failure-report

Parameter Business Category pada Endpoint

Endpoint BC mendukung context category melalui:

  • business_category_id
  • business_category_code
  • business_category_name

Untuk endpoint operasional /api/scada/bc/... (selain endpoint context), business category dari middleware sekarang wajib dikirim. Request tanpa business category tidak akan diproses.

Fallback active/effective category hanya dipertahankan untuk endpoint context:

  • request.env.user.active_business_category_id
  • jika user hanya punya satu effective category, category itu dipakai otomatis

Parameter tambahan:

  • include_unassigned

Fungsi include_unassigned:

  • pada mode ketat saat ini, record legacy tanpa category tidak lagi diekspos ke role operasional
  • parameter ini dipertahankan hanya untuk kompatibilitas payload middleware lama

Response Context

Sebagian besar endpoint BC mengembalikan:

  • selected_business_category

Tujuannya:

  • frontend tahu category mana yang sedang aktif
  • audit request lebih mudah
  • debugging cross-BU menjadi lebih jelas

View dan UI

Modul memperluas view SCADA yang sudah ada.

Field, filter, atau group by category ditambahkan pada:

  • equipment
  • OEE summary
  • quality control
  • sensor reading
  • API log
  • equipment failure

Tujuan:

  • user backend bisa mulai review data per category
  • tim implementasi bisa audit hasil backfill tanpa query manual

Migrasi Existing Data

post_init_hook melakukan backfill bertahap untuk record existing.

Urutan utamanya:

  1. isi scada.equipment.business_category_id dari histori MO jika equipment tersebut hanya konsisten ke satu category
  2. isi scada.equipment.oee dan scada.equipment.oee.line dari MO
  3. isi scada.material.consumption dari MO, equipment, product, atau stock move
  4. isi scada.quality.control dari product
  5. isi scada.sensor.reading, scada.api.log, scada.equipment.failure dari equipment
  6. isi scada.equipment.material dari MO, equipment, atau product
  7. isi scada.mo.data dan scada.mo.weight dari MO

Catatan penting:

  • equipment hanya di-backfill otomatis jika histori MO menunjukkan satu category yang konsisten
  • ini sengaja dibuat hati-hati agar equipment yang ambigu tidak salah dipetakan

Validasi Utama

Constraint penting yang dijaga:

  • equipment SCADA pada BoM harus sama category dengan BoM
  • equipment SCADA pada BoM line harus sama category dengan BoM
  • equipment SCADA pada MO harus sama category dengan MO
  • equipment SCADA pada stock move harus sama category dengan stock move
  • material consumption dan equipment material tidak boleh berbeda category dari referensi utamanya

Batasan Desain Saat Ini

Modul ini adalah fase aman untuk rollout bertahap, belum fase final paling ketat.

Karakter desain saat ini:

  • route lama tidak dipaksa ikut BC
  • endpoint BC mewajibkan business category dari middleware
  • record legacy False tidak lagi dibuka untuk role operasional
  • beberapa report BC adalah versi minimum-safe yang fokus pada filtering category, bukan redesign total seluruh analitik lama

Urutan Rollout yang Disarankan

  1. pastikan grt_mrp_business_category sudah stabil di staging
  2. upgrade grt_scada_business_category di staging
  3. review hasil backfill category pada equipment dan record SCADA utama
  4. ubah frontend tertentu ke endpoint /api/scada/bc/...
  5. jalankan periode dual-run antara endpoint lama dan endpoint BC
  6. setelah hasil konsisten, baru lakukan migrasi frontend lebih luas
  7. jika seluruh data sudah bersih, pertimbangkan memperketat rule legacy business_category_id = False

Checklist Testing Staging

  • cek equipment existing yang sudah terisi category otomatis
  • cek equipment ambigu yang tetap kosong dan review manual
  • cek OEE record lama bisa difilter per category
  • cek QC, sensor, log, dan failure report muncul sesuai category user
  • cek endpoint /api/scada/bc/context mengembalikan context yang benar
  • cek endpoint /api/scada/bc/mo-detail hanya menampilkan MO pada category yang sesuai
  • cek endpoint /api/scada/bc/periodic-report dan /api/scada/bc/today-reports bisa dipakai frontend
  • cek user BU A tidak bisa melihat data BU B melalui endpoint BC
  • cek request endpoint BC tanpa parameter business category ditolak
  • cek data legacy business_category_id = False tidak lagi terbaca oleh operator/technician

Hubungan dengan Modul Lain

  • grt_mrp_business_category menjadi sumber category untuk MO, BoM, dan move manufacturing
  • grt_inventory_business_category menjadi sumber category untuk stock move dan valuation inventory
  • grt_scada tetap menjadi modul core SCADA
  • grt_scada_business_category adalah layer segregasi dan migrasi aman di atasnya

Dokumen Terkait