tax_conformance_kit 0.1.0 → 0.2.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 (431) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -0
  3. data/README.md +23 -11
  4. data/bin/taxctl +0 -0
  5. data/data/kind-registry.v1.json +350 -0
  6. data/data/regulation/es/impuesto_estancias_turisticas/catalonia/barcelona_city/2026-04-01.json +168 -0
  7. data/data/regulation/es/impuesto_estancias_turisticas/catalonia/barcelona_city/conformance/dutch_operator_barcelona_hotel_5_star.json +33 -0
  8. data/data/regulation/es/impuesto_estancias_turisticas/catalonia/barcelona_city/conformance/tourist_home_age_17_taxed.json +28 -0
  9. data/data/regulation/es/impuesto_estancias_turisticas/catalonia/rest_of_catalonia/2026-04-01.json +183 -0
  10. data/data/regulation/es/impuesto_estancias_turisticas/catalonia/rest_of_catalonia/conformance/barcelona_city_excluded.json +24 -0
  11. data/data/regulation/es/impuesto_estancias_turisticas/catalonia/rest_of_catalonia/conformance/girona_hotel_4_star.json +28 -0
  12. data/data/regulation/es/impuesto_turismo_sostenible/balearic_islands/2025-05-17.json +166 -0
  13. data/data/regulation/es/impuesto_turismo_sostenible/balearic_islands/conformance/palma_hotel_4_star_high_season_long_stay.json +32 -0
  14. data/data/regulation/es/impuesto_turismo_sostenible/balearic_islands/conformance/tourist_home_low_season.json +27 -0
  15. data/data/regulation/nl/gemeentelijke_verordening/aa_en_hunze/2024-11-29.json +64 -0
  16. data/data/regulation/nl/gemeentelijke_verordening/aa_en_hunze/2025-11-28.json +64 -0
  17. data/data/regulation/nl/gemeentelijke_verordening/aalten/2024-12-23.json +70 -0
  18. data/data/regulation/nl/gemeentelijke_verordening/aalten/2025-12-20.json +70 -0
  19. data/data/regulation/nl/gemeentelijke_verordening/achtkarspelen/2025-12-31.json +60 -0
  20. data/data/regulation/nl/gemeentelijke_verordening/alblasserdam/2025-01-01.json +61 -0
  21. data/data/regulation/nl/gemeentelijke_verordening/alblasserdam/2025-12-23.json +103 -0
  22. data/data/regulation/nl/gemeentelijke_verordening/alkmaar/2024-12-18.json +107 -0
  23. data/data/regulation/nl/gemeentelijke_verordening/alkmaar/2025-12-17.json +107 -0
  24. data/data/regulation/nl/gemeentelijke_verordening/almelo/2024-01-01.json +108 -0
  25. data/data/regulation/nl/gemeentelijke_verordening/almelo/2025-01-01.json +105 -0
  26. data/data/regulation/nl/gemeentelijke_verordening/almelo/2026-01-01.json +105 -0
  27. data/data/regulation/nl/gemeentelijke_verordening/almere/2024-12-25.json +71 -0
  28. data/data/regulation/nl/gemeentelijke_verordening/almere/2025-12-24.json +71 -0
  29. data/data/regulation/nl/gemeentelijke_verordening/alphen_aan_den_rijn/2024-12-18.json +63 -0
  30. data/data/regulation/nl/gemeentelijke_verordening/alphen_aan_den_rijn/2025-12-19.json +63 -0
  31. data/data/regulation/nl/gemeentelijke_verordening/alphen_chaam/2025-01-01.json +71 -0
  32. data/data/regulation/nl/gemeentelijke_verordening/alphen_chaam/2026-01-01.json +120 -0
  33. data/data/regulation/nl/gemeentelijke_verordening/ameland/2024-01-01.json +65 -0
  34. data/data/regulation/nl/gemeentelijke_verordening/ameland/2025-01-01.json +65 -0
  35. data/data/regulation/nl/gemeentelijke_verordening/ameland/2026-01-01.json +65 -0
  36. data/data/regulation/nl/gemeentelijke_verordening/amersfoort/2024-12-24.json +61 -0
  37. data/data/regulation/nl/gemeentelijke_verordening/amersfoort/2025-12-20.json +61 -0
  38. data/data/regulation/nl/gemeentelijke_verordening/amstelveen/2025-01-01.json +111 -0
  39. data/data/regulation/nl/gemeentelijke_verordening/amstelveen/2026-01-01.json +111 -0
  40. data/data/regulation/nl/gemeentelijke_verordening/amsterdam/2026-01-01.json +45 -0
  41. data/data/regulation/nl/gemeentelijke_verordening/amsterdam/conformance/percentage_of_base_normal.json +18 -0
  42. data/data/regulation/nl/gemeentelijke_verordening/amsterdam/conformance/percentage_of_base_rounding_up.json +18 -0
  43. data/data/regulation/nl/gemeentelijke_verordening/amsterdam/conformance/quarterly_threshold_below_minimum.assessment.json +43 -0
  44. data/data/regulation/nl/gemeentelijke_verordening/amsterdam/conformance/quarterly_threshold_exact_minimum.assessment.json +43 -0
  45. data/data/regulation/nl/gemeentelijke_verordening/amsterdam/conformance/quarterly_threshold_met.assessment.json +43 -0
  46. data/data/regulation/nl/gemeentelijke_verordening/apeldoorn/2024-04-04.json +140 -0
  47. data/data/regulation/nl/gemeentelijke_verordening/apeldoorn/2024-12-24.json +140 -0
  48. data/data/regulation/nl/gemeentelijke_verordening/apeldoorn/2025-12-30.json +140 -0
  49. data/data/regulation/nl/gemeentelijke_verordening/baarle_nassau/2025-01-01.json +70 -0
  50. data/data/regulation/nl/gemeentelijke_verordening/baarle_nassau/2026-01-01.json +70 -0
  51. data/data/regulation/nl/gemeentelijke_verordening/baarn/2024-12-31.json +78 -0
  52. data/data/regulation/nl/gemeentelijke_verordening/baarn/2025-12-30.json +78 -0
  53. data/data/regulation/nl/gemeentelijke_verordening/barneveld/2024-12-12.json +70 -0
  54. data/data/regulation/nl/gemeentelijke_verordening/barneveld/2025-11-28.json +120 -0
  55. data/data/regulation/nl/gemeentelijke_verordening/beekdaelen/2024-11-22.json +112 -0
  56. data/data/regulation/nl/gemeentelijke_verordening/beekdaelen/2025-11-28.json +112 -0
  57. data/data/regulation/nl/gemeentelijke_verordening/bergen_nh/2024-12-24.json +73 -0
  58. data/data/regulation/nl/gemeentelijke_verordening/bergen_nh/2025-12-18.json +73 -0
  59. data/data/regulation/nl/gemeentelijke_verordening/bergen_op_zoom/2025-12-12.json +72 -0
  60. data/data/regulation/nl/gemeentelijke_verordening/bernheze/2024-01-01.json +63 -0
  61. data/data/regulation/nl/gemeentelijke_verordening/bernheze/2025-03-20.json +67 -0
  62. data/data/regulation/nl/gemeentelijke_verordening/bernheze/2025-12-25.json +67 -0
  63. data/data/regulation/nl/gemeentelijke_verordening/best/2024-11-23.json +70 -0
  64. data/data/regulation/nl/gemeentelijke_verordening/best/2025-11-21.json +70 -0
  65. data/data/regulation/nl/gemeentelijke_verordening/beuningen/2024-12-21.json +66 -0
  66. data/data/regulation/nl/gemeentelijke_verordening/beuningen/2025-12-20.json +66 -0
  67. data/data/regulation/nl/gemeentelijke_verordening/beverwijk/2024-12-19.json +61 -0
  68. data/data/regulation/nl/gemeentelijke_verordening/beverwijk/2025-12-16.json +61 -0
  69. data/data/regulation/nl/gemeentelijke_verordening/blaricum/2024-01-01.json +107 -0
  70. data/data/regulation/nl/gemeentelijke_verordening/blaricum/2025-01-01.json +107 -0
  71. data/data/regulation/nl/gemeentelijke_verordening/blaricum/2026-01-01.json +107 -0
  72. data/data/regulation/nl/gemeentelijke_verordening/bloemendaal/2024-01-04.json +105 -0
  73. data/data/regulation/nl/gemeentelijke_verordening/bloemendaal/2024-12-31.json +105 -0
  74. data/data/regulation/nl/gemeentelijke_verordening/bloemendaal/2026-01-01.json +97 -0
  75. data/data/regulation/nl/gemeentelijke_verordening/boekel/2024-12-18.json +64 -0
  76. data/data/regulation/nl/gemeentelijke_verordening/borger_odoorn/2025-01-01.json +170 -0
  77. data/data/regulation/nl/gemeentelijke_verordening/borger_odoorn/2026-01-01.json +170 -0
  78. data/data/regulation/nl/gemeentelijke_verordening/borne/2025-01-01.json +105 -0
  79. data/data/regulation/nl/gemeentelijke_verordening/borne/2026-01-01.json +105 -0
  80. data/data/regulation/nl/gemeentelijke_verordening/breda/2024-12-25.json +107 -0
  81. data/data/regulation/nl/gemeentelijke_verordening/breda/2026-01-01.json +225 -0
  82. data/data/regulation/nl/gemeentelijke_verordening/breda/2026-03-19.json +170 -0
  83. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/camping_arrangement_guest.json +20 -0
  84. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/camping_arrangement_guest_119_nights.json +20 -0
  85. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/camping_arrangement_guest_120_nights.json +20 -0
  86. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/camping_arrangement_guest_29_nights.json +20 -0
  87. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/camping_arrangement_guest_30_nights.json +20 -0
  88. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/coa_exempt.json +19 -0
  89. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/supervised_minor_group_exempt.json +36 -0
  90. data/data/regulation/nl/gemeentelijke_verordening/breda/conformance/wtza_exempt.json +19 -0
  91. data/data/regulation/nl/gemeentelijke_verordening/bronckhorst/2024-01-01.json +120 -0
  92. data/data/regulation/nl/gemeentelijke_verordening/brummen/2024-01-01.json +152 -0
  93. data/data/regulation/nl/gemeentelijke_verordening/brummen/2025-01-01.json +147 -0
  94. data/data/regulation/nl/gemeentelijke_verordening/brummen/2026-01-01.json +147 -0
  95. data/data/regulation/nl/gemeentelijke_verordening/brunssum/2024-12-19.json +60 -0
  96. data/data/regulation/nl/gemeentelijke_verordening/brunssum/2025-12-25.json +64 -0
  97. data/data/regulation/nl/gemeentelijke_verordening/castricum/2024-11-27.json +108 -0
  98. data/data/regulation/nl/gemeentelijke_verordening/castricum/2025-11-26.json +64 -0
  99. data/data/regulation/nl/gemeentelijke_verordening/coevorden/2025-01-01.json +67 -0
  100. data/data/regulation/nl/gemeentelijke_verordening/culemborg/2024-12-19.json +70 -0
  101. data/data/regulation/nl/gemeentelijke_verordening/culemborg/2025-12-30.json +70 -0
  102. data/data/regulation/nl/gemeentelijke_verordening/de_fryske_marren/2024-12-24.json +77 -0
  103. data/data/regulation/nl/gemeentelijke_verordening/de_fryske_marren/2026-01-01.json +77 -0
  104. data/data/regulation/nl/gemeentelijke_verordening/de_wolden/2025-01-01.json +70 -0
  105. data/data/regulation/nl/gemeentelijke_verordening/de_wolden/2026-01-01.json +70 -0
  106. data/data/regulation/nl/gemeentelijke_verordening/deurne/2024-11-29.json +62 -0
  107. data/data/regulation/nl/gemeentelijke_verordening/deurne/2026-01-01.json +62 -0
  108. data/data/regulation/nl/gemeentelijke_verordening/deventer/2024-11-19.json +105 -0
  109. data/data/regulation/nl/gemeentelijke_verordening/deventer/2025-12-05.json +105 -0
  110. data/data/regulation/nl/gemeentelijke_verordening/diemen/2024-01-01.json +66 -0
  111. data/data/regulation/nl/gemeentelijke_verordening/diemen/2024-12-28.json +66 -0
  112. data/data/regulation/nl/gemeentelijke_verordening/diemen/2026-01-01.json +66 -0
  113. data/data/regulation/nl/gemeentelijke_verordening/dinkelland/2024-12-28.json +167 -0
  114. data/data/regulation/nl/gemeentelijke_verordening/dinkelland/2025-12-30.json +118 -0
  115. data/data/regulation/nl/gemeentelijke_verordening/doesburg/2024-12-25.json +110 -0
  116. data/data/regulation/nl/gemeentelijke_verordening/doesburg/2025-12-24.json +110 -0
  117. data/data/regulation/nl/gemeentelijke_verordening/doetinchem/2024-12-25.json +122 -0
  118. data/data/regulation/nl/gemeentelijke_verordening/doetinchem/2025-12-24.json +122 -0
  119. data/data/regulation/nl/gemeentelijke_verordening/drechterland/2024-12-31.json +67 -0
  120. data/data/regulation/nl/gemeentelijke_verordening/drechterland/2025-12-30.json +67 -0
  121. data/data/regulation/nl/gemeentelijke_verordening/dronten/2024-12-07.json +76 -0
  122. data/data/regulation/nl/gemeentelijke_verordening/dronten/2025-12-05.json +76 -0
  123. data/data/regulation/nl/gemeentelijke_verordening/edam_volendam/2024-12-19.json +122 -0
  124. data/data/regulation/nl/gemeentelijke_verordening/edam_volendam/2025-12-23.json +122 -0
  125. data/data/regulation/nl/gemeentelijke_verordening/ede/2024-12-04.json +108 -0
  126. data/data/regulation/nl/gemeentelijke_verordening/ede/2025-11-29.json +108 -0
  127. data/data/regulation/nl/gemeentelijke_verordening/eemnes/2025-01-01.json +131 -0
  128. data/data/regulation/nl/gemeentelijke_verordening/eemnes/2026-01-01.json +131 -0
  129. data/data/regulation/nl/gemeentelijke_verordening/eindhoven/2025-01-01.json +64 -0
  130. data/data/regulation/nl/gemeentelijke_verordening/eindhoven/2025-12-03.json +61 -0
  131. data/data/regulation/nl/gemeentelijke_verordening/elburg/2024-01-01.json +132 -0
  132. data/data/regulation/nl/gemeentelijke_verordening/emmen/2025-01-01.json +61 -0
  133. data/data/regulation/nl/gemeentelijke_verordening/emmen/2026-01-01.json +61 -0
  134. data/data/regulation/nl/gemeentelijke_verordening/enkhuizen/2024-12-31.json +61 -0
  135. data/data/regulation/nl/gemeentelijke_verordening/enkhuizen/2026-01-01.json +67 -0
  136. data/data/regulation/nl/gemeentelijke_verordening/enschede/2024-01-01.json +108 -0
  137. data/data/regulation/nl/gemeentelijke_verordening/enschede/2025-01-01.json +105 -0
  138. data/data/regulation/nl/gemeentelijke_verordening/enschede/2026-01-01.json +105 -0
  139. data/data/regulation/nl/gemeentelijke_verordening/etten_leur/2024-12-10.json +72 -0
  140. data/data/regulation/nl/gemeentelijke_verordening/geertruidenberg/2024-11-27.json +115 -0
  141. data/data/regulation/nl/gemeentelijke_verordening/geertruidenberg/2025-12-11.json +115 -0
  142. data/data/regulation/nl/gemeentelijke_verordening/geldrop_mierlo/2024-12-17.json +67 -0
  143. data/data/regulation/nl/gemeentelijke_verordening/geldrop_mierlo/2025-11-21.json +67 -0
  144. data/data/regulation/nl/gemeentelijke_verordening/gemert_bakel/2024-01-25.json +67 -0
  145. data/data/regulation/nl/gemeentelijke_verordening/gemert_bakel/2024-01-27.json +67 -0
  146. data/data/regulation/nl/gemeentelijke_verordening/gemert_bakel/2024-12-18.json +67 -0
  147. data/data/regulation/nl/gemeentelijke_verordening/gemert_bakel/2025-12-18.json +67 -0
  148. data/data/regulation/nl/gemeentelijke_verordening/gilze_en_rijen/2025-01-01.json +108 -0
  149. data/data/regulation/nl/gemeentelijke_verordening/gilze_en_rijen/2025-12-25.json +120 -0
  150. data/data/regulation/nl/gemeentelijke_verordening/goes/2024-12-29.json +69 -0
  151. data/data/regulation/nl/gemeentelijke_verordening/goes/2025-12-26.json +69 -0
  152. data/data/regulation/nl/gemeentelijke_verordening/gooise_meren/2024-12-14.json +70 -0
  153. data/data/regulation/nl/gemeentelijke_verordening/gooise_meren/2026-01-01.json +70 -0
  154. data/data/regulation/nl/gemeentelijke_verordening/gorinchem/2025-12-25.json +100 -0
  155. data/data/regulation/nl/gemeentelijke_verordening/gouda/2024-12-17.json +64 -0
  156. data/data/regulation/nl/gemeentelijke_verordening/gouda/2025-12-16.json +64 -0
  157. data/data/regulation/nl/gemeentelijke_verordening/haaksbergen/2024-01-01.json +120 -0
  158. data/data/regulation/nl/gemeentelijke_verordening/haaksbergen/2025-01-01.json +117 -0
  159. data/data/regulation/nl/gemeentelijke_verordening/haaksbergen/2026-01-01.json +117 -0
  160. data/data/regulation/nl/gemeentelijke_verordening/haarlem/2024-12-28.json +193 -0
  161. data/data/regulation/nl/gemeentelijke_verordening/haarlem/2025-12-24.json +191 -0
  162. data/data/regulation/nl/gemeentelijke_verordening/haarlemmermeer/2024-12-07.json +61 -0
  163. data/data/regulation/nl/gemeentelijke_verordening/haarlemmermeer/2025-12-11.json +61 -0
  164. data/data/regulation/nl/gemeentelijke_verordening/halderberge/2024-12-20.json +70 -0
  165. data/data/regulation/nl/gemeentelijke_verordening/halderberge/2025-12-24.json +70 -0
  166. data/data/regulation/nl/gemeentelijke_verordening/hardenberg/2025-12-25.json +67 -0
  167. data/data/regulation/nl/gemeentelijke_verordening/harderwijk/2024-12-21.json +70 -0
  168. data/data/regulation/nl/gemeentelijke_verordening/harderwijk/2025-12-20.json +70 -0
  169. data/data/regulation/nl/gemeentelijke_verordening/harlingen/2024-12-17.json +64 -0
  170. data/data/regulation/nl/gemeentelijke_verordening/harlingen/2025-12-10.json +64 -0
  171. data/data/regulation/nl/gemeentelijke_verordening/heemskerk/2024-12-18.json +61 -0
  172. data/data/regulation/nl/gemeentelijke_verordening/heemskerk/2025-12-19.json +61 -0
  173. data/data/regulation/nl/gemeentelijke_verordening/heemstede/2025-01-01.json +64 -0
  174. data/data/regulation/nl/gemeentelijke_verordening/heemstede/2025-12-23.json +64 -0
  175. data/data/regulation/nl/gemeentelijke_verordening/heeze_leende/2024-12-20.json +193 -0
  176. data/data/regulation/nl/gemeentelijke_verordening/heeze_leende/2025-12-04.json +61 -0
  177. data/data/regulation/nl/gemeentelijke_verordening/heiloo/2024-11-27.json +61 -0
  178. data/data/regulation/nl/gemeentelijke_verordening/heiloo/2025-11-14.json +61 -0
  179. data/data/regulation/nl/gemeentelijke_verordening/helmond/2024-01-01.json +109 -0
  180. data/data/regulation/nl/gemeentelijke_verordening/helmond/2025-01-01.json +109 -0
  181. data/data/regulation/nl/gemeentelijke_verordening/helmond/2026-01-01.json +109 -0
  182. data/data/regulation/nl/gemeentelijke_verordening/het_hogeland/2026-01-01.json +61 -0
  183. data/data/regulation/nl/gemeentelijke_verordening/heumen/2025-01-01.json +64 -0
  184. data/data/regulation/nl/gemeentelijke_verordening/heusden/2024-01-01.json +172 -0
  185. data/data/regulation/nl/gemeentelijke_verordening/heusden/2025-01-01.json +172 -0
  186. data/data/regulation/nl/gemeentelijke_verordening/heusden/2026-01-01.json +152 -0
  187. data/data/regulation/nl/gemeentelijke_verordening/hoeksche_waard/2024-12-31.json +62 -0
  188. data/data/regulation/nl/gemeentelijke_verordening/hoeksche_waard/2025-12-24.json +59 -0
  189. data/data/regulation/nl/gemeentelijke_verordening/hof_van_twente/2024-01-01.json +108 -0
  190. data/data/regulation/nl/gemeentelijke_verordening/hoogeveen/2025-01-01.json +70 -0
  191. data/data/regulation/nl/gemeentelijke_verordening/hoogeveen/2026-01-01.json +70 -0
  192. data/data/regulation/nl/gemeentelijke_verordening/houten/2024-12-19.json +65 -0
  193. data/data/regulation/nl/gemeentelijke_verordening/houten/2025-12-23.json +65 -0
  194. data/data/regulation/nl/gemeentelijke_verordening/huizen/2024-11-24.json +119 -0
  195. data/data/regulation/nl/gemeentelijke_verordening/huizen/2025-11-16.json +119 -0
  196. data/data/regulation/nl/gemeentelijke_verordening/hulst/2024-11-27.json +117 -0
  197. data/data/regulation/nl/gemeentelijke_verordening/hulst/2025-11-26.json +117 -0
  198. data/data/regulation/nl/gemeentelijke_verordening/kampen/2024-11-20.json +60 -0
  199. data/data/regulation/nl/gemeentelijke_verordening/kampen/2025-11-12.json +60 -0
  200. data/data/regulation/nl/gemeentelijke_verordening/katwijk/2024-12-25.json +122 -0
  201. data/data/regulation/nl/gemeentelijke_verordening/katwijk/2025-12-12.json +122 -0
  202. data/data/regulation/nl/gemeentelijke_verordening/koggenland/2024-11-16.json +59 -0
  203. data/data/regulation/nl/gemeentelijke_verordening/krimpenerwaard/2024-01-01.json +64 -0
  204. data/data/regulation/nl/gemeentelijke_verordening/krimpenerwaard/2025-01-01.json +64 -0
  205. data/data/regulation/nl/gemeentelijke_verordening/krimpenerwaard/2026-01-01.json +61 -0
  206. data/data/regulation/nl/gemeentelijke_verordening/landgraaf/2024-01-01.json +64 -0
  207. data/data/regulation/nl/gemeentelijke_verordening/landgraaf/2025-01-01.json +64 -0
  208. data/data/regulation/nl/gemeentelijke_verordening/landgraaf/2026-01-01.json +66 -0
  209. data/data/regulation/nl/gemeentelijke_verordening/landsmeer/2025-01-03.json +72 -0
  210. data/data/regulation/nl/gemeentelijke_verordening/landsmeer/2025-12-30.json +72 -0
  211. data/data/regulation/nl/gemeentelijke_verordening/leeuwarden/2024-12-17.json +68 -0
  212. data/data/regulation/nl/gemeentelijke_verordening/leeuwarden/2025-12-02.json +74 -0
  213. data/data/regulation/nl/gemeentelijke_verordening/leiden/2025-12-20.json +105 -0
  214. data/data/regulation/nl/gemeentelijke_verordening/leiderdorp/2024-12-24.json +105 -0
  215. data/data/regulation/nl/gemeentelijke_verordening/leiderdorp/2025-12-24.json +105 -0
  216. data/data/regulation/nl/gemeentelijke_verordening/leidschendam_voorburg/2024-01-01.json +110 -0
  217. data/data/regulation/nl/gemeentelijke_verordening/leidschendam_voorburg/2025-01-01.json +110 -0
  218. data/data/regulation/nl/gemeentelijke_verordening/leidschendam_voorburg/2026-01-01.json +110 -0
  219. data/data/regulation/nl/gemeentelijke_verordening/leusden/2024-01-01.json +66 -0
  220. data/data/regulation/nl/gemeentelijke_verordening/leusden/2025-01-01.json +66 -0
  221. data/data/regulation/nl/gemeentelijke_verordening/leusden/2026-01-01.json +108 -0
  222. data/data/regulation/nl/gemeentelijke_verordening/lingewaard/2024-01-01.json +61 -0
  223. data/data/regulation/nl/gemeentelijke_verordening/lingewaard/2025-01-01.json +61 -0
  224. data/data/regulation/nl/gemeentelijke_verordening/lochem/2024-01-01.json +110 -0
  225. data/data/regulation/nl/gemeentelijke_verordening/lochem/2025-01-01.json +69 -0
  226. data/data/regulation/nl/gemeentelijke_verordening/lochem/2026-01-01.json +69 -0
  227. data/data/regulation/nl/gemeentelijke_verordening/loon_op_zand/2024-12-25.json +256 -0
  228. data/data/regulation/nl/gemeentelijke_verordening/loon_op_zand/2025-12-24.json +196 -0
  229. data/data/regulation/nl/gemeentelijke_verordening/lopik/2024-01-01.json +64 -0
  230. data/data/regulation/nl/gemeentelijke_verordening/lopik/2024-12-24.json +64 -0
  231. data/data/regulation/nl/gemeentelijke_verordening/lopik/2025-12-24.json +64 -0
  232. data/data/regulation/nl/gemeentelijke_verordening/maashorst/2024-12-19.json +118 -0
  233. data/data/regulation/nl/gemeentelijke_verordening/maashorst/2025-12-30.json +118 -0
  234. data/data/regulation/nl/gemeentelijke_verordening/maassluis/2024-01-01.json +57 -0
  235. data/data/regulation/nl/gemeentelijke_verordening/maassluis/2025-01-01.json +57 -0
  236. data/data/regulation/nl/gemeentelijke_verordening/maassluis/2026-01-01.json +57 -0
  237. data/data/regulation/nl/gemeentelijke_verordening/meerssen/2024-12-27.json +68 -0
  238. data/data/regulation/nl/gemeentelijke_verordening/midden_drenthe/2025-12-23.json +117 -0
  239. data/data/regulation/nl/gemeentelijke_verordening/midden_groningen/2024-12-31.json +105 -0
  240. data/data/regulation/nl/gemeentelijke_verordening/midden_groningen/2025-12-29.json +105 -0
  241. data/data/regulation/nl/gemeentelijke_verordening/molenlanden/2024-01-01.json +64 -0
  242. data/data/regulation/nl/gemeentelijke_verordening/molenlanden/2025-01-01.json +64 -0
  243. data/data/regulation/nl/gemeentelijke_verordening/nederweert/2024-12-21.json +64 -0
  244. data/data/regulation/nl/gemeentelijke_verordening/nederweert/2025-12-18.json +64 -0
  245. data/data/regulation/nl/gemeentelijke_verordening/nieuwegein/2024-12-24.json +64 -0
  246. data/data/regulation/nl/gemeentelijke_verordening/nieuwegein/2025-12-30.json +64 -0
  247. data/data/regulation/nl/gemeentelijke_verordening/noardeast_frysl/303/242n/2025-01-01.json +77 -0
  248. data/data/regulation/nl/gemeentelijke_verordening/noardeast_frysl/303/242n/2025-12-24.json +77 -0
  249. data/data/regulation/nl/gemeentelijke_verordening/noord_beveland/2024-07-17.json +67 -0
  250. data/data/regulation/nl/gemeentelijke_verordening/noord_beveland/2025-01-01.json +67 -0
  251. data/data/regulation/nl/gemeentelijke_verordening/noord_beveland/2025-12-24.json +67 -0
  252. data/data/regulation/nl/gemeentelijke_verordening/nuenen_gerwen_en_nederwetten/2024-11-28.json +57 -0
  253. data/data/regulation/nl/gemeentelijke_verordening/nuenen_gerwen_en_nederwetten/2025-11-20.json +57 -0
  254. data/data/regulation/nl/gemeentelijke_verordening/oegstgeest/2024-12-18.json +64 -0
  255. data/data/regulation/nl/gemeentelijke_verordening/oegstgeest/2025-12-23.json +64 -0
  256. data/data/regulation/nl/gemeentelijke_verordening/oirschot/2024-12-19.json +188 -0
  257. data/data/regulation/nl/gemeentelijke_verordening/oldambt/2024-01-01.json +73 -0
  258. data/data/regulation/nl/gemeentelijke_verordening/oldambt/2025-01-01.json +73 -0
  259. data/data/regulation/nl/gemeentelijke_verordening/oldebroek/2025-01-01.json +67 -0
  260. data/data/regulation/nl/gemeentelijke_verordening/oldebroek/2025-12-27.json +67 -0
  261. data/data/regulation/nl/gemeentelijke_verordening/oldenzaal/2025-01-01.json +59 -0
  262. data/data/regulation/nl/gemeentelijke_verordening/olst_wijhe/2024-12-25.json +67 -0
  263. data/data/regulation/nl/gemeentelijke_verordening/olst_wijhe/2025-12-23.json +67 -0
  264. data/data/regulation/nl/gemeentelijke_verordening/ommen/2024-12-28.json +70 -0
  265. data/data/regulation/nl/gemeentelijke_verordening/ommen/2025-12-25.json +70 -0
  266. data/data/regulation/nl/gemeentelijke_verordening/oost_gelre/2024-01-01.json +57 -0
  267. data/data/regulation/nl/gemeentelijke_verordening/oost_gelre/2025-01-01.json +57 -0
  268. data/data/regulation/nl/gemeentelijke_verordening/oost_gelre/2026-01-01.json +57 -0
  269. data/data/regulation/nl/gemeentelijke_verordening/oosterhout/2024-12-28.json +112 -0
  270. data/data/regulation/nl/gemeentelijke_verordening/oosterhout/2025-12-18.json +68 -0
  271. data/data/regulation/nl/gemeentelijke_verordening/oostzaan/2025-01-01.json +60 -0
  272. data/data/regulation/nl/gemeentelijke_verordening/oostzaan/2025-12-30.json +60 -0
  273. data/data/regulation/nl/gemeentelijke_verordening/opmeer/2024-12-25.json +59 -0
  274. data/data/regulation/nl/gemeentelijke_verordening/opmeer/2025-12-19.json +59 -0
  275. data/data/regulation/nl/gemeentelijke_verordening/oss/2025-12-17.json +117 -0
  276. data/data/regulation/nl/gemeentelijke_verordening/oude_ijsselstreek/2024-01-01.json +64 -0
  277. data/data/regulation/nl/gemeentelijke_verordening/oude_ijsselstreek/2025-01-01.json +61 -0
  278. data/data/regulation/nl/gemeentelijke_verordening/oude_ijsselstreek/2025-12-30.json +61 -0
  279. data/data/regulation/nl/gemeentelijke_verordening/ouder_amstel/2024-01-01.json +66 -0
  280. data/data/regulation/nl/gemeentelijke_verordening/oudewater/2024-01-01.json +108 -0
  281. data/data/regulation/nl/gemeentelijke_verordening/oudewater/2025-01-01.json +106 -0
  282. data/data/regulation/nl/gemeentelijke_verordening/overbetuwe/2025-01-01.json +73 -0
  283. data/data/regulation/nl/gemeentelijke_verordening/overbetuwe/2026-01-01.json +73 -0
  284. data/data/regulation/nl/gemeentelijke_verordening/papendrecht/2025-01-01.json +61 -0
  285. data/data/regulation/nl/gemeentelijke_verordening/papendrecht/2025-12-17.json +61 -0
  286. data/data/regulation/nl/gemeentelijke_verordening/purmerend/2024-11-21.json +61 -0
  287. data/data/regulation/nl/gemeentelijke_verordening/purmerend/2025-11-25.json +61 -0
  288. data/data/regulation/nl/gemeentelijke_verordening/raalte/2024-01-01.json +67 -0
  289. data/data/regulation/nl/gemeentelijke_verordening/raalte/2025-12-02.json +67 -0
  290. data/data/regulation/nl/gemeentelijke_verordening/reimerswaal/2024-01-01.json +67 -0
  291. data/data/regulation/nl/gemeentelijke_verordening/reimerswaal/2025-01-01.json +67 -0
  292. data/data/regulation/nl/gemeentelijke_verordening/reimerswaal/2026-01-01.json +67 -0
  293. data/data/regulation/nl/gemeentelijke_verordening/renswoude/2025-01-01.json +53 -0
  294. data/data/regulation/nl/gemeentelijke_verordening/reusel_de_mierden/2024-01-01.json +57 -0
  295. data/data/regulation/nl/gemeentelijke_verordening/reusel_de_mierden/2025-01-01.json +57 -0
  296. data/data/regulation/nl/gemeentelijke_verordening/reusel_de_mierden/2026-01-01.json +61 -0
  297. data/data/regulation/nl/gemeentelijke_verordening/rhenen/2025-12-20.json +64 -0
  298. data/data/regulation/nl/gemeentelijke_verordening/rijssen_holten/2024-12-25.json +70 -0
  299. data/data/regulation/nl/gemeentelijke_verordening/rijssen_holten/2025-12-30.json +70 -0
  300. data/data/regulation/nl/gemeentelijke_verordening/rijswijk/2024-11-21.json +61 -0
  301. data/data/regulation/nl/gemeentelijke_verordening/rijswijk/2025-11-28.json +61 -0
  302. data/data/regulation/nl/gemeentelijke_verordening/roosendaal/2024-12-25.json +64 -0
  303. data/data/regulation/nl/gemeentelijke_verordening/roosendaal/2025-12-24.json +64 -0
  304. data/data/regulation/nl/gemeentelijke_verordening/scherpenzeel/2024-12-20.json +61 -0
  305. data/data/regulation/nl/gemeentelijke_verordening/scherpenzeel/2026-01-01.json +61 -0
  306. data/data/regulation/nl/gemeentelijke_verordening/schiermonnikoog/2024-11-15.json +59 -0
  307. data/data/regulation/nl/gemeentelijke_verordening/schiermonnikoog/2025-12-02.json +59 -0
  308. data/data/regulation/nl/gemeentelijke_verordening/schouwen_duiveland/2024-01-01.json +66 -0
  309. data/data/regulation/nl/gemeentelijke_verordening/schouwen_duiveland/2025-01-01.json +108 -0
  310. data/data/regulation/nl/gemeentelijke_verordening/schouwen_duiveland/2026-01-01.json +64 -0
  311. data/data/regulation/nl/gemeentelijke_verordening/simpelveld/2024-11-21.json +70 -0
  312. data/data/regulation/nl/gemeentelijke_verordening/simpelveld/2025-12-20.json +70 -0
  313. data/data/regulation/nl/gemeentelijke_verordening/sint_michielsgestel/2024-01-01.json +105 -0
  314. data/data/regulation/nl/gemeentelijke_verordening/sint_michielsgestel/2024-12-24.json +105 -0
  315. data/data/regulation/nl/gemeentelijke_verordening/sittard_geleen/2024-11-30.json +110 -0
  316. data/data/regulation/nl/gemeentelijke_verordening/sittard_geleen/2025-12-04.json +110 -0
  317. data/data/regulation/nl/gemeentelijke_verordening/sluis/2024-01-01.json +131 -0
  318. data/data/regulation/nl/gemeentelijke_verordening/sluis/2025-01-01.json +131 -0
  319. data/data/regulation/nl/gemeentelijke_verordening/sluis/2026-01-01.json +131 -0
  320. data/data/regulation/nl/gemeentelijke_verordening/smallingerland/2024-12-28.json +83 -0
  321. data/data/regulation/nl/gemeentelijke_verordening/smallingerland/2025-12-31.json +83 -0
  322. data/data/regulation/nl/gemeentelijke_verordening/someren/2024-12-20.json +118 -0
  323. data/data/regulation/nl/gemeentelijke_verordening/someren/2025-12-19.json +118 -0
  324. data/data/regulation/nl/gemeentelijke_verordening/staphorst/2024-11-30.json +70 -0
  325. data/data/regulation/nl/gemeentelijke_verordening/staphorst/2025-12-03.json +70 -0
  326. data/data/regulation/nl/gemeentelijke_verordening/stede_broec/2024-12-31.json +61 -0
  327. data/data/regulation/nl/gemeentelijke_verordening/stede_broec/2026-01-01.json +67 -0
  328. data/data/regulation/nl/gemeentelijke_verordening/steenbergen/2024-12-19.json +70 -0
  329. data/data/regulation/nl/gemeentelijke_verordening/steenbergen/2025-12-19.json +70 -0
  330. data/data/regulation/nl/gemeentelijke_verordening/stein/2024-12-24.json +108 -0
  331. data/data/regulation/nl/gemeentelijke_verordening/stein/2026-01-01.json +108 -0
  332. data/data/regulation/nl/gemeentelijke_verordening/stichtse_vecht/2024-01-01.json +112 -0
  333. data/data/regulation/nl/gemeentelijke_verordening/stichtse_vecht/2024-12-28.json +112 -0
  334. data/data/regulation/nl/gemeentelijke_verordening/stichtse_vecht/2025-12-25.json +112 -0
  335. data/data/regulation/nl/gemeentelijke_verordening/s/303/272dwest_frysl/303/242n/2025-01-01.json +69 -0
  336. data/data/regulation/nl/gemeentelijke_verordening/s/303/272dwest_frysl/303/242n/2026-01-01.json +69 -0
  337. data/data/regulation/nl/gemeentelijke_verordening/terneuzen/2024-01-01.json +67 -0
  338. data/data/regulation/nl/gemeentelijke_verordening/terneuzen/2025-01-01.json +61 -0
  339. data/data/regulation/nl/gemeentelijke_verordening/terneuzen/2026-01-01.json +61 -0
  340. data/data/regulation/nl/gemeentelijke_verordening/terschelling/2024-12-11.json +69 -0
  341. data/data/regulation/nl/gemeentelijke_verordening/terschelling/2025-12-27.json +69 -0
  342. data/data/regulation/nl/gemeentelijke_verordening/texel/2024-12-27.json +66 -0
  343. data/data/regulation/nl/gemeentelijke_verordening/texel/2026-01-01.json +70 -0
  344. data/data/regulation/nl/gemeentelijke_verordening/tholen/2024-01-01.json +61 -0
  345. data/data/regulation/nl/gemeentelijke_verordening/tilburg/2024-11-27.json +62 -0
  346. data/data/regulation/nl/gemeentelijke_verordening/tilburg/2025-12-10.json +62 -0
  347. data/data/regulation/nl/gemeentelijke_verordening/tubbergen/2025-01-01.json +117 -0
  348. data/data/regulation/nl/gemeentelijke_verordening/tubbergen/2025-12-25.json +118 -0
  349. data/data/regulation/nl/gemeentelijke_verordening/twenterand/2024-01-01.json +70 -0
  350. data/data/regulation/nl/gemeentelijke_verordening/twenterand/2025-01-01.json +67 -0
  351. data/data/regulation/nl/gemeentelijke_verordening/twenterand/2026-01-01.json +67 -0
  352. data/data/regulation/nl/gemeentelijke_verordening/uitgeest/2024-12-20.json +110 -0
  353. data/data/regulation/nl/gemeentelijke_verordening/uitgeest/2025-12-18.json +110 -0
  354. data/data/regulation/nl/gemeentelijke_verordening/uithoorn/2024-01-01.json +57 -0
  355. data/data/regulation/nl/gemeentelijke_verordening/uithoorn/2025-01-01.json +57 -0
  356. data/data/regulation/nl/gemeentelijke_verordening/uithoorn/2026-01-01.json +57 -0
  357. data/data/regulation/nl/gemeentelijke_verordening/uithoorn/conformance/previous_ordinance_last_day.json +18 -0
  358. data/data/regulation/nl/gemeentelijke_verordening/uithoorn/conformance/successor_ordinance_first_day.json +18 -0
  359. data/data/regulation/nl/gemeentelijke_verordening/urk/2024-12-05.json +61 -0
  360. data/data/regulation/nl/gemeentelijke_verordening/urk/2026-01-01.json +61 -0
  361. data/data/regulation/nl/gemeentelijke_verordening/veenendaal/2024-01-01.json +64 -0
  362. data/data/regulation/nl/gemeentelijke_verordening/veenendaal/2024-12-17.json +60 -0
  363. data/data/regulation/nl/gemeentelijke_verordening/veenendaal/2025-12-23.json +64 -0
  364. data/data/regulation/nl/gemeentelijke_verordening/veldhoven/2024-01-01.json +139 -0
  365. data/data/regulation/nl/gemeentelijke_verordening/veldhoven/2025-01-01.json +139 -0
  366. data/data/regulation/nl/gemeentelijke_verordening/velsen/2024-01-01.json +64 -0
  367. data/data/regulation/nl/gemeentelijke_verordening/velsen/2025-01-01.json +64 -0
  368. data/data/regulation/nl/gemeentelijke_verordening/velsen/2026-01-01.json +64 -0
  369. data/data/regulation/nl/gemeentelijke_verordening/vijfheerenlanden/2025-01-01.json +150 -0
  370. data/data/regulation/nl/gemeentelijke_verordening/vijfheerenlanden/2026-01-01.json +150 -0
  371. data/data/regulation/nl/gemeentelijke_verordening/vlaardingen/2024-12-27.json +57 -0
  372. data/data/regulation/nl/gemeentelijke_verordening/vlaardingen/2025-12-20.json +57 -0
  373. data/data/regulation/nl/gemeentelijke_verordening/vlieland/2024-12-20.json +73 -0
  374. data/data/regulation/nl/gemeentelijke_verordening/vlieland/2025-12-19.json +73 -0
  375. data/data/regulation/nl/gemeentelijke_verordening/voerendaal/2025-12-24.json +64 -0
  376. data/data/regulation/nl/gemeentelijke_verordening/voorne_aan_zee/2024-12-25.json +117 -0
  377. data/data/regulation/nl/gemeentelijke_verordening/voorne_aan_zee/2025-11-18.json +117 -0
  378. data/data/regulation/nl/gemeentelijke_verordening/voorschoten/2024-11-28.json +57 -0
  379. data/data/regulation/nl/gemeentelijke_verordening/voorschoten/2025-11-25.json +57 -0
  380. data/data/regulation/nl/gemeentelijke_verordening/voorst/2025-01-01.json +147 -0
  381. data/data/regulation/nl/gemeentelijke_verordening/voorst/2026-01-01.json +147 -0
  382. data/data/regulation/nl/gemeentelijke_verordening/waadhoeke/2024-12-25.json +77 -0
  383. data/data/regulation/nl/gemeentelijke_verordening/waalre/2024-01-01.json +64 -0
  384. data/data/regulation/nl/gemeentelijke_verordening/waalre/2025-01-01.json +64 -0
  385. data/data/regulation/nl/gemeentelijke_verordening/waalre/2026-01-01.json +64 -0
  386. data/data/regulation/nl/gemeentelijke_verordening/waddinxveen/2024-12-20.json +64 -0
  387. data/data/regulation/nl/gemeentelijke_verordening/waddinxveen/2025-12-19.json +64 -0
  388. data/data/regulation/nl/gemeentelijke_verordening/wageningen/2024-12-14.json +59 -0
  389. data/data/regulation/nl/gemeentelijke_verordening/wageningen/2025-12-23.json +67 -0
  390. data/data/regulation/nl/gemeentelijke_verordening/wassenaar/2024-12-21.json +107 -0
  391. data/data/regulation/nl/gemeentelijke_verordening/wassenaar/2025-12-06.json +107 -0
  392. data/data/regulation/nl/gemeentelijke_verordening/waterland/2024-12-28.json +73 -0
  393. data/data/regulation/nl/gemeentelijke_verordening/waterland/2025-12-30.json +73 -0
  394. data/data/regulation/nl/gemeentelijke_verordening/weert/2024-12-24.json +108 -0
  395. data/data/regulation/nl/gemeentelijke_verordening/weert/2025-12-20.json +108 -0
  396. data/data/regulation/nl/gemeentelijke_verordening/west_maas_en_waal/2024-12-20.json +73 -0
  397. data/data/regulation/nl/gemeentelijke_verordening/west_maas_en_waal/2025-12-20.json +73 -0
  398. data/data/regulation/nl/gemeentelijke_verordening/westerveld/2024-12-28.json +158 -0
  399. data/data/regulation/nl/gemeentelijke_verordening/westerwolde/2025-01-01.json +61 -0
  400. data/data/regulation/nl/gemeentelijke_verordening/wierden/2025-12-18.json +66 -0
  401. data/data/regulation/nl/gemeentelijke_verordening/wijk_bij_duurstede/2024-12-21.json +100 -0
  402. data/data/regulation/nl/gemeentelijke_verordening/wijk_bij_duurstede/2025-12-20.json +100 -0
  403. data/data/regulation/nl/gemeentelijke_verordening/winterswijk/2024-12-04.json +131 -0
  404. data/data/regulation/nl/gemeentelijke_verordening/winterswijk/2025-11-08.json +131 -0
  405. data/data/regulation/nl/gemeentelijke_verordening/woensdrecht/2025-01-01.json +64 -0
  406. data/data/regulation/nl/gemeentelijke_verordening/wormerland/2024-12-20.json +64 -0
  407. data/data/regulation/nl/gemeentelijke_verordening/wormerland/2025-12-30.json +64 -0
  408. data/data/regulation/nl/gemeentelijke_verordening/woudenberg/2024-12-25.json +64 -0
  409. data/data/regulation/nl/gemeentelijke_verordening/woudenberg/2025-12-24.json +64 -0
  410. data/data/regulation/nl/gemeentelijke_verordening/zaanstad/2025-12-04.json +179 -0
  411. data/data/regulation/nl/gemeentelijke_verordening/zaltbommel/2024-01-01.json +170 -0
  412. data/data/regulation/nl/gemeentelijke_verordening/zaltbommel/2025-01-01.json +170 -0
  413. data/data/regulation/nl/gemeentelijke_verordening/zaltbommel/2026-01-01.json +170 -0
  414. data/data/regulation/nl/gemeentelijke_verordening/zandvoort/2024-12-24.json +66 -0
  415. data/data/regulation/nl/gemeentelijke_verordening/zandvoort/2025-12-23.json +70 -0
  416. data/data/regulation/nl/gemeentelijke_verordening/zeewolde/2024-12-25.json +111 -0
  417. data/data/regulation/nl/gemeentelijke_verordening/zeewolde/2025-12-24.json +111 -0
  418. data/data/regulation/nl/gemeentelijke_verordening/zeist/2025-12-25.json +108 -0
  419. data/data/regulation/nl/gemeentelijke_verordening/zoetermeer/2024-12-20.json +65 -0
  420. data/data/regulation/nl/gemeentelijke_verordening/zoetermeer/2025-12-19.json +65 -0
  421. data/data/regulation/nl/gemeentelijke_verordening/zuidplas/2026-01-01.json +64 -0
  422. data/data/regulation/nl/gemeentelijke_verordening/zundert/2024-12-19.json +70 -0
  423. data/data/regulation/nl/gemeentelijke_verordening/zundert/2025-12-16.json +70 -0
  424. data/data/regulation/nl/gemeentelijke_verordening/zwartewaterland/2024-11-20.json +73 -0
  425. data/data/regulation/nl/gemeentelijke_verordening/zwartewaterland/2025-11-25.json +73 -0
  426. data/data/regulation/nl/gemeentelijke_verordening/zwolle/2024-12-24.json +110 -0
  427. data/data/regulation/nl/gemeentelijke_verordening/zwolle/2025-12-19.json +110 -0
  428. data/lib/tax_conformance_kit/taxctl_client.rb +19 -1
  429. data/lib/tax_conformance_kit/version.rb +1 -1
  430. data/lib/tax_conformance_kit.rb +16 -0
  431. metadata +431 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a30a2eddf0c383ace1ac9ad16038f9dd531c92ef577cb95c0a8c01f5ec6a7baf
4
- data.tar.gz: 21061dff0f74ab49a0f194304e645d2c015e71352b7bdd32f9e4d47454b7376a
3
+ metadata.gz: a235723261c9de5283189e206244af4fc50b7d163b3f7298116520b54828d3c8
4
+ data.tar.gz: 731f67e297702bf3cfa2819caa842f1f99b00484da1f95ca0d5bbc33805edb05
5
5
  SHA512:
6
- metadata.gz: 5dd8edd5f14f151ace599d3cc088b85ee8be81326280e4d0752c295578c8b665a0257aa87f87536698595a668ddab06f984d33dae4d380e3d331f68d80e89268
7
- data.tar.gz: edd8bcb53f6740ee483389afc0e799f6e54dfc16215e14f5dd7220372bfbbe734eef85cad9e9e4873dd2f227484862964483afa1bfdef4ec56f37403d5e1fbb4
6
+ metadata.gz: f35d5ab45ae4e8b008bb11755af5b3a356628d6f04f677427bd7e86617e6fc17dd30cd1e0b09233fe32a521f6029c969410550ba0395653e219f6522a9f91752
7
+ data.tar.gz: 5c8e06176a28a065201ac3eb110d45814af4cc986aec92033439fbda1c927912d44fe041ac99cb66ebb2fbd57ea8b5d0a31ea2944de0b8a7380116924d3cf570
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Odeva
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -4,7 +4,13 @@ Thin Ruby client for the `tax-conformance-kit` Go runtime.
4
4
 
5
5
  ## Install
6
6
 
7
- Path dependency:
7
+ Bundler (RubyGems):
8
+
9
+ ```ruby
10
+ gem "tax_conformance_kit", "~> 0.2.0"
11
+ ```
12
+
13
+ Path dependency (for local development):
8
14
 
9
15
  ```ruby
10
16
  gem "tax_conformance_kit", path: "../tax-conformance-kit/clients/ruby"
@@ -13,28 +19,34 @@ gem "tax_conformance_kit", path: "../tax-conformance-kit/clients/ruby"
13
19
  Git dependency:
14
20
 
15
21
  ```ruby
16
- gem "tax_conformance_kit", git: "https://github.com/ramones/tax-conformance-kit.git", glob: "clients/ruby/*.gemspec"
22
+ gem "tax_conformance_kit", git: "https://github.com/odeva-labs/tax-conformance-kit.git", glob: "clients/ruby/*.gemspec"
17
23
  ```
18
24
 
19
25
  ## Usage
20
26
 
27
+ Zero-config — the gem ships with the bundled `taxctl` binary and the kind registry:
28
+
21
29
  ```ruby
22
30
  require "tax_conformance_kit"
23
31
 
24
- client = TaxConformanceKit::TaxctlClient.new(
25
- command: ["/path/to/taxctl"],
26
- registry_path: "/path/to/kind-registry.v1.json"
27
- )
28
-
29
- response = client.evaluate(
30
- ruleset: ruleset_hash,
31
- booking_input: booking_input_hash
32
- )
32
+ client = TaxConformanceKit::TaxctlClient.new
33
+ response = client.evaluate(ruleset: ruleset_hash, booking_input: booking_input_hash)
34
+ resolved = client.evaluate_resolved(booking_input: booking_input_hash)
35
+ grouped = client.evaluate_resolved_assessment(assessment_input: assessment_input_hash)
33
36
  ```
34
37
 
38
+ ### Advanced: override `command:`
39
+
35
40
  `command:` may be either:
36
41
 
37
42
  - a binary path string, for example `"/usr/local/bin/taxctl"`
38
43
  - a full argv array, for example `["go", "run", "./cmd/taxctl"]`
39
44
 
45
+ ```ruby
46
+ client = TaxConformanceKit::TaxctlClient.new(
47
+ command: ["/path/to/taxctl"],
48
+ registry_path: "/path/to/kind-registry.v1.json"
49
+ )
50
+ ```
51
+
40
52
  The client does not implement the evaluator. It shells out to the canonical Go runtime and exchanges JSON over stdin/stdout.
data/bin/taxctl ADDED
Binary file
@@ -0,0 +1,350 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://tax-conformance.dev/schemas/kind-registry.v1.json",
4
+ "title": "KindRegistry",
5
+ "description": "Canonical list of calculation.kind and predicate.kind values with their params schemas. Every engine port MUST reject rulesets referencing kinds not present here. Ports MAY implement a subset, but MUST fail loudly on unimplemented-but-registered kinds encountered during evaluation.",
6
+ "type": "object",
7
+ "required": ["registry_version", "calculations", "predicates"],
8
+ "properties": {
9
+ "registry_version": { "const": "v1" },
10
+ "calculations": {
11
+ "type": "object",
12
+ "additionalProperties": { "$ref": "#/$defs/KindEntry" }
13
+ },
14
+ "predicates": {
15
+ "type": "object",
16
+ "additionalProperties": { "$ref": "#/$defs/KindEntry" }
17
+ }
18
+ },
19
+ "$defs": {
20
+ "KindEntry": {
21
+ "type": "object",
22
+ "required": ["description", "params_schema"],
23
+ "properties": {
24
+ "description": { "type": "string" },
25
+ "since": { "type": "string", "description": "Schema version when introduced" },
26
+ "params_schema": {
27
+ "type": "object",
28
+ "description": "JSON Schema (draft 2020-12) for the kind's params object"
29
+ },
30
+ "examples": {
31
+ "type": "array",
32
+ "items": { "type": "object" }
33
+ }
34
+ }
35
+ }
36
+ },
37
+
38
+ "registry_version": "v1",
39
+ "calculations": {
40
+ "generic.per_night": {
41
+ "description": "Flat amount per night.",
42
+ "since": "v1",
43
+ "params_schema": {
44
+ "type": "object",
45
+ "required": ["amount"],
46
+ "properties": {
47
+ "amount": { "type": "number", "minimum": 0 }
48
+ },
49
+ "additionalProperties": false
50
+ }
51
+ },
52
+ "generic.per_person_per_night": {
53
+ "description": "Flat amount per taxable guest per night. Guests = adults + children unless taxable_guest_age_gte narrows the count. max_nights caps the taxable stay units.",
54
+ "since": "v1",
55
+ "params_schema": {
56
+ "type": "object",
57
+ "required": ["amount"],
58
+ "properties": {
59
+ "amount": { "type": "number", "minimum": 0 },
60
+ "max_nights": { "type": "integer", "minimum": 0 },
61
+ "taxable_guest_age_gte": { "type": "integer", "minimum": 0 }
62
+ },
63
+ "additionalProperties": false
64
+ }
65
+ },
66
+ "generic.per_person_per_night_discount_after_nights": {
67
+ "description": "Flat amount per taxable guest per night, with a discounted tail from a configurable night onward. Useful for regimes such as the Balearic Islands where nights 9+ are charged at 50%.",
68
+ "since": "v1",
69
+ "params_schema": {
70
+ "type": "object",
71
+ "required": ["amount", "discount_start_night", "discount_multiplier"],
72
+ "properties": {
73
+ "amount": { "type": "number", "minimum": 0 },
74
+ "discount_start_night": { "type": "integer", "minimum": 1 },
75
+ "discount_multiplier": { "type": "number", "minimum": 0 },
76
+ "max_nights": { "type": "integer", "minimum": 0 },
77
+ "taxable_guest_age_gte": { "type": "integer", "minimum": 0 }
78
+ },
79
+ "additionalProperties": false
80
+ }
81
+ },
82
+ "generic.fixed_amount": {
83
+ "description": "Flat amount per booking.",
84
+ "since": "v1",
85
+ "params_schema": {
86
+ "type": "object",
87
+ "required": ["amount"],
88
+ "properties": {
89
+ "amount": { "type": "number", "minimum": 0 }
90
+ },
91
+ "additionalProperties": false
92
+ }
93
+ },
94
+ "generic.percentage_of_base": {
95
+ "description": "Percentage of a configurable base. IMPORTANT: 'accommodation_fee_exclusive_of_tax' means the taxable base excludes the tourist tax itself (NL ordinances commonly define it this way).",
96
+ "since": "v1",
97
+ "params_schema": {
98
+ "type": "object",
99
+ "required": ["rate_pct", "base"],
100
+ "properties": {
101
+ "rate_pct": { "type": "number", "minimum": 0 },
102
+ "base": {
103
+ "type": "string",
104
+ "enum": [
105
+ "accommodation_fee_exclusive_of_tax",
106
+ "gross_booking_total",
107
+ "subtotal"
108
+ ]
109
+ }
110
+ },
111
+ "additionalProperties": false
112
+ }
113
+ },
114
+ "nl.tiered_by_stay_duration": {
115
+ "description": "Step function over stay length in nights. Tiers are closed-open on max_nights; final tier may omit max_nights. Each tier's amount is the total for the booking (not per-night).",
116
+ "since": "v1",
117
+ "params_schema": {
118
+ "type": "object",
119
+ "required": ["tiers"],
120
+ "properties": {
121
+ "tiers": {
122
+ "type": "array",
123
+ "minItems": 1,
124
+ "items": {
125
+ "type": "object",
126
+ "required": ["amount"],
127
+ "properties": {
128
+ "min_nights": { "type": "integer", "minimum": 0 },
129
+ "max_nights": { "type": "integer", "minimum": 1 },
130
+ "amount": { "type": "number", "minimum": 0 }
131
+ },
132
+ "additionalProperties": false
133
+ }
134
+ }
135
+ },
136
+ "additionalProperties": false
137
+ },
138
+ "examples": [
139
+ {
140
+ "tiers": [
141
+ { "max_nights": 30, "amount": 0 },
142
+ { "min_nights": 30, "max_nights": 120, "amount": 50 },
143
+ { "min_nights": 120, "max_nights": 240, "amount": 100 },
144
+ { "min_nights": 240, "amount": 150 }
145
+ ]
146
+ }
147
+ ]
148
+ },
149
+ "nl.fixed_per_pitch_per_year": {
150
+ "description": "Per-pitch annual levy. Requires pitch_count on input. Primarily used with the annual_operator_assessment mode; included here so that per-booking engines can at least validate and reject explicitly.",
151
+ "since": "v1",
152
+ "params_schema": {
153
+ "type": "object",
154
+ "required": ["amount_per_pitch"],
155
+ "properties": {
156
+ "amount_per_pitch": { "type": "number", "minimum": 0 },
157
+ "season": {
158
+ "type": "string",
159
+ "enum": ["full_year", "pre_season", "post_season", "per_month"]
160
+ }
161
+ },
162
+ "additionalProperties": false
163
+ }
164
+ },
165
+ "nl.forfait_per_person_per_night": {
166
+ "description": "Per-person-per-night rate applied to DEEMED inputs (nights and persons derived from ordinance-defined forfaits, e.g. Roerdalen: yearly pitch = 80 nights x 2.4 persons). Concrete forfait table lives in params; engine multiplies rate * deemed_nights * deemed_persons * pitch_count.",
167
+ "since": "v1",
168
+ "params_schema": {
169
+ "type": "object",
170
+ "required": ["amount", "forfait"],
171
+ "properties": {
172
+ "amount": { "type": "number", "minimum": 0 },
173
+ "forfait": {
174
+ "type": "object",
175
+ "required": ["nights", "persons_per_pitch"],
176
+ "properties": {
177
+ "nights": { "type": "number", "minimum": 0 },
178
+ "persons_per_pitch": { "type": "number", "minimum": 0 },
179
+ "regime": {
180
+ "type": "string",
181
+ "enum": ["yearly_pitch", "seasonal_pitch", "bed_rental"]
182
+ }
183
+ },
184
+ "additionalProperties": false
185
+ }
186
+ },
187
+ "additionalProperties": false
188
+ }
189
+ }
190
+ },
191
+ "predicates": {
192
+ "guest.resident_of_same_municipality": {
193
+ "description": "True when main_guest_municipality_code equals property_municipality_code (case-insensitive).",
194
+ "since": "v1",
195
+ "params_schema": { "type": "object", "additionalProperties": false }
196
+ },
197
+ "guest.age_below": {
198
+ "description": "True when at least one (or N, if params.count set) guest is younger than max_age on the reference night.",
199
+ "since": "v1",
200
+ "params_schema": {
201
+ "type": "object",
202
+ "required": ["max_age"],
203
+ "properties": {
204
+ "max_age": { "type": "integer", "minimum": 0 },
205
+ "night_index": {
206
+ "type": "string",
207
+ "enum": ["first", "any", "each"],
208
+ "default": "any",
209
+ "description": "Which night the age is evaluated against. Roerdalen 'under 2 first night' uses 'first'."
210
+ },
211
+ "count": { "type": "integer", "minimum": 1, "default": 1 }
212
+ },
213
+ "additionalProperties": false
214
+ }
215
+ },
216
+ "stay.purpose_in": {
217
+ "description": "True when booking_input.stay_purpose is in the allowed list.",
218
+ "since": "v1",
219
+ "params_schema": {
220
+ "type": "object",
221
+ "required": ["values"],
222
+ "properties": {
223
+ "values": {
224
+ "type": "array",
225
+ "items": {
226
+ "type": "string",
227
+ "enum": ["school_group", "youth_group", "leisure", "business", "medical", "asylum", "government_ordered"]
228
+ },
229
+ "minItems": 1
230
+ }
231
+ },
232
+ "additionalProperties": false
233
+ }
234
+ },
235
+ "stay.wtza_care_institution": {
236
+ "description": "Stay is at a Wtza-registered care institution. Short-circuit exemption in all four sampled NL ordinances.",
237
+ "since": "v1",
238
+ "params_schema": { "type": "object", "additionalProperties": false }
239
+ },
240
+ "stay.coa_asylum_housing": {
241
+ "description": "Stay is COA asylum-seeker housing.",
242
+ "since": "v1",
243
+ "params_schema": { "type": "object", "additionalProperties": false }
244
+ },
245
+ "stay.accommodation_brought_by": {
246
+ "description": "Guest brings their own accommodation vs operator provides (Breda camping vs bungalow distinction).",
247
+ "since": "v1",
248
+ "params_schema": {
249
+ "type": "object",
250
+ "required": ["value"],
251
+ "properties": {
252
+ "value": { "type": "string", "enum": ["guest", "operator"] }
253
+ },
254
+ "additionalProperties": false
255
+ }
256
+ },
257
+ "stay.pricing_arrangement": {
258
+ "description": "Operator-elected pricing regime. 'per_night' = charged per person per night; 'arrangement' = tiered flat amount by stay-duration bucket. Breda allows camping operators to elect either. Input must assert the chosen regime.",
259
+ "since": "v1",
260
+ "params_schema": {
261
+ "type": "object",
262
+ "required": ["value"],
263
+ "properties": {
264
+ "value": { "type": "string", "enum": ["per_night", "arrangement"] }
265
+ },
266
+ "additionalProperties": false
267
+ }
268
+ },
269
+ "stay.supervised_minor_group": {
270
+ "description": "True when the booking is an organized minor group with enough minors and adult supervisors. Breda exempts groups of more than 10 minors accompanied by 18+ supervisors.",
271
+ "since": "v1",
272
+ "params_schema": {
273
+ "type": "object",
274
+ "required": ["min_minors", "min_supervisors", "supervisor_min_age"],
275
+ "properties": {
276
+ "min_minors": { "type": "integer", "minimum": 1 },
277
+ "min_supervisors": { "type": "integer", "minimum": 1 },
278
+ "supervisor_min_age": { "type": "integer", "minimum": 0 },
279
+ "allowed_purposes": {
280
+ "type": "array",
281
+ "items": {
282
+ "type": "string",
283
+ "enum": ["school_group", "youth_group", "leisure", "business", "medical", "asylum", "government_ordered"]
284
+ },
285
+ "minItems": 1
286
+ }
287
+ },
288
+ "additionalProperties": false
289
+ }
290
+ },
291
+ "stay.seasonal_window": {
292
+ "description": "Stay date falls within a recurring month-day window (wraps year). Schouwen-Duiveland seasonal surcharges.",
293
+ "since": "v1",
294
+ "params_schema": {
295
+ "type": "object",
296
+ "required": ["start_mmdd", "end_mmdd"],
297
+ "properties": {
298
+ "start_mmdd": { "type": "string", "pattern": "^\\d{2}-\\d{2}$" },
299
+ "end_mmdd": { "type": "string", "pattern": "^\\d{2}-\\d{2}$" }
300
+ },
301
+ "additionalProperties": false
302
+ }
303
+ },
304
+ "pitch.ownership_restriction": {
305
+ "description": "Schouwen-Duiveland: pitch reserved for owner + household; non-owner guests excluded.",
306
+ "since": "v1",
307
+ "params_schema": {
308
+ "type": "object",
309
+ "properties": {
310
+ "allowed": {
311
+ "type": "array",
312
+ "items": { "type": "string", "enum": ["owner", "owner_household"] }
313
+ }
314
+ },
315
+ "additionalProperties": false
316
+ }
317
+ },
318
+ "cross_tax.already_subject_to": {
319
+ "description": "Booking is already subject to another named tax (Roerdalen: forensenbelasting). Engine does not verify; input must assert it.",
320
+ "since": "v1",
321
+ "params_schema": {
322
+ "type": "object",
323
+ "required": ["tax"],
324
+ "properties": {
325
+ "tax": {
326
+ "type": "string",
327
+ "enum": ["forensenbelasting", "watertoeristenbelasting", "vat", "corporate"]
328
+ }
329
+ },
330
+ "additionalProperties": false
331
+ }
332
+ },
333
+ "location.property_locality_code_not_in": {
334
+ "description": "True when the property's locality code is not in the configured list. Useful for region-wide rules that exclude one municipality, such as Catalonia tariffs outside Barcelona city.",
335
+ "since": "v1",
336
+ "params_schema": {
337
+ "type": "object",
338
+ "required": ["values"],
339
+ "properties": {
340
+ "values": {
341
+ "type": "array",
342
+ "items": { "type": "string" },
343
+ "minItems": 1
344
+ }
345
+ },
346
+ "additionalProperties": false
347
+ }
348
+ }
349
+ }
350
+ }
@@ -0,0 +1,168 @@
1
+ {
2
+ "id": "es-catalonia-barcelona-city-2026-04-01",
3
+ "domain": "tourist_tax",
4
+ "lifecycle": "reviewed",
5
+ "jurisdiction": {
6
+ "country_code": "ES",
7
+ "country_name": "Spain",
8
+ "region_code": "ES-CT",
9
+ "region_name": "Catalonia"
10
+ },
11
+ "assessment_policy": {
12
+ "period": "calendar_half_year",
13
+ "notes": "Catalonia files the IEET twice per year: 1-20 April for stays accrued from October through March, and 1-20 October for stays accrued from April through September."
14
+ },
15
+ "notes": "Reviewed fixture based on the Catalonia Tax Agency's official IEET quota table effective April 1, 2026. Rates below include Barcelona city's municipal surcharge where applicable. Minors under 17 are exempt and the tax is capped at seven stay units per person.",
16
+ "rules": [
17
+ {
18
+ "id": "es-ct-bcn-city-2026-hotel-5-star",
19
+ "location_scope": {
20
+ "country_code": "ES",
21
+ "region_code": "ES-CT",
22
+ "locality_kind": "municipality",
23
+ "locality_code": "08019",
24
+ "locality_name": "Barcelona"
25
+ },
26
+ "valid_from": "2026-04-01",
27
+ "valid_to": null,
28
+ "applies_to": {
29
+ "accommodation_types": ["hotel_5_star", "luxury_hotel", "cruise"]
30
+ },
31
+ "calculation": {
32
+ "kind": "generic.per_person_per_night",
33
+ "params": {
34
+ "amount": 12.0,
35
+ "max_nights": 7,
36
+ "taxable_guest_age_gte": 17
37
+ },
38
+ "currency": "EUR"
39
+ },
40
+ "source": {
41
+ "source_url": "https://atc.gencat.cat/es/tributs/ieet/quota-tributaria",
42
+ "reviewed_at": null
43
+ },
44
+ "confidence": "reviewed",
45
+ "notes": "Barcelona city rate from April 1, 2026: EUR 12.00 for 5-star and luxury hotels, campings de lujo, and cruises."
46
+ },
47
+ {
48
+ "id": "es-ct-bcn-city-2026-hotel-4-star",
49
+ "location_scope": {
50
+ "country_code": "ES",
51
+ "region_code": "ES-CT",
52
+ "locality_kind": "municipality",
53
+ "locality_code": "08019",
54
+ "locality_name": "Barcelona"
55
+ },
56
+ "valid_from": "2026-04-01",
57
+ "valid_to": null,
58
+ "applies_to": {
59
+ "accommodation_types": ["hotel_4_star", "superior_hotel"]
60
+ },
61
+ "calculation": {
62
+ "kind": "generic.per_person_per_night",
63
+ "params": {
64
+ "amount": 8.0,
65
+ "max_nights": 7,
66
+ "taxable_guest_age_gte": 17
67
+ },
68
+ "currency": "EUR"
69
+ },
70
+ "source": {
71
+ "source_url": "https://atc.gencat.cat/es/tributs/ieet/quota-tributaria",
72
+ "reviewed_at": null
73
+ },
74
+ "confidence": "reviewed",
75
+ "notes": "Barcelona city rate from April 1, 2026: EUR 8.00 for 4-star and 4-star superior hotels."
76
+ },
77
+ {
78
+ "id": "es-ct-bcn-city-2026-tourist-home",
79
+ "location_scope": {
80
+ "country_code": "ES",
81
+ "region_code": "ES-CT",
82
+ "locality_kind": "municipality",
83
+ "locality_code": "08019",
84
+ "locality_name": "Barcelona"
85
+ },
86
+ "valid_from": "2026-04-01",
87
+ "valid_to": null,
88
+ "applies_to": {
89
+ "accommodation_types": ["tourist_apartment", "tourist_home", "private_room"]
90
+ },
91
+ "calculation": {
92
+ "kind": "generic.per_person_per_night",
93
+ "params": {
94
+ "amount": 9.5,
95
+ "max_nights": 7,
96
+ "taxable_guest_age_gte": 17
97
+ },
98
+ "currency": "EUR"
99
+ },
100
+ "source": {
101
+ "source_url": "https://atc.gencat.cat/es/tributs/ieet/quota-tributaria",
102
+ "reviewed_at": null
103
+ },
104
+ "confidence": "reviewed",
105
+ "notes": "Barcelona city rate from April 1, 2026: EUR 9.50 for tourist-use homes, tourist apartments, and private-room establishments."
106
+ },
107
+ {
108
+ "id": "es-ct-bcn-city-2026-hostel",
109
+ "location_scope": {
110
+ "country_code": "ES",
111
+ "region_code": "ES-CT",
112
+ "locality_kind": "municipality",
113
+ "locality_code": "08019",
114
+ "locality_name": "Barcelona"
115
+ },
116
+ "valid_from": "2026-04-01",
117
+ "valid_to": null,
118
+ "applies_to": {
119
+ "accommodation_types": ["hostel", "guesthouse", "boarding_house", "rural_lodging"]
120
+ },
121
+ "calculation": {
122
+ "kind": "generic.per_person_per_night",
123
+ "params": {
124
+ "amount": 6.0,
125
+ "max_nights": 7,
126
+ "taxable_guest_age_gte": 17
127
+ },
128
+ "currency": "EUR"
129
+ },
130
+ "source": {
131
+ "source_url": "https://atc.gencat.cat/es/tributs/ieet/quota-tributaria",
132
+ "reviewed_at": null
133
+ },
134
+ "confidence": "reviewed",
135
+ "notes": "Barcelona city rate from April 1, 2026: EUR 6.00 for hostels, pensions, guesthouses, rural tourism, and similar categories."
136
+ },
137
+ {
138
+ "id": "es-ct-bcn-city-2026-camping",
139
+ "location_scope": {
140
+ "country_code": "ES",
141
+ "region_code": "ES-CT",
142
+ "locality_kind": "municipality",
143
+ "locality_code": "08019",
144
+ "locality_name": "Barcelona"
145
+ },
146
+ "valid_from": "2026-04-01",
147
+ "valid_to": null,
148
+ "applies_to": {
149
+ "accommodation_types": ["camping", "camping_luxury"]
150
+ },
151
+ "calculation": {
152
+ "kind": "generic.per_person_per_night",
153
+ "params": {
154
+ "amount": 7.0,
155
+ "max_nights": 7,
156
+ "taxable_guest_age_gte": 17
157
+ },
158
+ "currency": "EUR"
159
+ },
160
+ "source": {
161
+ "source_url": "https://atc.gencat.cat/es/tributs/ieet/quota-tributaria",
162
+ "reviewed_at": null
163
+ },
164
+ "confidence": "reviewed",
165
+ "notes": "Barcelona city rate from April 1, 2026: EUR 7.00 for campsites and campings de lujo."
166
+ }
167
+ ]
168
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "id": "es-catalonia-barcelona-city-dutch-operator-hotel-5-star",
3
+ "description": "A Dutch operator with a Barcelona 5-star hotel is charged the Barcelona city IEET rate, capped at 7 nights and excluding the 15-year-old guest.",
4
+ "rule_set_path": "../2026-04-01.json",
5
+ "booking_input": {
6
+ "stay_date": "2026-06-15",
7
+ "nights": 10,
8
+ "adults": 2,
9
+ "children": 1,
10
+ "guests": [
11
+ { "age": 34, "role": "guest" },
12
+ { "age": 38, "role": "guest" },
13
+ { "age": 15, "role": "guest" }
14
+ ],
15
+ "property_location": {
16
+ "country_code": "ES",
17
+ "region_code": "ES-CT",
18
+ "locality_kind": "municipality",
19
+ "locality_code": "08019",
20
+ "locality_name": "Barcelona"
21
+ },
22
+ "operator": {
23
+ "legal_country_code": "NL",
24
+ "legal_name": "Canal Stays BV"
25
+ },
26
+ "accommodation_type": "hotel_5_star",
27
+ "subtotal": 4000
28
+ },
29
+ "expected": {
30
+ "total_tax": 168.0,
31
+ "matched_rule_ids": ["es-ct-bcn-city-2026-hotel-5-star"]
32
+ }
33
+ }