# Contract Approval Müşterilerin oanylaması gereken sözleşmeler için onaylatma altyapısı sunar. ## Arayuz :https://whimsical.com/contract-approval-6qt7G861pqDePFh69Kxajj ## Hedefler * Müşteriden onay alınacak sözleşme ve içerikler için onay alım işi için talep yapılabilmesi. * Belge onayının mobil uygulama veya web üzerinden (Web IB ve belge onaylama web uygulaması) yapılabilmesi. * Belge onaylama ile ilgili notifikasyon mekanizmasının tetiklenmesi (*SMS veya Push*). ## Sözleşme Onay Emirleri Uygulamalar ve süreçler müşteriden onay alınması beklenen belge tipleri için onaylama emri oluşturur. Bu onaylama emirleri bu altyapı içerisinde içerisinde işlenir. * **config** içerisinde bulunan tanımlamalar varsayılan olarak projenin tanım dosyasında bulunur. Servisi çağıran kişi bu tanımları gönderebilir veya göndermeyerek varsayılan tanımların kullanılması ister. * **max-retry-count** kullanıcıya kaç defa hatırlatma yapılacağı bilgisini içerir. Boş geçilmesi veya 0 değeri verilmesi durumunda sözleşmeler onaylanana kadar sonsuz hatırlatma yapılacak demektir. * **retry-frequence** hatırlatma frekansını belirlemek için kullanılır. CRON formatında frekans belirlenir. Ayrıca Internet Bankacılığı login anında sözleşme güncelleme uyarısı sunmak için *@logon* keywordu kullanılır. * **timeout-minutes** ile emrin geçerlilik süresi dakika olarak tanımlanır. Boş geçilmesi veya sıfır verilmesi durumunda emir sonsuz kabul edilir. * Müşteriden onay istemek için ilk seferinde **notify-message-transaction-sms notify-message-transaction-push** ile sonraki denemelerde **re-notify-message-transaction-sms** **re-notify-message-transaction-push** ile bilgilendirme metni üretilir. Onay isteme metni mobil kullanmayan müşteriler için SMS üzerinden, mobil uygulama kullanan müşteriler için Mobile Push ile iletilir. * **reference** içerisinde emri oluşturan sistemle ilgili bilgiler bulunur. * **id** emri oluşturan tekil kayıt, **name** ile süreç, **state** ile aşama bilgisi geçilir. * **callback** ile işlem tamamlandığında veya işlem içerisinde emri verene sisteme bilgi döner. Eğer sadece işlem tamamlandığında bilgi isteniyorsa **mode** *completed* olarak ayarlanır. Her bir aksiyon için bilgi isteniyorsa **mode** *verbose* olarak ayarlanır. Eğer callback **url** PUT, POST veya PATCH tipinde ise sabit olarak emir durum paket bilgisi geçilir. * **customer** müşteri TCKN veya VKN bilgisini içerir. Kullanıcı kendi adına veya temsil ettiği organizasyon adına sözleşme onayı veriyor olabilir. * **approvers** belgelere onay verecek kullanıcıların TCKN numarası, onay sırasi ve tipini içeririr. * **order** alanında onaycılar için onaylama sırası belirlenir. * **type** olması durumunda tüm onaycıların onayı için **all-of** onaycılardan sadece birinin onayı için **one-off** seçilir. ### Örnek Emir Emri ```json= { "id": "15802b18-cc2f-4b79-808f-e35b6023782c", "config": { "max-retry-count": 3, "retry-frequence": "*/5 * * * *", "timeout-minutes": "60", "notify-message-transaction-sms": "api.dengage.burgan.com.tr/sms/545654455", "notify-message-transaction-push": "api.dengage.burgan.com.tr/push/545654466", "re-notify-message-transaction-sms": "api.dengage.burgan.com.tr/sms/545654477", "re-notify-message-transaction-push": "api.dengage.burgan.com.tr/push/545654488" }, "reference": { "name": "retail-loan-vehicle", "state": "approve-payment-plan", "id": "e39d7d85-22a3-4f35-a5ac-01fffc229635", "callback": { "mode": "verbose | completed", "url": "POST api.burgan.com.tr/retail-loan-vehicle/approve-state/756a06e1-c808-41da-9dbb-b4ac9ed7fd00" } }, "customer": 38552069008, "approvers": [ { "user": 66776677887, "order": "must" }, { "user": 55776677887, "order": "optional" }, { "user": 28552069008, "order": "last" } ], "documents": [ { "name": "Sigorta Sözleşme Teklif Alım İzni", "type": "html", "content": "<body>form bilgilerei</body>", "actions": [ { "type": "approve", "title": "Onayla" }, { "type": "reject", "title": "Reddet" } ] }, { "name": "Kredi Ödeme Planı", "type": "html", "content": "<body>Bildirim Özeti</body>", "actions": [ { "type": "approve", "title": "Onayla" }, { "type": "reject", "title": "Reddet" } ] }, { "name": "Rehin Emri", "type": "pdf", "file-name": "rehin_emri.pdf", "content": "JVBERi0xLjQNJeLjz9MNCjEyNiAwIG9iag08PC9MaW5lYXJpemVkIDEvTCAxMzgwNTc1L08gMTI4L0UgODEwNzI2L04gMi9", "actions": [ { "type": "approve", "title": "Onayla" }, { "type": "reject", "title": "Reddet" } ] } ] } ``` ### Callback Body Eğer callback mode *completed* ayarlanmış ise; * Belge imzaları tamamlandığında (*state=completed*), * Zaman aşımına uğradığında (*state=timeout*) * Operatör veya sistem tarafında emir iptal edildiğinde (*state=canceled*) Callback url çağrılır. Eğer callback mode *verbose* ayarlanmış ise yukarıda durumlara ek olarak; * Kullanıcıya ilk onay metni gönderildiğinde, * Kullanıcıya her hatırlatma metni gönderildiğinde * Kullanıcının her hangi bir belgeye onay vermesi durumunda Callback url çağrılır. ```json= { "id": "15802b18-cc2f-4b79-808f-e35b6023782c", "customer": 38552069008, "reference": { "name": "retail-loan-vehicle", "state": "approve-payment-plan", "id": "e39d7d85-22a3-4f35-a5ac-01fffc229635" }, "state": "completed | in-progress | timeout | canceled", "retry-count": 2, "remaing-timeout-minutes": "12", "documents": [ { "name": "Sigorta Sözleşme Teklif Alım İzni", "type": "html", "state": "approved | rejected | in-progress ", "approvers": [ { "order": "1", "state": "approved", "actions": [ { "user": 66776677887, "state": "approved" } ] }, { "order": "2", "state": "in-progress", "actions": [ { "user": 66776677887, "state": "in-progress" }, { "user": 23323223322323, "state": "approved" } ] }, { "order": "3", "state": "waiting", "actions": [ { "user": 66776677887, "state": "waiting" } ] } ] }, { "name": "Kredi Ödeme Planı", "approvers": [ { "order": "1", "state": "approved", "actions": [ { "user": 66776677887, "state": "approved" } ] }, { "order": "2", "state": "in-progress", "actions": [ { "user": 66776677887, "state": "in-progress" }, { "user": 23323223322323, "state": "approved" } ] }, { "order": "3", "state": "waiting", "actions": [ { "user": 66776677887, "state": "waiting" } ] } ] }, { "name": "Rehin Emri", "approvers": [ { "order": "1", "state": "approved", "actions": [ { "user": 66776677887, "state": "approved" } ] }, { "order": "2", "state": "in-progress", "actions": [ { "user": 66776677887, "state": "in-progress" }, { "user": 23323223322323, "state": "approved" } ] }, { "order": "3", "state": "waiting", "actions": [ { "user": 66776677887, "state": "waiting" } ] } ] } ] } ``` ### POST : /contract-approval/contracts Yeni bir emir kaydı için kullanmılır. Emirler güncellenemez sadece iptal edilebilir. > Akış Başlatma Mesajı : **contact_approval_contract_new** ![](https://i.imgur.com/tv5OCGF.png) ### DELETE : /contract-approval/contracts/{id} Var olan bir emri iptale çekmek için kullanılır. Emir normalde iptal edilmez *canceled* statüsüne alınır. İptal anına kadar onayladığı belgeler sistemde onaylı kalır. ### GET : /contract-approval/contracts/ Servisi emirler sorgulanır. Sonuçlar callback body formatında array olarak döner. #### Query Parameters ```json "reference-id": "756a06e1-c808-41da-9dbb-b4ac9ed7fd00" "customer": 38552069000 "state":"in-progress", "page-index":0 "page-size":25 ``` :::warning Query parametreler birden fazla aynı isimde parametre geçişini destekler. Örneğin "...state=timeout&state=completed..." gibi ::: :::danger History servisleri ayrıca değerlendirip servis kümesine eklemek gerekmektedir. ::: ## Kullanıcı Arabirimi Kullanıcılar belge onaylama işlemlerini üç ortam üzerinden yapabilir. 1. Mobil Bankacılık üzerinden 2. Web Internet Bankacılığı üzerinden 3. Belge onaylama için özel tasarlanmış web uygulaması üzerinden (**Onay Uygulaması**) Uygulama ekranları ortak rest apiler üzerinden haberleşerek tasarlanır. Belge onay linki sms ile iletiliyorsa direkt olarak onay uygulamasına yönlendirir. Mobil app kurulu ise push ile iletilen bilgilendirme direkt olarak mobil uygulama içinden ### Bileşenler #### Web Arabimi ##### Landing > Onay Uygulaması Müşteriye belge onaylama amacıyla linki geldiği ve SSO sistemine yönlendirilip login olması akabinde bilgilendirme yapılacak ekrandır. Müşteriye özel bilgi içermez. ##### Order Listing > Onay Uygulaması, Web Bankacılığı, Backoffice Ortak kullanıcak şekilde tasarlanmış bu bileşen ile kullanıcının onaylaması gereken, onayladığı ve onayına gelecek emirlerin, belgelerin listelendiği arabirim sunulur. * Onay uygulmasında SSO yönlendirilmesi sonrasında bu bileşene yönlenir. * Web bankacılığında onayımı bekleyenler menüsü altında bileşene yönlenir. * Backoffice uygulamasında kullanıcı yada emir bilgisi secilen bir bileşenden sonra bu ekrana yönlendirilir. ##### Content Display & Actions > Onay Uygulaması, Web Bankacılığı, Backoffice Ortak kullanıcak şekilde tasarlanmış bu bileşen ile kullanıcı onayına sunulan belgeyi görüntüler ve tanımlı aksiyonlardan birini alır.