gobl 0.1.3 → 0.3.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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/data/tax/CO.json +420 -0
  3. data/data/tax/ES.json +61 -0
  4. data/lib/ext/hashme.rb +28 -0
  5. data/lib/gobl/bill/advances.rb +1 -77
  6. data/lib/gobl/bill/charge.rb +11 -65
  7. data/lib/gobl/bill/delivery.rb +5 -47
  8. data/lib/gobl/bill/discount.rb +11 -65
  9. data/lib/gobl/bill/exchange_rates.rb +1 -77
  10. data/lib/gobl/bill/invoice.rb +28 -104
  11. data/lib/gobl/bill/invoice_type.rb +3 -134
  12. data/lib/gobl/bill/line.rb +13 -65
  13. data/lib/gobl/bill/line_charge.rb +5 -47
  14. data/lib/gobl/bill/line_discount.rb +5 -47
  15. data/lib/gobl/bill/ordering.rb +2 -38
  16. data/lib/gobl/bill/outlay.rb +11 -59
  17. data/lib/gobl/bill/payment.rb +5 -47
  18. data/lib/gobl/bill/preceding.rb +12 -62
  19. data/lib/gobl/bill/scheme_keys.rb +1 -77
  20. data/lib/gobl/bill/tax.rb +4 -44
  21. data/lib/gobl/bill/totals.rb +17 -71
  22. data/lib/gobl/cal/date.rb +1 -90
  23. data/lib/gobl/cal/period.rb +5 -41
  24. data/lib/gobl/currency/code.rb +3 -134
  25. data/lib/gobl/currency/exchange_rate.rb +5 -41
  26. data/lib/gobl/document.rb +1 -58
  27. data/lib/gobl/dsig/digest.rb +5 -41
  28. data/lib/gobl/dsig/signature.rb +1 -90
  29. data/lib/gobl/enum.rb +81 -0
  30. data/lib/gobl/envelope.rb +9 -48
  31. data/lib/gobl/header.rb +10 -56
  32. data/lib/gobl/i18n/string.rb +1 -58
  33. data/lib/gobl/l10n/code.rb +1 -90
  34. data/lib/gobl/l10n/country_code.rb +3 -134
  35. data/lib/gobl/map.rb +62 -0
  36. data/lib/gobl/note/message.rb +5 -44
  37. data/lib/gobl/num/amount.rb +6 -35
  38. data/lib/gobl/object.rb +21 -0
  39. data/lib/gobl/operations.rb +3 -3
  40. data/lib/gobl/org/address.rb +18 -80
  41. data/lib/gobl/org/code.rb +1 -90
  42. data/lib/gobl/org/coordinates.rb +5 -47
  43. data/lib/gobl/org/email.rb +6 -47
  44. data/lib/gobl/org/inbox.rb +8 -50
  45. data/lib/gobl/org/item.rb +13 -65
  46. data/lib/gobl/org/item_code.rb +4 -41
  47. data/lib/gobl/org/key.rb +1 -90
  48. data/lib/gobl/org/meta.rb +1 -58
  49. data/lib/gobl/org/name.rb +12 -62
  50. data/lib/gobl/org/note.rb +6 -47
  51. data/lib/gobl/org/note_key.rb +3 -134
  52. data/lib/gobl/org/party.rb +14 -71
  53. data/lib/gobl/org/person.rb +9 -56
  54. data/lib/gobl/org/registration.rb +9 -59
  55. data/lib/gobl/org/source_key.rb +3 -134
  56. data/lib/gobl/org/tax_identity.rb +8 -53
  57. data/lib/gobl/org/telephone.rb +5 -44
  58. data/lib/gobl/org/unit.rb +1 -136
  59. data/lib/gobl/pay/advance.rb +11 -59
  60. data/lib/gobl/pay/card.rb +5 -41
  61. data/lib/gobl/pay/credit_transfer.rb +6 -50
  62. data/lib/gobl/pay/direct_debit.rb +4 -44
  63. data/lib/gobl/pay/due_date.rb +8 -50
  64. data/lib/gobl/pay/instructions.rb +11 -62
  65. data/lib/gobl/pay/method_key.rb +3 -134
  66. data/lib/gobl/pay/online.rb +4 -41
  67. data/lib/gobl/pay/term_key.rb +3 -134
  68. data/lib/gobl/pay/terms.rb +6 -47
  69. data/lib/gobl/stamp.rb +5 -41
  70. data/lib/gobl/struct.rb +15 -15
  71. data/lib/gobl/tax/category.rb +9 -50
  72. data/lib/gobl/tax/category_total.rb +11 -53
  73. data/lib/gobl/tax/combo.rb +6 -47
  74. data/lib/gobl/tax/localities.rb +1 -77
  75. data/lib/gobl/tax/locality.rb +6 -44
  76. data/lib/gobl/tax/rate.rb +8 -47
  77. data/lib/gobl/tax/rate_total.rb +9 -50
  78. data/lib/gobl/tax/rate_total_surcharge.rb +5 -41
  79. data/lib/gobl/tax/rate_value.rb +6 -47
  80. data/lib/gobl/tax/region.rb +12 -56
  81. data/lib/gobl/tax/scheme.rb +8 -50
  82. data/lib/gobl/tax/schemes.rb +1 -77
  83. data/lib/gobl/tax/set.rb +1 -77
  84. data/lib/gobl/tax/total.rb +4 -41
  85. data/lib/gobl/uuid/uuid.rb +1 -90
  86. data/lib/gobl/value.rb +58 -0
  87. data/lib/gobl/version.rb +1 -1
  88. data/lib/gobl.rb +3 -1
  89. data/lib/gobl_extensions/document_helper.rb +3 -3
  90. data/lib/gobl_extensions/envelope_helper.rb +5 -0
  91. data/lib/gobl_extensions/i18n/value_keys_helper.rb +3 -3
  92. data/lib/gobl_extensions/tax/region_helper.rb +3 -9
  93. metadata +12 -35
  94. data/lib/gobl/types.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 391b7c41048a093675706f63dea56b6af72cf2210bf8c26c2f0003d1e2104199
4
- data.tar.gz: c5e540e189fc75bdb9614ebf86b1a8acd2a7c26dededa0ec4bdab24c35d4ee3e
3
+ metadata.gz: a390a31d1775261bd8d96d822e8ed3930d72182b415fbaab018f9770f5b4dd58
4
+ data.tar.gz: dd5941c6852c584338073791df5795c3850df86767a0d5389c308101592a8bf6
5
5
  SHA512:
6
- metadata.gz: 9c53b9655f57d77a985805932fc300b2bbef8448fe9405eb225573b0dc7f63ced83bc6687304604d21db07c6ec9c0c0a7007ef132c8f8d7991804402075fba09
7
- data.tar.gz: 291df0d284de97f552d91831b43c9968dd4eea5be653c7efc883c2b1e0699b2e53048f3191501f63b6fe82fb87f40672e93baa12d627ec5b088fd54cb686c944
6
+ metadata.gz: 566063350518154791aed662b0282764e774111e6b9b2c38602a0ada0c85171d22a2e9d98a7d35248991e085fe878c03e510032143dcc3f515ad33244500aab1
7
+ data.tar.gz: 2d70dd28fe21aad06e20e84345deeee4267cbbb6e94944ea844b2ab1259e9a2e015a97e83b5ea091c9d3e7350d028216b38b54c3ea6a586274d3ffa2fa90b4e3
data/data/tax/CO.json ADDED
@@ -0,0 +1,420 @@
1
+ {
2
+ "$schema": "https://gobl.org/draft-0/tax/region",
3
+ "name": {
4
+ "en": "Colombia",
5
+ "es": "Colombia"
6
+ },
7
+ "country": "CO",
8
+ "localities": [
9
+ {
10
+ "code": "AMA",
11
+ "name": {
12
+ "es": "Amazonas"
13
+ },
14
+ "meta": {
15
+ "post": "91"
16
+ }
17
+ },
18
+ {
19
+ "code": "ANT",
20
+ "name": {
21
+ "es": "Antioquia"
22
+ },
23
+ "meta": {
24
+ "post": "05"
25
+ }
26
+ },
27
+ {
28
+ "code": "ARA",
29
+ "name": {
30
+ "es": "Arauca"
31
+ },
32
+ "meta": {
33
+ "post": "81"
34
+ }
35
+ },
36
+ {
37
+ "code": "ATL",
38
+ "name": {
39
+ "es": "Atlántico"
40
+ },
41
+ "meta": {
42
+ "post": "08"
43
+ }
44
+ },
45
+ {
46
+ "code": "DC",
47
+ "name": {
48
+ "es": "Bogotá"
49
+ },
50
+ "meta": {
51
+ "post": "11"
52
+ }
53
+ },
54
+ {
55
+ "code": "BOL",
56
+ "name": {
57
+ "es": "Bolívar"
58
+ },
59
+ "meta": {
60
+ "post": "13"
61
+ }
62
+ },
63
+ {
64
+ "code": "BOY",
65
+ "name": {
66
+ "es": "Boyacá"
67
+ },
68
+ "meta": {
69
+ "post": "15"
70
+ }
71
+ },
72
+ {
73
+ "code": "CAL",
74
+ "name": {
75
+ "es": "Caldas"
76
+ },
77
+ "meta": {
78
+ "post": "17"
79
+ }
80
+ },
81
+ {
82
+ "code": "CAQ",
83
+ "name": {
84
+ "es": "Caquetá"
85
+ },
86
+ "meta": {
87
+ "post": "18"
88
+ }
89
+ },
90
+ {
91
+ "code": "CAS",
92
+ "name": {
93
+ "es": "Casanare"
94
+ },
95
+ "meta": {
96
+ "post": "85"
97
+ }
98
+ },
99
+ {
100
+ "code": "CAU",
101
+ "name": {
102
+ "es": "Cauca"
103
+ },
104
+ "meta": {
105
+ "post": "19"
106
+ }
107
+ },
108
+ {
109
+ "code": "CES",
110
+ "name": {
111
+ "es": "Cesar"
112
+ },
113
+ "meta": {
114
+ "post": "20"
115
+ }
116
+ },
117
+ {
118
+ "code": "CHO",
119
+ "name": {
120
+ "es": "Chocó"
121
+ },
122
+ "meta": {
123
+ "post": "27"
124
+ }
125
+ },
126
+ {
127
+ "code": "COR",
128
+ "name": {
129
+ "es": "Córdoba"
130
+ },
131
+ "meta": {
132
+ "post": "23"
133
+ }
134
+ },
135
+ {
136
+ "code": "CUN",
137
+ "name": {
138
+ "es": "Cundinamarca"
139
+ },
140
+ "meta": {
141
+ "post": "25"
142
+ }
143
+ },
144
+ {
145
+ "code": "GUA",
146
+ "name": {
147
+ "es": "Guainía"
148
+ },
149
+ "meta": {
150
+ "post": "94"
151
+ }
152
+ },
153
+ {
154
+ "code": "GUV",
155
+ "name": {
156
+ "es": "Guaviare"
157
+ },
158
+ "meta": {
159
+ "post": "95"
160
+ }
161
+ },
162
+ {
163
+ "code": "HUI",
164
+ "name": {
165
+ "es": "Huila"
166
+ },
167
+ "meta": {
168
+ "post": "41"
169
+ }
170
+ },
171
+ {
172
+ "code": "LAG",
173
+ "name": {
174
+ "es": "La Guajira"
175
+ },
176
+ "meta": {
177
+ "post": "44"
178
+ }
179
+ },
180
+ {
181
+ "code": "MAG",
182
+ "name": {
183
+ "es": "Magdalena"
184
+ },
185
+ "meta": {
186
+ "post": "47"
187
+ }
188
+ },
189
+ {
190
+ "code": "MET",
191
+ "name": {
192
+ "es": "Meta"
193
+ },
194
+ "meta": {
195
+ "post": "50"
196
+ }
197
+ },
198
+ {
199
+ "code": "NAR",
200
+ "name": {
201
+ "es": "Nariño"
202
+ },
203
+ "meta": {
204
+ "post": "52"
205
+ }
206
+ },
207
+ {
208
+ "code": "NSA",
209
+ "name": {
210
+ "es": "Norte de Santander"
211
+ },
212
+ "meta": {
213
+ "post": "54"
214
+ }
215
+ },
216
+ {
217
+ "code": "PUT",
218
+ "name": {
219
+ "es": "Putumayo"
220
+ },
221
+ "meta": {
222
+ "post": "86"
223
+ }
224
+ },
225
+ {
226
+ "code": "QUI",
227
+ "name": {
228
+ "es": "Quindío"
229
+ },
230
+ "meta": {
231
+ "post": "63"
232
+ }
233
+ },
234
+ {
235
+ "code": "RIS",
236
+ "name": {
237
+ "es": "Risaralda"
238
+ },
239
+ "meta": {
240
+ "post": "66"
241
+ }
242
+ },
243
+ {
244
+ "code": "SAP",
245
+ "name": {
246
+ "es": "San Andrés y Providencia"
247
+ },
248
+ "meta": {
249
+ "post": "88"
250
+ }
251
+ },
252
+ {
253
+ "code": "SAN",
254
+ "name": {
255
+ "es": "Santander"
256
+ },
257
+ "meta": {
258
+ "post": "68"
259
+ }
260
+ },
261
+ {
262
+ "code": "SUC",
263
+ "name": {
264
+ "es": "Sucre"
265
+ },
266
+ "meta": {
267
+ "post": "70"
268
+ }
269
+ },
270
+ {
271
+ "code": "TOL",
272
+ "name": {
273
+ "es": "Tolima"
274
+ },
275
+ "meta": {
276
+ "post": "73"
277
+ }
278
+ },
279
+ {
280
+ "code": "VAC",
281
+ "name": {
282
+ "es": "Valle de Cauca"
283
+ },
284
+ "meta": {
285
+ "post": "76"
286
+ }
287
+ },
288
+ {
289
+ "code": "VAU",
290
+ "name": {
291
+ "es": "Vaupés"
292
+ },
293
+ "meta": {
294
+ "post": "97"
295
+ }
296
+ },
297
+ {
298
+ "code": "VID",
299
+ "name": {
300
+ "es": "Vichada"
301
+ },
302
+ "meta": {
303
+ "post": "99"
304
+ }
305
+ }
306
+ ],
307
+ "currency": "COP",
308
+ "categories": [
309
+ {
310
+ "code": "VAT",
311
+ "name": {
312
+ "en": "VAT",
313
+ "es": "IVA"
314
+ },
315
+ "desc": {
316
+ "en": "Value Added Tax",
317
+ "es": "Impuesto al Valor Agregado"
318
+ },
319
+ "rates": [
320
+ {
321
+ "key": "zero",
322
+ "name": {
323
+ "en": "Zero Rate",
324
+ "es": "Zero"
325
+ },
326
+ "values": [
327
+ {
328
+ "percent": "0.0%"
329
+ }
330
+ ]
331
+ },
332
+ {
333
+ "key": "standard",
334
+ "name": {
335
+ "en": "Standard Rate",
336
+ "es": "Estándar"
337
+ },
338
+ "values": [
339
+ {
340
+ "since": "2017-01-01",
341
+ "percent": "19.0%"
342
+ },
343
+ {
344
+ "since": "2006-01-01",
345
+ "percent": "16.0%"
346
+ }
347
+ ]
348
+ },
349
+ {
350
+ "key": "reduced",
351
+ "name": {
352
+ "en": "Reduced Rate",
353
+ "es": "Reducido"
354
+ },
355
+ "values": [
356
+ {
357
+ "since": "2006-01-01",
358
+ "percent": "5.0%"
359
+ }
360
+ ]
361
+ }
362
+ ]
363
+ },
364
+ {
365
+ "code": "IC",
366
+ "name": {
367
+ "es": "IC"
368
+ },
369
+ "desc": {
370
+ "en": "Consumption Tax",
371
+ "es": "Impuesto sobre Consumo"
372
+ },
373
+ "rates": []
374
+ },
375
+ {
376
+ "code": "ICA",
377
+ "name": {
378
+ "es": "ICA"
379
+ },
380
+ "desc": {
381
+ "en": "Industry and Commerce Tax",
382
+ "es": "Impuesto de Industria y Comercio"
383
+ },
384
+ "rates": []
385
+ },
386
+ {
387
+ "code": "RVAT",
388
+ "name": {
389
+ "es": "ReteIVA"
390
+ },
391
+ "desc": {
392
+ "es": "Retención en la fuente por el Impuesto al Valor Agregado"
393
+ },
394
+ "retained": true,
395
+ "rates": []
396
+ },
397
+ {
398
+ "code": "RICA",
399
+ "name": {
400
+ "es": "ReteICA"
401
+ },
402
+ "desc": {
403
+ "es": "Retención en la fuente por el Impuesto de Industria y Comercio"
404
+ },
405
+ "retained": true,
406
+ "rates": []
407
+ },
408
+ {
409
+ "code": "RR",
410
+ "name": {
411
+ "es": "ReteRenta"
412
+ },
413
+ "desc": {
414
+ "es": "Retención en la fuente por el Impuesto de la Renta"
415
+ },
416
+ "retained": true,
417
+ "rates": []
418
+ }
419
+ ]
420
+ }
data/data/tax/ES.json CHANGED
@@ -759,6 +759,67 @@
759
759
  }
760
760
  ]
761
761
  },
762
+ {
763
+ "code": "IGIC",
764
+ "name": {
765
+ "en": "IGIC",
766
+ "es": "IGIC"
767
+ },
768
+ "desc": {
769
+ "en": "Canary Island General Indirect Tax",
770
+ "es": "Impuesto General Indirecto Canario"
771
+ },
772
+ "rates": [
773
+ {
774
+ "key": "zero",
775
+ "name": {
776
+ "en": "Zero Rate",
777
+ "es": "Tipo Zero"
778
+ },
779
+ "values": [
780
+ {
781
+ "percent": "0.0%"
782
+ }
783
+ ]
784
+ },
785
+ {
786
+ "key": "standard",
787
+ "name": {
788
+ "en": "Standard Rate",
789
+ "es": "Tipo General"
790
+ },
791
+ "values": [
792
+ {
793
+ "percent": "7.0%"
794
+ }
795
+ ]
796
+ },
797
+ {
798
+ "key": "reduced",
799
+ "name": {
800
+ "en": "Reduced Rate",
801
+ "es": "Tipo Reducido"
802
+ },
803
+ "values": [
804
+ {
805
+ "percent": "3.0%"
806
+ }
807
+ ]
808
+ }
809
+ ]
810
+ },
811
+ {
812
+ "code": "IPSI",
813
+ "name": {
814
+ "en": "IPSI",
815
+ "es": "IPSI"
816
+ },
817
+ "desc": {
818
+ "en": "Production, Services, and Import Tax",
819
+ "es": "Impuesto sobre la Producción, los Servicios y la Importación"
820
+ },
821
+ "rates": []
822
+ },
762
823
  {
763
824
  "code": "IRPF",
764
825
  "name": {
data/lib/ext/hashme.rb ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ raise 'The `hashme` library version has changed. Review if this extension still applies' if Hashme::VERSION != '0.2.6'
4
+
5
+ # Temporary extensions for the `hashme` gem. To be removed when the library supports them.
6
+ # @api private
7
+ module Hashme
8
+ # Adds an URI helper class to the Hashme namespace so that properties referencing them
9
+ # typecast to URI objects in Ruby standard library.
10
+ class URI
11
+ def self.new(value)
12
+ URI(value)
13
+ end
14
+ end
15
+
16
+ # TrueClass typecasts to a boolean in Hashme. We alias it to `Boolean` for clarity
17
+ Boolean = TrueClass
18
+
19
+ class CastedArray
20
+ # Provides access to the whole Enumerable set of methods
21
+ include Enumerable
22
+
23
+ # Fixes equality between CastedArray objects
24
+ def ==(other)
25
+ @_array == other.to_a
26
+ end
27
+ end
28
+ end
@@ -9,82 +9,6 @@
9
9
  module GOBL
10
10
  module Bill
11
11
  # Advances contains an array of advance objects.
12
- class Advances < GOBL::Struct
13
- extend Forwardable
14
- include Enumerable
15
-
16
- # The Schema ID of the GOBL Advances structure
17
- SCHEMA_ID = 'https://gobl.org/draft-0/bill/invoice#/$defs/Advances'
18
-
19
- attribute :_ary, GOBL::Types::Array.of(GOBL::Pay::Advance)
20
-
21
- # @!method [](*args)
22
- # Returns elements from the array
23
- # @overload [](index)
24
- # Returns the element in a specific position
25
- # @param index [Integer] the position of the object
26
- # @return [GOBL::Pay::Advance] the element in the `index` position
27
- # @overload [](start, length)
28
- # Returns all the elements within a range of positions
29
- # @param start [Integer] start position of the range
30
- # @param length [Integer] length of the range
31
- # @return [Array<GOBL::Pay::Advance>] the elements in the range
32
- # @overload [](range)
33
- # Returns all the elements within a range
34
- # @param range [Range] start and end positions of the range
35
- # @return [Array<GOBL::Pay::Advance>] the elements in the range
36
- #
37
- # @!method each
38
- # Iterates over the array elements
39
- # @overload each(&block)
40
- # Calls the given block with each element in the array
41
- # @yield [element] element of the array
42
- # @return [self] the object itself
43
- # @overload each
44
- # Returns an Enumerator that iterates over the array elements
45
- # @return [Enumerator] the enumerator of the array elements
46
- #
47
- # @!method empty?
48
- # Returns `true` if the number of elements in the array is zero, `false` otherwise.
49
- # @return [Boolean] whether the array is empty or not
50
- #
51
- # @!method length
52
- # Returns the number of elements in the array
53
- # @return [Integer] the number of elements in the array
54
- def_delegators :_ary, :[], :each, :empty?, :length
55
-
56
- # Creates a new object from an array of GOBL data
57
- #
58
- # @param data [Array] an array of GOBL data
59
- #
60
- # @return [Advances] the object created from the given data
61
- def self.from_gobl!(data)
62
- new(_ary: data&.map { |item| GOBL::Pay::Advance.from_gobl!(item) })
63
- end
64
-
65
- # Returns an array of GOBL data representing the current object
66
- #
67
- # @return [Array<Hash>] the array of GOBL data that represents the current object
68
- def to_gobl
69
- _ary.map(&:to_gobl)
70
- end
71
-
72
- # Returns a {Advances} object from a given array of structs. The array may
73
- # contain {GOBL::Pay::Advance} objects or hashes. If hashes are provided, the constructor
74
- # will call `GOBL::Pay::Advance#new` to generate the objects that will be part of the
75
- # returned {Advances} object
76
- #
77
- # @param object [Array<GOBL::Pay::Advance, Hash>] the array containing the structs
78
- #
79
- # @return [Advances] the object corresponding to the given input
80
- def self.new(object)
81
- case object
82
- when Array
83
- super _ary: object
84
- else # internal use, not to be used in public calls
85
- super
86
- end
87
- end
88
- end
12
+ Advances = [GOBL::Pay::Advance] # rubocop:disable Naming/ConstantName, Style/MutableConstant
89
13
  end
90
14
  end