src/cluster_erp/modules/parties/ içindeki parties modülü, işletmenin tanıdığı herkes için tek bir kayıt tutar: taraf (Party, şirketin ilişkide olduğu bir kişi veya kuruluş). Müşteriler, tedarikçiler, çalışanlar ve sahip olunan kuruluşlar ayrı kartlar değil, bir tarafın rolleridir; bu model taraf birleştirme sayfasında açıklanır. Modül ayrıca adresleri, iletişim kanallarını, konuşulan dilleri ve ülke, adres seviyesi ve kanal türü başvuru verilerini tutar. Bu sayfa modülün genel görünümüdür; her alt modülün kendi başvuru sayfası vardır.
Bir bakışta¶
| Öğe | Değer | Kaynak |
|---|---|---|
| Paket | src/cluster_erp/modules/parties/ |
klasör |
| Modül sınıfı | Module |
src/cluster_erp/modules/parties/module.py:22 |
name / version |
parties / 0.1.0 |
src/cluster_erp/modules/parties/module.py:23-29 |
| API öneki | /api/v1/parties (ModuleBase.api_prefix) |
src/cluster_erp/core/module_base.py:37-38 |
| Alt modüller | 5: parties, addresses, communication_channels, person_languages, settings |
klasör listesi |
| Tablolar | 11 (paketteki __tablename__ sayısı) |
src/cluster_erp/modules/parties/models.py:1-33 |
| Metadata'daki varlıklar | 8: party, address, communication_channel, person_language, country, address_level, address_level_value, channel_type |
src/cluster_erp/modules/parties/module.py:642-651 |
| Uçlar | Pakette 53 uç dekoratörü, ayrıca server/routes/party_composite.py ve server/routes/party_roles.py içinde 4 |
@router. için grep |
| Web uygulamasında yeri | parties, owned_organisations ve crm modüllerini kapsayan katalog uygulaması parties |
src/cluster_erp/modules/app_store/catalog.json (parties girdisi) |
| Masaüstünde yeri | Yalnızca genel bileşenler; src/cluster_erp/desktop/modules/ içinde klasör yok |
klasör |
Modül ne yapar¶
- Her kişi veya kuruluş için yıllık iş koduna, türe, görünen ada, vergi alanlarına, notlara ve etkinlik bayrağına sahip tek bir taraf kartı tutar (
src/cluster_erp/modules/parties/parties/models.py:18-55). - Bir tarafın oynadığı rolleri, diğer modüllerin EventBus üzerinden güncel tuttuğu üç bayrak olarak kaydeder:
is_customer,is_supplierveis_employee(src/cluster_erp/modules/parties/module.py:168-195). - Seviyeleri ülke başvuru verilerinden gelen yapılandırılmış adresleri saklar; bkz. adresler.
- E-posta ve telefon gibi iletişim kanallarını saklar; bkz. iletişim kanalları.
- Bir kişinin konuştuğu dilleri saklar; bkz. kişi dilleri.
- Başlangıçta ISO ülke listesini ve varsayılan kanal türlerini tohumlar (
src/cluster_erp/modules/parties/module.py:37-74); bkz. ayarlar ve başvuru verileri. - Her taraf için ortak ek deposunda bir profil fotoğrafı tutar (
src/cluster_erp/modules/parties/parties/routes.py:153-249).
Alt modüller¶
| Alt modül | Amaç | Ana varlıklar | Yönlendirici | Kaynak |
|---|---|---|---|---|
parties |
Taraf kartı, bireysel ve kurumsal ayrıntılar, fotoğraf | Party, Individual, OrganisationInfo |
/api/v1/parties (modül kökü) |
src/cluster_erp/modules/parties/parties/routes.py:28 |
addresses |
Bir tarafın yapılandırılmış adresleri | Address, AddressComponent |
/api/v1/parties/{party_id}/addresses, /api/v1/parties/addresses/... |
src/cluster_erp/modules/parties/addresses/routes.py:21 |
communication_channels |
Kanal türleri ve bir tarafın kanalları | ChannelType, CommunicationChannel |
/api/v1/parties/{party_id}/channels, /api/v1/parties/settings/channel-types/ |
src/cluster_erp/modules/parties/communication_channels/routes.py:27 |
person_languages |
Bir tarafın konuştuğu diller | PersonLanguage |
/api/v1/parties/{party_id}/languages |
src/cluster_erp/modules/parties/person_languages/routes.py:19 |
settings |
Ülkeler, adres seviyeleri, adres seviyesi değerleri | Country, AddressLevel, AddressLevelValue |
/api/v1/parties/settings |
src/cluster_erp/modules/parties/settings/routes.py:30 |
Beş yönlendiricinin tamamı, önce settings olmak üzere tek bir modül yönlendiricisi altında toplanır ve yönlendiricinin tamamı parties uygulama yetkisine bağlıdır (src/cluster_erp/modules/parties/module.py:96-103). Aynı öneke sahip iki yönlendirici daha sunucu katmanında bulunur: rehberli oluşturma (POST /api/v1/parties/composite) ve rol etkinleştirme (POST /api/v1/parties/{party_id}/roles/...); ikisi de taraf birleştirme sayfasında anlatılır.
Veri modeli¶
Şema modülün on bir tablosunu ve yabancı anahtarlarını gösterir.
erDiagram
Party ||--o| Individual : "party_id"
Party ||--o| OrganisationInfo : "party_id"
Party ||--o{ Address : "party_id"
Party ||--o{ CommunicationChannel : "party_id"
Party ||--o{ PersonLanguage : "party_id"
Address ||--o{ AddressComponent : "address_id"
Country ||--o{ Address : "country_id"
Country ||--o{ AddressLevel : "country_id"
AddressLevel ||--o{ AddressLevelValue : "level_id"
AddressLevelValue ||--o{ AddressComponent : "level_value_id"
ChannelType ||--o{ CommunicationChannel : "channel_type_id"Düz anlatımla: bir Party en çok bir canlı Individual satırına ve en çok bir canlı OrganisationInfo satırına, ayrıca istenen sayıda adrese, kanala ve konuşulan dile sahiptir. Bir Address bir Country kaydına bağlıdır ve her biri o ülkenin bir AddressLevel ve bir AddressLevelValue kaydını gösteren AddressComponent satırlarından oluşur. Bir CommunicationChannel bir ChannelType kaydına sahiptir.
| Varlık | Tablo | Anahtar alanlar | Notlar | Kaynak |
|---|---|---|---|---|
Party |
parties_parties |
code, party_type, display_name, tax_id, tax_office, is_customer, is_supplier, is_employee, photo_attachment_id, extra |
code benzersiz; extra kiracı tanımlı alanları tutar |
src/cluster_erp/modules/parties/parties/models.py:18-55 |
Individual |
parties_individuals |
party_id, first_name, last_name, middle_name, title, date_of_birth, gender |
taraf başına bir canlı satır | src/cluster_erp/modules/parties/parties/models.py:58-82 |
OrganisationInfo |
parties_organisation_info |
party_id, legal_name, trade_name, registration_number, industry |
taraf başına bir canlı satır | src/cluster_erp/modules/parties/parties/models.py:85-105 |
Address |
parties_addresses |
code, party_id, country_id, address_type, full_text, is_primary |
bkz. adresler | src/cluster_erp/modules/parties/addresses/models.py:16-41 |
AddressComponent |
parties_address_components |
address_id, address_level_id, level_value_id |
src/cluster_erp/modules/parties/addresses/models.py:44-65 |
|
ChannelType |
parties_channel_types |
code, name, translations, icon, validation_pattern |
kod ve ad canlı satırlar arasında benzersiz | src/cluster_erp/modules/parties/communication_channels/models.py:15-38 |
CommunicationChannel |
parties_communication_channels |
code, party_id, channel_type_id, value, is_primary |
src/cluster_erp/modules/parties/communication_channels/models.py:41-59 |
|
PersonLanguage |
parties_person_languages |
party_id, language, proficiency_level |
src/cluster_erp/modules/parties/person_languages/models.py:15-29 |
|
Country |
parties_countries |
code, code_alpha3, numeric_code, name, translations, phone_code |
üç kod canlı satırlar arasında benzersiz | src/cluster_erp/modules/parties/settings/models.py:12-49 |
AddressLevel |
parties_address_levels |
code, country_id, level_order, name, is_required |
level_order canlı satırlar arasında ülke başına benzersiz |
src/cluster_erp/modules/parties/settings/models.py:52-80 |
AddressLevelValue |
parties_address_level_values |
code, level_id, parent_id, value, postal_code |
canlı satırlar arasında seviye, değer ve üst değer başına benzersiz | src/cluster_erp/modules/parties/settings/models.py:83-112 |
Her varlık BaseModel sınıfından türer; bu yüzden satırlar bir ULID birincil anahtar, denetim sütunları ve geçici silme sütunları taşır; bkz. temel model ve kimlikler ve geçici silme ve kullanımdan kaldırma.
Ekranlar ve metadata¶
get_metadata dört bölümlü tek bir Taraflar (İngilizce Parties) kenar çubuğu grubu bildirir (src/cluster_erp/modules/parties/module.py:557-641):
- Taraflar: iki varlık sekmeli bir liste;
partylistesi veowned_organisationsmodülününorganisationlistesi (Kuruluşlar) (src/cluster_erp/modules/parties/module.py:570-599). - Adresler ve İletişim Kanalları:
list_alluçlarını kullanan ve sekme çubuğundan gizlenen iki liste (src/cluster_erp/modules/parties/module.py:603-626). - Ayarlar:
country,address_levelvechannel_typesekmeleriyle (src/cluster_erp/modules/parties/module.py:627-637).
Taraf listesinde kod, ad, tür, vergi numarası, aktif ve oluşturulma sütunları ile Tür ve Rol adlı iki süzgeç vardır (src/cluster_erp/modules/parties/parties/metadata.py:440-508). Taraf ayrıntısında Genel, Adresler, İletişim Kanalları, Konuştuğu Diller ve Çalışma Takvimi sekmeleri vardır; sonuncusu calendars modülünün özel bileşenidir (src/cluster_erp/modules/parties/parties/metadata.py:509-544). Rol bölümleri aynı kartta beş FacetMeta girdisiyle görünür (src/cluster_erp/modules/parties/parties/metadata.py:550-763). Taraf kartı ayrıca rehberli oluşturmayı, oluşturmada belge eklemeyi, kiracı alanı kovalarını, call, message ve mail hızlı aksiyonlarını ve bir fotoğrafı bildirir (src/cluster_erp/modules/parties/parties/metadata.py:313-378). Web uygulaması bunları genel olarak işler; bkz. genel ayrıntı ve genel form.
Durumlar ve aksiyonlar¶
Bir tarafın durum alanı yoktur; bir is_active bayrağı vardır (src/cluster_erp/modules/parties/parties/models.py:32). Modül altı ActionMeta girdisi bildirir (pakette grep "ActionMeta(" ile sayıldı).
| Aksiyon | Etiket | Koşul | Uç | İzin | Kaynak |
|---|---|---|---|---|---|
enable_customer_role |
Müşteri Rolünü Etkinleştir | is_customer yanlış |
POST /{id}/roles/customer |
customer.create |
src/cluster_erp/modules/parties/parties/metadata.py:394-408, src/cluster_erp/server/routes/party_roles.py:58-77 |
enable_supplier_role |
Tedarikçi Rolünü Etkinleştir | is_supplier yanlış |
POST /{id}/roles/supplier |
supplier.create |
src/cluster_erp/modules/parties/parties/metadata.py:409-423, src/cluster_erp/server/routes/party_roles.py:80-99 |
enable_employee_role |
Çalışan Rolünü Etkinleştir | is_employee yanlış |
POST /{id}/roles/employee |
employee.create |
src/cluster_erp/modules/parties/parties/metadata.py:424-438, src/cluster_erp/server/routes/party_roles.py:102-123 |
update_from_internet (ülke) |
İnternetten Güncelle | yok (genel) | POST /settings/countries/update-from-internet |
country.create |
src/cluster_erp/modules/parties/settings/metadata.py:34-43, src/cluster_erp/modules/parties/settings/routes.py:55-62 |
seed_address_levels (ülke) |
Adres Seviyelerini Oluştur | yok (tek kayıt) | POST /settings/countries/{id}/seed-address-levels |
country.seed |
src/cluster_erp/modules/parties/settings/metadata.py:44-53, src/cluster_erp/modules/parties/settings/routes.py:133-146 |
seed_defaults (kanal türü) |
Varsayılanları Oluştur | yok (genel) | POST /settings/channel-types/seed-defaults |
channel_type.seed |
src/cluster_erp/modules/parties/settings/metadata.py:383-392, src/cluster_erp/modules/parties/communication_channels/routes.py:35-41 |
İş kuralları¶
- Yeni bir taraf
codedeğerinipartyyıllık dizisinden alır (src/cluster_erp/modules/parties/parties/services.py:116); bkz. temel model ve kimlikler. - Liste araması görünen adla, kodla ve aranabilir kiracı alanlarıyla eşleşir (
src/cluster_erp/modules/parties/parties/services.py:64-73). - Rol süzgeci üç rol bayrağını okur (
src/cluster_erp/modules/parties/parties/services.py:55-61). - Oluşturma, yükteki
is_customer,is_supplierveyais_employeedeğerlerini satıra kopyalamaz (src/cluster_erp/modules/parties/parties/services.py:117-126). Bayrakları rol uçları,PartyRoleSetve bir başlangıç uzlaştırması ayarlar (src/cluster_erp/server/app.py:1002-1055). - Bir güncelleme satırın
versiondeğerini yalnızca bir alan değiştiyse artırır ve yeni görünen ad ve vergi numarasıylaPartyUpdatedyayar (src/cluster_erp/modules/parties/parties/services.py:197-212). - Bir tarafı silmek
deleted_atalanını ayarlar vePartyDeletedyayar; toplu silme her kimlik için birPartyDeletedyayar (src/cluster_erp/modules/parties/parties/services.py:216-233). - Fotoğraf JPEG, PNG, WebP veya GIF olmalı, boş olmamalı ve en fazla 5 MB olmalıdır (
src/cluster_erp/modules/parties/parties/routes.py:153-154,src/cluster_erp/modules/parties/parties/routes.py:196-203).
Olaylar ve sorgular¶
Modül 14 sözleşme tüketir ve 3 sözleşme üretir. Tüketmek, paket içinde subscribe( veya register_query_handler( çağrısına ilk argüman olarak verilmek demektir; üretmek, paket içinde sözleşme sınıf adının ardından ( gelmesi demektir. Modüller arası üreticiler ve tüketiciler sözleşmeler başvurusu sayfasında listelenir.
| Yön | Sözleşme sınıfı | İşleyici veya yayan | Kaynak |
|---|---|---|---|
| yayar | PartyCreated, PartyUpdated, PartyDeleted |
PartyService.create, .update, .delete, .bulk_delete |
src/cluster_erp/modules/parties/parties/services.py:156-163, src/cluster_erp/modules/parties/parties/services.py:201-212, src/cluster_erp/modules/parties/parties/services.py:222-232 |
| sorguyu yanıtlar | GetPartyById |
_handle_get_party |
src/cluster_erp/modules/parties/module.py:117, src/cluster_erp/modules/parties/module.py:359-402 |
| sorguyu yanıtlar | GetAddressById, GetPartyPrimaryAddress |
_handle_get_address, _handle_get_primary_address |
src/cluster_erp/modules/parties/module.py:118-121 |
| sorguyu yanıtlar | GetCountryByCode |
_handle_get_country_by_code |
src/cluster_erp/modules/parties/module.py:124 |
| sorguyu yanıtlar | SearchParties |
_handle_search_parties |
src/cluster_erp/modules/parties/module.py:125 |
| sorguyu yanıtlar | EnsurePartyForOrganisation |
_handle_ensure_party_for_org |
src/cluster_erp/modules/parties/module.py:126, src/cluster_erp/modules/parties/module.py:324-357 |
| sorguyu yanıtlar | CountPartyChannels |
_handle_count_party_channels |
src/cluster_erp/modules/parties/module.py:127 |
| sorguyu yanıtlar | GetPartyContactValues |
party_contact_values |
src/cluster_erp/modules/parties/module.py:154-157 |
| abone olur | ResolveEntityEmails |
_handle_resolve_emails |
src/cluster_erp/modules/parties/module.py:128, src/cluster_erp/modules/parties/module.py:489-536 |
| abone olur | CustomerCreated |
_handle_customer_created |
src/cluster_erp/modules/parties/module.py:129, src/cluster_erp/modules/parties/module.py:445-487 |
| abone olur | PartyRoleSet |
_handle_party_role_set |
src/cluster_erp/modules/parties/module.py:130 |
| abone olur | DescribeAnalyticsFacts |
describe_analytics_facts |
src/cluster_erp/modules/parties/module.py:134-139 |
| abone olur | CollectSubjectData, AnonymiseSubject |
collect_subject_data, anonymise_subject |
src/cluster_erp/modules/parties/module.py:159-166 |
Yetkiler¶
| İzin anahtarı | Kullanan | Kaynak |
|---|---|---|
party.read, party.create, party.update, party.delete, party.bulk_delete |
taraf uçları ve fotoğraf uçları | src/cluster_erp/modules/parties/parties/routes.py:46-237 |
address.read, .create, .update, .delete, .bulk_delete |
adres uçları | src/cluster_erp/modules/parties/addresses/routes.py:36-160 |
channel.read, .create, .update, .delete, .bulk_delete |
kanal uçları | src/cluster_erp/modules/parties/communication_channels/routes.py:118-228 |
channel_type.read, .create, .update, .delete, .bulk_delete, .seed |
kanal türü uçları | src/cluster_erp/modules/parties/communication_channels/routes.py:37-100 |
person_language.read, .create, .update, .delete, .bulk_delete |
dil uçları | src/cluster_erp/modules/parties/person_languages/routes.py:25-86 |
country.read, .create, .update, .delete, .bulk_delete, .seed |
ülke uçları | src/cluster_erp/modules/parties/settings/routes.py:41-136 |
address_level.*, address_level_value.* |
adres seviyesi uçları | src/cluster_erp/modules/parties/settings/routes.py:157-280 |
party.create; customer.create, supplier.create, employee.create |
rehberli oluşturma; rol etkinleştirme | src/cluster_erp/server/routes/party_composite.py:57, src/cluster_erp/server/routes/party_roles.py:62-106 |
İzin kodlarının nasıl tohumlandığı ve denetlendiği roller ve izinler sayfasında açıklanır.
Gizlilik, saklama ve geçmiş¶
privacy_handlers.py, privacy modülünün iki yayılım olayını bu modülün tabloları için yanıtlar (src/cluster_erp/modules/parties/privacy_handlers.py:1-10). collect_subject_data tarafın, bireysel ve kurumsal ayrıntılarının, adreslerinin, kanallarının ve dillerinin bir kopyasını döndürür (src/cluster_erp/modules/parties/privacy_handlers.py:69-100). anonymise_subject tanımlayıcı değerlerin üzerine talebin işaretini yazar, vergi alanlarını ve notları temizler, kişisel kiracı alanlarını siler, satırları talebin nedeniyle kullanımdan kaldırır ve dosyayı privacy modülünün kaldırması için fotoğraf ekini bildirir (src/cluster_erp/modules/parties/privacy_handlers.py:234-291). GetPartyContactValues tarafın canlı kanallarındaki e-posta adreslerini ve telefon numaralarını döndürür (src/cluster_erp/modules/parties/privacy_handlers.py:35-66). Genel akış gizlilik ve ilgili kişi talepleri sayfasındadır. Değişiklikler değişiklik geçmişi tarafından kaydedilir.
Analitik olguları¶
analytics_facts.py, parties_parties üzerinde tek bir olgu kümesi, party, bildirir; boyutları taraf türü, üç rol bayrağı, aktif ve oluşturulma tarihidir, tek ölçüsü party_count'tur (src/cluster_erp/modules/parties/analytics_facts.py:17-72). Modül DescribeAnalyticsFacts olayını bununla yanıtlar (src/cluster_erp/modules/parties/analytics_facts.py:75-77).
Ayarlar ve başvuru verileri¶
Ülkeler, adres seviyeleri, adres seviyesi değerleri ve kanal türleri veritabanındaki başvuru verileridir. Ülkeler pycountry paketinin ISO 3166 listesinden gelir ve başlangıçta tohumlanır; var olan satırların üzerine yazılmaz (src/cluster_erp/modules/parties/settings/services.py:38-86). Ayrıntılar ayarlar ve başvuru verileri sayfasındadır.
Testler¶
web-client/ içinde dosya adıyla ve tests/ içinde modules.parties için grep ile bulundu.
| Tür | Dosya | Kapsam |
|---|---|---|
| pytest | tests/test_party_form_contract.py |
taraf formu metadata'sı, şemalar, hata kataloğu ve modül bağlantısı (8 test) |
| pytest | tests/test_tenant_fields.py, tests/test_tenant_field_catalog.py, tests/test_fresh_install_contract.py |
taraf modellerini ve metadata'sını daha geniş sözleşmelerin parçası olarak içe aktarır |
| e2e | web-client/_e2e_parties.mjs |
taraflar uygulaması: listeler, CRUD, ayrıntı bölümleri, kuruluş ayrıntısı |
| e2e | web-client/_e2e_parties_supplier.mjs |
bileşik uçla oluşturulan ve rol süzgeciyle bulunan bir tedarikçi taraf |
| e2e | web-client/_e2e_party_form_fixes.mjs |
canlı sunucuya karşı taraf formu |
| e2e | web-client/_e2e_party_photo.mjs |
taraf fotoğrafının yüklenmesi, değiştirilmesi ve kaldırılması |
Tutarsızlıklar¶
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| party | Party |
Şirketin ilişkide olduğu, tek kart olarak tutulan bir kişi veya kuruluş. | Taraf | src/cluster_erp/modules/parties/parties/models.py:18 |
| party type | party_type |
Bir tarafın individual mı yoksa organisation mı olduğu. |
Taraf türü | src/cluster_erp/modules/parties/parties/schemas.py:17-19 |
| role flag | is_customer, is_supplier, is_employee |
Tarafın bir rol oynadığını söyleyen ve rol kaydıyla güncel tutulan bir mantıksal değer. | Rol | src/cluster_erp/modules/parties/parties/models.py:33-35 |
İlgili sayfalar¶
- Modüller dizini
- Taraf birleştirme
- Parties alt modülü
- Adresler
- İletişim kanalları
- Kişi dilleri
- Ayarlar ve başvuru verileri
- Owned organisations modülü
- Bu modülün API başvurusu
- İlgili malzeme, tarihsel, doğrulanmadı: ağaç içi not
src/cluster_erp/modules/parties/docs/how-to.md. Konuşulan dilleri, rehberli oluşturmayı ve rol etkinleştirmeyi kapsamaz.
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.