Cluster ERP'de müşteri, tedarikçi, çalışan ve sahip olunan kuruluş ayrı kartlar değildir. Her biri kendi modülünde, parties modülünün tek bir tarafını (Party) gösteren bir rol kaydıdır ve web uygulaması hepsi için taraf kartını açar. Bu sayfa kimlik yönlendirmesini, taraf kartındaki rol bölümlerini, rol bayraklarını, rehberli oluşturmayı ve rol etkinleştirmeyi açıklar. Taraf alanlarının kendisi parties alt modülü sayfasında listelenir.
Kısaca¶
- Bir rol kaydı bir
party_idtaşır: CRM müşterisi, satın alma tedarikçisi, çalışan, görevlendirme ve sahip olunan kuruluş (src/cluster_erp/modules/crm/customers/models.py:23,src/cluster_erp/modules/procurement/suppliers/models.py:42,src/cluster_erp/modules/owned_organisations/employees/models.py:43,src/cluster_erp/modules/owned_organisations/organisations/models.py:41). - Bir rol varlığındaki
IdentityMeta, web uygulamasına ayrı bir rol kartı yerine taraf kartını açmasını söyler (src/cluster_erp/core/metadata.py:304-313). - Taraf metadata'sındaki
FacetMetagirdileri her rolün verisini taraf kartının bölümleri olarak gösterir (src/cluster_erp/core/metadata.py:357-377,src/cluster_erp/modules/parties/parties/metadata.py:550-763). - Taraftaki
is_customer,is_supplierveis_employeebayrakları rol kayıtlarınıPartyRoleSetolayı ve bir başlangıç uzlaştırmasıyla izler (src/cluster_erp/modules/parties/module.py:168-195,src/cluster_erp/server/app.py:1002-1055). - Rollerle taraf oluşturmak ve sonradan rol eklemek, tek bir istek işleminde birkaç modül servisini çağıran sunucu katmanında çalışır (
src/cluster_erp/server/routes/party_composite.py:1-10,src/cluster_erp/server/routes/party_roles.py:1-15).
Nasıl çalışır¶
Model¶
Şema hangi rol kayıtlarının bir tarafı gösterdiğini ve her birinin hangi modüle ait olduğunu gösterir.
flowchart LR Party["Party (parties)"] Customer["Customer (crm)"] -->|party_id| Party Supplier["Supplier (procurement)"] -->|party_id| Party Employee["Employee (owned_organisations)"] -->|party_id| Party Assignment["Assignment (owned_organisations)"] -->|party_id| Party Org["OwnedOrganisation (owned_organisations)"] -->|party_id| Party Assignment -->|organisation_id| Org Assignment -->|employee_id| Employee
Düz anlatımla: beş rol kaydı tarafı bir party_id sütunuyla gösterir. Bir görevlendirme ayrıca çalışan kaydını ve kişinin çalıştığı sahip olunan kuruluşu gösterir (src/cluster_erp/modules/owned_organisations/employees/models.py:69-102). Bu sütunların hiçbiri modüller arası bir veritabanı yabancı anahtarı değildir; çalışan modeli, modül sınırı temiz kalsın diye yönetici ve taraf kimliklerinin düz UUID olduğunu belirtir (src/cluster_erp/modules/owned_organisations/employees/models.py:59-61).
Kimlik yönlendirmesi¶
IdentityMeta(field, module, entity), taraf kimliğini tutan yerel sütunu adlandırır. Ayarlandığında web uygulaması rol kartı yerine taraf kartını açar (src/cluster_erp/core/metadata.py:304-313). Beş varlık bunu bildirir: customer (src/cluster_erp/modules/crm/customers/metadata.py:30), supplier (src/cluster_erp/modules/procurement/suppliers/metadata.py:27), organisation, employee ve assignment (src/cluster_erp/modules/owned_organisations/organisations/metadata.py:53, src/cluster_erp/modules/owned_organisations/organisations/metadata.py:355, src/cluster_erp/modules/owned_organisations/organisations/metadata.py:590). İntranet rehberi de bunu bildirir (src/cluster_erp/modules/intranet/directory/metadata.py:30).
Taraf kartındaki rol bölümleri¶
FacetMeta bir tarafın oynayabileceği bir rolü tanımlar. Web uygulaması rol kayıtlarını, link_field taraf kimliğine eşit olacak şekilde süzülen düz bir liste sorgusuyla yükler ve bildirilen bölümleri işler (src/cluster_erp/core/metadata.py:357-377). Taraf metadata'sı beş rol bölümü bildirir:
| Rol bölümü | Bölümler | Kapı | Kaynak |
|---|---|---|---|
crm / customer |
Ticari Bilgiler formu; Müşteri Parçaları tablosu; teklif talebi, teklif ve sipariş geçmişi tabloları | yok | src/cluster_erp/modules/parties/parties/metadata.py:551-628 |
procurement / supplier |
Tedarikçi Bilgileri formu; satın alma teklif talebi, teklif ve sipariş geçmişi tabloları | yok | src/cluster_erp/modules/parties/parties/metadata.py:629-679 |
owned_organisations / organisation |
Departmanlar ağacı; görevlendirmelerden oluşan Çalışanlar tablosu | yok | src/cluster_erp/modules/parties/parties/metadata.py:680-698 |
owned_organisations / employee |
İstihdam Bilgileri formu | yok | src/cluster_erp/modules/parties/parties/metadata.py:700-713 |
owned_organisations / assignment |
Kuruluşlar boyunca Görevlendirmeler tablosu | requires_flag="is_employee" |
src/cluster_erp/modules/parties/parties/metadata.py:718-762 |
İşleme kuralları genel ayrıntı sayfasındadır.
Rol bayrakları¶
Taraf listesi taraftaki üç mantıksal değerle role göre süzer (src/cluster_erp/modules/parties/parties/services.py:53-61). Her rol modülü bir rol kaydını bağladığında veya bağını kaldırdığında PartyRoleSet(party_id, role, active) yayar (src/cluster_erp/core/contracts.py:48-55): müşteri servisi (src/cluster_erp/modules/crm/customers/services.py:134-144), tedarikçi servisi (src/cluster_erp/modules/procurement/suppliers/services.py:136-145) ve çalışan servisi (src/cluster_erp/modules/owned_organisations/employees/services.py:88-101, src/cluster_erp/modules/owned_organisations/employees/services.py:125-140). parties modülü abone olur ve eşleşen sütunu kendi oturumunda günceller (src/cluster_erp/modules/parties/module.py:168-195). Her başlangıçta _sync_party_role_flags üç bayrağı canlı rol kayıtlarından yeniden hesaplar ve yalnızca değişen satırları yazar (src/cluster_erp/server/app.py:1002-1055).
Rehberli oluşturma¶
POST /api/v1/parties/composite, tarafı, rol listesini ve rol başına bir bloğu içeren tek bir yük alır (src/cluster_erp/server/routes/party_composite.py:40-51). Taraf metadata'sı oluşturma formunu composite_create ile bu uca yönlendirir (src/cluster_erp/modules/parties/parties/metadata.py:319-329).
sequenceDiagram participant C as İstemci formu participant R as create_party_composite participant P as PartyService participant F as Rol servisleri C->>R: taraf, roller, rol blokları R->>P: create(party) P-->>R: taraf R->>F: CustomerService / SupplierService / EmployeeService / AssignmentService .create F-->>R: rol kimlikleri R-->>C: party_id ve rol kimlikleri
Düz anlatımla: uç önce tarafı oluşturur (src/cluster_erp/server/routes/party_composite.py:80). Seçilen her rol için party_id alanını doldurur, müşteri ve tedarikçi için legal_name ve tax_no değerlerini taraftan varsayılan olarak alır, bloğu doğrular ve rol servisini çağırır (src/cluster_erp/server/routes/party_composite.py:84-126). Bir çalışan için, izinle korunan alanlar o izne sahip olmayan bir çağıran için düşürülür (src/cluster_erp/server/routes/party_composite.py:114-120). İlk görevlendirme bloğu kuruluşu, pozisyonu, istihdam türünü ve başlangıç tarihini belirtmelidir; aksi halde çağrı PARTY_ASSIGNMENT_INCOMPLETE ile başarısız olur (src/cluster_erp/server/routes/party_composite.py:127-145). İstek oturumu her şeyi birlikte kaydeder veya her şeyi geri alır (src/cluster_erp/server/routes/party_composite.py:4-9).
Sonradan rol ekleme¶
POST /api/v1/parties/{party_id}/roles/customer, /roles/supplier ve /roles/employee var olan bir tarafa rol ekler (src/cluster_erp/server/routes/party_roles.py:58-123). Taraf kartı bunları Müşteri Rolünü Etkinleştir, Tedarikçi Rolünü Etkinleştir ve Çalışan Rolünü Etkinleştir aksiyonları olarak sunar; her biri yalnızca eşleşen bayrak yanlışken görünür (src/cluster_erp/modules/parties/parties/metadata.py:393-438). Bir rolü kaldırmak rol kaydının kendi kullanımdan kaldırılmasıdır; taraf tarafından rol kaldıran bir uç yoktur (src/cluster_erp/server/routes/party_roles.py:12-14).
Ad ve vergi numarası tarafı izler¶
Bir tarafın görünen adı veya vergi numarası değiştiğinde PartyUpdated yeni değerleri taşır (src/cluster_erp/modules/parties/parties/services.py:201-212). crm modülü bunları müşterinin legal_name ve tax_no alanlarına kopyalar (src/cluster_erp/modules/crm/module.py:115-135); procurement modülü de aynı olaya abone olur (src/cluster_erp/modules/procurement/module.py:122).
Kullanımdan kaldırma tarafı izler¶
Bir taraf silindiğinde PartyDeleted yayılır (src/cluster_erp/modules/parties/parties/services.py:216-233). owned_organisations modülü kişinin çalışan kaydını party_deactivated nedeniyle geçici olarak siler ve taraf yeniden etkinleştirildiğinde tam olarak bu satırları geri getirir (src/cluster_erp/modules/owned_organisations/module.py:348-420). crm ve procurement modülleri de PartyDeleted olayına abone olur (src/cluster_erp/modules/crm/module.py:96, src/cluster_erp/modules/procurement/module.py:125).
Diğer modüller adına oluşturulan taraflar¶
party_idolmadan oluşturulan sahip olunan bir kuruluşEnsurePartyForOrganisationsorar;partiesmodülü aynı görünen ada sahip canlı bir tarafı döndürür veya bir kuruluş tarafı oluşturur (src/cluster_erp/modules/owned_organisations/organisations/services.py:74-94,src/cluster_erp/modules/parties/module.py:324-357).CustomerCreatedolayındapartiesmodülü müşterinin yasal adıyla bir kuruluş tarafı bulur veya oluşturur (src/cluster_erp/modules/parties/module.py:445-487).- Başlangıçta
_sync_customers_to_parties, tarafı olmayan her canlı müşteri için adla eşleştirerek bir taraf oluşturur ve bağlar (src/cluster_erp/server/app.py:951-999).
Neden böyle kurulmuştur¶
- Projenin yazılı mühendislik kuralları her şeyin bir taraf olduğunu belirtir: müşteri, kuruluş, çalışan ve tedarikçi rol bölümleri olan tek bir taraf kartıdır, roller
FacetMetavePartyRoleSetüzerinden yürür ve modüller taraf modülünü doğrudan içe aktarmaz. - Bileşik ve rol uçları, modüller birbirini hiç içe aktarmasın diye sunucu düzeyinde bir düzenleme olduklarını belirtir (
src/cluster_erp/server/routes/party_composite.py:4-9,src/cluster_erp/server/routes/party_roles.py:4-10). - Başlangıç uzlaştırması, bir işleyicinin kaçırdığı her şeyi düzelttiğini belirtir; örneğin henüz kaydedilmemiş bir tarafa karşı oluşturulan bir rol kaydı (
src/cluster_erp/server/app.py:1003-1008).
Kurallar ve sınırlar¶
- Modüller taraflar hakkında yalnızca sözleşmelerle iletişim kurar. Bir test,
authmodülünün izin korumaları dışında hiçbir modülün başka bir modülü içe aktarmadığını denetler (tests/test_architecture_boundaries.py:1-11,tests/test_architecture_boundaries.py:46). Rehberli oluşturma ve rol etkinleştirme sunucu uçlarımodules/dışında durur ve modül servislerini doğrudan içe aktarır (src/cluster_erp/server/routes/party_composite.py:61-73). - Taraf başına bir canlı çalışan kaydı (
src/cluster_erp/modules/owned_organisations/employees/models.py:33-40), taraf başına bir canlı sahip olunan kuruluş (src/cluster_erp/modules/owned_organisations/organisations/models.py:28-35) ve taraf başına bir canlı tedarikçi (src/cluster_erp/modules/procurement/suppliers/models.py:34-36). - Görevlendirmeler bölümü yalnızca
is_employeebayrağı doğru olan bir tarafta görünür (src/cluster_erp/modules/parties/parties/metadata.py:722).
Diğer parçalarla etkileşim¶
| Modül | Rol kaydı | Kullanılan sözleşmeler | Sayfa |
|---|---|---|---|
crm |
Customer |
PartyRoleSet, CustomerCreated yayar; PartyUpdated, PartyDeleted olaylarına abone olur |
CRM modülü |
procurement |
Supplier |
PartyRoleSet yayar; PartyUpdated, PartyDeleted olaylarına abone olur |
Procurement modülü |
owned_organisations |
Employee, Assignment, OwnedOrganisation |
PartyRoleSet yayar; EnsurePartyForOrganisation sorar; PartyDeleted, RecordActivated olaylarına abone olur |
Owned organisations modülü |
Tüm üreticiler ve tüketiciler sözleşmeler başvurusu sayfasındadır.
Sınırlar ve açık noktalar¶
EnsurePartyForOrganisation,CustomerCreatedve başlangıç müşteri eşitlemesi var olan bir tarafı yalnızca görünen adla eşleştirir (src/cluster_erp/modules/parties/module.py:338-347,src/cluster_erp/modules/parties/module.py:462-470,src/cluster_erp/server/app.py:969-976).PartyUpdateüç rol bayrağını kabul eder (src/cluster_erp/modules/parties/parties/schemas.py:88-90); bu yüzden doğrudan bir güncelleme rol kaydı olmadan bir bayrağı ayarlayabilir. Bir sonraki başlangıç uzlaştırması onu rol kayıtlarının durumuna geri getirir (src/cluster_erp/server/app.py:1035-1051).EmployeeService.bulk_deletesatırlarıPartyRoleSetyaymadan geçici olarak siler (src/cluster_erp/modules/owned_organisations/employees/services.py:142-145); bayrak bir sonraki başlangıç uzlaştırmasıyla düzelir.
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| facet | FacetMeta |
Bir tarafın oynayabileceği, taraf kartında bir bölüm olarak gösterilen rol. | rol bölümü | src/cluster_erp/core/metadata.py:357 |
| identity redirect | IdentityMeta |
Bir rol varlığının taraf kartını açmasını sağlayan metadata. | Kimlik yönlendirmesi | src/cluster_erp/core/metadata.py:304 |
| guided creation | composite_create |
Bir tarafı ve seçilen rollerini tek istekte oluşturma. | Rehberli oluşturma | src/cluster_erp/modules/parties/parties/metadata.py:319 |
| role event | PartyRoleSet |
Bir rol modülünün bir rol kaydını bağladığında veya bağını kaldırdığında yaydığı olay. | Rol olayı | src/cluster_erp/core/contracts.py:48 |
İlgili sayfalar¶
- Parties modülü
- Parties alt modülü
- Owned organisations modülü
- Taraf birleştirme karar kaydı
- Olay veri yolu
- Genel ayrıntı
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.