epics 2.3.0 → 2.5.0

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.semaphore/semaphore.yml +3 -12
  3. data/CHANGELOG.md +13 -0
  4. data/epics.gemspec +5 -4
  5. data/lib/epics/azv.rb +9 -26
  6. data/lib/epics/b2b.rb +11 -3
  7. data/lib/epics/c2s.rb +11 -7
  8. data/lib/epics/c52.rb +12 -37
  9. data/lib/epics/c53.rb +12 -37
  10. data/lib/epics/c54.rb +12 -37
  11. data/lib/epics/c5n.rb +17 -0
  12. data/lib/epics/ccs.rb +11 -7
  13. data/lib/epics/cct.rb +9 -34
  14. data/lib/epics/cd1.rb +9 -26
  15. data/lib/epics/cdb.rb +9 -34
  16. data/lib/epics/cdd.rb +9 -34
  17. data/lib/epics/cds.rb +11 -7
  18. data/lib/epics/cdz.rb +12 -41
  19. data/lib/epics/client.rb +44 -19
  20. data/lib/epics/crz.rb +12 -41
  21. data/lib/epics/generic_request.rb +8 -3
  22. data/lib/epics/generic_upload_request.rb +2 -2
  23. data/lib/epics/haa.rb +8 -25
  24. data/lib/epics/hac.rb +12 -41
  25. data/lib/epics/header_request.rb +60 -0
  26. data/lib/epics/hia.rb +6 -16
  27. data/lib/epics/hkd.rb +8 -25
  28. data/lib/epics/hpb.rb +8 -18
  29. data/lib/epics/hpd.rb +8 -25
  30. data/lib/epics/htd.rb +8 -25
  31. data/lib/epics/ini.rb +6 -16
  32. data/lib/epics/letter_renderer.rb +22 -0
  33. data/lib/epics/ptk.rb +12 -41
  34. data/lib/epics/sta.rb +12 -41
  35. data/lib/epics/version.rb +1 -1
  36. data/lib/epics/vmk.rb +12 -41
  37. data/lib/epics/wss.rb +13 -0
  38. data/lib/epics/xct.rb +9 -26
  39. data/lib/epics/xds.rb +11 -3
  40. data/lib/epics/xe2.rb +13 -0
  41. data/lib/epics/xe3.rb +13 -0
  42. data/lib/epics/z52.rb +12 -37
  43. data/lib/epics/z53.rb +12 -37
  44. data/lib/epics/z54.rb +12 -37
  45. data/lib/epics.rb +9 -0
  46. data/lib/letter/ini.erb +260 -150
  47. data/lib/letter/locales/de.yml +19 -0
  48. data/lib/letter/locales/en.yml +19 -0
  49. data/lib/letter/locales/fr.yml +19 -0
  50. data/spec/fixtures/xml/swiss_credit_transfer.xml +69 -0
  51. data/spec/fixtures/xml/swiss_direct_debit.xml +104 -0
  52. data/spec/hpb_spec.rb +4 -4
  53. data/spec/orders/c52_spec.rb +1 -1
  54. data/spec/orders/c53_spec.rb +1 -1
  55. data/spec/orders/c54_spec.rb +1 -1
  56. data/spec/orders/c5n_spec.rb +9 -0
  57. data/spec/orders/cdz_spec.rb +1 -1
  58. data/spec/orders/crz_spec.rb +1 -1
  59. data/spec/orders/hac_spec.rb +1 -1
  60. data/spec/orders/ptk_spec.rb +1 -1
  61. data/spec/orders/sta_spec.rb +1 -1
  62. data/spec/orders/vmk_spec.rb +1 -1
  63. data/spec/orders/wss_spec.rb +9 -0
  64. data/spec/orders/xe2_spec.rb +17 -0
  65. data/spec/orders/xe3_spec.rb +17 -0
  66. data/spec/orders/z52_spec.rb +1 -1
  67. data/spec/orders/z53_spec.rb +1 -1
  68. data/spec/orders/z54_spec.rb +1 -1
  69. metadata +45 -10
data/lib/letter/ini.erb CHANGED
@@ -4,62 +4,117 @@
4
4
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
5
5
  <meta charset="UTF-8" />
6
6
  <title>EBICS ini</title>
7
+ <style>
8
+ code {
9
+ font-size: 0.6rem;
10
+ overflow-wrap: break-word;
11
+ }
12
+ .code {
13
+ border-style: solid;
14
+ border-width: 1px;
15
+ padding: 8px;
16
+ background-color: azure;
17
+ }
18
+ .strong {
19
+ font-weight: bold;
20
+ }
21
+ h2 {
22
+ text-align: center;
23
+ }
24
+ td {
25
+ min-width: 150px;
26
+ }
27
+ table {
28
+ display: flex;
29
+ justify-content: center;
30
+ }
31
+ .column {
32
+ height: 100px;
33
+ }
34
+ </style>
7
35
  </head>
8
36
  <body>
9
37
  <div>
10
- <h2>EBICS-Initialisierungsbrief (INI)</h2>
38
+ <h2><%= t('initialization_letter.a') %></h2>
11
39
  <table>
12
40
  <tr>
13
41
  <td>
14
- Datum
15
- </td>
16
- <td>
17
- <%= Date.today.strftime("%d.%m.%Y") %>
18
- </td>
19
- </tr>
20
- <tr>
21
- <td>
22
- Uhrzeit
23
- </td>
24
- <td>
25
- <%= Time.now.strftime("%H:%M:%S") %>
26
- </td>
27
- </tr>
28
- <tr>
29
- <td>
30
- Empfänger
31
- </td>
32
- <td>
33
- <%= bankname %>
34
- </td>
35
- </tr>
36
- <tr>
37
- <td>
38
- User-ID
39
- </td>
40
- <td>
41
- <%= user_id %>
42
- </td>
43
- </tr>
44
- <tr>
45
- <td>
46
- Kunden-ID
47
- </td>
48
- <td>
49
- <%= partner_id %>
42
+ <div class="column">
43
+ <table>
44
+ <tr>
45
+ <td class="strong">
46
+ <%= t('date') %> :
47
+ </td>
48
+ <td>
49
+ <%= Date.today.strftime('%d.%m.%Y') %>
50
+ </td>
51
+ </tr>
52
+ <tr>
53
+ <td class="strong">
54
+ <%= t('time') %> :
55
+ </td>
56
+ <td>
57
+ <%= Time.now.strftime('%H:%M:%S') %>
58
+ </td>
59
+ </tr>
60
+ <tr>
61
+ <td class="strong">
62
+ <%= t('recipient') %> :
63
+ </td>
64
+ <td>
65
+ <%= bankname %>
66
+ </td>
67
+ </tr>
68
+ </table>
69
+ </div>
70
+ </td>
71
+ <td>
72
+ <div class="column">
73
+ <table>
74
+ <tr>
75
+ <td class="strong">
76
+ Host-ID :
77
+ </td>
78
+ <td>
79
+ <%= host_id %>
80
+ </td>
81
+ </tr>
82
+ <tr>
83
+ <td class="strong">
84
+ User-ID :
85
+ </td>
86
+ <td>
87
+ <%= user_id %>
88
+ </td>
89
+ </tr>
90
+ <tr>
91
+ <td class="strong">
92
+ Partner-ID :
93
+ </td>
94
+ <td>
95
+ <%= partner_id %>
96
+ </td>
97
+ </tr>
98
+ <tr>
99
+ <td class="strong">
100
+ <%= t('version') %> :
101
+ </td>
102
+ <td>
103
+ A006
104
+ </td>
105
+ </tr>
106
+ </table>
107
+ </div>
50
108
  </td>
51
109
  </tr>
52
110
  </table>
53
- <p>Öffentlicher Schlüssel für die elektronische Unterschrift (A006)</p>
54
- <p>Exponent (<%= a.key.e.num_bytes * 8 %> Bit):</p>
55
- <p><code><%= a.e %></code></p>
56
- <p>Modulus (<%= a.key.n.num_bytes * 8 %> Bit):</p>
57
- <p><code><%= a.n.scan(/.{2}/).join(" ") %></code></p>
58
- <p>Hash (SHA-256):</p>
59
- <p>
60
- <code><%= Base64.decode64(a.public_digest).unpack("H*").join.upcase.scan(/.{2}/).join(" ") %></code>
61
- </p>
62
- <p>Ich bestätige hiermit den obigen öffentlichen Schlüssel für meine elektronische Unterschrift.</p>
111
+ <p><%= t('exponent') %> (<%= t('bit', bit: a.key.e.num_bytes * 8) %>) :</p>
112
+ <p class="code"><code><%= a.e %></code></p>
113
+ <p><%= t('modulus') %> (<%= t('bit', bit: a.key.n.num_bytes * 8) %>) :</p>
114
+ <p class="code"><code><%= a.n.scan(/.{2}/).join(' ') %></code></p>
115
+ <p><%= t('hash') %> (SHA-256) :</p>
116
+ <p class="code"><code><%= Base64.decode64(a.public_digest).unpack('H*').join.upcase.scan(/.{2}/).join(' ') %></code></p>
117
+ <p><%= t('confirmation') %></p>
63
118
  <br/>
64
119
  <br/>
65
120
  <br/>
@@ -78,126 +133,181 @@
78
133
  </tr>
79
134
  <tr>
80
135
  <td>
81
- Ort/Datum
136
+ <%= t('issued_in') %>
82
137
  </td>
83
138
  <td>
84
- Name/Firma
139
+ <%= t('name') %>
85
140
  </td>
86
141
  <td>
87
- Unterschrift
142
+ <%= t('signature') %>
88
143
  </td>
89
144
  </tr>
90
145
  </table>
91
146
  </div>
92
147
  <div style="page-break-after:always"></div>
93
- <h2>EBICS-Initialisierungsbrief (HIA) - Seite 1/2</h2>
94
- <table>
95
- <tr>
96
- <td>
97
- Datum
98
- </td>
99
- <td>
100
- <%= Date.today.strftime("%d.%m.%Y") %>
101
- </td>
102
- </tr>
103
- <tr>
104
- <td>
105
- Uhrzeit
106
- </td>
107
- <td>
108
- <%= Time.now.strftime("%H:%M:%S") %>
109
- </td>
110
- </tr>
111
- <tr>
112
- <td>
113
- Empfänger
114
- </td>
115
- <td>
116
- <%= bankname %>
117
- </td>
118
- </tr>
119
- <tr>
120
- <td>
121
- User-ID
122
- </td>
123
- <td>
124
- <%= user_id %>
125
- </td>
126
- </tr>
127
- <tr>
128
- <td>
129
- Kunden-ID
130
- </td>
131
- <td>
132
- <%= partner_id %>
133
- </td>
134
- </tr>
135
- </table>
136
148
  <div>
137
- <p>Öffentlicher Authentifikationsschlüssel (X002)</p>
138
- <p>Exponent (<%= x.key.e.num_bytes * 8 %> Bit):</p>
139
- <p><code><%= x.e %></code></p>
140
- <p>Modulus (<%= x.key.n.num_bytes * 8 %> Bit):</p>
141
- <p><code><%= x.n.scan(/.{2}/).join(" ") %></code></p>
142
- <p>Hash (SHA-256):</p>
143
- <p>
144
- <code><%= Base64.decode64(x.public_digest).unpack("H*").join.upcase.scan(/.{2}/).join(" ") %></code>
145
- </p>
146
- <p> Fortsetzung auf Seite 2 ...</p>
147
- <div style="page-break-after:always"></div>
148
- <h2>EBICS-Initialisierungsbrief (HIA) - Seite 2/2</h2>
149
+ <h2><%= t('initialization_letter.x') %></h2>
149
150
  <table>
150
151
  <tr>
151
152
  <td>
152
- Datum
153
- </td>
154
- <td>
155
- <%= Date.today.strftime("%d.%m.%Y") %>
156
- </td>
157
- </tr>
158
- <tr>
159
- <td>
160
- Uhrzeit
161
- </td>
162
- <td>
163
- <%= Time.now.strftime("%H:%M:%S") %>
164
- </td>
165
- </tr>
166
- <tr>
167
- <td>
168
- Empfänger
169
- </td>
170
- <td>
171
- <%= bankname %>
172
- </td>
173
- </tr>
174
- <tr>
175
- <td>
176
- User-ID
177
- </td>
178
- <td>
179
- <%= user_id %>
153
+ <div class="column">
154
+ <table>
155
+ <tr>
156
+ <td class="strong">
157
+ <%= t('date') %> :
158
+ </td>
159
+ <td>
160
+ <%= Date.today.strftime('%d.%m.%Y') %>
161
+ </td>
162
+ </tr>
163
+ <tr>
164
+ <td class="strong">
165
+ <%= t('time') %> :
166
+ </td>
167
+ <td>
168
+ <%= Time.now.strftime('%H:%M:%S') %>
169
+ </td>
170
+ </tr>
171
+ <tr>
172
+ <td class="strong">
173
+ <%= t('recipient') %> :
174
+ </td>
175
+ <td>
176
+ <%= bankname %>
177
+ </td>
178
+ </tr>
179
+ </table>
180
+ </div>
181
+ </td>
182
+ <td>
183
+ <div class="column">
184
+ <table>
185
+ <tr>
186
+ <td class="strong">
187
+ Host-ID :
188
+ </td>
189
+ <td>
190
+ <%= host_id %>
191
+ </td>
192
+ </tr>
193
+ <tr>
194
+ <td class="strong">
195
+ User-ID :
196
+ </td>
197
+ <td>
198
+ <%= user_id %>
199
+ </td>
200
+ </tr>
201
+ <tr>
202
+ <td class="strong">
203
+ Partner-ID :
204
+ </td>
205
+ <td>
206
+ <%= partner_id %>
207
+ </td>
208
+ </tr>
209
+ <tr>
210
+ <td class="strong">
211
+ <%= t('version') %> :
212
+ </td>
213
+ <td>
214
+ X002
215
+ </td>
216
+ </tr>
217
+ </table>
218
+ </div>
180
219
  </td>
181
220
  </tr>
221
+ </table>
222
+ <p><%= t('exponent') %> (<%= t('bit', bit: x.key.e.num_bytes * 8) %>) :</p>
223
+ <p class="code"><code><%= x.e %></code></p>
224
+ <p><%= t('modulus') %> (<%= t('bit', bit: x.key.n.num_bytes * 8) %>) :</p>
225
+ <p class="code"><code><%= x.n.scan(/.{2}/).join(' ') %></code></p>
226
+ <p><%= t('hash') %> (SHA-256) :</p>
227
+ <p class="code"><code><%= Base64.decode64(x.public_digest).unpack('H*').join.upcase.scan(/.{2}/).join(' ') %></code></p>
228
+ </div>
229
+ <div style="page-break-after:always"></div>
230
+ <div>
231
+ <h2><%= t('initialization_letter.e') %></h2>
232
+ <table>
182
233
  <tr>
183
234
  <td>
184
- Kunden-ID
185
- </td>
186
- <td>
187
- <%= partner_id %>
235
+ <div class="column">
236
+ <table>
237
+ <tr>
238
+ <td class="strong">
239
+ <%= t('date') %> :
240
+ </td>
241
+ <td>
242
+ <%= Date.today.strftime('%d.%m.%Y') %>
243
+ </td>
244
+ </tr>
245
+ <tr>
246
+ <td class="strong">
247
+ <%= t('time') %> :
248
+ </td>
249
+ <td>
250
+ <%= Time.now.strftime('%H:%M:%S') %>
251
+ </td>
252
+ </tr>
253
+ <tr>
254
+ <td class="strong">
255
+ <%= t('recipient') %> :
256
+ </td>
257
+ <td>
258
+ <%= bankname %>
259
+ </td>
260
+ </tr>
261
+ </table>
262
+ </div>
263
+ </td>
264
+ <td>
265
+ <div class="column">
266
+ <table>
267
+ <tr>
268
+ <td class="strong">
269
+ Host-ID :
270
+ </td>
271
+ <td>
272
+ <%= host_id %>
273
+ </td>
274
+ </tr>
275
+ <tr>
276
+ <td class="strong">
277
+ User-ID :
278
+ </td>
279
+ <td>
280
+ <%= user_id %>
281
+ </td>
282
+ </tr>
283
+ <tr>
284
+ <td class="strong">
285
+ Partner-ID :
286
+ </td>
287
+ <td>
288
+ <%= partner_id %>
289
+ </td>
290
+ </tr>
291
+ <tr>
292
+ <td class="strong">
293
+ <%= t('version') %> :
294
+ </td>
295
+ <td>
296
+ E002
297
+ </td>
298
+ </tr>
299
+ </table>
300
+ </div>
188
301
  </td>
189
302
  </tr>
190
303
  </table>
191
- </div>
192
- <div>
193
- <p>Öffentlicher Verschlüsselungsschlüssel (E002)</p>
194
- <p>Exponent (<%= e.key.e.num_bytes * 8 %> Bit):</p>
195
- <p><code><%= e.e %></code></p>
196
- <p>Modulus (<%= e.key.n.num_bytes * 8 %> Bit):</p>
197
- <p><code><%= e.n.scan(/.{2}/).join(" ") %></code></p>
198
- <p>Hash (SHA-256):</p>
199
- <p><code><%= Base64.decode64(e.public_digest).unpack("H*").join.upcase.scan(/.{2}/).join(" ") %></code></p>
200
- <p>Ich bestätige hiermit die obigen öffentlichen Schlüssel für meinen EBICS-Zugang.</p>
304
+ <p><%= t('exponent') %> (<%= t('bit', bit: e.key.e.num_bytes * 8) %>) :</p>
305
+ <p class="code"><code><%= e.e %></code></p>
306
+ <p><%= t('modulus') %> (<%= t('bit', bit: e.key.n.num_bytes * 8) %>) :</p>
307
+ <p class="code"><code><%= e.n.scan(/.{2}/).join(' ') %></code></p>
308
+ <p><%= t('hash') %> (SHA-256) :</p>
309
+ <p class="code"><code><%= Base64.decode64(e.public_digest).unpack('H*').join.upcase.scan(/.{2}/).join(' ') %></code></p>
310
+ <p><%= t('confirmation') %></p>
201
311
  <br/>
202
312
  <br/>
203
313
  <br/>
@@ -216,13 +326,13 @@
216
326
  </tr>
217
327
  <tr>
218
328
  <td>
219
- Ort/Datum
329
+ <%= t('issued_in') %>
220
330
  </td>
221
331
  <td>
222
- Name/Firma
332
+ <%= t('name') %>
223
333
  </td>
224
334
  <td>
225
- Unterschrift
335
+ <%= t('signature') %>
226
336
  </td>
227
337
  </tr>
228
338
  </table>
@@ -0,0 +1,19 @@
1
+ de:
2
+ epics:
3
+ letter:
4
+ date: Datum
5
+ time: Uhrzeit
6
+ recipient: Empfänger
7
+ signature: Unterschrift
8
+ version: Version
9
+ exponent: Exponent
10
+ modulus: Modulus
11
+ hash: Hash
12
+ bit: '%{bit} Bit'
13
+ issued_in: Ort/Datum
14
+ name: Name/Firma
15
+ confirmation: Ich bestätige hiermit den obigen öffentlichen Schlüssel für meine elektronische Unterschrift.
16
+ initialization_letter:
17
+ a: Initialisierungsbrief für SIGNATUR-Zertifikat (INI)
18
+ x: Initialisierungsbrief für AUTHENTIFIZIERUNGS-Zertifikat (HIA)
19
+ e: Initialisierungsbrief für VERSCHLÜSSELUNGS-Zertifikat (HIA)
@@ -0,0 +1,19 @@
1
+ en:
2
+ epics:
3
+ letter:
4
+ date: Date
5
+ time: Time
6
+ recipient: Recipient
7
+ signature: Signature
8
+ version: Version
9
+ exponent: Exponent
10
+ modulus: Modulus
11
+ hash: Hash
12
+ bit: '%{bit} Bit'
13
+ issued_in: Location/Date
14
+ name: Name/Company
15
+ confirmation: I hearby confirm the public key above for my electronic signature.
16
+ initialization_letter:
17
+ a: Initialization letter for SIGNATURE certificate (INI)
18
+ x: Initialization letter for AUTHENTICATION certificate (HIA)
19
+ e: Initialization letter for ENCRYPTION certificate (HIA)
@@ -0,0 +1,19 @@
1
+ fr:
2
+ epics:
3
+ letter:
4
+ date: Date
5
+ time: Heure
6
+ recipient: Destinataire
7
+ signature: Signature
8
+ version: Version
9
+ exponent: Exponent
10
+ modulus: Modulus
11
+ hash: Hash
12
+ bit: '%{bit} Bit'
13
+ issued_in: Lieu/Date
14
+ name: Nom/Société
15
+ confirmation: Je confirme par la présente la clé publique ci-dessus pour ma signature électronique.
16
+ initialization_letter:
17
+ a: Lettre d'initialization du certificat de SIGNATURE (INI)
18
+ x: Lettre d'initialization du certificat d'AUTHENTIFICATION (HIA)
19
+ e: Lettre d'initialization du certificat de CHIFFREMENT (HIA)
@@ -0,0 +1,69 @@
1
+ <?xml version="1.0"?>
2
+ <Document xmlns="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd pain.001.001.03.ch.02.xsd">
3
+ <CstmrCdtTrfInitn>
4
+ <GrpHdr>
5
+ <MsgId>SPS-KING/7c332aeb9ec40d29232691</MsgId>
6
+ <CreDtTm>2024-06-20T17:27:56+02:00</CreDtTm>
7
+ <NbOfTxs>1</NbOfTxs>
8
+ <CtrlSum>102.50</CtrlSum>
9
+ <InitgPty>
10
+ <Nm>Schuldner GmbH</Nm>
11
+ </InitgPty>
12
+ </GrpHdr>
13
+ <PmtInf>
14
+ <PmtInfId>SPS-KING/7c332aeb9ec40d29232691/1</PmtInfId>
15
+ <PmtMtd>TRF</PmtMtd>
16
+ <BtchBookg>false</BtchBookg>
17
+ <NbOfTxs>1</NbOfTxs>
18
+ <CtrlSum>102.50</CtrlSum>
19
+ <PmtTpInf>
20
+ <SvcLvl>
21
+ <Cd>SEPA</Cd>
22
+ </SvcLvl>
23
+ </PmtTpInf>
24
+ <ReqdExctnDt>1999-01-01</ReqdExctnDt>
25
+ <Dbtr>
26
+ <Nm>Schuldner GmbH</Nm>
27
+ </Dbtr>
28
+ <DbtrAcct>
29
+ <Id>
30
+ <IBAN>CH5481230000001998736</IBAN>
31
+ </Id>
32
+ </DbtrAcct>
33
+ <DbtrAgt>
34
+ <FinInstnId>
35
+ <BIC>RAIFCH22</BIC>
36
+ </FinInstnId>
37
+ </DbtrAgt>
38
+ <ChrgBr>SLEV</ChrgBr>
39
+ <CdtTrfTxInf>
40
+ <PmtId>
41
+ <EndToEndId>NOTPROVIDED</EndToEndId>
42
+ </PmtId>
43
+ <Amt>
44
+ <InstdAmt Ccy="CHR">102.50</InstdAmt>
45
+ </Amt>
46
+ <CdtrAgt>
47
+ <FinInstnId>
48
+ <BIC>CRESCHZZ80A</BIC>
49
+ </FinInstnId>
50
+ </CdtrAgt>
51
+ <Cdtr>
52
+ <Nm>Contoso AG</Nm>
53
+ <PstlAdr>
54
+ <StrtNm>Mustergasse</StrtNm>
55
+ <BldgNb>123a</BldgNb>
56
+ <PstCd>1234</PstCd>
57
+ <TwnNm>Musterstadt</TwnNm>
58
+ <Ctry>CH</Ctry>
59
+ </PstlAdr>
60
+ </Cdtr>
61
+ <CdtrAcct>
62
+ <Id>
63
+ <IBAN>CH9300762011623852957</IBAN>
64
+ </Id>
65
+ </CdtrAcct>
66
+ </CdtTrfTxInf>
67
+ </PmtInf>
68
+ </CstmrCdtTrfInitn>
69
+ </Document>