# Versiyonlama ve Referans Amorphie uzerindeki bulunan verilerin versiyonlama ve kayitlar arasi iliski stratejisi amaciyla olusturulmustur. ## Tanimlar * **Akis:** Veri tutan bir is akisinin tanim bilgisidir. Genel hatlari ile akisin statu ve gecis bilgilerinin tutar. * **Kayit:** Bir akis kullanilarak olusturulan her bir akis ornegi kayit olarak adlandirilir. * **Version:** Bir kaydin uzerinde bulunan her bir semantik versiyon bilgisidir. Minor, Major ve levelden olusur. * **Patch:** Bir kaydin uzerinde yapilan her bir islem sonucunda olusan tekil(ULID) bir degerdir. Kaydin ayni zamanda ETag bilgisidir. ## Temel Kurallar * Kaydin Minor ve Major versiyonlari akis tarafindan ve servis tuketen tarafindan yonetilir. * Bir akis baslatildiginda, eger servis tuketen tarafindan verilmemisse ilk kaydin olusmasi ile Major her zaman bir(1) Minor ise Sifir(0) kabul edilir. * Gecisler kaydin minor ve major versiyon numarasini arttirabilir. Bu tanimlama Gecis kaydinda yapilir. * Patch degeri her bir transitionda otomatik olarak olusur. * Kayitlar birbirleri arasinda referans iliskisi kurabilirler. ## Ornek ### Hesaplar #### Hesap Tanimi Hesap tanimi incelediginde; Hesabin IBAN bilgisi **Key** olarak atanmis. **Key** servis tuketan tarafindan tekil bir anahtar olarak bir kayda eklebilir. Hesabin uzerinde **holder** bilgisi referans olarak farkli bir domain icerisindeki **retail-customer** akisinda bir kayda referans olarak eklenmistir. Hesabin uzerinde **branch** bilgisi referans olarak farkli bir domain icerisindeki **branch** akisinda bir kayda referans olarak eklenmistir. > Her iki refansin eklendigi versiyon bilgileri (self) ve referansin son degerini iceren (latest) linkleri dinamik olarak olusturulup eklenecektir. Kayit uzerinde **balances** bilgilerini ekleyen bir extension calismistir. Extension bilgileri kayit uzerinde tutulmaz kayit donerken calisan kod parcaciklari olup response modeli genisletirler. Burada *legder-balance*, blokelerden arinmis **available-balance** ve kredi limitlerininde eklendigi **comprehensive-balance** bilgisi verilmistir. Kayit ustunde **state** extensionu kaydin statusunu vermekte olup varsayilan amorphie extensionidir. ```json { "id": "01JKQ8C63HECAGQGKCXKEC31CX", "version": "1.0", "key": "TR740006282973364859697859", "eTag": "40194d183-430c-73af-bcd2-19f0740899d7", "attributes": { "title": "Vadesiz Hesabim", "currency": "TRL", "holder": { "$type": "reference", "key": 38552069008, "id": "edecf2c3-86e2-4579-8cc7-25a3bd13358d", "domain": "cif", "flow": "retail-customer", "version": "1.0" }, "branch": { "$type": "reference", "key": 9530, "id": "9388a4bf-3a17-4fc1-9858-1114276c6e75", "domain": "organization", "flow": "branch", "version": "1.0" } }, "extensions": { "state": { "title": "active", "status": "active" }, "balances": { "ledger-balance": { "amount": 200000 }, "available-balance": { "amount": 200000 }, "comprehensive-balance": { "amount": 400000 } } } } ``` ##### Hesap Is Akisi ```mermaid stateDiagram-v2 direction LR [*] --> started : start started --> draft : open draft --> active : approve active --> closed : close ``` #### Hesap Bakiyesi Hesap ile 1-1 olarak iliskilidir. Hesap bakiyesinin (ledger-balance) guncel durumunu tutar. Akislarda versiyon olmasi nedeniyle hesap bilgisinden ayri yonetmek veri coklamalarini azaltacagi icin bakiyeyi ayri takip etmek performas saglayacaktir. :::warning Muhasebe bacaginin yonetimi ayrica degelendirilmeli ::: ```json { "id": "b1af9921-072a-47a2-b0f6-84dd44d1db86", "version": "1.0", "key": "TR740006282973364859697859", "eTag": "67767d183-430c-73af-bcd2-19f0740899d7", "attributes": { "currency": "TRL", "ledger-balance": 200000, "account": { "key": "TR740006282973364859697859", "id": "01JKQ8C63HECAGQGKCXKEC31CX", "domain": "account", "flow": "account", "version": "1.0" } }, "extensions": { "state": { "title": "active", "status": "active" }, "balances": { "available-balance": { "amount": 200000 }, "comprehensive-balance": { "amount": 400000 } } } } ``` ##### Hesap Bakiyesi Is Akisi ```mermaid stateDiagram-v2 direction LR [*] --> started : start started --> active : open active --> active : para-cek active --> active : para-yatir active --> active : execute-eod active --> active : execute-sod active --> active : reconcilation active --> closed : close ``` ##### Para-Cek Transition Cagrisi Bu transition sadece hesap hareketinden cagrilip kayit altina alinacaktir :::warning Tum transaction datalari ana instace data icine yansimamali. Buradaki ornekteki gibi, defalarca ust uste bu transaction cagriliyor olacak. ::: ```json { "currency": "TRL", "amount": 5000, "transaction": { "key": "87636", "id": "09957cc6-57d9-4cbb-acd8-13fdc31be3c3", "domain": "money-transfer", "flow": "fast", "version": "1.0" } } ``` #### Para Cekis Hesap Haraketi Bir hesap uzerindeki her bir para cekme hareketini tutar. Her bir hareket ayri bir instance olarak yonetilir. Basit bir semaya ve akisa sahiptir. Hesap degisimlerini yapan akislar bu akisi kullanarak hareket girdisi saglar. > Instance Data ```json { "id": "01JKQCRVASJN1MVPJXHHFZ9DZN", "version": "1.0", "eTag": "01JKQCSEA2XT6PVFEEB87PTT17", "attributes": { "amount": 5000, "account": { "key": "TR740006282973364859697859", "id": "01JKQ8C63HECAGQGKCXKEC31CX", "domain": "account", "flow": "account", "version": "1.0" }, "transaction": { "key": "87636", "id": "09957cc6-57d9-4cbb-acd8-13fdc31be3c3", "domain": "money-transfer", "flow": "fast", "version": "1.0" } }, "extensions": { "state": { "title": "done", "status": "completed" } } } ``` ##### Hesap Hareketi Is Akisi ```mermaid stateDiagram-v2 direction LR [*] --> started : start started --> closed : para-cek ``` #### Hesaptan Para Transferi FAST Para transferi akisinda ornekteki hesabi kullanarak para transferi yapan kayit ornegi. > Instace Data ```json { "id": "09957cc6-57d9-4cbb-acd8-13fdc31be3c3", "version": "2.0", "key": "87636", "eTag": "0194d1af-429d-7a74-9df6-7021d9664833", "attributes": { "source": { "key": "TR740006282973364859697859", "id": "9f28a4ca-a875-4d94-b650-4dfadc0bc136", "domain": "account", "flow": "account", "version": "1.0" }, "target": { "iban": "TR640006282663364859655844", "holder": "John Doo" }, "amount": 500000, "transaction": { "id": "01JKQCRVASJN1MVPJXHHFZ9DZN", "domain": "account", "flow": "account-transaction", "version": "1.0" } }, "extensions": { "state": { "title": "done", "status": "completed" } } } ```