gobl 0.16.0 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -7
- data/data/regimes/ca.json +77 -0
- data/data/regimes/co.json +2831 -2763
- data/data/regimes/de.json +173 -0
- data/data/regimes/es.json +1300 -1277
- data/data/regimes/fr.json +116 -10
- data/data/regimes/gb.json +62 -1
- data/data/regimes/it.json +1765 -1703
- data/data/regimes/mx.json +119 -10
- data/data/regimes/nl.json +62 -1
- data/data/regimes/pt.json +235 -187
- data/data/regimes/us.json +46 -2
- data/lib/generated/gobl/bill/charge.rb +1 -1
- data/lib/generated/gobl/bill/correction_options.rb +8 -8
- data/lib/generated/gobl/bill/delivery.rb +6 -1
- data/lib/generated/gobl/bill/discount.rb +1 -1
- data/lib/generated/gobl/bill/document_reference.rb +1 -1
- data/lib/generated/gobl/bill/invoice.rb +6 -1
- data/lib/generated/gobl/bill/line.rb +1 -1
- data/lib/generated/gobl/bill/line_charge.rb +1 -1
- data/lib/generated/gobl/bill/line_discount.rb +1 -1
- data/lib/generated/gobl/bill/ordering.rb +6 -1
- data/lib/generated/gobl/bill/outlay.rb +1 -1
- data/lib/generated/gobl/bill/payment.rb +1 -1
- data/lib/generated/gobl/bill/preceding.rb +9 -9
- data/lib/generated/gobl/bill/tax.rb +1 -1
- data/lib/generated/gobl/bill/totals.rb +6 -1
- data/lib/generated/gobl/cal/date.rb +1 -1
- data/lib/generated/gobl/cal/date_time.rb +18 -0
- data/lib/generated/gobl/cal/period.rb +1 -1
- data/lib/generated/gobl/cbc/code.rb +1 -1
- data/lib/generated/gobl/cbc/code_map.rb +1 -1
- data/lib/generated/gobl/cbc/key.rb +1 -1
- data/lib/generated/gobl/cbc/meta.rb +1 -1
- data/lib/generated/gobl/cbc/note.rb +1 -1
- data/lib/generated/gobl/currency/code.rb +1 -1
- data/lib/generated/gobl/currency/exchange_rate.rb +1 -1
- data/lib/generated/gobl/dsig/digest.rb +1 -1
- data/lib/generated/gobl/dsig/signature.rb +1 -1
- data/lib/generated/gobl/envelope.rb +5 -5
- data/lib/generated/gobl/head/header.rb +54 -0
- data/lib/generated/gobl/{cbc → head}/stamp.rb +3 -3
- data/lib/generated/gobl/i18n/string.rb +1 -1
- data/lib/generated/gobl/l10n/code.rb +1 -1
- data/lib/generated/gobl/l10n/country_code.rb +1 -1
- data/lib/generated/gobl/note/message.rb +1 -1
- data/lib/generated/gobl/org/address.rb +1 -1
- data/lib/generated/gobl/org/coordinates.rb +1 -1
- data/lib/generated/gobl/org/email.rb +1 -1
- data/lib/generated/gobl/org/identity.rb +6 -1
- data/lib/generated/gobl/org/image.rb +6 -1
- data/lib/generated/gobl/org/inbox.rb +1 -1
- data/lib/generated/gobl/org/item.rb +1 -1
- data/lib/generated/gobl/org/name.rb +1 -1
- data/lib/generated/gobl/org/party.rb +1 -1
- data/lib/generated/gobl/org/person.rb +1 -1
- data/lib/generated/gobl/org/registration.rb +1 -1
- data/lib/generated/gobl/org/telephone.rb +1 -1
- data/lib/generated/gobl/org/unit.rb +1 -1
- data/lib/generated/gobl/org/website.rb +1 -1
- data/lib/generated/gobl/pay/advance.rb +1 -1
- data/lib/generated/gobl/pay/card.rb +1 -1
- data/lib/generated/gobl/pay/credit_transfer.rb +1 -1
- data/lib/generated/gobl/pay/direct_debit.rb +1 -1
- data/lib/generated/gobl/pay/due_date.rb +1 -1
- data/lib/generated/gobl/pay/instructions.rb +1 -1
- data/lib/generated/gobl/pay/online.rb +1 -1
- data/lib/generated/gobl/pay/terms.rb +1 -1
- data/lib/generated/gobl/regimes/mx/food_vouchers.rb +41 -0
- data/lib/generated/gobl/regimes/mx/food_vouchers_employee.rb +42 -0
- data/lib/generated/gobl/regimes/mx/food_vouchers_line.rb +42 -0
- data/lib/generated/gobl/regimes/mx/fuel_account_balance.rb +41 -0
- data/lib/generated/gobl/regimes/mx/fuel_account_item.rb +42 -0
- data/lib/generated/gobl/regimes/mx/fuel_account_line.rb +73 -0
- data/lib/generated/gobl/regimes/mx/fuel_account_tax.rb +37 -0
- data/lib/generated/gobl/schema/object.rb +15 -0
- data/lib/generated/gobl/tax/category.rb +14 -1
- data/lib/generated/gobl/tax/category_total.rb +1 -1
- data/lib/generated/gobl/tax/code_definition.rb +1 -1
- data/lib/generated/gobl/tax/combo.rb +1 -1
- data/lib/generated/gobl/tax/correction_definition.rb +48 -0
- data/lib/generated/gobl/tax/identity.rb +1 -1
- data/lib/generated/gobl/tax/key_definition.rb +3 -2
- data/lib/generated/gobl/tax/rate.rb +1 -1
- data/lib/generated/gobl/tax/rate_total.rb +1 -1
- data/lib/generated/gobl/tax/rate_total_surcharge.rb +1 -1
- data/lib/generated/gobl/tax/rate_value.rb +1 -1
- data/lib/generated/gobl/tax/regime.rb +20 -10
- data/lib/generated/gobl/tax/scenario.rb +1 -1
- data/lib/generated/gobl/tax/scenario_set.rb +1 -1
- data/lib/generated/gobl/tax/set.rb +1 -1
- data/lib/generated/gobl/tax/source.rb +28 -0
- data/lib/generated/gobl/tax/total.rb +1 -1
- data/lib/generated/gobl/tax/zone.rb +1 -1
- data/lib/generated/gobl/uuid/uuid.rb +1 -1
- data/lib/gobl/extensions/envelope_helper.rb +1 -1
- data/lib/gobl/extensions/schema/object_helper.rb +49 -0
- data/lib/gobl/operations.rb +12 -12
- data/lib/gobl/struct.rb +1 -1
- data/lib/gobl/version.rb +1 -1
- data/lib/gobl.rb +2 -2
- metadata +19 -9
- data/lib/generated/gobl/cbc/code_set.rb +0 -15
- data/lib/generated/gobl/document.rb +0 -16
- data/lib/generated/gobl/header.rb +0 -52
- data/lib/generated/gobl/tax/preceding_definitions.rb +0 -37
- data/lib/gobl/extensions/document_helper.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63b2dd9fcdb9215de25168e5aac158d06b54eaec29af7a347d72dc5709cc1f0f
|
4
|
+
data.tar.gz: 5c83ab6304a80028904d96a5152bd4a10e38fe84fccf2d8e058314df08d1a676
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b32311778224d58772f77eea900e7b35984048832ca49bd33d59cc1128e27985d08304eaf655863a55d19854446a4abef306d96dc8d2359c76a778145b4ee71
|
7
|
+
data.tar.gz: ac1836afe39e78a07854767590cd08f0bbc720eeaa4d25f5ce7b582d5db0fe3b1ad263759be07485363e519034c8e51e2dfac07bcd930bfa681d1fe376c4e317
|
data/README.md
CHANGED
@@ -81,12 +81,12 @@ GOBL is a JSON format. So, you'll probably need to read or produce valid GOBL JS
|
|
81
81
|
|
82
82
|
```ruby
|
83
83
|
json = '{"$schema":"https://gobl.org/draft-0/note/message", "content":"Hello World!"}'
|
84
|
-
document = GOBL::
|
84
|
+
document = GOBL::Schema::Object.from_json!(json) #=> #<GOBL::Schema::Object _value={"$schema"=>"https://gobl.org/draft-0/note/message", "content"=>"Hello World!"}>
|
85
85
|
message = document.extract #=> #<GOBL::Note::Message title=nil content="Hello World!" meta=nil>
|
86
86
|
message.content #=> "Hello World!"
|
87
87
|
```
|
88
88
|
|
89
|
-
Note that, in the previous example, we parsed the JSON fragment as a document. A [document](https://docs.gobl.org/core/documents) is one of the fundamental entities of GOBL, and it represents a business document in an abstract way. To get the specific document type instantiated –a message, in the example above–, we needed to call the [`#extract`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%
|
89
|
+
Note that, in the previous example, we parsed the JSON fragment as a document. A [document](https://docs.gobl.org/core/documents) is one of the fundamental entities of GOBL, and it represents a business document in an abstract way. To get the specific document type instantiated –a message, in the example above–, we needed to call the [`#extract`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper:extract) method of the document object.
|
90
90
|
|
91
91
|
The previous instantiation method is useful if you don't know the document type in advance. If you do, you could also instantiate the object in this more direct way:
|
92
92
|
|
@@ -103,15 +103,15 @@ message = GOBL::Note::Message.new(content: 'Hello World!')
|
|
103
103
|
message.to_json #=> "{\"content\":\"Hello World!\"}"
|
104
104
|
```
|
105
105
|
|
106
|
-
Note that, in the previous example, the generated JSON doesn't include a `$schema` attribute. This is because the GOBL schema doesn't require that attribute in a standalone message structure. If you want to use that structure as a document, you will need a `$schema` to be present. You can get that from your Ruby code by simply [_embedding_](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%
|
106
|
+
Note that, in the previous example, the generated JSON doesn't include a `$schema` attribute. This is because the GOBL schema doesn't require that attribute in a standalone message structure. If you want to use that structure as a document, you will need a `$schema` to be present. You can get that from your Ruby code by simply [_embedding_](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper%2FClassMethods:embed) the struct in a document:
|
107
107
|
|
108
108
|
```ruby
|
109
109
|
message = GOBL::Note::Message.new(content: 'Hello World!')
|
110
|
-
document = GOBL::
|
110
|
+
document = GOBL::Schema::Object.embed(message)
|
111
111
|
document.to_json #=> "{\"content\":\"Hello World!\",\"$schema\":\"https://gobl.org/draft-0/note/message\"}"
|
112
112
|
```
|
113
113
|
|
114
|
-
_See also [`GOBL::Struct.from_json!`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct%2Efrom_json!), [`GOBL::Struct#to_json`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct:to_json), [`GOBL::
|
114
|
+
_See also [`GOBL::Struct.from_json!`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct%2Efrom_json!), [`GOBL::Struct#to_json`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FStruct:to_json), [`GOBL::Schema::Object#embed`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper%2FClassMethods:embed), [`GOBL::Schema::Object.extract`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FSchema%2FObjectHelper:extract)_
|
115
115
|
|
116
116
|
### Handling value objects and enumerations
|
117
117
|
|
@@ -179,7 +179,7 @@ invoice = GOBL::Bill::Invoice.new(
|
|
179
179
|
taxes: [ { cat: 'VAT', rate: :standard } ]
|
180
180
|
}]
|
181
181
|
)
|
182
|
-
document = GOBL::
|
182
|
+
document = GOBL::Schema::Object.embed(invoice)
|
183
183
|
calculated_document = GOBL.build(document)
|
184
184
|
calculated_invoice = calculated_document.extract
|
185
185
|
calculated_invoice.totals.total_with_tax #=> "2178.00"
|
@@ -213,13 +213,17 @@ You can avoid mage and the docker container if you prefer so. Take a look at the
|
|
213
213
|
|
214
214
|
The command `mage setup` fetches and installs all the required dependencies to use the gem.
|
215
215
|
|
216
|
+
If you run into any problems with dependencies, don't forget this is a library, so the Gemfile.lock is not included. Delete any local versions you may already have and re-run.
|
217
|
+
|
216
218
|
#### Code generation
|
217
219
|
|
218
220
|
Ensure all the GOBL JSON Schema and Regime files are available by manually copying the [base GOBL project](https://github.com/invopop/gobl)'s `build/` path to the `data/` path in this repository. For example, assuming you have GOBL at `../gobl/`, you can run this:
|
219
221
|
|
220
222
|
```bash
|
221
223
|
rm -rf ./data/*
|
222
|
-
|
224
|
+
cd ../gobl
|
225
|
+
find ./data -name '*.json' -type f | cpio -pdm ../gobl.ruby/
|
226
|
+
cd ../gobl.ruby
|
223
227
|
```
|
224
228
|
|
225
229
|
Please note that `schemas` is _.gitignored_ as we only need it to generate the code. However, the previous command also copies `regimes` which content is used by the library and so, it is part of the git repo and the gem.
|
@@ -0,0 +1,77 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "https://gobl.org/draft-0/tax/regime",
|
3
|
+
"name": {
|
4
|
+
"en": "Canada"
|
5
|
+
},
|
6
|
+
"time_zone": "America/Toronto",
|
7
|
+
"country": "CA",
|
8
|
+
"currency": "CAD",
|
9
|
+
"categories": [
|
10
|
+
{
|
11
|
+
"code": "GST",
|
12
|
+
"name": {
|
13
|
+
"en": "GST"
|
14
|
+
},
|
15
|
+
"title": {
|
16
|
+
"en": "General Sales Tax"
|
17
|
+
},
|
18
|
+
"rates": [
|
19
|
+
{
|
20
|
+
"key": "zero",
|
21
|
+
"name": {
|
22
|
+
"en": "Zero Rate"
|
23
|
+
},
|
24
|
+
"desc": {
|
25
|
+
"en": "Some supplies are zero-rated under the GST, mainly: basic groceries, agricultural products, farm livestock, most fishery products such, prescription drugs and drug-dispensing services, certain medical devices, feminine hygiene products, exports, many transportation services where the origin or destination is outside Canada"
|
26
|
+
},
|
27
|
+
"values": [
|
28
|
+
{
|
29
|
+
"percent": "0.0%"
|
30
|
+
}
|
31
|
+
]
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"key": "standard",
|
35
|
+
"name": {
|
36
|
+
"en": "Standard rate"
|
37
|
+
},
|
38
|
+
"desc": {
|
39
|
+
"en": "For the majority of sales of goods and services: it applies to all products or services for which no other rate is expressly provided."
|
40
|
+
},
|
41
|
+
"values": [
|
42
|
+
{
|
43
|
+
"since": "2022-01-01",
|
44
|
+
"percent": "5%"
|
45
|
+
}
|
46
|
+
]
|
47
|
+
}
|
48
|
+
],
|
49
|
+
"sources": [
|
50
|
+
{
|
51
|
+
"title": {
|
52
|
+
"en": "GST/HST provincial rates table"
|
53
|
+
},
|
54
|
+
"url": "https://www.canada.ca/en/revenue-agency/services/tax/businesses/topics/gst-hst-businesses/charge-collect-which-rate/calculator.html"
|
55
|
+
}
|
56
|
+
]
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"code": "HST",
|
60
|
+
"name": {
|
61
|
+
"en": "HST"
|
62
|
+
},
|
63
|
+
"title": {
|
64
|
+
"en": "Harmonized Sales Tax"
|
65
|
+
}
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"code": "PST",
|
69
|
+
"name": {
|
70
|
+
"en": "PST"
|
71
|
+
},
|
72
|
+
"title": {
|
73
|
+
"en": "Provincial Sales Tax"
|
74
|
+
}
|
75
|
+
}
|
76
|
+
]
|
77
|
+
}
|