Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Platform

Referans

Temel model ve kimlikler

Her Cluster ERP tablosunun BaseModel'den aldığı sütunlar, UUID olarak saklanan ULID birincil anahtarları ve PTY-000001, SO-2026-00001 gibi sıra kodları.

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_PREFIXES içinde 69 varlık öneki ve YEARLY_ENTITIES iç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_sequences değişiklik geçmişinin dışında tutulur (src/cluster_erp/core/change_history.py:42-52).
  • FOR UPDATE kilidi 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


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13