Bu sayfa her iş tablosunun core/models.py içindeki BaseModel'den aldığı sütunları, birincil anahtarların core/ulid.py içinde nasıl üretildiğini ve iş kodlarının core/sequence.py içinde nasıl üretildiğini listeler. Yumuşak silme anlamı yumuşak silme ve kullanımdan kaldırma sayfasında, değişiklik geçmişi değişiklik geçmişi sayfasında anlatılır.
Kapsam ve kaynak¶
- Tanımlandığı yer:
src/cluster_erp/core/models.py(Base,BaseModel),src/cluster_erp/core/ulid.py(new_ulid),src/cluster_erp/core/sequence.py(Sequence,next_code,next_value,seed_sequences) - Sayı:
BaseModelüzerinde 11 sütun (sınıf gövdesinden okundu);ENTITY_PREFIXESiçinde 69 varlık öneki veYEARLY_ENTITIESiçinde 19 varlık türü (sözlük ve küme tanımlarından sayıldı)
BaseModel sütunları¶
Base, SQLAlchemy bildirimsel tabanıdır (src/cluster_erp/core/models.py:13-14). BaseModel, aşağıdaki sütunları ekleyen soyut bir alt sınıftır (src/cluster_erp/core/models.py:17-78).
| Sütun | Tür | Varsayılan | Anlamı | Kaynak |
|---|---|---|---|---|
id |
UUID |
new_ulid() |
Birincil anahtar; UUID olarak saklanan bir ULID | src/cluster_erp/core/models.py:20-24 |
tenant_id |
UUID, boş olabilir, dizinli |
yok | core/, server/ veya modules/ içindeki hiçbir kod ayarlamaz (grep -rn tenant_id ile arandı); kullanımı koddan belirlenemedi |
src/cluster_erp/core/models.py:25-29 |
created_at |
saat dilimli zaman damgası | sunucuda now() |
Oluşturma zamanı | src/cluster_erp/core/models.py:30-34 |
created_by |
UUID, boş olabilir |
yok | Eklemede değişiklik geçmişi kancasının damgaladığı işlemi yapan kullanıcı | src/cluster_erp/core/models.py:35-38, src/cluster_erp/core/change_history.py:216-224 |
updated_at |
saat dilimli zaman damgası | now(), güncellemede yenilenir |
Son değişiklik zamanı | src/cluster_erp/core/models.py:39-44 |
updated_by |
UUID, boş olabilir |
yok | Güncellemede değişiklik geçmişi kancasının damgaladığı işlemi yapan kullanıcı | src/cluster_erp/core/models.py:45-48, src/cluster_erp/core/change_history.py:225-226 |
deleted_at |
saat dilimli zaman damgası, boş olabilir | yok | NULL etkin, bir değer kullanımdan kaldırılmış demektir |
src/cluster_erp/core/models.py:49-57 |
deleted_by |
UUID, boş olabilir |
yok | Kaydı kullanımdan kaldıran | src/cluster_erp/core/models.py:58-61, src/cluster_erp/core/change_history.py:249-250 |
deactivation_reason |
String(64), boş olabilir |
yok | Kullanımdan kaldırma nedeni kataloğundan bir kod | src/cluster_erp/core/models.py:62-68 |
deactivation_note |
Text, boş olabilir |
yok | Serbest metin; yalnızca neden gerektirdiğinde zorunlu | src/cluster_erp/core/models.py:69-72 |
version |
Integer |
1 | İyimser eşzamanlılık denetimleri için satır sürümü | src/cluster_erp/core/models.py:73-78 |
version SQLAlchemy'nin sürüm sayacıyla yönetilmez: hiçbir __mapper_args__ sayaç bildirmez (grep -rn __mapper_args__ ile arandı). Servisler değeri kendileri artırır; core/ ve modules/ içinde 140 satır version + 1 içerir (grep -rn "version + 1" ile sayıldı), örneğin src/cluster_erp/modules/bom/boms/services.py:152. check_version istemcinin sürümünü satırla karşılaştırır ve uyuşmazlıkta 409 çakışması yükseltir (src/cluster_erp/core/errors.py:411-430).
Bazı altyapı tabloları doğrudan Base'den türer ve bu sütunları taşımaz; örneğin core_change_history ve audit_log (src/cluster_erp/core/change_history.py:78-98, src/cluster_erp/core/audit.py:15-69).
Birincil anahtarlar¶
new_ulid(), python-ulid paketinden ULID().to_uuid() döndürür (src/cluster_erp/core/ulid.py:8-14, pyproject.toml:45). Belge dizgisi sonucun zamana göre sıralanabilir olduğunu ve PostgreSQL'in yerel uuid türüne uyduğunu belirtir (src/cluster_erp/core/ulid.py:9-13).
Değişiklik geçmişi kancası yeni bir nesnenin kimliğini flush'tan önce atar; böylece "create" geçmiş satırı varlık kimliğini taşır (src/cluster_erp/core/change_history.py:273-297, src/cluster_erp/core/change_history.py:327).
İş kodları¶
PTY-000001 gibi iş kodları, varlık türü başına bir satır içeren core_sequences tablosundan gelir (src/cluster_erp/core/sequence.py:112-120).
| Sütun | Tür | Anlamı | Kaynak |
|---|---|---|---|
entity_type |
String(50), benzersiz |
Anahtar; örneğin party |
src/cluster_erp/core/sequence.py:115 |
prefix |
String(10) |
Kod öneki; örneğin PTY |
src/cluster_erp/core/sequence.py:116 |
current_value |
BigInteger |
Son verilen numara | src/cluster_erp/core/sequence.py:117 |
padding |
Integer |
Sıfırla doldurma genişliği | src/cluster_erp/core/sequence.py:118 |
yearly_reset |
Boolean |
Sayacın her takvim yılında yeniden başlayıp başlamadığı | src/cluster_erp/core/sequence.py:119 |
last_reset_year |
Integer |
Son sıfırlamanın yılı | src/cluster_erp/core/sequence.py:120 |
İşlevler:
| İşlev | Davranış | Kaynak |
|---|---|---|
seed_sequences(session) |
ENTITY_PREFIXES içinde satırı olmayan her varlık türü için bir satır ekler. Yıllık türler 5, diğerleri 6 doldurma alır. Sunucu açılışında çalışır |
src/cluster_erp/core/sequence.py:123-151, src/cluster_erp/server/app.py:1058-1066 |
next_code(session, entity_type) |
Satırı SELECT... FOR UPDATE ile kilitler, artırır ve PREFIX-NNNNNN ya da yıllık türler için PREFIX-YYYY-NNNNN döndürür |
src/cluster_erp/core/sequence.py:154-171, src/cluster_erp/core/sequence.py:182-199 |
next_value(session, entity_type) |
Aynı kilit ve sıfırlama; önek olmadan (year, value, padding) döndürür |
src/cluster_erp/core/sequence.py:174-179 |
Yıllık bir sayaç, güncel UTC yılı last_reset_year değerinden farklı olduğunda sıfıra döner (src/cluster_erp/core/sequence.py:194-197). Bilinmeyen bir varlık türü ValueError yükseltir (src/cluster_erp/core/sequence.py:188-192).
19 yıllık varlık türü şunlardır: sales_order, purchase_order, request_for_quotation, quotation, work_order, shipment, non_conformity, production_order, goods_movement, usage_decision, costing_analysis, purchase_request, purchase_rfq, purchasing_quotation, purchase_contract, mrp_run, customer_subscription, packing_list ve delivery_note (src/cluster_erp/core/sequence.py:88-108). Diğer 50 önek yıllık değildir.
Kısıtlar ve doğrulama¶
core_sequencesdeğişiklik geçmişinin dışında tutulur (src/cluster_erp/core/change_history.py:42-52).FOR UPDATEkilidi aynı satırdaki eşzamanlı çağıranları sıraya koyar; böylece onaylanmış çağrı dizisinde kodlarda boşluk ve çakışma olmaz (src/cluster_erp/core/sequence.py:157-158,src/cluster_erp/core/sequence.py:185).
Tutarsızlıklar¶
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| ULID | new_ulid |
PostgreSQL uuid olarak saklanan, zamana göre sıralanabilir benzersiz tanımlayıcı. |
ULID | src/cluster_erp/core/ulid.py:8-14 |
| business code | next_code |
PTY-000001 veya SO-2026-00001 gibi insan tarafından okunabilir kayıt kodu. |
iş kodu | src/cluster_erp/core/sequence.py:154-171 |
| yearly sequence | YEARLY_ENTITIES |
Her takvim yılında yeniden başlayan ve yılı içeren kod sayacı. | yıllık sıra | src/cluster_erp/core/sequence.py:88-108 |
İlgili sayfalar¶
- Platform çekirdeği
- Yumuşak silme ve kullanımdan kaldırma
- Değişiklik geçmişi
- ULID birincil anahtarları
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.