Proje: Okul Database · Hub: Okul Database — Tables

customer_agreements Tablosu

Her B2B sözleşme kaydı. Gelir analizinin temel kaynağı.


Tam Kolon Listesi

KolonTipNullableDefaultAçıklama
idincrementsNOPK
recurred_agreement_idunsignedIntYESNULLYenileme kaynağı sözleşme → customer_agreements.id
customer_idintNOcustomers.id
rcivarchar(255)YESNULLRCI kodu
admin_user_idintYESNULLSözleşmeyi oluşturan admin
sales_campaign_idunsignedIntYESNULLsales_campaigns.id
campaignvarchar(20)YESNULLKampanya kodu
agreement_typeenumNOEnum değerleri aşağıda
agreement_codevarchar(255)YESNULLSözleşme numarası
agreement_image_idintYESNULLİmzalı belge medya ID
first_payment_amountdoubleYESNULLİlk ödeme tutarı
payment_amountdoubleYESNULLTaksit tutarı
payment_amount_backupdoubleYESNULLYedek taksit tutarı
pricedoubleNOToplam sözleşme bedeli
is_recurringtinyIntNO01=Yinelenen, 0=Tek seferlik
is_winbackbooleanNOfalse1=Winback sözleşmesi
payment_daysmallIntYESNULLAylık ödeme günü
employee_idintYESNULLYetkili çalışan ID
employee_positionvarchar(255)YESNULLYetkili pozisyonu
employee_namevarchar(255)YESNULLYetkili adı
emailvarchar(255)YESNULLSözleşme e-posta
phonevarchar(255)YESNULLSözleşme telefonu
notestextYESNULLNotlar
statusvarchar(255)YESNULLSözleşme durumu
financial_statusvarchar(100)YESNULLFinansal durum
reject_reasontextYESNULLRet nedeni (metin)
reject_reason_idvarchar(255)YESNULLRet nedeni ID
rejected_atdateYESNULLRet tarihi
agreement_datedateNOSözleşme imza tarihi
rnd_projectvarchar(255)YESNULLAR-GE proje kodu
product_argejsonNOAR-GE ürün listesi (JSON)
productsjsonNOÜrün listesi (JSON)
missing_inputsjsonNOEksik bilgiler (JSON)
participation_feevarchar(255)YES'0'Katılım ücreti
monthly_listing_pricevarchar(255)YES'0'Aylık listeleme ücreti
agreement_renew_datedateYESNULLYenileme tarihi
created_attimestampNO
updated_attimestampNO
deleted_attimestampYESNULLSoft delete

agreement_type Enum Değerleri

DeğerAçıklama
fixedSabit fiyatlı sözleşme
regularStandart sözleşme
zero_tax_argeSıfır KDV, AR-GE projesi
subscriptionAbonelik modeli
subscription_argeAbonelik + AR-GE

status Değerleri

DeğerAçıklama
activeAktif sözleşme
inactivePasif sözleşme
pendingOnay bekliyor
rejectedReddedildi
cancelledİptal edildi

JSON Kolonları

products Yapısı (örnek)

[
  {
    "id": 1,
    "name": "Premium Listeleme",
    "quantity": 1,
    "price": 5000
  }
]

product_arge Yapısı

AR-GE projesi kapsamındaki ürün detayları.

missing_inputs Yapısı

Eksik sözleşme alanlarının listesi — onboarding takibi için.

JSON parse sorguları (MySQL 5.7+):

-- İlk ürün adını çek
SELECT id, JSON_UNQUOTE(JSON_EXTRACT(products, '$[0].name')) as ilk_urun
FROM customer_agreements WHERE deleted_at IS NULL;
 
-- JSON içinde ürün adı ara
SELECT id FROM customer_agreements
WHERE JSON_SEARCH(products, 'one', 'Premium%') IS NOT NULL;

Önemli İş Kuralları

  • recurred_agreement_id NOT NULL → Bu sözleşme bir yenileme. Kaynak sözleşmeye bakılabilir.
  • is_winback = true → Daha önce kaybedilmiş müşteri geri kazanıldı.
  • is_recurring = 1 → Taksitli ödeme yapısı var.
  • payment_day → Aylık ödeme günü (1-31 arası gün numarası).
  • agreement_date → İmza tarihi; agreement_renew_date → yenileme vadesi.

İlişkiler

customer_agreements
  → customer_id    : customers
  ←→ payments (1:N) — taksit ödemeleri
  ←→ customer_agreements_renew_logs (1:N)
  ←→ customer_agreements_renew_discounts (1:N)
  ←→ customer_user_agreement_signs (1:N)

Örnek Sorgular

-- Aktif sözleşme müşterileri ve toplam gelir
SELECT ca.customer_id, c.firm_name,
       COUNT(ca.id) as sozlesme_sayisi,
       SUM(ca.price) as toplam_bedel,
       MIN(ca.agreement_date) as ilk_sozlesme,
       MAX(ca.agreement_date) as son_sozlesme
FROM customer_agreements ca
JOIN customers c ON c.id = ca.customer_id
WHERE ca.deleted_at IS NULL AND ca.status = 'active'
GROUP BY ca.customer_id, c.firm_name
ORDER BY toplam_bedel DESC;
 
-- Yenileme analizi
SELECT COUNT(*) as yenileme_sayisi,
       AVG(ca.price) as ort_bedel,
       SUM(CASE WHEN ca.is_winback THEN 1 ELSE 0 END) as winback_sayisi
FROM customer_agreements ca
WHERE ca.recurred_agreement_id IS NOT NULL
  AND ca.deleted_at IS NULL;