vatsense 0.1.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 (245) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +14 -0
  4. data/README.md +235 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/vatsense/client.rb +129 -0
  7. data/lib/vatsense/errors.rb +228 -0
  8. data/lib/vatsense/file_part.rb +58 -0
  9. data/lib/vatsense/internal/transport/base_client.rb +595 -0
  10. data/lib/vatsense/internal/transport/pooled_net_requester.rb +210 -0
  11. data/lib/vatsense/internal/type/array_of.rb +168 -0
  12. data/lib/vatsense/internal/type/base_model.rb +531 -0
  13. data/lib/vatsense/internal/type/base_page.rb +55 -0
  14. data/lib/vatsense/internal/type/boolean.rb +77 -0
  15. data/lib/vatsense/internal/type/converter.rb +327 -0
  16. data/lib/vatsense/internal/type/enum.rb +131 -0
  17. data/lib/vatsense/internal/type/file_input.rb +111 -0
  18. data/lib/vatsense/internal/type/hash_of.rb +188 -0
  19. data/lib/vatsense/internal/type/request_parameters.rb +42 -0
  20. data/lib/vatsense/internal/type/union.rb +237 -0
  21. data/lib/vatsense/internal/type/unknown.rb +81 -0
  22. data/lib/vatsense/internal/util.rb +951 -0
  23. data/lib/vatsense/internal.rb +20 -0
  24. data/lib/vatsense/models/country.rb +70 -0
  25. data/lib/vatsense/models/country_list_params.rb +34 -0
  26. data/lib/vatsense/models/country_list_provinces_params.rb +22 -0
  27. data/lib/vatsense/models/country_list_provinces_response.rb +67 -0
  28. data/lib/vatsense/models/country_list_response.rb +28 -0
  29. data/lib/vatsense/models/create_invoice.rb +171 -0
  30. data/lib/vatsense/models/currency_calculate_vat_price_params.rb +53 -0
  31. data/lib/vatsense/models/currency_calculate_vat_price_response.rb +28 -0
  32. data/lib/vatsense/models/currency_convert_params.rb +53 -0
  33. data/lib/vatsense/models/currency_convert_response.rb +87 -0
  34. data/lib/vatsense/models/currency_list_params.rb +45 -0
  35. data/lib/vatsense/models/currency_list_response.rb +72 -0
  36. data/lib/vatsense/models/find_rate.rb +28 -0
  37. data/lib/vatsense/models/invoice/invoice_item.rb +71 -0
  38. data/lib/vatsense/models/invoice/invoice_item_input.rb +52 -0
  39. data/lib/vatsense/models/invoice/item_add_params.rb +28 -0
  40. data/lib/vatsense/models/invoice/item_delete_params.rb +28 -0
  41. data/lib/vatsense/models/invoice/item_retrieve_params.rb +28 -0
  42. data/lib/vatsense/models/invoice/item_retrieve_response.rb +30 -0
  43. data/lib/vatsense/models/invoice/item_update_params.rb +28 -0
  44. data/lib/vatsense/models/invoice.rb +301 -0
  45. data/lib/vatsense/models/invoice_business_input.rb +80 -0
  46. data/lib/vatsense/models/invoice_conversion_input.rb +24 -0
  47. data/lib/vatsense/models/invoice_create_params.rb +14 -0
  48. data/lib/vatsense/models/invoice_customer_input.rb +59 -0
  49. data/lib/vatsense/models/invoice_delete_params.rb +20 -0
  50. data/lib/vatsense/models/invoice_delete_response.rb +22 -0
  51. data/lib/vatsense/models/invoice_list_params.rb +38 -0
  52. data/lib/vatsense/models/invoice_list_response.rb +28 -0
  53. data/lib/vatsense/models/invoice_response.rb +28 -0
  54. data/lib/vatsense/models/invoice_retrieve_params.rb +20 -0
  55. data/lib/vatsense/models/invoice_update_params.rb +20 -0
  56. data/lib/vatsense/models/rate.rb +74 -0
  57. data/lib/vatsense/models/rate_calculate_price_params.rb +88 -0
  58. data/lib/vatsense/models/rate_calculate_price_response.rb +79 -0
  59. data/lib/vatsense/models/rate_details_params.rb +69 -0
  60. data/lib/vatsense/models/rate_find_params.rb +69 -0
  61. data/lib/vatsense/models/rate_list_params.rb +51 -0
  62. data/lib/vatsense/models/rate_list_response.rb +28 -0
  63. data/lib/vatsense/models/rate_list_types_params.rb +14 -0
  64. data/lib/vatsense/models/rate_list_types_response.rb +28 -0
  65. data/lib/vatsense/models/rate_with_tax_rate.rb +49 -0
  66. data/lib/vatsense/models/sandbox_generate_key_params.rb +14 -0
  67. data/lib/vatsense/models/sandbox_generate_key_response.rb +68 -0
  68. data/lib/vatsense/models/tax_rate.rb +76 -0
  69. data/lib/vatsense/models/usage_retrieve_params.rb +14 -0
  70. data/lib/vatsense/models/usage_retrieve_response.rb +67 -0
  71. data/lib/vatsense/models/validate_check_params.rb +48 -0
  72. data/lib/vatsense/models/validate_check_response.rb +135 -0
  73. data/lib/vatsense/models/vat_price.rb +86 -0
  74. data/lib/vatsense/models.rb +103 -0
  75. data/lib/vatsense/request_options.rb +77 -0
  76. data/lib/vatsense/resources/countries.rb +70 -0
  77. data/lib/vatsense/resources/currency.rb +111 -0
  78. data/lib/vatsense/resources/invoice/item.rb +133 -0
  79. data/lib/vatsense/resources/invoice.rb +206 -0
  80. data/lib/vatsense/resources/rates.rb +190 -0
  81. data/lib/vatsense/resources/sandbox.rb +36 -0
  82. data/lib/vatsense/resources/usage.rb +33 -0
  83. data/lib/vatsense/resources/validate.rb +56 -0
  84. data/lib/vatsense/version.rb +5 -0
  85. data/lib/vatsense.rb +113 -0
  86. data/manifest.yaml +17 -0
  87. data/rbi/vatsense/client.rbi +93 -0
  88. data/rbi/vatsense/errors.rbi +205 -0
  89. data/rbi/vatsense/file_part.rbi +37 -0
  90. data/rbi/vatsense/internal/transport/base_client.rbi +300 -0
  91. data/rbi/vatsense/internal/transport/pooled_net_requester.rbi +83 -0
  92. data/rbi/vatsense/internal/type/array_of.rbi +104 -0
  93. data/rbi/vatsense/internal/type/base_model.rbi +306 -0
  94. data/rbi/vatsense/internal/type/base_page.rbi +42 -0
  95. data/rbi/vatsense/internal/type/boolean.rbi +58 -0
  96. data/rbi/vatsense/internal/type/converter.rbi +216 -0
  97. data/rbi/vatsense/internal/type/enum.rbi +82 -0
  98. data/rbi/vatsense/internal/type/file_input.rbi +59 -0
  99. data/rbi/vatsense/internal/type/hash_of.rbi +104 -0
  100. data/rbi/vatsense/internal/type/request_parameters.rbi +29 -0
  101. data/rbi/vatsense/internal/type/union.rbi +128 -0
  102. data/rbi/vatsense/internal/type/unknown.rbi +58 -0
  103. data/rbi/vatsense/internal/util.rbi +507 -0
  104. data/rbi/vatsense/internal.rbi +16 -0
  105. data/rbi/vatsense/models/country.rbi +111 -0
  106. data/rbi/vatsense/models/country_list_params.rbi +59 -0
  107. data/rbi/vatsense/models/country_list_provinces_params.rbi +43 -0
  108. data/rbi/vatsense/models/country_list_provinces_response.rbi +177 -0
  109. data/rbi/vatsense/models/country_list_response.rbi +55 -0
  110. data/rbi/vatsense/models/create_invoice.rbi +240 -0
  111. data/rbi/vatsense/models/currency_calculate_vat_price_params.rbi +100 -0
  112. data/rbi/vatsense/models/currency_calculate_vat_price_response.rbi +51 -0
  113. data/rbi/vatsense/models/currency_convert_params.rbi +81 -0
  114. data/rbi/vatsense/models/currency_convert_response.rbi +190 -0
  115. data/rbi/vatsense/models/currency_list_params.rbi +79 -0
  116. data/rbi/vatsense/models/currency_list_response.rbi +174 -0
  117. data/rbi/vatsense/models/find_rate.rbi +50 -0
  118. data/rbi/vatsense/models/invoice/invoice_item.rbi +129 -0
  119. data/rbi/vatsense/models/invoice/invoice_item_input.rbi +79 -0
  120. data/rbi/vatsense/models/invoice/item_add_params.rbi +45 -0
  121. data/rbi/vatsense/models/invoice/item_delete_params.rbi +48 -0
  122. data/rbi/vatsense/models/invoice/item_retrieve_params.rbi +48 -0
  123. data/rbi/vatsense/models/invoice/item_retrieve_response.rbi +57 -0
  124. data/rbi/vatsense/models/invoice/item_update_params.rbi +48 -0
  125. data/rbi/vatsense/models/invoice.rbi +481 -0
  126. data/rbi/vatsense/models/invoice_business_input.rbi +113 -0
  127. data/rbi/vatsense/models/invoice_conversion_input.rbi +35 -0
  128. data/rbi/vatsense/models/invoice_create_params.rbi +27 -0
  129. data/rbi/vatsense/models/invoice_customer_input.rbi +93 -0
  130. data/rbi/vatsense/models/invoice_delete_params.rbi +35 -0
  131. data/rbi/vatsense/models/invoice_delete_response.rbi +31 -0
  132. data/rbi/vatsense/models/invoice_list_params.rbi +68 -0
  133. data/rbi/vatsense/models/invoice_list_response.rbi +55 -0
  134. data/rbi/vatsense/models/invoice_response.rbi +48 -0
  135. data/rbi/vatsense/models/invoice_retrieve_params.rbi +35 -0
  136. data/rbi/vatsense/models/invoice_update_params.rbi +35 -0
  137. data/rbi/vatsense/models/rate.rbi +119 -0
  138. data/rbi/vatsense/models/rate_calculate_price_params.rbi +144 -0
  139. data/rbi/vatsense/models/rate_calculate_price_response.rbi +184 -0
  140. data/rbi/vatsense/models/rate_details_params.rbi +109 -0
  141. data/rbi/vatsense/models/rate_find_params.rbi +109 -0
  142. data/rbi/vatsense/models/rate_list_params.rbi +83 -0
  143. data/rbi/vatsense/models/rate_list_response.rbi +48 -0
  144. data/rbi/vatsense/models/rate_list_types_params.rbi +27 -0
  145. data/rbi/vatsense/models/rate_list_types_response.rbi +51 -0
  146. data/rbi/vatsense/models/rate_with_tax_rate.rbi +94 -0
  147. data/rbi/vatsense/models/sandbox_generate_key_params.rbi +27 -0
  148. data/rbi/vatsense/models/sandbox_generate_key_response.rbi +135 -0
  149. data/rbi/vatsense/models/tax_rate.rbi +109 -0
  150. data/rbi/vatsense/models/usage_retrieve_params.rbi +27 -0
  151. data/rbi/vatsense/models/usage_retrieve_response.rbi +155 -0
  152. data/rbi/vatsense/models/validate_check_params.rbi +82 -0
  153. data/rbi/vatsense/models/validate_check_response.rbi +285 -0
  154. data/rbi/vatsense/models/vat_price.rbi +136 -0
  155. data/rbi/vatsense/models.rbi +66 -0
  156. data/rbi/vatsense/request_options.rbi +59 -0
  157. data/rbi/vatsense/resources/countries.rbi +49 -0
  158. data/rbi/vatsense/resources/currency.rbi +82 -0
  159. data/rbi/vatsense/resources/invoice/item.rbi +97 -0
  160. data/rbi/vatsense/resources/invoice.rbi +191 -0
  161. data/rbi/vatsense/resources/rates.rbi +164 -0
  162. data/rbi/vatsense/resources/sandbox.rbi +24 -0
  163. data/rbi/vatsense/resources/usage.rbi +22 -0
  164. data/rbi/vatsense/resources/validate.rbi +51 -0
  165. data/rbi/vatsense/version.rbi +5 -0
  166. data/sig/vatsense/client.rbs +45 -0
  167. data/sig/vatsense/errors.rbs +117 -0
  168. data/sig/vatsense/file_part.rbs +21 -0
  169. data/sig/vatsense/internal/transport/base_client.rbs +135 -0
  170. data/sig/vatsense/internal/transport/pooled_net_requester.rbs +48 -0
  171. data/sig/vatsense/internal/type/array_of.rbs +48 -0
  172. data/sig/vatsense/internal/type/base_model.rbs +102 -0
  173. data/sig/vatsense/internal/type/base_page.rbs +24 -0
  174. data/sig/vatsense/internal/type/boolean.rbs +26 -0
  175. data/sig/vatsense/internal/type/converter.rbs +79 -0
  176. data/sig/vatsense/internal/type/enum.rbs +32 -0
  177. data/sig/vatsense/internal/type/file_input.rbs +25 -0
  178. data/sig/vatsense/internal/type/hash_of.rbs +48 -0
  179. data/sig/vatsense/internal/type/request_parameters.rbs +17 -0
  180. data/sig/vatsense/internal/type/union.rbs +52 -0
  181. data/sig/vatsense/internal/type/unknown.rbs +26 -0
  182. data/sig/vatsense/internal/util.rbs +195 -0
  183. data/sig/vatsense/internal.rbs +9 -0
  184. data/sig/vatsense/models/country.rbs +76 -0
  185. data/sig/vatsense/models/country_list_params.rbs +32 -0
  186. data/sig/vatsense/models/country_list_provinces_params.rbs +23 -0
  187. data/sig/vatsense/models/country_list_provinces_response.rbs +90 -0
  188. data/sig/vatsense/models/country_list_response.rbs +32 -0
  189. data/sig/vatsense/models/create_invoice.rbs +154 -0
  190. data/sig/vatsense/models/currency_calculate_vat_price_params.rbs +47 -0
  191. data/sig/vatsense/models/currency_calculate_vat_price_response.rbs +28 -0
  192. data/sig/vatsense/models/currency_convert_params.rbs +47 -0
  193. data/sig/vatsense/models/currency_convert_response.rbs +104 -0
  194. data/sig/vatsense/models/currency_list_params.rbs +45 -0
  195. data/sig/vatsense/models/currency_list_response.rbs +90 -0
  196. data/sig/vatsense/models/find_rate.rbs +32 -0
  197. data/sig/vatsense/models/invoice/invoice_item.rbs +85 -0
  198. data/sig/vatsense/models/invoice/invoice_item_input.rbs +46 -0
  199. data/sig/vatsense/models/invoice/item_add_params.rbs +33 -0
  200. data/sig/vatsense/models/invoice/item_delete_params.rbs +30 -0
  201. data/sig/vatsense/models/invoice/item_retrieve_params.rbs +30 -0
  202. data/sig/vatsense/models/invoice/item_retrieve_response.rbs +36 -0
  203. data/sig/vatsense/models/invoice/item_update_params.rbs +34 -0
  204. data/sig/vatsense/models/invoice.rbs +332 -0
  205. data/sig/vatsense/models/invoice_business_input.rbs +72 -0
  206. data/sig/vatsense/models/invoice_conversion_input.rbs +15 -0
  207. data/sig/vatsense/models/invoice_create_params.rbs +15 -0
  208. data/sig/vatsense/models/invoice_customer_input.rbs +62 -0
  209. data/sig/vatsense/models/invoice_delete_params.rbs +23 -0
  210. data/sig/vatsense/models/invoice_delete_response.rbs +15 -0
  211. data/sig/vatsense/models/invoice_list_params.rbs +38 -0
  212. data/sig/vatsense/models/invoice_list_response.rbs +34 -0
  213. data/sig/vatsense/models/invoice_response.rbs +32 -0
  214. data/sig/vatsense/models/invoice_retrieve_params.rbs +23 -0
  215. data/sig/vatsense/models/invoice_update_params.rbs +25 -0
  216. data/sig/vatsense/models/rate.rbs +79 -0
  217. data/sig/vatsense/models/rate_calculate_price_params.rbs +77 -0
  218. data/sig/vatsense/models/rate_calculate_price_response.rbs +104 -0
  219. data/sig/vatsense/models/rate_details_params.rbs +63 -0
  220. data/sig/vatsense/models/rate_find_params.rbs +63 -0
  221. data/sig/vatsense/models/rate_list_params.rbs +44 -0
  222. data/sig/vatsense/models/rate_list_response.rbs +32 -0
  223. data/sig/vatsense/models/rate_list_types_params.rbs +15 -0
  224. data/sig/vatsense/models/rate_list_types_response.rbs +28 -0
  225. data/sig/vatsense/models/rate_with_tax_rate.rbs +62 -0
  226. data/sig/vatsense/models/sandbox_generate_key_params.rbs +15 -0
  227. data/sig/vatsense/models/sandbox_generate_key_response.rbs +85 -0
  228. data/sig/vatsense/models/tax_rate.rbs +72 -0
  229. data/sig/vatsense/models/usage_retrieve_params.rbs +15 -0
  230. data/sig/vatsense/models/usage_retrieve_response.rbs +81 -0
  231. data/sig/vatsense/models/validate_check_params.rbs +38 -0
  232. data/sig/vatsense/models/validate_check_response.rbs +161 -0
  233. data/sig/vatsense/models/vat_price.rbs +89 -0
  234. data/sig/vatsense/models.rbs +63 -0
  235. data/sig/vatsense/request_options.rbs +34 -0
  236. data/sig/vatsense/resources/countries.rbs +18 -0
  237. data/sig/vatsense/resources/currency.rbs +27 -0
  238. data/sig/vatsense/resources/invoice/item.rbs +38 -0
  239. data/sig/vatsense/resources/invoice.rbs +69 -0
  240. data/sig/vatsense/resources/rates.rbs +50 -0
  241. data/sig/vatsense/resources/sandbox.rbs +11 -0
  242. data/sig/vatsense/resources/usage.rbs +11 -0
  243. data/sig/vatsense/resources/validate.rbs +14 -0
  244. data/sig/vatsense/version.rbs +3 -0
  245. metadata +316 -0
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vatsense
4
+ module Models
5
+ class VatPrice < Vatsense::Internal::Type::BaseModel
6
+ # @!attribute object
7
+ #
8
+ # @return [Symbol, Vatsense::Models::VatPrice::Object, nil]
9
+ optional :object, enum: -> { Vatsense::VatPrice::Object }
10
+
11
+ # @!attribute price
12
+ # The price provided.
13
+ #
14
+ # @return [Float, nil]
15
+ optional :price, Float
16
+
17
+ # @!attribute price_excl_vat
18
+ # The calculated price exclusive of VAT.
19
+ #
20
+ # @return [Float, nil]
21
+ optional :price_excl_vat, Float
22
+
23
+ # @!attribute price_incl_vat
24
+ # The calculated price inclusive of VAT.
25
+ #
26
+ # @return [Float, nil]
27
+ optional :price_incl_vat, Float
28
+
29
+ # @!attribute tax_type
30
+ # Whether the price is inclusive or exclusive of VAT.
31
+ #
32
+ # @return [Symbol, Vatsense::Models::VatPrice::TaxType, nil]
33
+ optional :tax_type, enum: -> { Vatsense::VatPrice::TaxType }
34
+
35
+ # @!attribute vat
36
+ # The total VAT amount.
37
+ #
38
+ # @return [Float, nil]
39
+ optional :vat, Float
40
+
41
+ # @!attribute vat_rate
42
+ # The VAT rate percentage.
43
+ #
44
+ # @return [Float, nil]
45
+ optional :vat_rate, Float
46
+
47
+ # @!method initialize(object: nil, price: nil, price_excl_vat: nil, price_incl_vat: nil, tax_type: nil, vat: nil, vat_rate: nil)
48
+ # @param object [Symbol, Vatsense::Models::VatPrice::Object]
49
+ #
50
+ # @param price [Float] The price provided.
51
+ #
52
+ # @param price_excl_vat [Float] The calculated price exclusive of VAT.
53
+ #
54
+ # @param price_incl_vat [Float] The calculated price inclusive of VAT.
55
+ #
56
+ # @param tax_type [Symbol, Vatsense::Models::VatPrice::TaxType] Whether the price is inclusive or exclusive of VAT.
57
+ #
58
+ # @param vat [Float] The total VAT amount.
59
+ #
60
+ # @param vat_rate [Float] The VAT rate percentage.
61
+
62
+ # @see Vatsense::Models::VatPrice#object
63
+ module Object
64
+ extend Vatsense::Internal::Type::Enum
65
+
66
+ VAT_PRICE = :vat_price
67
+
68
+ # @!method self.values
69
+ # @return [Array<Symbol>]
70
+ end
71
+
72
+ # Whether the price is inclusive or exclusive of VAT.
73
+ #
74
+ # @see Vatsense::Models::VatPrice#tax_type
75
+ module TaxType
76
+ extend Vatsense::Internal::Type::Enum
77
+
78
+ INCL = :incl
79
+ EXCL = :excl
80
+
81
+ # @!method self.values
82
+ # @return [Array<Symbol>]
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vatsense
4
+ [Vatsense::Internal::Type::BaseModel, *Vatsense::Internal::Type::BaseModel.subclasses].each do |cls|
5
+ cls.define_sorbet_constant!(:OrHash) { T.type_alias { T.any(cls, Vatsense::Internal::AnyHash) } }
6
+ end
7
+
8
+ Vatsense::Internal::Util.walk_namespaces(Vatsense::Models).each do |mod|
9
+ case mod
10
+ in Vatsense::Internal::Type::Enum | Vatsense::Internal::Type::Union
11
+ mod.constants.each do |name|
12
+ case mod.const_get(name)
13
+ in true | false
14
+ mod.define_sorbet_constant!(:TaggedBoolean) { T.type_alias { T::Boolean } }
15
+ mod.define_sorbet_constant!(:OrBoolean) { T.type_alias { T::Boolean } }
16
+ in Integer
17
+ mod.define_sorbet_constant!(:TaggedInteger) { T.type_alias { Integer } }
18
+ mod.define_sorbet_constant!(:OrInteger) { T.type_alias { Integer } }
19
+ in Float
20
+ mod.define_sorbet_constant!(:TaggedFloat) { T.type_alias { Float } }
21
+ mod.define_sorbet_constant!(:OrFloat) { T.type_alias { Float } }
22
+ in Symbol
23
+ mod.define_sorbet_constant!(:TaggedSymbol) { T.type_alias { Symbol } }
24
+ mod.define_sorbet_constant!(:OrSymbol) { T.type_alias { T.any(Symbol, String) } }
25
+ else
26
+ end
27
+ end
28
+ else
29
+ end
30
+ end
31
+
32
+ Vatsense::Internal::Util.walk_namespaces(Vatsense::Models)
33
+ .lazy
34
+ .grep(Vatsense::Internal::Type::Union)
35
+ .each do |mod|
36
+ const = :Variants
37
+ next if mod.sorbet_constant_defined?(const)
38
+
39
+ mod.define_sorbet_constant!(const) { T.type_alias { mod.to_sorbet_type } }
40
+ end
41
+
42
+ Country = Vatsense::Models::Country
43
+
44
+ CountryListParams = Vatsense::Models::CountryListParams
45
+
46
+ CountryListProvincesParams = Vatsense::Models::CountryListProvincesParams
47
+
48
+ CreateInvoice = Vatsense::Models::CreateInvoice
49
+
50
+ CurrencyCalculateVatPriceParams = Vatsense::Models::CurrencyCalculateVatPriceParams
51
+
52
+ CurrencyConvertParams = Vatsense::Models::CurrencyConvertParams
53
+
54
+ CurrencyListParams = Vatsense::Models::CurrencyListParams
55
+
56
+ FindRate = Vatsense::Models::FindRate
57
+
58
+ Invoice = Vatsense::Models::Invoice
59
+
60
+ InvoiceAPI = Vatsense::Models::InvoiceAPI
61
+
62
+ InvoiceBusinessInput = Vatsense::Models::InvoiceBusinessInput
63
+
64
+ InvoiceConversionInput = Vatsense::Models::InvoiceConversionInput
65
+
66
+ InvoiceCreateParams = Vatsense::Models::InvoiceCreateParams
67
+
68
+ InvoiceCustomerInput = Vatsense::Models::InvoiceCustomerInput
69
+
70
+ InvoiceDeleteParams = Vatsense::Models::InvoiceDeleteParams
71
+
72
+ InvoiceListParams = Vatsense::Models::InvoiceListParams
73
+
74
+ InvoiceResponse = Vatsense::Models::InvoiceResponse
75
+
76
+ InvoiceRetrieveParams = Vatsense::Models::InvoiceRetrieveParams
77
+
78
+ InvoiceUpdateParams = Vatsense::Models::InvoiceUpdateParams
79
+
80
+ Rate = Vatsense::Models::Rate
81
+
82
+ RateCalculatePriceParams = Vatsense::Models::RateCalculatePriceParams
83
+
84
+ RateDetailsParams = Vatsense::Models::RateDetailsParams
85
+
86
+ RateFindParams = Vatsense::Models::RateFindParams
87
+
88
+ RateListParams = Vatsense::Models::RateListParams
89
+
90
+ RateListTypesParams = Vatsense::Models::RateListTypesParams
91
+
92
+ RateWithTaxRate = Vatsense::Models::RateWithTaxRate
93
+
94
+ SandboxGenerateKeyParams = Vatsense::Models::SandboxGenerateKeyParams
95
+
96
+ TaxRate = Vatsense::Models::TaxRate
97
+
98
+ UsageRetrieveParams = Vatsense::Models::UsageRetrieveParams
99
+
100
+ ValidateCheckParams = Vatsense::Models::ValidateCheckParams
101
+
102
+ VatPrice = Vatsense::Models::VatPrice
103
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vatsense
4
+ # Specify HTTP behaviour to use for a specific request. These options supplement
5
+ # or override those provided at the client level.
6
+ #
7
+ # When making a request, you can pass an actual {RequestOptions} instance, or
8
+ # simply pass a Hash with symbol keys matching the attributes on this class.
9
+ class RequestOptions < Vatsense::Internal::Type::BaseModel
10
+ # @api private
11
+ #
12
+ # @param opts [Vatsense::RequestOptions, Hash{Symbol=>Object}]
13
+ #
14
+ # @raise [ArgumentError]
15
+ def self.validate!(opts)
16
+ case opts
17
+ in Vatsense::RequestOptions | Hash
18
+ opts.to_h.each_key do |k|
19
+ unless fields.include?(k)
20
+ raise ArgumentError.new("Request `opts` keys must be one of #{fields.keys}, got #{k.inspect}")
21
+ end
22
+ end
23
+ else
24
+ raise ArgumentError.new("Request `opts` must be a Hash or RequestOptions, got #{opts.inspect}")
25
+ end
26
+ end
27
+
28
+ # @!attribute idempotency_key
29
+ # Idempotency key to send with request and all associated retries. Will only be
30
+ # sent for write requests.
31
+ #
32
+ # @return [String, nil]
33
+ optional :idempotency_key, String
34
+
35
+ # @!attribute extra_query
36
+ # Extra query params to send with the request. These are `.merge`’d into any
37
+ # `query` given at the client level.
38
+ #
39
+ # @return [Hash{String=>Array<String>, String, nil}, nil]
40
+ optional :extra_query, Vatsense::Internal::Type::HashOf[Vatsense::Internal::Type::ArrayOf[String]]
41
+
42
+ # @!attribute extra_headers
43
+ # Extra headers to send with the request. These are `.merged`’d into any
44
+ # `extra_headers` given at the client level.
45
+ #
46
+ # @return [Hash{String=>String, nil}, nil]
47
+ optional :extra_headers, Vatsense::Internal::Type::HashOf[String, nil?: true]
48
+
49
+ # @!attribute extra_body
50
+ # Extra data to send with the request. These are deep merged into any data
51
+ # generated as part of the normal request.
52
+ #
53
+ # @return [Object, nil]
54
+ optional :extra_body, Vatsense::Internal::Type::HashOf[Vatsense::Internal::Type::Unknown]
55
+
56
+ # @!attribute max_retries
57
+ # Maximum number of retries to attempt after a failed initial request.
58
+ #
59
+ # @return [Integer, nil]
60
+ optional :max_retries, Integer
61
+
62
+ # @!attribute timeout
63
+ # Request timeout in seconds.
64
+ #
65
+ # @return [Float, nil]
66
+ optional :timeout, Float
67
+
68
+ # @!method initialize(values = {})
69
+ # Returns a new instance of RequestOptions.
70
+ #
71
+ # @param values [Hash{Symbol=>Object}]
72
+
73
+ define_sorbet_constant!(:OrHash) do
74
+ T.type_alias { T.any(Vatsense::RequestOptions, Vatsense::Internal::AnyHash) }
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vatsense
4
+ module Resources
5
+ # Country and province information
6
+ class Countries
7
+ # Some parameter documentations has been truncated, see
8
+ # {Vatsense::Models::CountryListParams} for more details.
9
+ #
10
+ # Returns a list of all countries, including whether they are subject to VAT/GST
11
+ # and whether they are subject to EU VAT. Each country is returned as a country
12
+ # object.
13
+ #
14
+ # You can optionally filter by country code or IP address.
15
+ #
16
+ # @overload list(country_code: nil, ip_address: nil, request_options: {})
17
+ #
18
+ # @param country_code [String] A 2-character ISO 3166-1 alpha-2 country code (e.g. "GB", "FR").
19
+ #
20
+ # @param ip_address [String] An IPv4 or IPv6 address. If provided, the country will be determined from the IP
21
+ #
22
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
23
+ #
24
+ # @return [Vatsense::Models::CountryListResponse]
25
+ #
26
+ # @see Vatsense::Models::CountryListParams
27
+ def list(params = {})
28
+ parsed, options = Vatsense::CountryListParams.dump_request(params)
29
+ query = Vatsense::Internal::Util.encode_query_params(parsed)
30
+ @client.request(
31
+ method: :get,
32
+ path: "countries",
33
+ query: query,
34
+ model: Vatsense::Models::CountryListResponse,
35
+ options: options
36
+ )
37
+ end
38
+
39
+ # Retrieve a list of all provinces within a given country.
40
+ #
41
+ # @overload list_provinces(country_code:, request_options: {})
42
+ #
43
+ # @param country_code [String] A 2-character ISO 3166-1 alpha-2 country code (e.g. "CA").
44
+ #
45
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
46
+ #
47
+ # @return [Vatsense::Models::CountryListProvincesResponse]
48
+ #
49
+ # @see Vatsense::Models::CountryListProvincesParams
50
+ def list_provinces(params)
51
+ parsed, options = Vatsense::CountryListProvincesParams.dump_request(params)
52
+ query = Vatsense::Internal::Util.encode_query_params(parsed)
53
+ @client.request(
54
+ method: :get,
55
+ path: "countries/provinces",
56
+ query: query,
57
+ model: Vatsense::Models::CountryListProvincesResponse,
58
+ options: options
59
+ )
60
+ end
61
+
62
+ # @api private
63
+ #
64
+ # @param client [Vatsense::Client]
65
+ def initialize(client:)
66
+ @client = client
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vatsense
4
+ module Resources
5
+ # Currency exchange rates and conversion
6
+ class Currency
7
+ # Some parameter documentations has been truncated, see
8
+ # {Vatsense::Models::CurrencyListParams} for more details.
9
+ #
10
+ # Returns a list of all currency conversion rates sourced from HMRC (GBP) and the
11
+ # European Central Bank (EUR).
12
+ #
13
+ # You can optionally filter by source and target currency.
14
+ #
15
+ # @overload list(from: nil, to: nil, request_options: {})
16
+ #
17
+ # @param from [String] The 3-character currency code(s) to convert from (e.g. "USD", "CAD").
18
+ #
19
+ # @param to [Symbol, Vatsense::Models::CurrencyListParams::To] The 3-character target currency code. Must be either "GBP" or "EUR".
20
+ #
21
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
22
+ #
23
+ # @return [Vatsense::Models::CurrencyListResponse]
24
+ #
25
+ # @see Vatsense::Models::CurrencyListParams
26
+ def list(params = {})
27
+ parsed, options = Vatsense::CurrencyListParams.dump_request(params)
28
+ query = Vatsense::Internal::Util.encode_query_params(parsed)
29
+ @client.request(
30
+ method: :get,
31
+ path: "currency",
32
+ query: query,
33
+ model: Vatsense::Models::CurrencyListResponse,
34
+ options: options
35
+ )
36
+ end
37
+
38
+ # Some parameter documentations has been truncated, see
39
+ # {Vatsense::Models::CurrencyCalculateVatPriceParams} for more details.
40
+ #
41
+ # Calculate the inclusive and exclusive VAT price on a given amount and VAT rate.
42
+ # This is a standalone calculation that does not look up rates by country.
43
+ #
44
+ # @overload calculate_vat_price(price:, tax_type:, vat_rate:, request_options: {})
45
+ #
46
+ # @param price [String] The price to calculate on. Must be a string with exactly 2 decimal places (e.g.
47
+ #
48
+ # @param tax_type [Symbol, Vatsense::Models::CurrencyCalculateVatPriceParams::TaxType] Whether the provided price is inclusive or exclusive of VAT.
49
+ #
50
+ # @param vat_rate [Float] A percentage VAT rate to use for the calculation.
51
+ #
52
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
53
+ #
54
+ # @return [Vatsense::Models::CurrencyCalculateVatPriceResponse]
55
+ #
56
+ # @see Vatsense::Models::CurrencyCalculateVatPriceParams
57
+ def calculate_vat_price(params)
58
+ parsed, options = Vatsense::CurrencyCalculateVatPriceParams.dump_request(params)
59
+ query = Vatsense::Internal::Util.encode_query_params(parsed)
60
+ @client.request(
61
+ method: :get,
62
+ path: "currency/price",
63
+ query: query,
64
+ model: Vatsense::Models::CurrencyCalculateVatPriceResponse,
65
+ options: options
66
+ )
67
+ end
68
+
69
+ # Some parameter documentations has been truncated, see
70
+ # {Vatsense::Models::CurrencyConvertParams} for more details.
71
+ #
72
+ # Convert a foreign currency amount to either GBP or EUR using official exchange
73
+ # rates.
74
+ #
75
+ # GBP rates are from HMRC (updated on the 1st of every month). EUR rates are from
76
+ # the European Central Bank (updated around 16:00 CET on working days).
77
+ #
78
+ # @overload convert(amount:, from:, to:, request_options: {})
79
+ #
80
+ # @param amount [String] The amount to convert. Must be a string with exactly 2 decimal places (e.g. "39.
81
+ #
82
+ # @param from [String] The 3-character source currency code (e.g. "USD", "CAD").
83
+ #
84
+ # @param to [Symbol, Vatsense::Models::CurrencyConvertParams::To] The 3-character target currency code. Must be either "GBP" or "EUR".
85
+ #
86
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
87
+ #
88
+ # @return [Vatsense::Models::CurrencyConvertResponse]
89
+ #
90
+ # @see Vatsense::Models::CurrencyConvertParams
91
+ def convert(params)
92
+ parsed, options = Vatsense::CurrencyConvertParams.dump_request(params)
93
+ query = Vatsense::Internal::Util.encode_query_params(parsed)
94
+ @client.request(
95
+ method: :get,
96
+ path: "currency/convert",
97
+ query: query,
98
+ model: Vatsense::Models::CurrencyConvertResponse,
99
+ options: options
100
+ )
101
+ end
102
+
103
+ # @api private
104
+ #
105
+ # @param client [Vatsense::Client]
106
+ def initialize(client:)
107
+ @client = client
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vatsense
4
+ module Resources
5
+ class Invoice
6
+ # VAT-compliant invoice management
7
+ class Item
8
+ # Retrieve a specific line item from an invoice.
9
+ #
10
+ # @overload retrieve(item_id, invoice_id:, request_options: {})
11
+ #
12
+ # @param item_id [String] The unique identifier of the invoice item.
13
+ #
14
+ # @param invoice_id [String] The unique identifier of the invoice.
15
+ #
16
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
17
+ #
18
+ # @return [Vatsense::Models::Invoice::ItemRetrieveResponse]
19
+ #
20
+ # @see Vatsense::Models::Invoice::ItemRetrieveParams
21
+ def retrieve(item_id, params)
22
+ parsed, options = Vatsense::Invoice::ItemRetrieveParams.dump_request(params)
23
+ invoice_id =
24
+ parsed.delete(:invoice_id) do
25
+ raise ArgumentError.new("missing required path argument #{_1}")
26
+ end
27
+ @client.request(
28
+ method: :get,
29
+ path: ["invoice/%1$s/item/%2$s", invoice_id, item_id],
30
+ model: Vatsense::Models::Invoice::ItemRetrieveResponse,
31
+ options: options
32
+ )
33
+ end
34
+
35
+ # Update a specific line item on an invoice.
36
+ #
37
+ # @overload update(item_id, invoice_id:, item:, price_each:, quantity:, vat_rate:, discount_rate: nil, request_options: {})
38
+ #
39
+ # @param item_id [String] Path param: The unique identifier of the invoice item.
40
+ #
41
+ # @param invoice_id [String] Path param: The unique identifier of the invoice.
42
+ #
43
+ # @param item [String] Body param: The description of the line item.
44
+ #
45
+ # @param price_each [Float] Body param: The price per item. Must be a decimal with 2 decimal places.
46
+ #
47
+ # @param quantity [Float] Body param: The quantity of the item.
48
+ #
49
+ # @param vat_rate [Float] Body param: A percentage VAT rate for this item.
50
+ #
51
+ # @param discount_rate [Float] Body param: A percentage discount to apply to the price.
52
+ #
53
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
54
+ #
55
+ # @return [Vatsense::Models::InvoiceResponse]
56
+ #
57
+ # @see Vatsense::Models::Invoice::ItemUpdateParams
58
+ def update(item_id, params)
59
+ parsed, options = Vatsense::Invoice::ItemUpdateParams.dump_request(params)
60
+ invoice_id =
61
+ parsed.delete(:invoice_id) do
62
+ raise ArgumentError.new("missing required path argument #{_1}")
63
+ end
64
+ @client.request(
65
+ method: :patch,
66
+ path: ["invoice/%1$s/item/%2$s", invoice_id, item_id],
67
+ body: parsed,
68
+ model: Vatsense::InvoiceResponse,
69
+ options: options
70
+ )
71
+ end
72
+
73
+ # Remove a specific line item from an invoice.
74
+ #
75
+ # @overload delete(item_id, invoice_id:, request_options: {})
76
+ #
77
+ # @param item_id [String] The unique identifier of the invoice item.
78
+ #
79
+ # @param invoice_id [String] The unique identifier of the invoice.
80
+ #
81
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
82
+ #
83
+ # @return [Vatsense::Models::InvoiceResponse]
84
+ #
85
+ # @see Vatsense::Models::Invoice::ItemDeleteParams
86
+ def delete(item_id, params)
87
+ parsed, options = Vatsense::Invoice::ItemDeleteParams.dump_request(params)
88
+ invoice_id =
89
+ parsed.delete(:invoice_id) do
90
+ raise ArgumentError.new("missing required path argument #{_1}")
91
+ end
92
+ @client.request(
93
+ method: :delete,
94
+ path: ["invoice/%1$s/item/%2$s", invoice_id, item_id],
95
+ model: Vatsense::InvoiceResponse,
96
+ options: options
97
+ )
98
+ end
99
+
100
+ # Add one or more line items to an existing invoice.
101
+ #
102
+ # @overload add(invoice_id, items:, request_options: {})
103
+ #
104
+ # @param invoice_id [String] The unique identifier of the invoice.
105
+ #
106
+ # @param items [Array<Vatsense::Models::Invoice::InvoiceItemInput>]
107
+ #
108
+ # @param request_options [Vatsense::RequestOptions, Hash{Symbol=>Object}, nil]
109
+ #
110
+ # @return [Vatsense::Models::InvoiceResponse]
111
+ #
112
+ # @see Vatsense::Models::Invoice::ItemAddParams
113
+ def add(invoice_id, params)
114
+ parsed, options = Vatsense::Invoice::ItemAddParams.dump_request(params)
115
+ @client.request(
116
+ method: :post,
117
+ path: ["invoice/%1$s/item", invoice_id],
118
+ body: parsed,
119
+ model: Vatsense::InvoiceResponse,
120
+ options: options
121
+ )
122
+ end
123
+
124
+ # @api private
125
+ #
126
+ # @param client [Vatsense::Client]
127
+ def initialize(client:)
128
+ @client = client
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end