Durum: Kabul edildi; projenin yazılı mühendislik kurallarında belirtilir. Bu kayıt, bir kişinin veya kuruluşun Cluster ERP'de bir kez, bir taraf (Party) olarak var olduğu ve müşteri, tedarikçi, sahip olunan kuruluş ve çalışanın o tarafın rolleri olarak tek bir kartta facet olarak gösterildiği kuralı kapsar. Modül Parties modülü (parties) sayfasında anlatılır.
Bağlam¶
Müşteriler, tedarikçiler, sahip olunan kuruluşlar ve çalışanlar farklı modüllerde yaşar: crm, procurement ve owned_organisations. Ortak bir kayıt olmadan aynı şirket veya kişi birkaç yerde girilir ve bakımı yapılırdı. Projenin yazılı mühendislik kuralları her şeyin bir taraf olduğunu söyler: ayrı kartlar yerine rol facet'leri olan tek bir taraf kartı, FacetMeta ile bildirilen ve PartyRoleSet ile eşitlenen roller ve parties modülünü import eden hiçbir modül. Başka bir gerekçe koddan belirlenemez.
Karar¶
- Taraf kanonik kayıttır.
is_customer,is_supplierveis_employeebayrakları hangi rolleri oynadığını söyler (src/cluster_erp/modules/parties/parties/models.py:33-35). - Her rol kaydı bir
party_idtutar. Metadata'sıIdentityMetabildirir; böylece web uygulaması ayrı bir rol kartı yerine taraf kartını açar (src/cluster_erp/core/metadata.py:304-313). Yedi varlık metadata nesnesi bunu bildirir (grep -rn "identity=IdentityMeta"ile sayıldı). - Taraf kartı rolleri, her biri
party_idüzerinde düz bir sorgu süzgeciyle yüklenenFacetMetagirdileri olarak listeler (src/cluster_erp/core/metadata.py:357-377,src/cluster_erp/modules/parties/parties/metadata.py:550-722). - Bir tarafı bağlayan veya bağını kaldıran rol modülü
PartyRoleSetyayar; parties modülü ilgili bayrağı ayarlar (src/cluster_erp/core/contracts.py:47-55).
Sıra şeması bir tedarikçinin bir tarafa bağlanmasını gösterir.
sequenceDiagram participant Sup as procurement SupplierService participant Bus as EventBus participant Par as parties Module participant DB as Party satırı Sup->>Sup: party_id ile Supplier oluştur Sup->>Bus: PartyRoleSet yay (role supplier, active true) Bus->>Par: _handle_party_role_set Par->>DB: is_supplier ve updated_at ayarla
Düzyazıyla: tedarikçi satırı yazıldıktan sonra servis taraf kimliği, rol ve active=True ile PartyRoleSet yayar (src/cluster_erp/modules/procurement/suppliers/services.py:130-145). Parties modülü bu olaya abone olmuştur (src/cluster_erp/modules/parties/module.py:130). İşleyicisi rolü bayrak sütununa eşler ve tarafı kendi oturumunda günceller (src/cluster_erp/modules/parties/module.py:168-192).
Sonuçlar¶
- Taraf kartı beş facet gösterir: müşteri (
crm), tedarikçi (procurement), sahip olunan kuruluş, çalışan ve görevlendirme (owned_organisations). Görevlendirme facet'i yalnızis_employeeayarlıysa görünür (src/cluster_erp/modules/parties/parties/metadata.py:551,src/cluster_erp/modules/parties/parties/metadata.py:629,src/cluster_erp/modules/parties/parties/metadata.py:680,src/cluster_erp/modules/parties/parties/metadata.py:700,src/cluster_erp/modules/parties/parties/metadata.py:718-722). - Rolleriyle birlikte tek adımda taraf oluşturmak,
server/routes/party_composite.pyiçindeki uygulama katmanı düzenlemesidir ve istemciyecomposite_createile bildirilir (src/cluster_erp/server/routes/party_composite.py:1-10,src/cluster_erp/modules/parties/parties/metadata.py:319). - Var olan bir tarafa rol eklemek de uygulama katmanı düzenlemesidir (
src/cluster_erp/server/routes/party_roles.py:1-10). - Bir açılış geçişi, kaçırılan olaylara karşı güvenlik ağı olarak bayrakları var olan facet'lerle uzlaştırır (
src/cluster_erp/server/app.py:1002-1008). - Bayrak güncellemesi ORM üzerinden gider: işleyici tarafı yükler, bayrağı ayarlar ve commit eder; böylece değişiklik geçmişi değişikliği kaydeder ve
updated_atonupdateile yenilenir (src/cluster_erp/modules/parties/module.py:184-193).
Kodun uyguladığı yerler¶
| Mekanizma | Neyi denetler | Kaynak |
|---|---|---|
test_guided_party_creation_is_declared_in_metadata |
Rehberli oluşturma tam olarak customer, supplier ve employee rollerini, her biri bayrak alanı ve veri gruplarıyla sunar |
tests/test_metadata_driven_rules.py:51-60 |
tests/test_party_form_contract.py |
Taraf formunun metadata'sı, şemaları, hata kodları ve çevirileri uyuşur | tests/test_party_form_contract.py:1-6 |
| Modül sınır testi | Hiçbir rol modülü parties modülünü import etmez | tests/test_architecture_boundaries.py:46-57 |
_sync_party_role_flags |
Her açılıştan sonra bayraklar var olan facet'lerle eşleşir | src/cluster_erp/server/app.py:1002-1008 |
İlgili sayfalar¶
- Karar kayıtları
- Parties modülü (parties)
- Metadata modeli
- Yalnız EventBus ile modüller arası iletişim
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.