Bu sayfa src/cluster_erp/modules/procurement/purchase_rfqs/ içindeki purchase_rfqs alt modülünü anlatır. Bir satın alma teklif talebi (PurchaseRfq), aynı kalemler için birden çok tedarikçiden teklif ister. Satın almacı teklifleri kaydeder veya alır, karşılaştırır ve puanlar, kalemleri ihale eder; ihale satın alma siparişleri oluşturur. crm modülünün müşteri tarafındaki teklif talebi farklı bir kayıttır; bkz. CRM teklif talepleri.
Kapsam ve kaynak¶
- Tanımlandığı yer: alt modülün
models.py(yedi sınıf),services.py(PurchaseRfqService),routes.py,portal_routes.pyvemetadata.pydosyaları. - Sayım: 7 tablo, 34 uç (
routes.pyiçinde 32 veportal_routes.pyiçinde 2,@router.içingrepile sayıldı), 6ActionMetagirdisi.
Teklif talebi alanları¶
| Grup | Alanlar | Kaynak |
|---|---|---|
| Kimlik | code, title, rfq_type (rfi, rfq veya rfp, varsayılan rfq), status (varsayılan draft) |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:36-48, src/cluster_erp/modules/procurement/purchase_rfqs/schemas.py:10 |
| Köken | purchase_request_id, project_id, buyer_id |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:49-53 |
| Koşullar | quotation_deadline, validity_date, currency, target_incoterm, target_payment_terms |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:55-61 |
| Teslimat | delivery_party_id, delivery_address_id, delivery_address (metin anlık görüntüsü) |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:66-70 |
| Değerlendirme | award_policy (lowest_price, weighted_score veya manual), sealed_bid, round_no |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:72-83, src/cluster_erp/modules/procurement/purchase_rfqs/schemas.py:11 |
| Yaşam döngüsü kaydı | sent_at, sent_by, evaluation_started_at, awarded_at, awarded_by, closed_at, cancelled_at, cancelled_by, cancel_reason |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:87-97 |
Alt kayıtlar¶
| Varlık | Tablo | Anahtar alanlar | Kaynak |
|---|---|---|---|
PurchaseRfqLine |
procurement_purchase_rfq_lines |
line_no, ürün kırılımı, description, qty, unit_id, required_by_date, target_unit_price, material_spec, source_pr_item_id |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:110-134 |
PurchaseRfqVendor |
procurement_purchase_rfq_vendors |
vendor_party_id, status (varsayılan invited), contact_email, invited_at, responded_at, decline_reason, rejection_reason, portal erişim alanları |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:137-188 |
PurchaseRfqQuotation |
procurement_purchase_rfq_quotations |
quotation_no, round_no, valid_until, currency, lead_time_days, total_amount, compliance_status, submitted_via |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:193-236 |
PurchaseRfqQuotationLine |
procurement_purchase_rfq_quotation_lines |
purchase_rfq_line_id, unit_price, qty, lead_time_days, delivery_date, moq, line_total, is_awarded |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:241-272 |
PurchaseRfqCriterion |
procurement_purchase_rfq_criteria |
key, label, weight, sort_order |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:316-335 |
PurchaseRfqQuotationScore |
procurement_purchase_rfq_scores |
quotation_id, criterion_id, score |
src/cluster_erp/modules/procurement/purchase_rfqs/models.py:279-313 |
Tedarikçi durumları invited, viewed, responded, declined, no_bid, awarded ve rejected'tir (src/cluster_erp/modules/procurement/purchase_rfqs/models.py:163-167). Teklif uygunluğu compliant, non_compliant veya pending olur (src/cluster_erp/modules/procurement/purchase_rfqs/models.py:221-224).
Durumlar ve aksiyonlar¶
Servis her aksiyonu bir hedef duruma ve izin verilen kaynak durumlara eşler (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:61-69).
stateDiagram-v2 [*] --> draft draft --> sent: send sent --> under_evaluation: start_evaluation under_evaluation --> sent: reopen_bidding under_evaluation --> awarded: award awarded --> closed: close draft --> cancelled: cancel sent --> cancelled: cancel under_evaluation --> cancelled: cancel cancelled --> draft: reopen
Düz anlatımla: send eksiksiz bir taslak ister; eksiksizlik denetimi en az bir kalem, en az iki tedarikçi, bir teklif son tarihi ve weighted_score için toplamı 100 olan kriter ağırlıkları arar (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:287-313, src/cluster_erp/modules/procurement/purchase_rfqs/services.py:386-450). reopen_bidding, round_no değerini artırır ve yanıt vermiş veya görüntülemiş tedarikçileri yeniden invited yapar (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:326-344). award için bir uç vardır ama ActionMeta yoktur; web uygulaması ihaleyi purchase_rfq_comparison özel bileşeninden yapar (src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:221, gated_apps/procurement/app.js:1655).
| Aksiyon | Etiket | Koşul | Uç | İzin | Kaynak |
|---|---|---|---|---|---|
send |
Tedarikçilere Gönder | status değeri draft |
POST /purchase-rfqs/{id}/send |
purchase_rfq.send |
src/cluster_erp/modules/procurement/purchase_rfqs/metadata.py:524-537, src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:181 |
start-evaluation |
Değerlendirmeyi Başlat | status değeri sent |
POST /purchase-rfqs/{id}/start-evaluation |
purchase_rfq.evaluate |
src/cluster_erp/modules/procurement/purchase_rfqs/metadata.py:538-551, src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:193 |
reopen-bidding |
Teklifi Yeniden Aç | status değeri under_evaluation |
POST /purchase-rfqs/{id}/reopen-bidding |
purchase_rfq.evaluate |
src/cluster_erp/modules/procurement/purchase_rfqs/metadata.py:552-565, src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:207 |
close |
Kapat | status değeri awarded |
POST /purchase-rfqs/{id}/close |
purchase_rfq.evaluate |
src/cluster_erp/modules/procurement/purchase_rfqs/metadata.py:566-577, src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:240 |
cancel |
İptal Et | status değeri draft, sent veya under_evaluation |
POST /purchase-rfqs/{id}/cancel |
purchase_rfq.cancel |
src/cluster_erp/modules/procurement/purchase_rfqs/metadata.py:578-604, src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:252 |
reopen |
Yeniden Aç | status değeri cancelled |
POST /purchase-rfqs/{id}/reopen |
purchase_rfq.update |
src/cluster_erp/modules/procurement/purchase_rfqs/metadata.py:605-616, src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:266 |
Teklif talebi uçları¶
| Yöntem ve yol | İzin | Kaynak |
|---|---|---|
GET, POST /purchase-rfqs/; GET, PUT, DELETE /purchase-rfqs/{rfq_id}; POST /purchase-rfqs/bulk-delete |
purchase_rfq.read, .create, .update, .delete |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:66-151 |
GET /purchase-rfqs/{rfq_id}/completeness |
purchase_rfq.read |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:166 |
POST /purchase-rfqs/{rfq_id}/award |
purchase_rfq.award |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:221 |
Kalemler: GET, POST /purchase-rfqs/{rfq_id}/lines; PUT, DELETE /purchase-rfq-lines/{line_id} |
purchase_rfq.read, purchase_rfq.update |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:279-317 |
Tedarikçiler: GET, POST /purchase-rfqs/{rfq_id}/vendors; DELETE /purchase-rfq-vendors/{vendor_id}; GET /purchase-rfq-vendors/{vendor_id}/portal-token |
purchase_rfq.read, purchase_rfq.update |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:329-368 |
Teklifler: GET, POST /purchase-rfqs/{rfq_id}/quotations; DELETE /purchase-rfq-quotations/{quotation_id} |
purchase_rfq.read, purchase_rfq.update |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:398-428 |
Kriterler: GET, POST /purchase-rfqs/{rfq_id}/criteria; PUT, DELETE /purchase-rfq-criteria/{criterion_id} |
purchase_rfq.read, purchase_rfq.update |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:440-485 |
PUT /purchase-rfqs/{rfq_id}/quotations/{quotation_id}/score, GET .../scoring, GET .../comparison |
purchase_rfq.evaluate, purchase_rfq.read |
src/cluster_erp/modules/procurement/purchase_rfqs/routes.py:496-519 |
GET /portal/rfqs/{token}, POST /portal/rfqs/{token}/quotation |
tedarikçi portalı erişim belirteci | src/cluster_erp/modules/procurement/purchase_rfqs/portal_routes.py:27-53 |
Puanlama ve ihale¶
- Kriterler yalnızca teklif talebi
draftiken değişebilir (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:1010-1021). pricevedeliverykriterleri otomatik puanlanır; diğerleri elle girilen puanı alır (src/cluster_erp/modules/procurement/purchase_rfqs/models.py:276,src/cluster_erp/modules/procurement/purchase_rfqs/services.py:1152-1157).- Otomatik fiyat puanı, en düşük uygun toplamın teklif toplamına bölümü çarpı 100'dür. Teslim puanı teslim sürelerini aynı biçimde kullanır. Uygun olmayan teklif 0 alır (
src/cluster_erp/modules/procurement/purchase_rfqs/services.py:1125-1149). - Ağırlıklı puan, ağırlık bölü 100 çarpı puanların toplamıdır. Uygun teklifler her zaman uygun olmayanların üstünde sıralanır (
src/cluster_erp/modules/procurement/purchase_rfqs/services.py:1150-1214). - Kapalı teklifte karşılaştırma, talep
sentiken yalnızca bir özet döndürür (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:255-258,src/cluster_erp/modules/procurement/purchase_rfqs/services.py:840-848). award, teklif talebi kalemi ile teklif kalemi çiftlerini alır, bunlarıis_awardedolarak işaretler, kazanan tedarikçileriawarded, katılan diğerlerinirejectedyapar ve kazanan her tedarikçi içinPurchaseOrderServiceüzerinden bir satın alma siparişi oluşturur (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:1215-1292,src/cluster_erp/modules/procurement/purchase_rfqs/services.py:1293-1338).
Tedarikçi portalı¶
Davet edilen bir tedarikçi, kullanıcı oturumu olmadan /portal/rfqs/{token} üzerinden teklif talebini görebilir ve teklif gönderebilir. Belirteç davet anında tedarikçi başına üretilir, bir özet olarak saklanır ve PORTAL_TOKEN_TTL_DAYS (30) gün sonra geçersiz olur (src/cluster_erp/modules/procurement/purchase_rfqs/portal_routes.py:1-10, src/cluster_erp/modules/procurement/purchase_rfqs/services.py:605-618). Gönderim yalnızca talep sent iken ve son tarihten önce kabul edilir (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:1505-1530).
Kısıtlar ve doğrulama¶
- Kalemler ve tedarikçiler yalnızca teklif talebi
draftveyasentiken değişebilir (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:452-458). - Satın almacının girdiği teklif yalnızca talep
sentveyaunder_evaluationiken kabul edilir; o anki turu kaydeder ve tedarikçiyirespondedyapar (src/cluster_erp/modules/procurement/purchase_rfqs/services.py:705-748). - Para ve puanlar
Numerictüründedir: birim fiyatNumeric(18, 4), ağırlık ve puanNumeric(6, 2)(src/cluster_erp/modules/procurement/purchase_rfqs/models.py:260,src/cluster_erp/modules/procurement/purchase_rfqs/models.py:313,src/cluster_erp/modules/procurement/purchase_rfqs/models.py:332).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| purchasing RFQ | PurchaseRfq |
Aynı kalemler için birden çok tedarikçiden teklif isteği. | Satın alma teklif talebi | src/cluster_erp/modules/procurement/purchase_rfqs/models.py:26 |
| sealed bid | sealed_bid |
Teklif toplama sürerken tekliflerin satın almacıdan gizli kaldığı talep. | Kapalı teklif | src/cluster_erp/modules/procurement/purchase_rfqs/models.py:78-80 |
| bidding round | round_no |
Bir teklif talebinin pazarlık turu; teklifi yeniden açmak onu artırır. | Teklif turu | src/cluster_erp/modules/procurement/purchase_rfqs/models.py:83 |
| award policy | award_policy |
Kazananın nasıl seçildiği: en düşük fiyat, ağırlıklı puan veya elle. | İhale politikası | src/cluster_erp/modules/procurement/purchase_rfqs/models.py:72-77 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.