Create Premium

# Prim Teklifi API Dokümantasyonu Bu dokümantasyon, offline iş akışı kapsamında prim teklifi oluşturma endpoint'inin teknik kullanım kılavuzudur. Endpoint aracılığıyla sigorta şirketi API kullanıcıları; prim bilgilerini çeşitli ödeme seçenekleriyle (peşin veya taksitli) iletebilir, teklif ve bilgilendirme belgelerini PDF olarak ekleyebilir. --- ## Endpoint Bilgisi | Özellik | Değer | | --- | --- | | **HTTP Metodu** | `POST` | | **URL** | `/api/offline/jobs/{jobId}/premiums` | | **Content-Type** | `application/json` | | **Yetkilendirme** | `Authorization: Bearer {token}` | ### Yetkilendirme Rolleri Çağıranın aşağıdaki rollerden birine sahip olması gerekir: | Rol | Erişim Kapsamı | | --- | --- | | `InsuranceCompanyAPIUser` | Sadece kendi işlerine erişebilir | | `InsuranceCompanyAPIAdmin` | Şirketin tüm işlerine erişebilir | | `Supervizor` | Şirketin tüm işlerine erişebilir | ### Route Parametreleri | Parametre | Tip | Zorunlu | Açıklama | | --- | --- | --- | --- | | `jobId` | `integer` | Evet | İşin benzersiz tanımlayıcısı | --- ## Enum Değerleri ### PaymentType (Ödeme Türü) | Değer | Ad | Açıklama | | --- | --- | --- | | `1` | Hesaptan | Hesaptan ödeme | | `2` | KrediKarti | Kredi kartı ile ödeme | | `3` | Tumu | Tüm ödeme türleri | ### CurrencyType (Para Birimi) | Değer | Ad | Görünen Ad | | --- | --- | --- | | `1` | Tl | TL | | `2` | Usd | Dolar | | `3` | Eur | Euro | | `4` | Gbp | İngiliz Sterlini | | `5` | Jpy | Japon Yeni | | `6` | Chf | İsviçre Frangı | | `7` | Sek | İsveç Kronu | --- ## İstek Modeli ### Ana İstek — `CreateOfferPremiumRequest` | Alan | Tip | Zorunlu | Açıklama | Doğrulama Kuralları | | --- | --- | --- | --- | --- | | `InsuranceCompanyProposalNumber` | `string` | Evet | Sigorta şirketinin teklif numarası | Boş olamaz: `"Insurance company proposal number is required."` | | `RenewalNumber` | `integer` | Evet | Yenileme numarası | Zorunlu: `"Renewal number is required."` <br>0'dan büyük veya eşit olmalı: `"Renewal number must be greater than or equal to 0."` | | `ProductId` | `integer` | Evet | Ürün tanımlayıcısı | Zorunlu: `"Product ID is required."` | | `Message` | `string` | Hayır | İsteğe bağlı mesaj | Maks. 500 karakter: `"Message cannot exceed 500 characters."` | | `OfferPdf` | `PremiumFileRequest` | Hayır | Teklif PDF dosyası | Sağlanırsa `PremiumFileRequest` doğrulamaları uygulanır | | `InformationPdf` | `PremiumFileRequest` | Hayır | Bilgi PDF dosyası | Sağlanırsa `PremiumFileRequest` doğrulamaları uygulanır | | `Premiums` | `PremiumEntryRequest[]` | Evet | Prim girişleri listesi | Zorunlu: `"Premium list is required."` <br>Boş olamaz: `"Premium list cannot be empty."` <br>Tekrarsız olmalı: `"Duplicate premium entries are not allowed for the same installment, payment type, and installment option."` | > **Benzersizlik Kuralı:** Aynı `IsInstallmentsEqual` + `PaymentOptionType` + `InstallmentNumber` kombinasyonuna sahip birden fazla prim girişi gönderilemez. ### Prim Girişi — `PremiumEntryRequest` | Alan | Tip | Zorunlu | Açıklama | Doğrulama Kuralları | | --- | --- | --- | --- | --- | | `PaymentOptionType` | `integer` | Evet | Ödeme seçeneği türü | Zorunlu: `"PaymentOptionType is required."` <br>Geçerli enum değeri olmalı: `"PaymentOptionType must be a valid payment type."` | | `CurrencyType` | `integer` | Evet | Para birimi türü | Zorunlu: `"CurrencyType is required."` <br>Geçerli enum değeri olmalı: `"CurrencyType must be a valid currency type."` | | `IsInstallmentsEqual` | `boolean` | Evet | Taksitler eşit tutarlı mı? | — | | `FirstInstallmentRate` | `integer` | Hayır | İlk taksit oranı (%) | 1–100 arasında olmalı _(sağlanırsa)_: `"FirstInstallmentRate must be between 1 and 100."` | | `InstallmentNumber` | `integer` | Evet | Taksit sayısı | Zorunlu: `"InstallmentNumber is required."` <br>0'dan büyük olmalı: `"InstallmentNumber must be greater than 0."` | | `GrossPremium` | `decimal` | Evet | Brüt prim tutarı | Zorunlu: `"GrossPremium is required."` <br>0'dan büyük olmalı: `"GrossPremium must be greater than 0."` | | `GrossPremiumTL` | `decimal` | Hayır | Brüt prim TL karşılığı | — | | `NetPremium` | `decimal` | Evet | Net prim tutarı | Zorunlu: `"NetPremium is required."` <br>0'dan büyük olmalı: `"NetPremium must be greater than 0."` | | `Commision` | `decimal` | Evet | Komisyon tutarı | Zorunlu: `"Commision is required."` <br>0'dan büyük veya eşit olmalı: `"Commision must be greater than or equal to 0."` | | `CommisionTL` | `decimal` | Hayır | Komisyon TL karşılığı | — | | `ExchangeRate` | `decimal` | Hayır | Döviz kuru | — | | `InstallmentExplanation` | `string` | Hayır | Taksit açıklama metni | — | | `PremiumInstallmentDetails` | `PremiumInstallmentDetailRequest[]` | Koşullu | Taksit detayları (`InstallmentNumber > 1` olduğunda zorunlu) | Zorunlu: `"Premium installment details are required when InstallmentNumber is greater than 1."` <br>Boş olamaz: `"Premium installment details cannot be empty when InstallmentNumber is greater than 1."` | ### Taksit Detayı — `PremiumInstallmentDetailRequest` | Alan | Tip | Zorunlu | Açıklama | Doğrulama Kuralları | | --- | --- | --- | --- | --- | | `InstallmentNumber` | `integer` | Evet | Toplam taksit sayısı | Zorunlu: `"InstallmentNumber is required"` <br>0'dan büyük olmalı: `"InstallmentNumber must be greater than 0."` | | `InstallmentNo` | `integer` | Evet | Taksit sıra numarası | Zorunlu: `"InstallmentNo is required"` <br>0'dan büyük olmalı: `"InstallmentNo must be greater than 0."` | | `PaymentAmount` | `decimal` | Evet | Bu taksitin ödeme tutarı | Zorunlu: `"PaymentAmount is required"` <br>0'dan büyük olmalı: `"PaymentAmount must be greater than 0."` | | `Commision` | `decimal` | Evet | Bu taksitin komisyon tutarı | Zorunlu: `"Commision is required."` <br>0'dan büyük veya eşit olmalı: `"Commision must be greater than or equal to 0."` | | `PaymentDate` | `datetime` | Evet | Ödeme tarihi | Zorunlu: `"PaymentDate is required"` <br>Boş olamaz: `"PaymentDate must not be empty."` | ### PDF Dosyası — `PremiumFileRequest` > Aşağıdaki alanlar yalnızca `OfferPdf` veya `InformationPdf` nesnesi gönderildiğinde zorunludur. | Alan | Tip | Zorunlu | Açıklama | Doğrulama Kuralları | | --- | --- | --- | --- | --- | | `FileName` | `string` | Evet\* | Dosya adı | Boş olamaz: `"FileName must not be empty."` | | `ContentType` | `string` | Evet\* | MIME türü | Boş olamaz: `"ContentType must not be empty."` | | `Base64Content` | `string` | Evet\* | Base64 kodlu dosya içeriği | Boş olamaz: `"Base64Content must not be empty."` <br>Geçerli Base64 olmalı: `"Base64Content must be a valid base64 encoded string."` | --- ## Yanıt Formatı ### Başarılı Yanıt **HTTP Durumu:** `201 Created` Yanıt gövdesi boştur. ### Hata Yanıtı ``` json { "Status": false, "Code": "Error.Code", "Message": "Error description", "Response": null } ``` Doğrulama hatalarında `Response` alanı detayları içerir: ``` json { "Status": false, "Code": "Validation.General", "Message": "One or more validation errors occurred", "Response": [ { "Field": "FieldName", "Message": "Error message description" } ] } ``` --- ## HTTP Durum Kodları | Durum | Açıklama | | --- | --- | | `201 Created` | Prim teklifi başarıyla oluşturuldu | | `400 Bad Request` | Doğrulama hatası veya prim zaten mevcut | | `401 Unauthorized` | Eksik, geçersiz veya süresi dolmuş token | | `403 Forbidden` | Yetersiz yetki veya iş sahipliği reddedildi | | `404 Not Found` | İş, teklif veya operation watch bulunamadı | | `500 Internal Server Error` | Platform servisi hatası veya beklenmeyen hata | --- ## Hata Kodları Referansı | Kod | HTTP Durumu | Mesaj | | --- | --- | --- | | `Validation.General` | 400 | One or more validation errors occurred | | `OfflineJobs.InsuranceCompanyNotFound` | 403 | No valid insurance company assignment found in token. | | `OfflineJobs.UserNotFound` | 403 | User identity could not be resolved from token. | | `OfflineJobs.JobNotFound` | 404 | No job found for the requested JobId. | | `OfflineJobs.JobOwnershipDenied` | 403 | You do not have permission to access this job. | | `JobState.ProposalNotFound` | 404 | Proposal record not found for job {jobId}. | | `JobState.OperationWatchNotFound` | 404 | Operation Watch record not found for job {jobId}. | | `JobState.PremiumAlreadyExists` | 400 | Premium information already exists for job {jobId}. | | `JobState.PlatformServiceFailure` | 500 | Failed to write premium information to the platform service. Platform returned: {msg} | | `JobState.TransitionError` | 500 | An unexpected error occurred during job state transition. | ---

Authentication

AuthorizationBearer

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

Path parameters

jobIdintegerRequired

Request

This endpoint expects an object.

Response

Created

Errors

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