Skip to navigation

Offer Premium

Teklif Primi Ver

Endpoint Bilgileri

AlanDeğer
MethodPOST
URL{{baseUrl}}/api/Offline/jobs/{jobId}/Premiums
Content-Typeapplication/json
YetkilendirmeBearer Token + Create politikası

Acentenin açtığı prim isteğine karşılık, sigorta şirketinin teklif primlerini iletmesi için kullanılır.

Başarılı istekte prim seçenekleri ve taksit detayları (taksit komisyonu dahil) kaydedilir, primler platform servisine yazılır, iş Prim Verildi (PremiumOffered) aşamasına geçer, aksiyon kaydı oluşturulup platforma iletilir ve gönderilen PDF’ler asenkron olarak kaydedilir.

İşin aşaması Prim İsteği (PremiumRequested) veya Teklif Revize Talebi (PremiumReviseRequested) olmalıdır; aksi halde geçiş reddedilir.


Route Parametreleri

ParametreTipZorunluAçıklama
jobIdintegerEvetTeklif primlerinin kaydedileceği işin Id bilgisi

Kimlik Doğrulama

Geçerli bir bearer token gerektirir. Token şunları içermelidir:

  • Tanınan bir rol (InsuranceCompanyAPIUser, InsuranceCompanyAPIAdmin veya Supervizor)
  • İlgili route için Create yetkisi
  • Geçerli bir sigorta şirketi ataması
  • Çözümlenebilir bir kullanıcı kimliği

InsuranceCompanyAPIUser yalnızca kendi sahibi olduğu işleri işleyebilir. InsuranceCompanyAPIAdmin ve Supervizor için iş sahipliği kontrolü yapılmaz.


İstek Modeli — CreateOfferPremiumRequest

AlanTipZorunluAçıklamaDoğrulama
InsuranceCompanyProposalNumberstringEvetSigorta şirketi teklif numarasıBoş olamaz: "Insurance company proposal number is required."
RenewalNumberintegerEvetYenileme numarasıZorunlu: "Renewal number is required."
0’dan büyük veya eşit olmalı: "Renewal number must be greater than or equal to 0."
ProductIdintegerEvetTeklifin verildiği ürün IdZorunlu: "Product ID is required."
MessagestringHayırTeklife iliştirilen notMaks. 500 karakter: "Message cannot exceed 500 characters."
OfferPdfPremiumFileRequestHayırTeklif PDF’iGönderilirse PremiumFileRequest doğrulamaları uygulanır
InformationPdfPremiumFileRequestHayırBilgilendirme formu PDF’iGönderilirse PremiumFileRequest doğrulamaları uygulanır
PremiumsPremiumEntryRequest[]EvetPrim seçenekleriZorunlu: "Premium list is required."
Boş olamaz: "Premium list cannot be empty."
Tekil olmalı: "Duplicate premium entries are not allowed for the same installment, payment type, and installment option."

JobId gövdeden alınmaz ([JsonIgnore]); route parametresinden set edilir. Bu uçta JobId için ayrı bir doğrulama kuralı tanımlı değildir; route kısıtı ({jobId:int}) yeterlidir.

Tekillik kuralı: Aynı IsInstallmentsEqual + PaymentOptionType + InstallmentNumber kombinasyonuna sahip birden fazla prim seçeneği gönderilemez.

Prim Seçeneği — PremiumEntryRequest

AlanTipZorunluAçıklamaDoğrulama
PaymentOptionTypeintegerEvetÖdeme tipiZorunlu: "PaymentOptionType is required."
Tanımlı bir değer olmalı: "PaymentOptionType must be a valid payment type."
CurrencyTypeintegerEvetPara birimiZorunlu: "CurrencyType is required."
Tanımlı bir değer olmalı: "CurrencyType must be a valid currency type."
IsInstallmentsEqualbooleanEvetTaksitler eşit tutarlı mı?—
FirstInstallmentRateintegerHayırİlk taksit oranı (%)Gönderilirse 1–100 arasında olmalı: "FirstInstallmentRate must be between 1 and 100."
InstallmentNumberintegerEvetTaksit sayısıZorunlu: "InstallmentNumber is required."
0’dan büyük olmalı: "InstallmentNumber must be greater than 0."
GrossPremiumdecimalEvetBrüt prim (işlem para biriminde)Zorunlu: "GrossPremium is required."
0’dan büyük olmalı: "GrossPremium must be greater than 0."
NetPremiumdecimalEvetNet prim (işlem para biriminde)Zorunlu: "NetPremium is required."
0’dan büyük olmalı: "NetPremium must be greater than 0."
CommissiondecimalEvetKomisyon (işlem para biriminde)Zorunlu: "Commission is required."
0’dan büyük veya eşit olmalı: "Commission must be greater than or equal to 0."
ExchangeRatedecimalKoşulluİşlem para biriminin TL kuruCurrencyType TL değilse zorunlu: "ExchangeRate is required when CurrencyType is not TL."
0’dan büyük olmalı: "ExchangeRate must be greater than 0."
InstallmentExplanationstringHayırTaksit açıklaması—
PremiumInstallmentDetailsPremiumInstallmentDetailRequest[]KoşulluTaksit detaylarıInstallmentNumber 1’den büyükse zorunlu: "Premium installment details are required when InstallmentNumber is greater than 1."
Boş olamaz: "Premium installment details cannot be empty when InstallmentNumber is greater than 1."

TL karşılığı alanlar: Bu uçta TL karşılığı alan (GrossPremiumTL, CommissionTL vb.) bulunmaz. Tutarlar işlem para biriminde ve ExchangeRate ile gönderilir; TL karşılığı tutar × ExchangeRate ile hesaplanır. Bu alanlar gövdede gönderilirse yok sayılır, hata dönülmez.

Taksit Detayı — PremiumInstallmentDetailRequest

AlanTipZorunluAçıklamaDoğrulama
InstallmentNumberintegerEvetToplam taksit sayısıZorunlu: "InstallmentNumber is required"
0’dan büyük olmalı: "InstallmentNumber must be greater than 0."
InstallmentNointegerEvetTaksit sıra numarasıZorunlu: "InstallmentNo is required"
0’dan büyük olmalı: "InstallmentNo must be greater than 0."
PaymentAmountdecimalEvetTaksit tutarıZorunlu: "PaymentAmount is required"
0’dan büyük olmalı: "PaymentAmount must be greater than 0."
CommissiondecimalEvetTaksit komisyonuZorunlu: "Commission is required."
0’dan büyük veya eşit olmalı: "Commission must be greater than or equal to 0."
PaymentDatedatetimeEvetÖdeme tarihiZorunlu: "PaymentDate is required"
Boş olamaz: "PaymentDate must not be empty."

Taksit komisyonu (Commission) taksit detayıyla birlikte kaydedilir ve prim bilgileri okunurken dolu döner.

Ödeme Tipi Değerleri

DeğerÖdeme Tipi
1Hesaptan
2Kredi Kartı
3Tümü

Para Birimi Değerleri

DeğerPara Birimi
1TL
2Dolar
3Euro
4İngiliz Sterlini
5Japon Yeni
6İsviçre Frangı
7İsveç Kronu

PDF Dosyası — PremiumFileRequest

AlanTipZorunluAçıklamaDoğrulama
FileNamestringEvet*Dosya adıBoş olamaz: "FileName must not be empty."
.pdf ile bitmeli: "Only PDF files are allowed."
Base64ContentstringEvet*Base64 kodlu dosya içeriğiBoş olamaz: "Base64Content must not be empty."
Geçerli base64 olmalı: "Base64Content must be a valid base64 encoded string."
İçerik geçerli bir PDF olmalı: "File content is not a valid PDF."
ContentTypestringHayırMIME türüDoğrulanmaz

* Bu alanlar yalnızca OfferPdf veya InformationPdf gönderildiğinde doğrulanır.


İş Kuralları

State geçişi sırasında sırasıyla aşağıdaki kontroller yapılır:

  1. İş Prim İsteği veya Teklif Revize Talebi aşamasında olmalıdır.
  2. İşe ait teklif (Proposal) kaydı bulunmalıdır.
  3. Teklife ait poliçe bulunmamalıdır.
  4. Teklif + ürün için OperationWatch kaydı bulunmalıdır.
  5. Teklif için daha önce prim bilgisi kaydedilmemiş olmalıdır.
  6. Primler platform servisine yazılabilmelidir.
  7. Aksiyonu karşılayacak platform kullanıcısı bulunmalı ve aksiyon platforma iletilebilmelidir.

Geri alma davranışı: 6. kural başarısız olursa kaydedilen primler silinir, OperationWatch başarısız işaretlenir ve iş Prim İsteği aşamasına geri döndürülür. 7. kuralda aksiyon platforma iletilemezse oluşturulan aksiyon kaydı silinir.


Yanıt

201 Created — Başarılı Yanıt

Gövde boştur.


Hata Senaryoları

400 Bad Request — Doğrulama Hatası

İstek modeli doğrulamadan geçemediğinde döner. Hatalı alanlar Response içinde listelenir.

{
"Status": false,
"Code": "Validation.General",
"Message": "One or more validation errors occurred",
"Response": [
{
"Field": "Premiums[0].GrossPremium",
"Message": "GrossPremium must be greater than 0."
},
{
"Field": "Premiums[0].Commission",
"Message": "Commission is required."
},
{
"Field": "Premiums[0].PaymentOptionType",
"Message": "PaymentOptionType must be a valid payment type."
},
{
"Field": "Premiums[0].CurrencyType",
"Message": "CurrencyType must be a valid currency type."
},
{
"Field": "Premiums[0].ExchangeRate",
"Message": "ExchangeRate is required when CurrencyType is not TL."
},
{
"Field": "Premiums[0].PremiumInstallmentDetails[0].PaymentAmount",
"Message": "PaymentAmount must be greater than 0."
},
{
"Field": "Premiums[0].PremiumInstallmentDetails[0].Commission",
"Message": "Commission is required."
}
]
}

403 Forbidden — Geçerli Sigorta Şirketi Ataması Bulunamadı

Token’da geçerli bir sigorta şirketi ataması bulunmadığında döner.

{
"Status": false,
"Code": "OfflineUsers.InsuranceCompanyNotFound",
"Message": "No valid insurance company assignment found in token.",
"Response": null
}

403 Forbidden — Kullanıcı Kimliği Çözümlenemedi

Token’dan kullanıcı kimliği okunamadığında döner.

{
"Status": false,
"Code": "OfflineUsers.UserIdentityNotResolved",
"Message": "User identity could not be resolved from token.",
"Response": null
}

403 Forbidden — İşe Erişim Reddedildi

İş, çağıranın sahipliğinde değilse döner.

{
"Status": false,
"Code": "OfflineJobs.JobOwnershipDenied",
"Message": "You do not have permission to access this job.",
"Response": null
}

403 Forbidden — Rol veya Yetki Yetersiz

Kullanıcı tanınan rollerden birine sahip değilse ya da Create yetkisi yoksa döner. Gövde boştur.


401 Unauthorized — Token Yok veya Geçersiz

Token gönderilmediğinde, geçersiz olduğunda veya süresi dolduğunda döner. Gövde boştur.


404 Not Found — İş Bulunamadı

Belirtilen jobId ile bir iş bulunamadığında döner.

{
"Status": false,
"Code": "OfflineJobs.JobNotFound",
"Message": "No job found for the requested JobId: 999999999.",
"Response": null
}

400 Bad Request — Geçersiz Aşama Geçişi

İş teklif verilebilecek bir aşamada değilse döner. Message alanı işin mevcut aşamasını ve geçilebilecek aşamaları içerir.

{
"Status": false,
"Code": "JobState.InvalidTransition",
"Message": "'Prim Verildi' aşamasından 'Prim Verildi' aşamasına geçiş yapılamaz. Bu aşamadan yalnızca şu aşamalara geçiş yapılabilir: Poliçe İsteği, İstek Geri Çekildi, Mesaj, Toplu Prim İsteği, Kurum İçi Bilgi Bekleniyor, Kurum Dışı Bilgi Bekleniyor, Bilgi Bekleniyor İptal.",
"Response": null
}

400 Bad Request — Prim Bilgisi Zaten Mevcut

Teklif için daha önce prim bilgisi kaydedilmişse döner.

{
"Status": false,
"Code": "JobState.PremiumAlreadyExists",
"Message": "Premium information already exists for job 100931.",
"Response": null
}

404 Not Found — Teklif Kaydı Bulunamadı

İşe ait teklif kaydı bulunamadığında döner.

{
"Status": false,
"Code": "JobState.ProposalNotFound",
"Message": "Proposal record not found for job 100931.",
"Response": null
}

404 Not Found — Operation Watch Kaydı Bulunamadı

Teklif + ürün için operasyon kaydı bulunamadığında döner.

{
"Status": false,
"Code": "JobState.OperationWatchNotFound",
"Message": "Operation Watch record not found for job 100931.",
"Response": null
}

404 Not Found — Platform Kullanıcısı Bulunamadı

Aksiyonu karşılayacak platform kullanıcısı bulunamadığında döner.

{
"Status": false,
"Code": "JobState.PlatformUserNotFound",
"Message": "Platform user to receive the action not found for job 100931.",
"Response": null
}

409 Conflict — Poliçe Zaten Mevcut

Teklife ait poliçe kaydı bulunduğunda döner.

{
"Status": false,
"Code": "JobState.PolicyAlreadyExists",
"Message": "A policy already exists for job 100931.",
"Response": null
}

500 Internal Server Error — Platform Servisi Hatası

Prim bilgileri platform servisine yazılamadığında döner. Message alanı platformdan dönen hatayı içerir.

{
"Status": false,
"Code": "JobState.PlatformServiceFailure",
"Message": "Failed to write to the platform service. Platform returned: Prim bilgileri platform servisine yazdırılamadı! Servisten dönen hata: Ürün taksit sayısı uyuşmazlığı. Taksitleriniz şu şekilde olmalıdır: 1 - Tümü",
"Response": null
}

500 Internal Server Error — Aksiyon Platforma İletilemedi

Aksiyon platforma iletilemediğinde döner.

{
"Status": false,
"Code": "JobState.ActionNotSentToPlatform",
"Message": "Action could not be sent to platform for job 100931.",
"Response": null
}

500 Internal Server Error — Beklenmeyen Hata

Geçiş sırasında iş kuralı dışında bir hata oluştuğunda döner.

{
"Status": false,
"Code": "JobState.TransitionError",
"Message": "An unexpected error occurred during job state transition.",
"Response": null
}

Authentication

AuthorizationBearer

Bearer authentication of the form Bearer <token>, where token is your auth token.

Path parameters

jobIdstringRequired

Request

This endpoint expects an object.

Response

Created

Errors

400
Bad Request Error
403
Forbidden Error
404
Not Found Error
409
Conflict Error
500
Internal Server Error