Files

GRT MRP Business Category

Ringkasan

grt_mrp_business_category menambahkan segregasi Business Category pada area Manufacturing Odoo.

Modul ini melengkapi arsitektur business category yang sebelumnya sudah ada di:

  • grt_business_category_base
  • grt_inventory_business_category
  • grt_mrp_overhead_costing

Fokus modul ini adalah memastikan:

  • BoM punya business_category_id
  • Manufacturing Order punya business_category_id
  • raw material move dan finished move MO mengikuti category MO
  • team manufacturing bisa dipisah per business category
  • valuation trace manufacturing tetap konsisten terhadap category inventory

Tujuan

Modul ini dibuat untuk kebutuhan segregasi manufacturing lintas business unit dengan model yang ketat dan aman.

Tujuan utamanya:

  • memisahkan data BoM per business category
  • memisahkan MO per business category
  • menjaga raw material dan finished goods tetap berada pada category yang benar
  • menjaga costing dan valuation inventory tetap membawa category yang sama
  • mencegah user mengakses atau memakai data manufacturing di luar effective_business_category_ids

Dependensi

Modul bergantung pada:

  • mrp
  • stock_account
  • grt_business_category_base
  • grt_inventory_business_category
  • grt_mrp_overhead_costing

Cakupan Model

mrp.bom

Penambahan utama:

  • business_category_id
  • manufacturing_analytic_account_id

Perilaku:

  • default category diambil dari product atau product template
  • company_id akan mengikuti company dari category jika belum diisi
  • BoM harus konsisten dengan category finished product
  • seluruh component dan by-product harus memakai category yang sama dengan BoM

mrp.production

Penambahan utama:

  • business_category_id
  • manufacturing_analytic_account_id
  • mrp_team_id

Perilaku:

  • default category diambil dari mrp_team, BoM, product, atau warehouse picking type
  • sistem mencoba mencari BoM yang cocok berdasarkan product + business category
  • mrp_team_id harus berasal dari company dan business category yang sama
  • action_confirm dan button_mark_done akan menolak MO yang belum punya category

mrp.team

Model baru untuk tim manufacturing per category.

Field utama:

  • name
  • company_id
  • business_category_id
  • user_id
  • member_ids

Fungsi:

  • membatasi pemakaian team sesuai category
  • mewariskan akses category ke user melalui mekanisme effective_business_category_ids

mrp.bom.line

Penambahan:

  • business_category_id related ke bom_id.business_category_id

Fungsi:

  • memudahkan audit dan grouping line berdasarkan category BoM

stock.move.line

Penambahan:

  • business_category_id related ke move_id.business_category_id

stock.valuation.layer

Penambahan:

  • business_category_id related ke stock_move_id.business_category_id
  • inventory_analytic_account_id related ke stock_move_id.inventory_analytic_account_id

Fungsi:

  • memperjelas audit valuation layer hasil manufacturing

Alur Data Category

Saat membuat BoM

Urutan default category:

  1. product_id.business_category_id
  2. product_tmpl_id.business_category_id
  3. default dari business.category.mixin

Saat membuat MO

Urutan default category:

  1. mrp_team_id.business_category_id
  2. bom_id.business_category_id
  3. product_id.business_category_id
  4. warehouse.business_category_id
  5. default dari business.category.mixin

Jika bom_id belum diisi, modul akan mencoba mencari BoM yang match terhadap:

  • product
  • business category
  • company

Saat flow inventory manufacturing berjalan

Kategori manufacturing dipakai sebagai sumber utama untuk:

  • raw material move MO
  • finished move MO
  • move line
  • stock valuation layer
  • account move valuation inventory melalui modul inventory business category

Validasi Utama

Modul ini sengaja ketat.

Constraint penting:

  • BoM wajib punya category jika terkait produk
  • MO wajib punya category jika terkait produk
  • product.business_category_id harus sama dengan mrp.production.business_category_id
  • bom.business_category_id harus sama dengan mrp.production.business_category_id
  • component BoM harus sama category dengan BoM
  • raw move dan finished move tidak boleh beda category dengan MO
  • mrp_team.business_category_id harus sama dengan category MO
  • user non-admin hanya boleh memakai category yang ada di effective_business_category_ids

Security Rule

Model yang dibatasi oleh business category:

  • mrp.bom
  • mrp.bom.line
  • mrp.bom.byproduct
  • mrp.production
  • stock.move.line
  • stock.valuation.layer
  • mrp.team
  • crm.business.category untuk user MRP

Prinsip rule:

  • user MRP hanya bisa akses data pada company yang diizinkan
  • user MRP hanya bisa akses data pada effective_business_category_ids
  • admin modul tetap dibatasi effective_business_category_ids
  • hanya super admin (UID 1) yang dapat bypass penuh

Integrasi dengan Modul Lain

grt_inventory_business_category

Modul ini bergantung pada propagasi stock.move.business_category_id agar:

  • raw material issue dari MO ikut category MO
  • finished goods receipt dari MO ikut category MO
  • valuation journal inventory tetap punya inventory_business_category_id

grt_mrp_overhead_costing

Modul overhead costing sudah dipatch agar filter MO done lebih mengutamakan:

  • mrp.production.business_category_id

Bukan hanya:

  • product.business_category_id

Migrasi Existing Data

post_init_hook melakukan backfill untuk data existing.

Urutan backfill:

  1. isi product_template.business_category_id kosong berdasarkan default category company
  2. isi mrp_bom.business_category_id dari product atau product template
  3. isi mrp_production.business_category_id dari BoM atau product
  4. isi stock_move.business_category_id dari MO raw/finished
  5. isi account_move.inventory_business_category_id dari stock_move

Catatan:

  • pendekatan ini aman untuk database yang sudah punya product dan BoM
  • tetap lebih aman diuji dulu di staging sebelum upgrade production

Batasan Desain V1

Desain v1 sengaja konservatif.

Asumsi utama:

  • satu product operasional mewakili satu business category
  • satu BoM mewakili satu business category
  • satu MO mewakili satu business category

Implikasi:

  • jika satu bahan baku ingin dipakai lintas BU, paling aman dibuat product terpisah per BU
  • model ini mengutamakan keamanan segregasi, bukan fleksibilitas sharing master data lintas BU

View dan UI

Modul menambahkan field category pada:

  • form dan tree BoM
  • form dan tree Manufacturing Order
  • form dan tree Manufacturing Team
  • search BoM (filter dan group by business category)
  • search Manufacturing Order (filter dan group by business category)

Tujuan:

  • memudahkan audit
  • memudahkan filter dan grouping
  • memastikan user melihat context category saat operasional
  • menjaga list, pivot, dan graph MRP tetap bisa dipisah per business category melalui search filter/group by

Urutan Implementasi yang Disarankan

  1. pastikan grt_business_category_base dan grt_inventory_business_category sudah stabil
  2. pastikan product existing sudah memiliki category yang benar
  3. upgrade grt_mrp_business_category di staging
  4. review hasil backfill BoM, MO, dan stock.move
  5. uji skenario lengkap raw material sampai finished goods
  6. baru lanjut ke production

Checklist Testing Staging

  • buat BoM baru dan pastikan category terisi otomatis
  • buat MO dari BoM dan pastikan category mengikuti BoM
  • confirm MO dan cek raw move membawa category MO
  • mark done MO dan cek finished move membawa category MO
  • cek valuation layer hasil MO
  • cek journal valuation inventory membawa inventory_business_category_id
  • cek user BU A tidak bisa baca MO atau BoM BU B
  • cek user BU A tidak bisa baca BoM line, by-product, move line, dan valuation layer BU B
  • cek filter/group by business category pada list, pivot, dan graph Manufacturing Order
  • cek overhead costing tetap membaca MO done sesuai category

Dokumen Terkait

Update Akses Ketat (2026-04-16)

Dokumentasi ini diperbarui mengikuti hardening akses pada modul MRP.

Perubahan yang diterapkan:

  • model mrp.bom dan mrp.production sekarang menambahkan guard _search agar query selalu dipersempit ke category efektif user
  • ditambahkan check_access_rule pada mrp.bom dan mrp.production untuk menampilkan peringatan akses yang jelas
  • validasi internal yang sebelumnya memberi pengecualian untuk base.group_system diubah menjadi pengecualian hanya untuk SUPERUSER_ID (UID 1)
  • rule base.group_system di security/ir.rule.csv diperketat dari company-only menjadi company + effective_business_category_ids

Dampak operasional:

  • admin modul MRP tidak otomatis bisa melihat lintas business category
  • jika perlu masuk category lain, user harus didaftarkan ke category/team terkait
  • hanya super admin yang tetap punya bypass penuh lintas category

Langkah deploy:

  1. restart service Odoo
  2. upgrade modul grt_mrp_business_category
  3. verifikasi list BoM dan MO dengan menghapus filter default: data lintas category harus tetap tidak terlihat
  4. verifikasi akses detail record lintas category menghasilkan pesan penolakan akses