Jak od strony kodu wygląda wykonanie przelewu wbanku

Jak od strony kodu wygląda wykonanie przelewu wbanku
GO
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 5 lat
0

Pod wpływem postu @Koziołek nasunęło mi się pytanie jak od strony kodu działa w banku wykonanie przelewu? W książkach jest to właśnie taki uproszczony przykład - zakładamy transakcję, odejmujemy od jednego, dodajemy do drugiego i w zależności od powodzenia commitujemy lub robimy rollback. A jak to wyglada w realnym swiecie? Móglby ktoś (może @Koziołek) jakos szerzej to opisać i wrzucić jakieś przykładowe kody jakby to mogło być realizowane?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
1

jeśli jest to przelew wewnętrzny to tak to mniej więcej wygląda (+ sprawdzanie czy są środki dostępne), przy przelewach zewnętrznych w grę wchodzą zewnętrzne serwisy jak ELIXIR


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
8

@goodfather: to zależy od banku. W najprostszym modelu masz mniej więcej taki proces:

Po stronie obciążenia:

  • Zlecenie przelewu przez uprawnionego użytkownika/automat (np. przelewy stałe, polecenia zapłaty itp.)
  • Sprawdzenie, czy na koncie jest wystarczająca ilość środków i:
    • nie ma środków, to odrzucamy zadanie albo,
    • nie ma środków, to zakładamy blokadę i generujemy ostrzeżenie dla klienta albo,
    • są środki, to zakładamy blokadę.
  • Wygenerowanie dokumentu przelewu
  • przesłanie dokumentu do systemu rozliczeniowego i księgowego.
  • „obciążeniowe” zdjęcie blokady (zdjęcie blokady powoduje obciążenie rachunku).

Po stronie uznania:

  • Pojawia się polecenie uznania rachunku,
  • sprawdzenie, czy rachunek może być uznany (istnieje, czy są blokady itp.) → możliwe odrzucenie, co wiąże się z wygenerowaniem storno dla strony obciążonej.
  • wygenerowanie zdarzenia księgowego → uznanie konta.
  • uznanie na rachunku.

Po stronie banku w obu przypadkach potrzebne są odpowiednie operacje księgowe zgodnie z zasadą podwójnego zapisu. I tu właśnie leży „realna magia” operacji na kontach bankowych. Każda taka operacja przechodzi przez księgę rachunkową banku, gdzie pozostaje po niej ślad. Co ciekawe w księdze tej nie ma rachunków klientów, a konta księgowe, które odpowiadają „kierunkom” ruchu pieniądza. W ten sposób bank wie, ile pieniędzy przyjął i ile wysłał w świat (tzw. konta drogi). Ile było operacji przewalutowania (konta w walucie obcej) albo ile wpłacono/wypłacono w okienku (konta materiałowe).
Do tego dochodzi rekoncyliacja, czyli wzajemne sprawdzenie zapisów pomiędzy kontami księgowymi, ale też np. pomiędzy bankiem, KIR-em i NBP (tak jak ma to miejsce w ELIXIRze).

Jeżeli do czegoś miałbym to porównać, to najbliżej jest do event sourcingu. Przy czym ES jest to taki dość prymitywny mechanizm.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 1x, ostatnio: Koziołek
Zobacz pozostały 1 komentarz
Koziołek
@hauleth: na braku odporności na zmiany stanu wprowadzane z zewnątrz. Na braku mechanizmu storno na najbardziej abstrakcyjnym poziomie (technicznie też to jest upierdliwe). Przy czym ES „robi robotę” w zakresie ilości przechowywanych danych i dostępu do danych historycznych.
YA
Hmm, storno dla zdarzeń czy w innym sensie? Bo jak dla zdarzeń, to pewnie równie dobrze można powiedzieć, że brak mechanizmu dla zacommitowanej transakcji w bazach relacyjnych. Chyba, że coś innego kryje się po brakiem mechanizmu storno?
Koziołek
Storno w księgowości wiąże ze sobą dwa zapisy. W ES każdy zapis jest całkowicie niezależny i bez sprawdzenie wszystkich zapisów późniejszych nie możesz powiedzieć, że dany zapis jest anulowany.
YA
Ok, wydaje mi się, że rozumiem o co Ci chodziło z tą prymitywnością ES. Trudno oczekiwać czegoś wyszukanego, bo ES jest (z mojej perspektywy) mechanizmem technicznym, zaś operacja storno elementem mechanizmu biznesowego z dobrze zdefiniowanymi regułami. W warstwie "technicznej", "anuluj zdarzenie X" ma dość proste implikacje (pomiń zdarzenie), ale co to znaczy dla "biznesu", to nie wiadomo, dopóki biznes nie zdefiniuje. Trzeba pamiętać, że warstwa techniczna sama nie rozwiąże problemów biznesowych :-)
hauleth
@Koziołek: zgadzam się z @yarel, że w tym wypadku to ES może dalej być bazą techniczną, natomiast na tym możesz zbudować logikę biznesową, która już takie informacje będzie zawierała.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)