gobl 0.15.2 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -6
  3. data/data/regimes/co.json +18 -17
  4. data/data/regimes/es.json +95 -96
  5. data/data/regimes/fr.json +1 -0
  6. data/data/regimes/gb.json +1 -0
  7. data/data/regimes/it.json +816 -1944
  8. data/data/regimes/mx.json +576 -0
  9. data/data/regimes/nl.json +1 -0
  10. data/data/regimes/pt.json +206 -317
  11. data/data/regimes/us.json +1 -0
  12. data/lib/generated/gobl/bill/charge.rb +1 -1
  13. data/lib/generated/gobl/bill/correction_options.rb +52 -0
  14. data/lib/generated/gobl/bill/delivery.rb +1 -1
  15. data/lib/generated/gobl/bill/discount.rb +1 -1
  16. data/lib/generated/gobl/bill/document_reference.rb +1 -1
  17. data/lib/generated/gobl/bill/invoice.rb +36 -34
  18. data/lib/generated/gobl/bill/line.rb +1 -1
  19. data/lib/generated/gobl/bill/line_charge.rb +1 -1
  20. data/lib/generated/gobl/bill/line_discount.rb +1 -1
  21. data/lib/generated/gobl/bill/ordering.rb +1 -1
  22. data/lib/generated/gobl/bill/outlay.rb +1 -1
  23. data/lib/generated/gobl/bill/payment.rb +1 -1
  24. data/lib/generated/gobl/bill/preceding.rb +3 -3
  25. data/lib/generated/gobl/bill/tax.rb +1 -1
  26. data/lib/generated/gobl/bill/totals.rb +1 -1
  27. data/lib/generated/gobl/cal/date.rb +1 -1
  28. data/lib/generated/gobl/cal/date_time.rb +18 -0
  29. data/lib/generated/gobl/cal/period.rb +1 -1
  30. data/lib/generated/gobl/cbc/code.rb +1 -1
  31. data/lib/generated/gobl/cbc/{code_set.rb → code_map.rb} +3 -3
  32. data/lib/generated/gobl/cbc/key.rb +1 -1
  33. data/lib/generated/gobl/cbc/meta.rb +1 -1
  34. data/lib/generated/gobl/cbc/note.rb +1 -1
  35. data/lib/generated/gobl/currency/code.rb +1 -1
  36. data/lib/generated/gobl/currency/exchange_rate.rb +1 -1
  37. data/lib/generated/gobl/dsig/digest.rb +1 -1
  38. data/lib/generated/gobl/dsig/signature.rb +1 -1
  39. data/lib/generated/gobl/envelope.rb +5 -5
  40. data/lib/generated/gobl/head/header.rb +54 -0
  41. data/lib/generated/gobl/{cbc → head}/stamp.rb +3 -3
  42. data/lib/generated/gobl/i18n/string.rb +1 -1
  43. data/lib/generated/gobl/l10n/code.rb +1 -1
  44. data/lib/generated/gobl/l10n/country_code.rb +1 -1
  45. data/lib/generated/gobl/note/message.rb +1 -1
  46. data/lib/generated/gobl/org/address.rb +1 -1
  47. data/lib/generated/gobl/org/coordinates.rb +2 -2
  48. data/lib/generated/gobl/org/email.rb +1 -1
  49. data/lib/generated/gobl/org/identity.rb +7 -2
  50. data/lib/generated/gobl/org/image.rb +1 -1
  51. data/lib/generated/gobl/org/inbox.rb +1 -1
  52. data/lib/generated/gobl/org/item.rb +8 -3
  53. data/lib/generated/gobl/org/name.rb +1 -1
  54. data/lib/generated/gobl/org/party.rb +18 -13
  55. data/lib/generated/gobl/org/person.rb +1 -1
  56. data/lib/generated/gobl/org/registration.rb +1 -1
  57. data/lib/generated/gobl/org/telephone.rb +1 -1
  58. data/lib/generated/gobl/org/unit.rb +4 -1
  59. data/lib/generated/gobl/org/website.rb +2 -2
  60. data/lib/generated/gobl/pay/advance.rb +1 -1
  61. data/lib/generated/gobl/pay/card.rb +1 -1
  62. data/lib/generated/gobl/pay/credit_transfer.rb +1 -1
  63. data/lib/generated/gobl/pay/direct_debit.rb +1 -1
  64. data/lib/generated/gobl/pay/due_date.rb +1 -1
  65. data/lib/generated/gobl/pay/instructions.rb +1 -1
  66. data/lib/generated/gobl/pay/online.rb +1 -1
  67. data/lib/generated/gobl/pay/terms.rb +2 -3
  68. data/lib/generated/gobl/schema/object.rb +15 -0
  69. data/lib/generated/gobl/tax/category.rb +15 -5
  70. data/lib/generated/gobl/tax/category_total.rb +1 -1
  71. data/lib/generated/gobl/tax/code_definition.rb +33 -0
  72. data/lib/generated/gobl/tax/combo.rb +6 -1
  73. data/lib/generated/gobl/tax/identity.rb +1 -1
  74. data/lib/generated/gobl/tax/key_definition.rb +8 -8
  75. data/lib/generated/gobl/tax/preceding_definitions.rb +1 -1
  76. data/lib/generated/gobl/tax/rate.rb +10 -5
  77. data/lib/generated/gobl/tax/rate_total.rb +6 -1
  78. data/lib/generated/gobl/tax/rate_total_surcharge.rb +1 -1
  79. data/lib/generated/gobl/tax/rate_value.rb +1 -1
  80. data/lib/generated/gobl/tax/regime.rb +12 -1
  81. data/lib/generated/gobl/tax/scenario.rb +3 -3
  82. data/lib/generated/gobl/tax/scenario_set.rb +1 -1
  83. data/lib/generated/gobl/tax/set.rb +1 -1
  84. data/lib/generated/gobl/tax/source.rb +28 -0
  85. data/lib/generated/gobl/tax/total.rb +1 -1
  86. data/lib/generated/gobl/tax/zone.rb +3 -3
  87. data/lib/generated/gobl/uuid/uuid.rb +1 -1
  88. data/lib/gobl/extensions/envelope_helper.rb +1 -1
  89. data/lib/gobl/extensions/schema/object_helper.rb +49 -0
  90. data/lib/gobl/operations.rb +14 -15
  91. data/lib/gobl/struct.rb +1 -1
  92. data/lib/gobl/version.rb +1 -1
  93. data/lib/gobl.rb +2 -2
  94. metadata +11 -7
  95. data/lib/generated/gobl/document.rb +0 -16
  96. data/lib/generated/gobl/header.rb +0 -52
  97. data/lib/gobl/extensions/document_helper.rb +0 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af3895151963e6e381c356696eb41af65244f6e80f8601528973c3f3b9de517d
4
- data.tar.gz: 9d36d0318a22bf9a52c328d042bbba74e687995be459179ab89b7226cee3d37f
3
+ metadata.gz: a6c8e7f19ff84fd4088b793969af198ee03411e09265071ff3f9b7ec75ff78fc
4
+ data.tar.gz: 8154a6f7ffd4e2c94dfa5a8ff856fe21abb37b20f3ef651830bd53e8455f7b67
5
5
  SHA512:
6
- metadata.gz: 12140b4170025db93c81ae5e4f87bb6edbcb9322994d2f979c098e081dd3869865ca0e80a2b3a61e29868acce72dcdc23ca676bded9296266fa194d9466445e2
7
- data.tar.gz: a04b534b1e0f6d3e8b712d71232005c4b06f2e2d2d79133bb109752f115e2dc7f3377b1bb2c9f7f87e97b708e136a3341d399421b54c8e96ffc5b0d7041d77d7
6
+ metadata.gz: 32c5009e9bc9e6bc6aae5f36e3c5f15147d634fad2b2bcbb8d22a4543b2f3cc9f8ef982ae4a48fb8188aa2cc4e509be5d64a32673cd36a4039605b438f77be9e
7
+ data.tar.gz: a6c1a18a2d275ee6fdfe0aa5677f0f7691271a03af51bdd63b0b397ae71013a2daad978babd1c1a6137aa6ebb69afbee283bc2e38ec2dc3daa354c452f0081df
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::Document.from_json!(json) #=> #<GOBL::Document _value={"$schema"=>"https://gobl.org/draft-0/note/message", "content"=>"Hello World!"}>
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%2FDocumentHelper:extract) method of the document object.
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%2FDocumentHelper%2FClassMethods:embed) the struct in a document:
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::Document.embed(message)
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::Document#embed`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FDocumentHelper%2FClassMethods:embed), [`GOBL::Document.extract`](https://rubydoc.info/github/invopop/gobl.ruby/GOBL%2FExtensions%2FDocumentHelper:extract)_
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::Document.embed(invoice)
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,6 +213,8 @@ 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:
data/data/regimes/co.json CHANGED
@@ -4,6 +4,7 @@
4
4
  "en": "Colombia",
5
5
  "es": "Colombia"
6
6
  },
7
+ "time_zone": "America/Bogota",
7
8
  "country": "CO",
8
9
  "zones": [
9
10
  {
@@ -14588,7 +14589,7 @@
14588
14589
  "en": "TIN - Tax Identification Number",
14589
14590
  "es": "NIT - Número de Identificación Tributaria"
14590
14591
  },
14591
- "codes": {
14592
+ "map": {
14592
14593
  "dian-additional-account-id": "1",
14593
14594
  "dian-company-id": "31"
14594
14595
  }
@@ -14599,7 +14600,7 @@
14599
14600
  "en": "Civil Registry",
14600
14601
  "es": "Registro Civil"
14601
14602
  },
14602
- "codes": {
14603
+ "map": {
14603
14604
  "dian-additional-account-id": "2",
14604
14605
  "dian-company-id": "11"
14605
14606
  }
@@ -14610,7 +14611,7 @@
14610
14611
  "en": "Identity Card",
14611
14612
  "es": "Tarjeta de Identidad"
14612
14613
  },
14613
- "codes": {
14614
+ "map": {
14614
14615
  "dian-additional-account-id": "2",
14615
14616
  "dian-company-id": "12"
14616
14617
  }
@@ -14621,7 +14622,7 @@
14621
14622
  "en": "Citizen Identity Card",
14622
14623
  "es": "Cédula de ciudadanía"
14623
14624
  },
14624
- "codes": {
14625
+ "map": {
14625
14626
  "dian-additional-account-id": "2",
14626
14627
  "dian-company-id": "13"
14627
14628
  }
@@ -14632,7 +14633,7 @@
14632
14633
  "en": "Foreigner Identity Card",
14633
14634
  "es": "Tarjeta de Extranjería"
14634
14635
  },
14635
- "codes": {
14636
+ "map": {
14636
14637
  "dian-additional-account-id": "2",
14637
14638
  "dian-company-id": "21"
14638
14639
  }
@@ -14643,7 +14644,7 @@
14643
14644
  "en": "Foreigner Citizen Identity Card",
14644
14645
  "es": "Cédula de extranjería"
14645
14646
  },
14646
- "codes": {
14647
+ "map": {
14647
14648
  "dian-additional-account-id": "2",
14648
14649
  "dian-company-id": "22"
14649
14650
  }
@@ -14654,7 +14655,7 @@
14654
14655
  "en": "TIN of an individual",
14655
14656
  "es": "NIT de persona natural"
14656
14657
  },
14657
- "codes": {
14658
+ "map": {
14658
14659
  "dian-additional-account-id": "2",
14659
14660
  "dian-company-id": "31"
14660
14661
  }
@@ -14665,7 +14666,7 @@
14665
14666
  "en": "Passport",
14666
14667
  "es": "Pasaporte"
14667
14668
  },
14668
- "codes": {
14669
+ "map": {
14669
14670
  "dian-additional-account-id": "2",
14670
14671
  "dian-company-id": "41"
14671
14672
  }
@@ -14676,7 +14677,7 @@
14676
14677
  "en": "Foreign Document",
14677
14678
  "es": "Documento de identificación extranjero"
14678
14679
  },
14679
- "codes": {
14680
+ "map": {
14680
14681
  "dian-additional-account-id": "2",
14681
14682
  "dian-company-id": "42"
14682
14683
  }
@@ -14687,7 +14688,7 @@
14687
14688
  "en": "PEP - Special Permit to Stay",
14688
14689
  "es": "PEP - Permiso Especial de Permanencia"
14689
14690
  },
14690
- "codes": {
14691
+ "map": {
14691
14692
  "dian-additional-account-id": "2",
14692
14693
  "dian-company-id": "47"
14693
14694
  }
@@ -14698,7 +14699,7 @@
14698
14699
  "en": "Foreign TIN",
14699
14700
  "es": "NIT de otro país"
14700
14701
  },
14701
- "codes": {
14702
+ "map": {
14702
14703
  "dian-additional-account-id": "1",
14703
14704
  "dian-company-id": "50"
14704
14705
  }
@@ -14709,7 +14710,7 @@
14709
14710
  "en": "NUIP - National Unique Personal Identification Number",
14710
14711
  "es": "NUIP - Número Único de Identificación Personal"
14711
14712
  },
14712
- "codes": {
14713
+ "map": {
14713
14714
  "dian-additional-account-id": "2",
14714
14715
  "dian-company-id": "91"
14715
14716
  }
@@ -14729,7 +14730,7 @@
14729
14730
  "en": "Partial refund of part of the goods or services.",
14730
14731
  "es": "Devolución de parte de los bienes; no aceptación de partes del servicio."
14731
14732
  },
14732
- "codes": {
14733
+ "map": {
14733
14734
  "dian": "1"
14734
14735
  }
14735
14736
  },
@@ -14739,7 +14740,7 @@
14739
14740
  "en": "Previous document has been completely cancelled.",
14740
14741
  "es": "Anulación de la factura anterior."
14741
14742
  },
14742
- "codes": {
14743
+ "map": {
14743
14744
  "dian": "2"
14744
14745
  }
14745
14746
  },
@@ -14749,7 +14750,7 @@
14749
14750
  "en": "Partial or total discount.",
14750
14751
  "es": "Rebaja o descuento parcial o total."
14751
14752
  },
14752
- "codes": {
14753
+ "map": {
14753
14754
  "dian": "3"
14754
14755
  }
14755
14756
  },
@@ -14759,7 +14760,7 @@
14759
14760
  "en": "Ajuste de precio.",
14760
14761
  "es": "Price adjustment."
14761
14762
  },
14762
- "codes": {
14763
+ "map": {
14763
14764
  "dian": "4"
14764
14765
  }
14765
14766
  },
@@ -14769,7 +14770,7 @@
14769
14770
  "en": "Otros.",
14770
14771
  "es": "Other."
14771
14772
  },
14772
- "codes": {
14773
+ "map": {
14773
14774
  "dian": "5"
14774
14775
  }
14775
14776
  }
data/data/regimes/es.json CHANGED
@@ -4,6 +4,7 @@
4
4
  "en": "Spain",
5
5
  "es": "España"
6
6
  },
7
+ "time_zone": "Europe/Madrid",
7
8
  "country": "ES",
8
9
  "zones": [
9
10
  {
@@ -596,7 +597,7 @@
596
597
  "en": "National Tax Identity",
597
598
  "es": "Número de Identificación Fiscal"
598
599
  },
599
- "codes": {
600
+ "map": {
600
601
  "ticketbai-id-type": "02"
601
602
  }
602
603
  },
@@ -606,7 +607,7 @@
606
607
  "en": "Passport",
607
608
  "es": "Pasaporte"
608
609
  },
609
- "codes": {
610
+ "map": {
610
611
  "ticketbai-id-type": "03"
611
612
  }
612
613
  },
@@ -616,7 +617,7 @@
616
617
  "en": "National ID Card or similar from a foreign country",
617
618
  "es": "Documento oficial de identificación expedido por el país o territorio de residencia"
618
619
  },
619
- "codes": {
620
+ "map": {
620
621
  "ticketbai-id-type": "04"
621
622
  }
622
623
  },
@@ -626,7 +627,7 @@
626
627
  "en": "Residential permit",
627
628
  "es": "Certificado de residencia"
628
629
  },
629
- "codes": {
630
+ "map": {
630
631
  "ticketbai-id-type": "05"
631
632
  }
632
633
  },
@@ -636,11 +637,64 @@
636
637
  "en": "An other type of source not listed",
637
638
  "es": "Otro documento probatorio"
638
639
  },
639
- "codes": {
640
+ "map": {
640
641
  "ticketbai-id-type": "06"
641
642
  }
642
643
  }
643
644
  ],
645
+ "extensions": [
646
+ {
647
+ "key": "es-tbai-exemption",
648
+ "name": {
649
+ "en": "TicketBAI Exemption code",
650
+ "es": "Código de Exención de TicketBAI"
651
+ },
652
+ "codes": [
653
+ {
654
+ "code": "E1",
655
+ "name": {
656
+ "en": "Exempt pursuant to Article 20 of the Foral VAT Law",
657
+ "es": "Exenta por el artículo 20 de la Norma Foral del IVA"
658
+ }
659
+ },
660
+ {
661
+ "code": "E2",
662
+ "name": {
663
+ "en": "Exempt pursuant to Article 21 of the Foral VAT Law",
664
+ "es": "Exenta por el artículo 21 de la Norma Foral del IVA"
665
+ }
666
+ },
667
+ {
668
+ "code": "E3",
669
+ "name": {
670
+ "en": "Exempt pursuant to Article 22 of the Foral VAT Law",
671
+ "es": "Exenta por el artículo 22 de la Norma Foral del IVA"
672
+ }
673
+ },
674
+ {
675
+ "code": "E4",
676
+ "name": {
677
+ "en": "Exempt pursuant to Articles 23 and 24 of the Foral VAT Law",
678
+ "es": "Exenta por el artículos 23 y 24 de la Norma Foral del IVA"
679
+ }
680
+ },
681
+ {
682
+ "code": "E5",
683
+ "name": {
684
+ "en": "Exempt pursuant to Article 25 of the Foral VAT law",
685
+ "es": "Exenta por el artículo 25 de la Norma Foral del IVA"
686
+ }
687
+ },
688
+ {
689
+ "code": "E6",
690
+ "name": {
691
+ "en": "Exempt pursuant to other reasons",
692
+ "es": "Exenta por otra causa"
693
+ }
694
+ }
695
+ ]
696
+ }
697
+ ],
644
698
  "item_keys": [
645
699
  {
646
700
  "key": "resale",
@@ -845,7 +899,7 @@
845
899
  "en": "Invoice code",
846
900
  "es": "Número de la factura"
847
901
  },
848
- "codes": {
902
+ "map": {
849
903
  "facturae": "01"
850
904
  }
851
905
  },
@@ -855,7 +909,7 @@
855
909
  "en": "Invoice series",
856
910
  "es": "Serie de la factura"
857
911
  },
858
- "codes": {
912
+ "map": {
859
913
  "facturae": "02"
860
914
  }
861
915
  },
@@ -865,7 +919,7 @@
865
919
  "en": "Issue date",
866
920
  "es": "Fecha expedición"
867
921
  },
868
- "codes": {
922
+ "map": {
869
923
  "facturae": "03"
870
924
  }
871
925
  },
@@ -875,7 +929,7 @@
875
929
  "en": "Name and surnames/Corporate name – Issuer (Sender)",
876
930
  "es": "Nombre y apellidos/Razón Social-Emisor"
877
931
  },
878
- "codes": {
932
+ "map": {
879
933
  "facturae": "04"
880
934
  }
881
935
  },
@@ -885,7 +939,7 @@
885
939
  "en": "Name and surnames/Corporate name - Receiver",
886
940
  "es": "Nombre y apellidos/Razón Social-Receptor"
887
941
  },
888
- "codes": {
942
+ "map": {
889
943
  "facturae": "05"
890
944
  }
891
945
  },
@@ -895,7 +949,7 @@
895
949
  "en": "Issuer's Tax Identification Number",
896
950
  "es": "Identificación fiscal Emisor/obligado"
897
951
  },
898
- "codes": {
952
+ "map": {
899
953
  "facturae": "06"
900
954
  }
901
955
  },
@@ -905,7 +959,7 @@
905
959
  "en": "Receiver's Tax Identification Number",
906
960
  "es": "Identificación fiscal Receptor"
907
961
  },
908
- "codes": {
962
+ "map": {
909
963
  "facturae": "07"
910
964
  }
911
965
  },
@@ -915,7 +969,7 @@
915
969
  "en": "Issuer's address",
916
970
  "es": "Domicilio Emisor/Obligado"
917
971
  },
918
- "codes": {
972
+ "map": {
919
973
  "facturae": "08"
920
974
  }
921
975
  },
@@ -925,7 +979,7 @@
925
979
  "en": "Receiver's address",
926
980
  "es": "Domicilio Receptor"
927
981
  },
928
- "codes": {
982
+ "map": {
929
983
  "facturae": "09"
930
984
  }
931
985
  },
@@ -935,7 +989,7 @@
935
989
  "en": "Item line",
936
990
  "es": "Detalle Operación"
937
991
  },
938
- "codes": {
992
+ "map": {
939
993
  "facturae": "10"
940
994
  }
941
995
  },
@@ -945,7 +999,7 @@
945
999
  "en": "Applicable Tax Rate",
946
1000
  "es": "Porcentaje impositivo a aplicar"
947
1001
  },
948
- "codes": {
1002
+ "map": {
949
1003
  "facturae": "11"
950
1004
  }
951
1005
  },
@@ -955,7 +1009,7 @@
955
1009
  "en": "Applicable Tax Amount",
956
1010
  "es": "Cuota tributaria a aplicar"
957
1011
  },
958
- "codes": {
1012
+ "map": {
959
1013
  "facturae": "12"
960
1014
  }
961
1015
  },
@@ -965,7 +1019,7 @@
965
1019
  "en": "Applicable Date/Period",
966
1020
  "es": "Fecha/Periodo a aplicar"
967
1021
  },
968
- "codes": {
1022
+ "map": {
969
1023
  "facturae": "13"
970
1024
  }
971
1025
  },
@@ -975,7 +1029,7 @@
975
1029
  "en": "Invoice Class",
976
1030
  "es": "Clase de factura"
977
1031
  },
978
- "codes": {
1032
+ "map": {
979
1033
  "facturae": "14"
980
1034
  }
981
1035
  },
@@ -985,7 +1039,7 @@
985
1039
  "en": "Legal literals",
986
1040
  "es": "Literales legales"
987
1041
  },
988
- "codes": {
1042
+ "map": {
989
1043
  "facturae": "15"
990
1044
  }
991
1045
  },
@@ -995,7 +1049,7 @@
995
1049
  "en": "Taxable Base",
996
1050
  "es": "Base imponible"
997
1051
  },
998
- "codes": {
1052
+ "map": {
999
1053
  "facturae": "16"
1000
1054
  }
1001
1055
  },
@@ -1005,7 +1059,7 @@
1005
1059
  "en": "Calculation of tax outputs",
1006
1060
  "es": "Cálculo de cuotas repercutidas"
1007
1061
  },
1008
- "codes": {
1062
+ "map": {
1009
1063
  "facturae": "80"
1010
1064
  }
1011
1065
  },
@@ -1015,7 +1069,7 @@
1015
1069
  "en": "Calculation of tax inputs",
1016
1070
  "es": "Cálculo de cuotas retenidas"
1017
1071
  },
1018
- "codes": {
1072
+ "map": {
1019
1073
  "facturae": "81"
1020
1074
  }
1021
1075
  },
@@ -1025,7 +1079,7 @@
1025
1079
  "en": "Taxable Base modified due to return of packages and packaging materials",
1026
1080
  "es": "Base imponible modificada por devolución de envases / embalajes"
1027
1081
  },
1028
- "codes": {
1082
+ "map": {
1029
1083
  "facturae": "82"
1030
1084
  }
1031
1085
  },
@@ -1035,7 +1089,7 @@
1035
1089
  "en": "Taxable Base modified due to discounts and rebates",
1036
1090
  "es": "Base imponible modificada por descuentos y bonificaciones"
1037
1091
  },
1038
- "codes": {
1092
+ "map": {
1039
1093
  "facturae": "83"
1040
1094
  }
1041
1095
  },
@@ -1045,7 +1099,7 @@
1045
1099
  "en": "Taxable Base modified due to firm court ruling or administrative decision",
1046
1100
  "es": "Base imponible modificada por resolución firme, judicial o administrativa"
1047
1101
  },
1048
- "codes": {
1102
+ "map": {
1049
1103
  "facturae": "84"
1050
1104
  }
1051
1105
  },
@@ -1055,7 +1109,7 @@
1055
1109
  "en": "Taxable Base modified due to unpaid outputs where there is a judgement opening insolvency proceedings",
1056
1110
  "es": "Base imponible modificada cuotas repercutidas no satisfechas. Auto de declaración de concurso"
1057
1111
  },
1058
- "codes": {
1112
+ "map": {
1059
1113
  "facturae": "85"
1060
1114
  }
1061
1115
  }
@@ -1067,7 +1121,7 @@
1067
1121
  "en": "Complete",
1068
1122
  "es": "Rectificaticón íntegra"
1069
1123
  },
1070
- "codes": {
1124
+ "map": {
1071
1125
  "facturae": "01"
1072
1126
  }
1073
1127
  },
@@ -1077,7 +1131,7 @@
1077
1131
  "en": "Corrected items only",
1078
1132
  "es": "Rectificación por diferencias"
1079
1133
  },
1080
- "codes": {
1134
+ "map": {
1081
1135
  "facturae": "02"
1082
1136
  }
1083
1137
  },
@@ -1087,7 +1141,7 @@
1087
1141
  "en": "Bulk deal in a given period",
1088
1142
  "es": "Rectificación por descuento por volumen de operaciones durante un periodo"
1089
1143
  },
1090
- "codes": {
1144
+ "map": {
1091
1145
  "facturae": "03"
1092
1146
  }
1093
1147
  },
@@ -1097,7 +1151,7 @@
1097
1151
  "en": "Authorized by the Tax Agency",
1098
1152
  "es": "Autorizadas por la Agencia Tributaria"
1099
1153
  },
1100
- "codes": {
1154
+ "map": {
1101
1155
  "facturae": "04"
1102
1156
  }
1103
1157
  }
@@ -1247,73 +1301,18 @@
1247
1301
  ]
1248
1302
  },
1249
1303
  {
1250
- "key": "exempt+article-20",
1304
+ "key": "exempt",
1251
1305
  "name": {
1252
- "en": "Exempt pursuant to Article 20 of the Foral VAT Law",
1253
- "es": "Exenta por el artículo 20 de la Norma Foral del IVA"
1306
+ "en": "Exempt",
1307
+ "es": "Exenta"
1254
1308
  },
1255
1309
  "exempt": true,
1256
- "codes": {
1257
- "ticketbai-causa-exencion": "E1"
1258
- }
1259
- },
1260
- {
1261
- "key": "exempt+article-21",
1262
- "name": {
1263
- "en": "Exempt pursuant to Article 21 of the Foral VAT Law",
1264
- "es": "Exenta por el artículo 21 de la Norma Foral del IVA"
1265
- },
1266
- "exempt": true,
1267
- "codes": {
1268
- "ticketbai-causa-exencion": "E2"
1269
- }
1270
- },
1271
- {
1272
- "key": "exempt+article-22",
1273
- "name": {
1274
- "en": "Exempt pursuant to Article 22 of the Foral VAT Law",
1275
- "es": "Exenta por el artículo 22 de la Norma Foral del IVA"
1276
- },
1277
- "exempt": true,
1278
- "codes": {
1279
- "ticketbai-causa-exencion": "E3"
1280
- }
1281
- },
1282
- {
1283
- "key": "exempt+article-23",
1284
- "name": {
1285
- "en": "Exempt pursuant to Articles 23 and 24 of the Foral VAT Law",
1286
- "es": "Exenta por el artículos 23 y 24 de la Norma Foral del IVA"
1287
- },
1288
- "exempt": true,
1289
- "codes": {
1290
- "ticketbai-causa-exencion": "E4"
1291
- }
1292
- },
1293
- {
1294
- "key": "exempt+article-25",
1295
- "name": {
1296
- "en": "Exempt pursuant to Article 25 of the Foral VAT law",
1297
- "es": "Exenta por el artículo 25 de la Norma Foral del IVA"
1298
- },
1299
- "exempt": true,
1300
- "codes": {
1301
- "ticketbai-causa-exencion": "E5"
1302
- }
1303
- },
1304
- {
1305
- "key": "exempt+other",
1306
- "name": {
1307
- "en": "Exempt pursuant to other reasons",
1308
- "es": "Exenta por otra causa"
1309
- },
1310
- "exempt": true,
1311
- "codes": {
1312
- "ticketbai-causa-exencion": "E6"
1313
- }
1310
+ "extensions": [
1311
+ "es-tbai-exemption"
1312
+ ]
1314
1313
  }
1315
1314
  ],
1316
- "codes": {
1315
+ "map": {
1317
1316
  "facturae-tax-type-code": "01"
1318
1317
  }
1319
1318
  },
@@ -1365,7 +1364,7 @@
1365
1364
  ]
1366
1365
  }
1367
1366
  ],
1368
- "codes": {
1367
+ "map": {
1369
1368
  "facturae-tax-type-code": "03"
1370
1369
  }
1371
1370
  },
@@ -1379,7 +1378,7 @@
1379
1378
  "en": "Production, Services, and Import Tax",
1380
1379
  "es": "Impuesto sobre la Producción, los Servicios y la Importación"
1381
1380
  },
1382
- "codes": {
1381
+ "map": {
1383
1382
  "facturae-tax-type-code": "02"
1384
1383
  }
1385
1384
  },
@@ -1460,7 +1459,7 @@
1460
1459
  ]
1461
1460
  }
1462
1461
  ],
1463
- "codes": {
1462
+ "map": {
1464
1463
  "facturae-tax-type-code": "04"
1465
1464
  }
1466
1465
  }
data/data/regimes/fr.json CHANGED
@@ -4,6 +4,7 @@
4
4
  "en": "France",
5
5
  "fr": "La France"
6
6
  },
7
+ "time_zone": "Europe/Paris",
7
8
  "country": "FR",
8
9
  "currency": "EUR",
9
10
  "tags": [
data/data/regimes/gb.json CHANGED
@@ -3,6 +3,7 @@
3
3
  "name": {
4
4
  "en": "United Kingdom"
5
5
  },
6
+ "time_zone": "Europe/London",
6
7
  "country": "GB",
7
8
  "currency": "GBP",
8
9
  "categories": [