@develit-services/bank 0.8.9 → 0.8.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +150 -275
- package/dist/database/schema.cjs +1 -1
- package/dist/database/schema.d.cts +2 -2
- package/dist/database/schema.d.mts +2 -2
- package/dist/database/schema.d.ts +2 -2
- package/dist/database/schema.mjs +1 -1
- package/dist/export/worker.cjs +425 -557
- package/dist/export/worker.d.cts +848 -84
- package/dist/export/worker.d.mts +848 -84
- package/dist/export/worker.d.ts +848 -84
- package/dist/export/worker.mjs +425 -557
- package/dist/export/workflows.cjs +16 -16
- package/dist/export/workflows.mjs +16 -16
- package/dist/export/wrangler.cjs +0 -12
- package/dist/export/wrangler.d.cts +1 -8
- package/dist/export/wrangler.d.mts +1 -8
- package/dist/export/wrangler.d.ts +1 -8
- package/dist/export/wrangler.mjs +0 -12
- package/dist/shared/{bank.JVlyPAAb.cjs → bank.BBXoZ5QU.cjs} +26 -13
- package/dist/shared/{bank.CHQ3VSEh.d.ts → bank.BCop1cDT.d.mts} +4 -15
- package/dist/shared/{bank.Bg3Pdwm4.cjs → bank.BsIiXsFH.cjs} +5 -13
- package/dist/shared/{bank.BoZtXQpG.mjs → bank.CR0UlyRi.mjs} +1 -1
- package/dist/shared/{bank.CtnsGHM8.cjs → bank.CUvVxlHy.cjs} +126 -152
- package/dist/shared/{bank.DJnDSYqE.cjs → bank.CVi6R7fr.cjs} +1 -1
- package/dist/shared/{bank.C6jjS1Pl.mjs → bank.CXBeULUL.mjs} +25 -14
- package/dist/shared/{bank.DT6bg8k5.cjs → bank.Cev1E9sk.cjs} +2 -2
- package/dist/shared/{bank.pgyk4j94.d.cts → bank.Cj2Goq7s.d.cts} +104 -176
- package/dist/shared/{bank.pgyk4j94.d.mts → bank.Cj2Goq7s.d.mts} +104 -176
- package/dist/shared/{bank.pgyk4j94.d.ts → bank.Cj2Goq7s.d.ts} +104 -176
- package/dist/shared/{bank.vPWD7Ce4.d.cts → bank.CjTfEd1Q.d.cts} +4 -15
- package/dist/shared/{bank.BtszLapg.mjs → bank.D-O_gmmZ.mjs} +127 -152
- package/dist/shared/{bank.BP_3WMIF.d.cts → bank.DMjtitKo.d.cts} +0 -1
- package/dist/shared/{bank.BP_3WMIF.d.mts → bank.DMjtitKo.d.mts} +0 -1
- package/dist/shared/{bank.BP_3WMIF.d.ts → bank.DMjtitKo.d.ts} +0 -1
- package/dist/shared/{bank.CwuH4spB.d.mts → bank.OlDt7dpb.d.ts} +4 -15
- package/dist/shared/{bank.CbAwwIhZ.mjs → bank.vz1uqEYa.mjs} +5 -11
- package/dist/shared/{bank.B5bZRvgq.mjs → bank.xB9eTN77.mjs} +2 -2
- package/dist/types.cjs +6 -6
- package/dist/types.d.cts +26 -45
- package/dist/types.d.mts +26 -45
- package/dist/types.d.ts +26 -45
- package/dist/types.mjs +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,8 +5,10 @@ Microsluzba pro spravu bankovnich uctu, zpracovani plateb a synchronizaci transa
|
|
|
5
5
|
## Obsah
|
|
6
6
|
|
|
7
7
|
- [Architektura](#architektura)
|
|
8
|
-
- [Zivotni cyklus
|
|
9
|
-
- [
|
|
8
|
+
- [Zivotni cyklus payment requestu](#zivotni-cyklus-payment-requestu)
|
|
9
|
+
- [Odeslani platby](#odeslani-platby)
|
|
10
|
+
- [Batch platby](#batch-platby)
|
|
11
|
+
- [Polling stavu (CRON)](#polling-stavu-cron)
|
|
10
12
|
- [Synchronizace uctu](#synchronizace-uctu)
|
|
11
13
|
- [Bankovni konektory](#bankovni-konektory)
|
|
12
14
|
- [RPC akce](#rpc-akce)
|
|
@@ -18,70 +20,48 @@ Microsluzba pro spravu bankovnich uctu, zpracovani plateb a synchronizaci transa
|
|
|
18
20
|
Sluzba se sklada z:
|
|
19
21
|
|
|
20
22
|
- **Akce (Actions)** - API endpointy pro spravu uctu, plateb a batchu
|
|
21
|
-
- **Workflows** - Cloudflare Durable Objects pro asynchronni zpracovani (sync uctu
|
|
23
|
+
- **Workflows** - Cloudflare Durable Objects pro asynchronni zpracovani (sync uctu)
|
|
22
24
|
- **Konektory** - Abstrakce nad API jednotlivych bank (Erste, Fio, Moneta, ...)
|
|
23
|
-
- **
|
|
25
|
+
- **CRON** - Pravidelny polling stavu payment requestu
|
|
24
26
|
|
|
25
|
-
## Zivotni cyklus
|
|
27
|
+
## Zivotni cyklus payment requestu
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
Payment request (iniciovan platba) prochazi nasledujicimi stavy:
|
|
28
30
|
|
|
29
31
|
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
┌─────────────────────────────────────────────┐
|
|
34
|
-
│ 1. IncomingPayment status: CREATED │
|
|
35
|
-
│ Nova platba z API, zatim bez uctu │
|
|
36
|
-
└──────────────────┬──────────────────────────┘
|
|
37
|
-
│ prirazeni uctu + konektoru
|
|
38
|
-
▼
|
|
39
|
-
┌─────────────────────────────────────────────┐
|
|
40
|
-
│ 2. AccountAssignedPayment status: CREATED │
|
|
41
|
-
│ Platba prirazena k bankovnimu uctu │
|
|
42
|
-
│ a konektoru (accountId, connectorKey) │
|
|
43
|
-
└──────────────────┬──────────────────────────┘
|
|
44
|
-
│ vlozeni do batche
|
|
45
|
-
▼
|
|
46
|
-
┌─────────────────────────────────────────────┐
|
|
47
|
-
│ 3. BatchedPayment status: CREATED │
|
|
48
|
-
│ Platba je soucasti batche, ceka na │
|
|
49
|
-
│ odeslani do banky │
|
|
50
|
-
└──────────────────┬──────────────────────────┘
|
|
51
|
-
│ connector.initiate*Batch()
|
|
52
|
-
▼
|
|
53
|
-
┌─────────────────────────────────────────────┐
|
|
54
|
-
│ 4. PreparedPayment status: PREPARED │
|
|
55
|
-
│ Odeslana do banky, ceka na autorizaci │
|
|
56
|
-
│ (muze jiz mit bankRefId) │
|
|
57
|
-
└──────────────────┬──────────────────────────┘
|
|
58
|
-
│ uzivatel autorizuje (callback)
|
|
59
|
-
▼
|
|
60
|
-
┌─────────────────────────────────────────────┐
|
|
61
|
-
│ 5. SignedPayment status: SIGNED │
|
|
62
|
-
│ Autorizovana uzivatelem, banka │
|
|
63
|
-
│ zpracovava │
|
|
64
|
-
└──────────────────┬──────────────────────────┘
|
|
65
|
-
│ banka dokonci zpracovani
|
|
66
|
-
▼
|
|
67
|
-
┌─────────────────────────────────────────────┐
|
|
68
|
-
│ 6. CompletedPayment status: COMPLETED│
|
|
69
|
-
│ Zpracovana bankou, ma bankRefId │
|
|
70
|
-
│ a processedAt timestamp │
|
|
71
|
-
│ (pripadne FAILED / PENDING) │
|
|
72
|
-
└─────────────────────────────────────────────┘
|
|
32
|
+
OPENED → AUTHORIZED → COMPLETED → BOOKED → SETTLED
|
|
33
|
+
↘ ↗
|
|
34
|
+
REJECTED / CLOSED
|
|
73
35
|
```
|
|
74
36
|
|
|
75
|
-
###
|
|
37
|
+
### PaymentRequestStatus
|
|
38
|
+
|
|
39
|
+
| Status | Popis |
|
|
40
|
+
|--------|-------|
|
|
41
|
+
| `OPENED` | Platba vytvorena a odeslana do banky, ceka na autorizaci |
|
|
42
|
+
| `AUTHORIZED` | Autorizovana uzivatelem, banka zpracovava |
|
|
43
|
+
| `COMPLETED` | Banka potvrdila zpracovani, platba je na ceste |
|
|
44
|
+
| `BOOKED` | Platba zauctovana ve vypisu platce |
|
|
45
|
+
| `SETTLED` | Platba pripsana na ucet prijemce |
|
|
46
|
+
| `REJECTED` | Odmitnuta bankou nebo uzivatelem |
|
|
47
|
+
| `CLOSED` | Timeout — platba nebyla zpracovana do 14 dni |
|
|
48
|
+
|
|
49
|
+
**Terminalni stavy**: `SETTLED`, `REJECTED`, `CLOSED`
|
|
50
|
+
|
|
51
|
+
### PaymentStatus (bankovni vypis)
|
|
52
|
+
|
|
53
|
+
Stavy pro tabulku `payment` (polozky z bankovniho vypisu):
|
|
76
54
|
|
|
77
55
|
| Status | Popis |
|
|
78
56
|
|--------|-------|
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
57
|
+
| `PENDING` | Ceka na zpracovani |
|
|
58
|
+
| `PROCESSING` | Zpracovava se |
|
|
59
|
+
| `BOOKED` | Zauctovano |
|
|
60
|
+
| `CANCELLED` | Zruseno |
|
|
61
|
+
| `REJECTED` | Odmitnuto |
|
|
62
|
+
| `SCHEDULED` | Naplanovano |
|
|
63
|
+
| `HOLD` | Pozastaveno |
|
|
64
|
+
| `INFO` | Bank-specific informace |
|
|
85
65
|
|
|
86
66
|
### Typy plateb
|
|
87
67
|
|
|
@@ -90,118 +70,82 @@ SendPaymentInput (API vstup)
|
|
|
90
70
|
- `DOMESTIC` - Tuzemsky prevod
|
|
91
71
|
- `UNKNOWN` - Nezname
|
|
92
72
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- `INCOMING` - Prichozi platba
|
|
96
|
-
- `OUTGOING` - Odchozi platba
|
|
97
|
-
|
|
98
|
-
## Batch processing
|
|
99
|
-
|
|
100
|
-
Platby se neodesilaji do banky jednotlive, ale seskupuji se do **batchu** (davek). Kazdy ucet ma nastaveny `batchSizeLimit` (vychozi: 50 plateb na batch).
|
|
101
|
-
|
|
102
|
-
Kazdy batch obsahuje pouze platby **jednoho typu** (SEPA, DOMESTIC nebo SWIFT). Ruzne typy plateb nelze odeslat do banky v jednom batchi.
|
|
103
|
-
|
|
104
|
-
### Jak to funguje
|
|
73
|
+
## Odeslani platby
|
|
105
74
|
|
|
106
|
-
|
|
107
|
-
2. Queue handler spusti akci `add-payments-to-batch`, ktera:
|
|
108
|
-
- Filtruje platby podle podpory uctu
|
|
109
|
-
- Prirazuje platby k uctum a konektorum
|
|
110
|
-
- **Seskupi platby podle `paymentType`** (SEPA, DOMESTIC, SWIFT) - kazdy typ ma vlastni batch
|
|
111
|
-
- Hleda existujici OPEN batch pro dany ucet a typ platby, nebo vytvori novy
|
|
112
|
-
- Respektuje `batchSizeLimit` - pokud je batch plny, vytvori dalsi
|
|
113
|
-
- Platby s flagou `sendAsSinglePayment` jdou do samostatneho batche
|
|
114
|
-
3. Batch je pripraven ke zpracovani
|
|
115
|
-
|
|
116
|
-
### Zivotni cyklus batche
|
|
75
|
+
Akce `send-payment` odesle platbu **primo do banky** a vrati `authorizationUrl` + `paymentId`.
|
|
117
76
|
|
|
118
77
|
```
|
|
119
|
-
|
|
120
|
-
│
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
│
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
│ Ceka na autorizaci uzivatelem │
|
|
135
|
-
│ (obsahuje auth URL z banky) │
|
|
136
|
-
└──────────────┬──────────────────────┘
|
|
137
|
-
│ uzivatel autorizuje
|
|
138
|
-
▼
|
|
139
|
-
┌─────────────────────────────────────┐
|
|
140
|
-
│ SIGNED │
|
|
141
|
-
│ Autorizovany, banka zpracovava │
|
|
142
|
-
└──────────────┬──────────────────────┘
|
|
143
|
-
│ banka dokonci
|
|
144
|
-
▼
|
|
145
|
-
┌─────────────────────────────────────┐
|
|
146
|
-
│ COMPLETED / FAILED / │
|
|
147
|
-
│ SIGNATURE_FAILED │
|
|
148
|
-
│ Konecny stav │
|
|
149
|
-
└─────────────────────────────────────┘
|
|
78
|
+
SendPaymentInput (API vstup)
|
|
79
|
+
│
|
|
80
|
+
▼
|
|
81
|
+
Validace (ucet, typ platby, mena)
|
|
82
|
+
│
|
|
83
|
+
▼
|
|
84
|
+
Vytvoreni payment_request v DB (status: OPENED)
|
|
85
|
+
│
|
|
86
|
+
▼
|
|
87
|
+
connector.initiate*Payment() (DOMESTIC/SEPA/SWIFT)
|
|
88
|
+
│
|
|
89
|
+
├─ Uspech → Update PR (bankRefId, authorizationUrl)
|
|
90
|
+
│ → Return { paymentId, authorizationUrl }
|
|
91
|
+
│
|
|
92
|
+
└─ Selhani → Smazani PR z DB, throw error (klient muze retry)
|
|
150
93
|
```
|
|
151
94
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
Workflow (Cloudflare Durable Object) ridi zpracovani batche:
|
|
155
|
-
|
|
156
|
-
1. Nacte a validuje batch (nesmi byt SIGNED/PROCESSING)
|
|
157
|
-
1b. Nacte payment requesty pro batch z `payment_request` tabulky
|
|
158
|
-
2. Zamkne batch (nastavi PROCESSING, overi checksum)
|
|
159
|
-
3. Iniciuje batch u banky pres konektor podle typu platby (`connector.initiateDomesticBatch()` / `initiateSEPABatch()` / `initiateForeignBatch()`)
|
|
160
|
-
3b. Aktualizuje singlePayments na PREPARED (bankRefId, initiatedAt, authorizationUrl)
|
|
161
|
-
4. Aktualizuje batch na READY_TO_SIGN s autorizacnimi URL
|
|
162
|
-
4a. MOCK konektor: preskoci autorizaci, rovnou oznaci singlePayments jako COMPLETED a batch jako SIGNED
|
|
163
|
-
5. Odesle email s odkazem na autorizaci
|
|
164
|
-
6. (TBD) Ceka na autorizaci uzivatelem (waitForEvent)
|
|
165
|
-
|
|
166
|
-
### CRON kontrola stavu
|
|
95
|
+
`send-payment-sync` je **deprecated** wrapper, ktery vola `send-payment`.
|
|
167
96
|
|
|
168
|
-
|
|
169
|
-
- Nacte vsechny pending batche (READY_TO_SIGN, SIGNED)
|
|
170
|
-
- Seskupi je podle konektoru
|
|
171
|
-
- Zavola `connector.getBatchStatus()` pro kazdy batch
|
|
172
|
-
- Aktualizuje stavy batchu a jednotlivych plateb
|
|
173
|
-
- Emituje eventy pro zmenene platby
|
|
97
|
+
## Batch platby
|
|
174
98
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
Alternativa k batch flow. Akce `send-payment-sync` odesle platbu **synchronne** primo do banky a vrati `authorizationUrl` pro podpis uzivatelem.
|
|
99
|
+
Akce `send-batch` prijme pole plateb a odesle je do banky jako batch. Vsechny platby musi mit **stejny debtor ucet** (IBAN + mena) a **stejny typ** (DOMESTIC/SEPA/SWIFT). Pocet plateb nesmi prekrocit `account.batchSizeLimit` (vychozi: 50).
|
|
178
100
|
|
|
179
101
|
```
|
|
180
|
-
|
|
102
|
+
SendBatchInput (API vstup — pole plateb)
|
|
181
103
|
│
|
|
182
104
|
▼
|
|
183
|
-
|
|
105
|
+
Validace (stejny debtor, typ, mena, velikost)
|
|
184
106
|
│
|
|
185
107
|
▼
|
|
186
|
-
|
|
108
|
+
db.batch() — Vytvoreni batch (PROCESSING) + payment_requests (OPENED)
|
|
187
109
|
│
|
|
188
110
|
▼
|
|
189
|
-
connector.initiate*
|
|
111
|
+
connector.initiate*Batch() — automaticky fallback na single payments
|
|
190
112
|
│
|
|
191
|
-
|
|
192
|
-
|
|
113
|
+
├─ Uspech → db.batch() — Update PRs + batch (READY_TO_SIGN)
|
|
114
|
+
│ → Return { batchId, authorizationUrls }
|
|
115
|
+
│
|
|
116
|
+
└─ Selhani → db.batch() — Smazani batch + PRs, throw error
|
|
193
117
|
```
|
|
194
118
|
|
|
195
|
-
###
|
|
119
|
+
### Batch mode
|
|
120
|
+
|
|
121
|
+
Kazdy batch ma `batchMode`:
|
|
122
|
+
- `NATIVE` — konektor podporuje nativni batch API, vsechny platby jdou v jednom volani
|
|
123
|
+
- `SINGLE` — konektor batch nepodporuje, platby se odesilaji jednotlive (automaticky fallback v `IBankConnector`)
|
|
124
|
+
|
|
125
|
+
### BatchStatus
|
|
126
|
+
|
|
127
|
+
| Status | Popis |
|
|
128
|
+
|--------|-------|
|
|
129
|
+
| `PROCESSING` | Batch se odesila do banky |
|
|
130
|
+
| `READY_TO_SIGN` | Ceka na autorizaci uzivatelem |
|
|
131
|
+
| `AUTHORIZED` | Vsechny platby autorizovany |
|
|
132
|
+
| `COMPLETED` | Vsechny platby dokonceny |
|
|
133
|
+
| `FAILED` | Nektera platba selhala |
|
|
134
|
+
|
|
135
|
+
Batch status se **derivuje z payment requestu** — neni pollovan z banky.
|
|
136
|
+
|
|
137
|
+
## Polling stavu (CRON)
|
|
196
138
|
|
|
197
|
-
|
|
198
|
-
|---|---|---|
|
|
199
|
-
| Zpracovani | Asynchronni (queue → batch → workflow) | Synchronni (primo connector) |
|
|
200
|
-
| Ulozeni do DB | Ano (payment + batch) | Ne (prijde az pres sync) |
|
|
201
|
-
| Autorizacni URL | Az po `process-batch` | Ihned v response |
|
|
202
|
-
| Pouziti | Hromadne platby, backoffice | Uzivatelska akce, okamzita platba |
|
|
139
|
+
Jeden CRON (`CRON_PAYMENT_STATUSES`) pravidelne spousti `updatePaymentRequestStatuses`:
|
|
203
140
|
|
|
204
|
-
|
|
141
|
+
1. Nacte vsechny non-terminalni payment requesty
|
|
142
|
+
2. Aplikuje polling logiku:
|
|
143
|
+
- `OPENED` / `AUTHORIZED` — pollovat, po 14 dnech → `CLOSED`
|
|
144
|
+
- `COMPLETED` / `BOOKED` — pollovat 7 dni od `processedAt`, pak prestat
|
|
145
|
+
3. Pro kazdy PR zavola `connector.getPaymentStatus()` a updatne stav
|
|
146
|
+
4. Derivuje batch stavy z payment requestu (`_deriveBatchStatus`)
|
|
147
|
+
|
|
148
|
+
Stejna logika (`_resolvePaymentRequestStatuses`) se vola i z `handleAuthorizationCallback` pro okamzity re-check po autorizaci.
|
|
205
149
|
|
|
206
150
|
## Synchronizace uctu
|
|
207
151
|
|
|
@@ -212,15 +156,12 @@ Kazdy pripojeny ucet ma workflow `SyncAccountPayments`, ktery bezi v nekonecne s
|
|
|
212
156
|
│ │
|
|
213
157
|
│ ▼
|
|
214
158
|
│ Stahni platby z banky (connector.getAllAccountPayments)
|
|
215
|
-
│ │ (az 5 pokusu, 2s delay mezi nimi)
|
|
216
|
-
│ ▼
|
|
217
|
-
│ Filtruj dokoncene platby
|
|
218
159
|
│ │
|
|
219
160
|
│ ▼
|
|
220
|
-
│
|
|
161
|
+
│ Filtruj dokoncene platby, vloz nove do DB (deduplikace pres bankRefId)
|
|
221
162
|
│ │
|
|
222
163
|
│ ▼
|
|
223
|
-
│ Emituj
|
|
164
|
+
│ Emituj paymentFetched eventy
|
|
224
165
|
│ │
|
|
225
166
|
│ ▼
|
|
226
167
|
│ Aktualizuj lastSyncAt + metadata
|
|
@@ -231,8 +172,6 @@ Kazdy pripojeny ucet ma workflow `SyncAccountPayments`, ktery bezi v nekonecne s
|
|
|
231
172
|
└────┘
|
|
232
173
|
```
|
|
233
174
|
|
|
234
|
-
Deduplikace: Workflow si pamatuje `lastSyncBankRefIds` z posledni synchronizace, aby nevkladal duplicity.
|
|
235
|
-
|
|
236
175
|
## Bankovni konektory
|
|
237
176
|
|
|
238
177
|
Vsechny konektory dedi z abstraktni tridy `IBankConnector`, ktera poskytuje spolecnou logiku vcetne batch fallbacku.
|
|
@@ -241,79 +180,18 @@ Vsechny konektory dedi z abstraktni tridy `IBankConnector`, ktera poskytuje spol
|
|
|
241
180
|
|
|
242
181
|
| Konektor | Klic | Batch podpora | Poznamka |
|
|
243
182
|
|----------|------|---------------|----------|
|
|
244
|
-
| Erste Bank | `ERSTE` | DOMESTIC | Vlastni API |
|
|
183
|
+
| Erste Bank | `ERSTE` | DOMESTIC | Vlastni API (neaktivni) |
|
|
245
184
|
| Finbricks | `FINBRICKS` | DOMESTIC | Platforma pro vice bank (bazova trida) |
|
|
246
185
|
| Moneta | `MONETA` | DOMESTIC | Pres Finbricks |
|
|
247
186
|
| Creditas | `CREDITAS` | Zadna | Pres Finbricks |
|
|
248
187
|
| Fio | `FIO` | DOMESTIC | Pres Finbricks |
|
|
249
|
-
| DBU | `DBU` | Zadna |
|
|
188
|
+
| DBU | `DBU` | Zadna | Vlastni API (interni banka) |
|
|
250
189
|
| CSAS | `CSAS` | DOMESTIC | Pres Finbricks |
|
|
251
190
|
| AirBank | `AIRBANK` | DOMESTIC | Pres Finbricks |
|
|
252
191
|
| Mock | `MOCK` | Vsechny typy | Testovaci, automaticky dokoncuje platby |
|
|
253
|
-
| Mock COBS | `MOCK_COBS` | Vsechny typy | Testovaci COBS konektor |
|
|
254
|
-
|
|
255
|
-
### Podporovane sluzby dle bank (Finbricks, CZ)
|
|
256
|
-
|
|
257
|
-
> Data ze sandbox prostredi Finbricks (`/status/bankInfo`). Aktualizovano: 2026-02-23.
|
|
258
|
-
|
|
259
|
-
#### Platby
|
|
260
|
-
|
|
261
|
-
| Banka | Provider | Domestic | SEPA | Foreign | Batch | Recurring | Pairing | Settled |
|
|
262
|
-
|-------|----------|:--------:|:----:|:-------:|:-----:|:---------:|:-------:|:-------:|
|
|
263
|
-
| MONETA Money Bank | `MONETA` | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
|
264
|
-
| Mock Cobs banka | `MOCK_COBS` | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
|
|
265
|
-
| Air Bank | `AIRBANK` | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
|
266
|
-
| J&T Banka | `JTB` | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
267
|
-
| mBank | `MBANK` | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
268
|
-
| Raiffeisen | `RAIFFEISEN` | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
269
|
-
| Fio banka | `FIO` | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
|
|
270
|
-
| CSOB | `CSOB` | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
|
|
271
|
-
| Komercni banka | `KB` | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ |
|
|
272
|
-
| UniCredit | `UNICREDIT` | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
273
|
-
| Ceska sporitelna | `CSAS` | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ |
|
|
274
|
-
| Partners Banka | `PARTNERS` | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
275
|
-
| Banka CREDITAS | `CREDITAS` | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
276
|
-
|
|
277
|
-
#### Ucty (informace)
|
|
278
|
-
|
|
279
|
-
| Banka | Provider | Info | Zustatek | Transakce |
|
|
280
|
-
|-------|----------|:----:|:--------:|:---------:|
|
|
281
|
-
| MONETA Money Bank | `MONETA` | ✅ | ✅ | ✅ |
|
|
282
|
-
| Mock Cobs banka | `MOCK_COBS` | ✅ | ✅ | ✅ |
|
|
283
|
-
| Air Bank | `AIRBANK` | ✅ | ✅ | ✅ |
|
|
284
|
-
| J&T Banka | `JTB` | ✅ | ✅ | ✅ |
|
|
285
|
-
| mBank | `MBANK` | ✅ | ✅ | ✅ |
|
|
286
|
-
| Raiffeisen | `RAIFFEISEN` | ✅ | ✅ | ✅ |
|
|
287
|
-
| Fio banka | `FIO` | ✅ | ✅ | ✅ |
|
|
288
|
-
| CSOB | `CSOB` | ✅ | ✅ | ✅ |
|
|
289
|
-
| Komercni banka | `KB` | ✅ | ✅ | ✅ |
|
|
290
|
-
| UniCredit | `UNICREDIT` | ✅ | ✅ | ✅ |
|
|
291
|
-
| Ceska sporitelna | `CSAS` | ✅ | ✅ | ✅ |
|
|
292
|
-
| Partners Banka | `PARTNERS` | ✅ | ✅ | ✅ |
|
|
293
|
-
| Banka CREDITAS | `CREDITAS` | ✅ | ✅ | ✅ |
|
|
294
|
-
|
|
295
|
-
#### Instant platby
|
|
296
|
-
|
|
297
|
-
| Banka | Provider | Domestic Creditor | Domestic Debtor | SEPA Creditor | SEPA Debtor |
|
|
298
|
-
|-------|----------|:-----------------:|:---------------:|:-------------:|:-----------:|
|
|
299
|
-
| MONETA Money Bank | `MONETA` | ✅ | ✅ | ❌ | ❌ |
|
|
300
|
-
| Mock Cobs banka | `MOCK_COBS` | ✅ | ✅ | ✅ | ❌ |
|
|
301
|
-
| Air Bank | `AIRBANK` | ✅ | ✅ | ✅ | ✅ |
|
|
302
|
-
| J&T Banka | `JTB` | ✅ | ✅ | ✅ | ✅ |
|
|
303
|
-
| mBank | `MBANK` | ✅ | ✅ | ❌ | ❌ |
|
|
304
|
-
| Raiffeisen | `RAIFFEISEN` | ✅ | ✅ | ❌ | ❌ |
|
|
305
|
-
| Fio banka | `FIO` | ✅ | ✅ | ❌ | ✅ |
|
|
306
|
-
| CSOB | `CSOB` | ✅ | ✅ | ❌ | ❌ |
|
|
307
|
-
| Komercni banka | `KB` | ✅ | ✅ | ❌ | ❌ |
|
|
308
|
-
| UniCredit | `UNICREDIT` | ✅ | ✅ | ❌ | ❌ |
|
|
309
|
-
| Ceska sporitelna | `CSAS` | ✅ | ✅ | ❌ | ❌ |
|
|
310
|
-
| Partners Banka | `PARTNERS` | ✅ | ✅ | ❌ | ❌ |
|
|
311
|
-
| Banka CREDITAS | `CREDITAS` | ✅ | ✅ | ❌ | ❌ |
|
|
312
192
|
|
|
313
193
|
### Metody konektoru
|
|
314
194
|
|
|
315
|
-
Kazdy konektor implementuje nasledujici metody (nebo vraci `Not implemented`):
|
|
316
|
-
|
|
317
195
|
**Sprava uctu:**
|
|
318
196
|
- `getAuthUri()` - Ziskat autorizacni URL
|
|
319
197
|
- `authorizeAccount()` - Dokoncit autorizaci uctu
|
|
@@ -324,82 +202,62 @@ Kazdy konektor implementuje nasledujici metody (nebo vraci `Not implemented`):
|
|
|
324
202
|
- `initiateForeignPayment()` - Zahranicni (SWIFT) platba
|
|
325
203
|
|
|
326
204
|
**Batch platby (per typ):**
|
|
327
|
-
- `initiateDomesticBatch()` - Batch tuzemskych plateb
|
|
205
|
+
- `initiateDomesticBatch()` - Batch tuzemskych plateb (s automatickym fallbackem)
|
|
328
206
|
- `initiateSEPABatch()` - Batch SEPA plateb
|
|
329
207
|
- `initiateForeignBatch()` - Batch zahranicnich plateb
|
|
330
208
|
|
|
331
209
|
**Synchronizace a stavy:**
|
|
332
210
|
- `getAllAccountPayments()` - Stahnout transakce uctu
|
|
333
|
-
- `
|
|
334
|
-
- `getPaymentStatus()` - Zjistit stav platby
|
|
211
|
+
- `getPaymentStatus()` - Zjistit stav payment requestu (vraci `PaymentRequestStatus`)
|
|
335
212
|
|
|
336
213
|
### Abstrakce a batch fallback
|
|
337
214
|
|
|
338
215
|
Bazova trida `IBankConnector` implementuje **template method pattern** pro batch operace. Kazdy konektor deklaruje, ktere typy plateb podporuje v batchi pres metodu `supportsBatch(paymentType)`.
|
|
339
216
|
|
|
340
|
-
Pokud konektor **nepodporuje** batch pro dany typ platby, bazova trida automaticky provede fallback
|
|
217
|
+
Pokud konektor **nepodporuje** batch pro dany typ platby, bazova trida automaticky provede fallback na single platby:
|
|
341
218
|
|
|
342
219
|
```
|
|
343
220
|
initiateDomesticBatch()
|
|
344
221
|
│
|
|
345
|
-
├─ supportsBatch('DOMESTIC') === true
|
|
346
|
-
│ └─► initiateDomesticBatchImpl() // nativni batch API banky
|
|
222
|
+
├─ supportsBatch('DOMESTIC') === true → initiateDomesticBatchImpl() (nativni batch)
|
|
347
223
|
│
|
|
348
|
-
└─ supportsBatch('DOMESTIC') === false
|
|
349
|
-
└─► for each payment: // fallback na single platby
|
|
350
|
-
initiateDomesticPayment()
|
|
224
|
+
└─ supportsBatch('DOMESTIC') === false → for each: initiateDomesticPayment() (fallback)
|
|
351
225
|
```
|
|
352
226
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
**Implementace v konektoru:**
|
|
356
|
-
- `supportsBatch(paymentType)` - Vraci `true`/`false` podle podpory banky
|
|
357
|
-
- `initiate*BatchImpl()` - Chranene (protected) metody s nativni batch implementaci, volane pouze kdyz `supportsBatch()` vraci `true`
|
|
358
|
-
|
|
359
|
-
Vysledek je vzdy jednotny typ `InitiatedBatch` (obsahuje `authorizationUrls`, `payments` a volitelne `metadata`), bez ohledu na to, zda byl pouzit nativni batch nebo fallback.
|
|
360
|
-
|
|
361
|
-
### Charge Bearer
|
|
362
|
-
|
|
363
|
-
Platby mohou specifikovat `chargeBearer` (nositel poplatku):
|
|
364
|
-
- `SHA` - Sdilene poplatky (vychozi)
|
|
365
|
-
- `OUR` - Poplatky plati odesilatel
|
|
366
|
-
- `BEN` - Poplatky plati prijemce
|
|
367
|
-
|
|
368
|
-
Hodnota se cte primo z platby a predava konektoru (pouzivano napr. ve Finbricks).
|
|
227
|
+
Vysledek je vzdy jednotny typ `InitiatedBatch`, bez ohledu na to, zda byl pouzit nativni batch nebo fallback. Batch zaznam v DB obsahuje `batchMode: 'NATIVE' | 'SINGLE'` pro rozliseni.
|
|
369
228
|
|
|
370
229
|
## RPC akce
|
|
371
230
|
|
|
372
|
-
Bank service je **RPC worker**
|
|
231
|
+
Bank service je **RPC worker** — nema vlastni verejne HTTP endpointy. Vsechny akce jsou dostupne pouze pres Cloudflare Worker binding.
|
|
373
232
|
|
|
374
233
|
### Sprava uctu
|
|
375
234
|
|
|
376
235
|
| Akce | Popis |
|
|
377
236
|
|------|-------|
|
|
378
237
|
| `get-auth-uri` | Ziska autorizacni URL pro pripojeni uctu |
|
|
379
|
-
| `authorize-account` | Dokonci autorizaci uctu
|
|
380
|
-
| `disconnect-account` | Odpoji ucet
|
|
381
|
-
| `get-bank-accounts` | Seznam uctu
|
|
238
|
+
| `authorize-account` | Dokonci autorizaci uctu |
|
|
239
|
+
| `disconnect-account` | Odpoji ucet |
|
|
240
|
+
| `get-bank-accounts` | Seznam uctu |
|
|
382
241
|
| `update-account` | Aktualizace nastaveni uctu |
|
|
383
242
|
|
|
384
243
|
### Platby
|
|
385
244
|
|
|
386
245
|
| Akce | Popis |
|
|
387
246
|
|------|-------|
|
|
388
|
-
| `send-payment` | Odesle platbu
|
|
389
|
-
| `send-payment-sync` |
|
|
390
|
-
| `
|
|
391
|
-
| `
|
|
392
|
-
| `
|
|
247
|
+
| `send-payment` | Odesle platbu primo do banky, vrati `{ paymentId, authorizationUrl }` |
|
|
248
|
+
| `send-payment-sync` | **Deprecated** — wrapper nad `send-payment` |
|
|
249
|
+
| `send-batch` | Odesle batch plateb primo do banky, vrati `{ batchId, authorizationUrls }` |
|
|
250
|
+
| `get-payments` | Seznam plateb z bankovniho vypisu |
|
|
251
|
+
| `get-payment-requests` | Seznam payment requestu |
|
|
252
|
+
| `handle-authorization-callback` | Zpracuje callback po autorizaci — spusti re-check stavu pres konektor |
|
|
253
|
+
| `simulate-deposit` | Testovaci: vytvori prichozi platbu |
|
|
393
254
|
|
|
394
255
|
### Batch operace
|
|
395
256
|
|
|
396
257
|
| Akce | Popis |
|
|
397
258
|
|------|-------|
|
|
398
|
-
| `process-batch` | Spusti zpracovani batche (workflow) |
|
|
399
|
-
| `process-batch-status` | Stav zpracovani batche |
|
|
400
|
-
| `process-batch-restart` | Restart selhaneho batch workflow |
|
|
401
259
|
| `get-batches` | Seznam batchu s paginaci a filtry |
|
|
402
|
-
| `update-
|
|
260
|
+
| `update-payment-request-statuses` | Unified CRON — polluje stavy vsech non-terminalnich PR |
|
|
403
261
|
|
|
404
262
|
### Synchronizace
|
|
405
263
|
|
|
@@ -412,55 +270,64 @@ Bank service je **RPC worker** - nema vlastni verejne HTTP endpointy. Vsechny ak
|
|
|
412
270
|
|
|
413
271
|
## Event system
|
|
414
272
|
|
|
415
|
-
Sluzba emituje
|
|
273
|
+
Sluzba emituje dva typy eventu do `QUEUE_BUS_QUEUE`:
|
|
274
|
+
|
|
275
|
+
### BankPaymentEvent (bankovni vypis)
|
|
416
276
|
|
|
417
277
|
```typescript
|
|
418
278
|
type BankPaymentEvent = {
|
|
419
279
|
eventType: 'BANK_PAYMENT'
|
|
420
|
-
eventSignal: '
|
|
280
|
+
eventSignal: 'paymentFetched' | 'paymentUpdated'
|
|
421
281
|
bankPayment: Partial<PaymentSelectType>
|
|
422
|
-
metadata: {
|
|
423
|
-
correlationId: string
|
|
424
|
-
entityId: string
|
|
425
|
-
timestamp: string
|
|
426
|
-
}
|
|
282
|
+
metadata: { correlationId, entityId, timestamp }
|
|
427
283
|
}
|
|
428
284
|
```
|
|
429
285
|
|
|
430
286
|
| Signal | Kdy se emituje |
|
|
431
287
|
|--------|---------------|
|
|
432
|
-
| `
|
|
433
|
-
| `paymentCompleted` | Platba uspesne dokoncena |
|
|
434
|
-
| `paymentFailed` | Platba selhala |
|
|
288
|
+
| `paymentFetched` | Nova platba synchronizovana z banky |
|
|
435
289
|
| `paymentUpdated` | Zmena stavu platby |
|
|
436
290
|
|
|
291
|
+
### BankPaymentRequestEvent (lifecycle PR)
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
type BankPaymentRequestEvent = {
|
|
295
|
+
eventType: 'BANK_PAYMENT_REQUEST'
|
|
296
|
+
eventSignal: 'paymentRequestStatusChanged'
|
|
297
|
+
paymentRequest: PaymentRequestSelectType
|
|
298
|
+
metadata: { correlationId, entityId, timestamp }
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Emituje se v `_resolvePaymentRequestStatuses` pri kazde realne zmene statusu (`newStatus !== pr.status`).
|
|
303
|
+
|
|
437
304
|
## Databazove schema
|
|
438
305
|
|
|
439
306
|
### payment
|
|
440
307
|
|
|
441
|
-
|
|
308
|
+
Bankovni vypis — platby synchronizovane z banky (prichozi i odchozi).
|
|
442
309
|
|
|
443
|
-
Klicove sloupce: `correlationId`, `
|
|
310
|
+
Klicove sloupce: `correlationId`, `bankRefId`, `amount`, `currency`, `direction`, `paymentType`, `status` (PaymentStatus), `accountId`, `connectorKey`.
|
|
444
311
|
|
|
445
312
|
Unikatni omezeni: `(connectorKey, bankRefId)`.
|
|
446
313
|
|
|
447
314
|
### payment_request
|
|
448
315
|
|
|
449
|
-
|
|
316
|
+
Iniciovan platby — odchozi platby s lifecycle stavem.
|
|
450
317
|
|
|
451
|
-
Klicove sloupce: `batchId`, `status
|
|
318
|
+
Klicove sloupce: `batchId`, `status` (PaymentRequestStatus), `bankRefId`, `amount`, `currency`, `paymentType`, `accountId`, `connectorKey`, `authorizationUrl`, `initiatedAt`, `processedAt`, `statusReason`.
|
|
452
319
|
|
|
453
320
|
### batch
|
|
454
321
|
|
|
455
|
-
Batch plateb
|
|
322
|
+
Batch plateb. Status se derivuje z payment requestu.
|
|
456
323
|
|
|
457
|
-
Klicove sloupce: `status
|
|
324
|
+
Klicove sloupce: `status` (BatchStatus), `batchMode` (`NATIVE`/`SINGLE`), `authorizationUrls`, `accountId`, `paymentType`, `metadata`.
|
|
458
325
|
|
|
459
326
|
### account
|
|
460
327
|
|
|
461
328
|
Bankovni ucet s konfiguraci synchronizace.
|
|
462
329
|
|
|
463
|
-
Klicove sloupce: `iban` (unikatni), `
|
|
330
|
+
Klicove sloupce: `iban` (unikatni), `connectorKey`, `currency`, `batchSizeLimit`, `syncIntervalS`, `lastSyncAt`, `status` (`AUTHORIZED`/`DISABLED`/`EXPIRED`).
|
|
464
331
|
|
|
465
332
|
### account_credentials
|
|
466
333
|
|
|
@@ -483,9 +350,17 @@ Format: `{CATEGORY}-B-{NUMBER}`
|
|
|
483
350
|
| `DB-B-005` | 404 | Account not found (disconnect) |
|
|
484
351
|
| `DB-B-006` | 500 | Account not updated (disconnect) |
|
|
485
352
|
| `DB-B-007` | 404 | Batch not found |
|
|
353
|
+
| `DB-B-008` | 404 | Payment request not found |
|
|
486
354
|
| `VALID-B-001` | 400 | Invalid connector key |
|
|
487
355
|
| `VALID-B-002` | 400 | One-time token expired |
|
|
488
356
|
| `VALID-B-003` | 422 | Unsupported account |
|
|
489
|
-
| `VALID-B-004` | 422 | No account found for
|
|
490
|
-
| `VALID-B-005` | 400 | Unsupported payment type
|
|
357
|
+
| `VALID-B-004` | 422 | No account found for IBAN + currency |
|
|
358
|
+
| `VALID-B-005` | 400 | Unsupported payment type |
|
|
359
|
+
| `VALID-B-006` | 422 | Connector does not support payment type |
|
|
360
|
+
| `VALID-B-007` | 422 | Account not authorized |
|
|
361
|
+
| `VALID-B-008` | 422 | Payment type / currency mismatch |
|
|
362
|
+
| `VALID-B-009` | 422 | SEPA payments require creditor IBAN |
|
|
363
|
+
| `VALID-B-011` | 422 | Batch: debtor IBAN/currency mismatch |
|
|
364
|
+
| `VALID-B-012` | 422 | Batch: payment type mismatch |
|
|
365
|
+
| `VALID-B-013` | 422 | Batch: size limit exceeded |
|
|
491
366
|
| `SYS-B-001` | 501 | Not implemented |
|
package/dist/database/schema.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const paymentRequest_schema = require('../shared/bank.
|
|
3
|
+
const paymentRequest_schema = require('../shared/bank.BBXoZ5QU.cjs');
|
|
4
4
|
require('@develit-io/backend-sdk');
|
|
5
5
|
require('drizzle-orm/relations');
|
|
6
6
|
require('drizzle-orm/sqlite-core');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { aw as account, ax as accountCredentials, ay as batch, az as ott, aA as payment, aB as paymentRelations, aC as paymentRequest, aD as paymentRequestRelations } from '../shared/bank.Cj2Goq7s.cjs';
|
|
2
2
|
import 'drizzle-orm/sqlite-core';
|
|
3
3
|
import 'drizzle-orm';
|
|
4
4
|
import '@develit-io/backend-sdk';
|
|
5
5
|
import '@develit-io/general-codes';
|
|
6
|
-
import 'drizzle-zod';
|
|
7
6
|
import 'zod';
|
|
7
|
+
import 'drizzle-zod';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { aw as account, ax as accountCredentials, ay as batch, az as ott, aA as payment, aB as paymentRelations, aC as paymentRequest, aD as paymentRequestRelations } from '../shared/bank.Cj2Goq7s.mjs';
|
|
2
2
|
import 'drizzle-orm/sqlite-core';
|
|
3
3
|
import 'drizzle-orm';
|
|
4
4
|
import '@develit-io/backend-sdk';
|
|
5
5
|
import '@develit-io/general-codes';
|
|
6
|
-
import 'drizzle-zod';
|
|
7
6
|
import 'zod';
|
|
7
|
+
import 'drizzle-zod';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { aw as account, ax as accountCredentials, ay as batch, az as ott, aA as payment, aB as paymentRelations, aC as paymentRequest, aD as paymentRequestRelations } from '../shared/bank.Cj2Goq7s.js';
|
|
2
2
|
import 'drizzle-orm/sqlite-core';
|
|
3
3
|
import 'drizzle-orm';
|
|
4
4
|
import '@develit-io/backend-sdk';
|
|
5
5
|
import '@develit-io/general-codes';
|
|
6
|
-
import 'drizzle-zod';
|
|
7
6
|
import 'zod';
|
|
7
|
+
import 'drizzle-zod';
|
package/dist/database/schema.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { q as account, r as accountCredentials, s as batch, t as ott, u as payment, v as paymentRelations, w as paymentRequest, x as paymentRequestRelations } from '../shared/bank.CXBeULUL.mjs';
|
|
2
2
|
import '@develit-io/backend-sdk';
|
|
3
3
|
import 'drizzle-orm/relations';
|
|
4
4
|
import 'drizzle-orm/sqlite-core';
|