@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.
Files changed (43) hide show
  1. package/README.md +150 -275
  2. package/dist/database/schema.cjs +1 -1
  3. package/dist/database/schema.d.cts +2 -2
  4. package/dist/database/schema.d.mts +2 -2
  5. package/dist/database/schema.d.ts +2 -2
  6. package/dist/database/schema.mjs +1 -1
  7. package/dist/export/worker.cjs +425 -557
  8. package/dist/export/worker.d.cts +848 -84
  9. package/dist/export/worker.d.mts +848 -84
  10. package/dist/export/worker.d.ts +848 -84
  11. package/dist/export/worker.mjs +425 -557
  12. package/dist/export/workflows.cjs +16 -16
  13. package/dist/export/workflows.mjs +16 -16
  14. package/dist/export/wrangler.cjs +0 -12
  15. package/dist/export/wrangler.d.cts +1 -8
  16. package/dist/export/wrangler.d.mts +1 -8
  17. package/dist/export/wrangler.d.ts +1 -8
  18. package/dist/export/wrangler.mjs +0 -12
  19. package/dist/shared/{bank.JVlyPAAb.cjs → bank.BBXoZ5QU.cjs} +26 -13
  20. package/dist/shared/{bank.CHQ3VSEh.d.ts → bank.BCop1cDT.d.mts} +4 -15
  21. package/dist/shared/{bank.Bg3Pdwm4.cjs → bank.BsIiXsFH.cjs} +5 -13
  22. package/dist/shared/{bank.BoZtXQpG.mjs → bank.CR0UlyRi.mjs} +1 -1
  23. package/dist/shared/{bank.CtnsGHM8.cjs → bank.CUvVxlHy.cjs} +126 -152
  24. package/dist/shared/{bank.DJnDSYqE.cjs → bank.CVi6R7fr.cjs} +1 -1
  25. package/dist/shared/{bank.C6jjS1Pl.mjs → bank.CXBeULUL.mjs} +25 -14
  26. package/dist/shared/{bank.DT6bg8k5.cjs → bank.Cev1E9sk.cjs} +2 -2
  27. package/dist/shared/{bank.pgyk4j94.d.cts → bank.Cj2Goq7s.d.cts} +104 -176
  28. package/dist/shared/{bank.pgyk4j94.d.mts → bank.Cj2Goq7s.d.mts} +104 -176
  29. package/dist/shared/{bank.pgyk4j94.d.ts → bank.Cj2Goq7s.d.ts} +104 -176
  30. package/dist/shared/{bank.vPWD7Ce4.d.cts → bank.CjTfEd1Q.d.cts} +4 -15
  31. package/dist/shared/{bank.BtszLapg.mjs → bank.D-O_gmmZ.mjs} +127 -152
  32. package/dist/shared/{bank.BP_3WMIF.d.cts → bank.DMjtitKo.d.cts} +0 -1
  33. package/dist/shared/{bank.BP_3WMIF.d.mts → bank.DMjtitKo.d.mts} +0 -1
  34. package/dist/shared/{bank.BP_3WMIF.d.ts → bank.DMjtitKo.d.ts} +0 -1
  35. package/dist/shared/{bank.CwuH4spB.d.mts → bank.OlDt7dpb.d.ts} +4 -15
  36. package/dist/shared/{bank.CbAwwIhZ.mjs → bank.vz1uqEYa.mjs} +5 -11
  37. package/dist/shared/{bank.B5bZRvgq.mjs → bank.xB9eTN77.mjs} +2 -2
  38. package/dist/types.cjs +6 -6
  39. package/dist/types.d.cts +26 -45
  40. package/dist/types.d.mts +26 -45
  41. package/dist/types.d.ts +26 -45
  42. package/dist/types.mjs +3 -3
  43. 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 platby](#zivotni-cyklus-platby)
9
- - [Batch processing](#batch-processing)
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, process batch)
23
+ - **Workflows** - Cloudflare Durable Objects pro asynchronni zpracovani (sync uctu)
22
24
  - **Konektory** - Abstrakce nad API jednotlivych bank (Erste, Fio, Moneta, ...)
23
- - **Queue handlery** - Zpracovani front pro batchovani plateb a CRON ulohy
25
+ - **CRON** - Pravidelny polling stavu payment requestu
24
26
 
25
- ## Zivotni cyklus platby
27
+ ## Zivotni cyklus payment requestu
26
28
 
27
- Platba prochazi 6 fazemi s explicitnimi typy:
29
+ Payment request (iniciovan platba) prochazi nasledujicimi stavy:
28
30
 
29
31
  ```
30
- SendPaymentInput (API vstup)
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
- ### Stavy platby
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
- | `CREATED` | Platba vytvorena, ceka na zpracovani |
80
- | `PREPARED` | Odeslana do banky, ceka na autorizaci |
81
- | `SIGNED` | Autorizovana uzivatelem, banka zpracovava |
82
- | `PENDING` | Banka zpracovava |
83
- | `COMPLETED` | Uspesne dokoncena |
84
- | `FAILED` | Selhala |
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
- ### Smer platby
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
- 1. Volani `send-payment` vlozi platbu do fronty `PAYMENTS_READY_TO_BATCH_QUEUE`
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
- OPEN │
121
- │ Batch prijima platby, neni plny │
122
- └──────────────┬──────────────────────┘
123
- spusteni process-batch
124
-
125
- ┌─────────────────────────────────────┐
126
- PROCESSING │
127
- │ Zamceny, probiha komunikace s bankou│
128
- (checksum validace proti zmenam)
129
- └──────────────┬──────────────────────┘
130
- connector.initiate*Batch()
131
-
132
- ┌─────────────────────────────────────┐
133
- READY_TO_SIGN │
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
- ### ProcessBatch workflow
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
- Planovana uloha (`CRON_BATCH_STATUSES`) pravidelne vola `update-batch-statuses`, ktera:
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
- ## Synchronni odeslani platby (sendPaymentSync)
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
- SendPaymentSyncInput (API vstup)
102
+ SendBatchInput (API vstup — pole plateb)
181
103
 
182
104
 
183
- Resolve uctu (debtorIban + currency)
105
+ Validace (stejny debtor, typ, mena, velikost)
184
106
 
185
107
 
186
- Inicializace konektoru
108
+ db.batch() — Vytvoreni batch (PROCESSING) + payment_requests (OPENED)
187
109
 
188
110
 
189
- connector.initiate*Payment() (DOMESTIC/SEPA/SWIFT)
111
+ connector.initiate*Batch() — automaticky fallback na single payments
190
112
 
191
-
192
- { authorizationUrl } vraceno volajicimu
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
- ### Klicove rozdily oproti batch flow
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
- | | `send-payment` (batch) | `send-payment-sync` (sync) |
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
- Platba se do systemu (DB) dostane az nasledne pres `syncAccountPayments` workflow, ktery periodicky stahuje transakce z banky.
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
- Vloz nove platby do DB (deduplikace pres bankRefId)
161
+ Filtruj dokoncene platby, vloz nove do DB (deduplikace pres bankRefId)
221
162
  │ │
222
163
  │ ▼
223
- │ Emituj BANK_PAYMENT eventy
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 | Pres Finbricks |
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
- - `getBatchStatus()` - Zjistit stav batche
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 - rozlozi batch na jednotlive platby a odesle je sekvencne pres prislusnou single payment metodu:
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
- Stejny pattern plati pro `initiateSEPABatch()` a `initiateForeignBatch()`.
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** - nema vlastni verejne HTTP endpointy. Vsechny akce jsou dostupne pouze pres Cloudflare Worker binding. Verejne endpointy vystavuje az **gateway**, ktera tento worker binduje a zpristupnuje prislusne akce.
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 (ulozi kredencialy, spusti sync) |
380
- | `disconnect-account` | Odpoji ucet (smaze kredencialy, platby, zastavi workflow) |
381
- | `get-bank-accounts` | Seznam uctu (volitelne vcetne workflow stavu a batch statistik) |
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 (vlozi do fronty pro batchovani) |
389
- | `send-payment-sync` | Odesle platbu synchronne primo do banky, vrati `authorizationUrl` (bez queue/batch/DB) |
390
- | `get-payments` | Seznam plateb s paginaci a filtry (ucet, castka, mena, smer, datum, stav) |
391
- | `handle-authorization-callback` | Zpracuje callback po autorizaci platby/batche (aktualizuje singlePayment + batch status) |
392
- | `simulate-deposit` | Testovaci: vytvori prichozi platbu ve stavu COMPLETED |
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-batch-statuses` | Aktualizuje stavy batchu z banky (CRON) |
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 `BankPaymentEvent` do `QUEUE_BUS_QUEUE` pro konzumaci ostatnimi sluzbami:
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: 'paymentCreated' | 'paymentCompleted' | 'paymentFailed' | 'paymentUpdated'
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
- | `paymentCreated` | Nova platba synchronizovana z banky |
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
- Hlavni tabulka plateb s vazbou na ucet a batch.
308
+ Bankovni vypis platby synchronizovane z banky (prichozi i odchozi).
442
309
 
443
- Klicove sloupce: `correlationId`, `refId`, `bankRefId`, `amount`, `currency`, `direction`, `paymentType`, `status`, `accountId`, `connectorKey`, `vs`/`ss`/`ks`, `message`, `creditor`, `debtor`, `batchId`, `initiatedAt`, `processedAt`.
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
- Odchozi platby v prubehu zpracovani (in-flight). Kazda platba v batchi ma vlastni radek se stavem.
316
+ Iniciovan platby odchozi platby s lifecycle stavem.
450
317
 
451
- Klicove sloupce: `batchId`, `status`, `bankRefId`, `amount`, `currency`, `paymentType`, `creditorIban`, `debtorIban`, `accountId`, `connectorKey`, `authorizationUrl`, `initiatedAt`, `processedAt`, `statusReason`.
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 se stavovymi informacemi. Platby jsou v tabulce `payment_request` (vazba pres `batchId`).
322
+ Batch plateb. Status se derivuje z payment requestu.
456
323
 
457
- Klicove sloupce: `status`, `authorizationUrls`, `paymentsChecksum`, `metadata`, `sizeLimit`, `accountId`, `paymentType`.
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), `number`, `bankCode`, `connectorKey`, `currency`, `batchSizeLimit`, `syncIntervalS`, `lastSyncAt`, `status` (`AUTHORIZED` / `DISABLED` / `EXPIRED`).
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 single payment (IBAN + currency mismatch) |
490
- | `VALID-B-005` | 400 | Unsupported payment type for single payment |
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 |
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const paymentRequest_schema = require('../shared/bank.JVlyPAAb.cjs');
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 { as as account, at as accountCredentials, au as batch, av as ott, aw as payment, ax as paymentRelations, ay as paymentRequest, az as paymentRequestRelations } from '../shared/bank.pgyk4j94.cjs';
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 { as as account, at as accountCredentials, au as batch, av as ott, aw as payment, ax as paymentRelations, ay as paymentRequest, az as paymentRequestRelations } from '../shared/bank.pgyk4j94.mjs';
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 { as as account, at as accountCredentials, au as batch, av as ott, aw as payment, ax as paymentRelations, ay as paymentRequest, az as paymentRequestRelations } from '../shared/bank.pgyk4j94.js';
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';
@@ -1,4 +1,4 @@
1
- export { n as account, p as accountCredentials, q as batch, r as ott, s as payment, t as paymentRelations, u as paymentRequest, v as paymentRequestRelations } from '../shared/bank.C6jjS1Pl.mjs';
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';