summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-10-18 23:10:20 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-10-18 23:10:20 +0200
commit18bfbc423d188683973a0a3d6c31c9225158e262 (patch)
treee88ab359e6455d44dc7687769ae1281133485acc
parente5e059538bbbf1993df854bd95e9bbf4bb1d7aaa (diff)
tax rate refactor
-rw-r--r--TODO2
-rw-r--r--include/administration.hpp18
-rw-r--r--include/countries.hpp19
-rw-r--r--manual/02_countries.md7
-rw-r--r--manual/Doxyfile3
-rw-r--r--manual/OpenBooks_Manual.pdfbin128283 -> 132192 bytes
-rw-r--r--run.bat2
-rw-r--r--src/administration.cpp179
-rw-r--r--src/countries.cpp8
-rw-r--r--src/countries/nl.cpp382
-rw-r--r--src/locales/en.cpp344
-rw-r--r--src/ui/ui_settings.cpp210
12 files changed, 810 insertions, 364 deletions
diff --git a/TODO b/TODO
index d244d70..f371bfb 100644
--- a/TODO
+++ b/TODO
@@ -5,9 +5,11 @@ Refactor:
- refactor _add functions to use _import functions
- replace strncpy and similar with strops functions
- There is alot of memory leakage
+- remove category_code from tax rate and get it from internal code as it has nothing to do with our administration.
Testing:
- write tests for all NL tax categories
+- write test to make sure all tax rates are unique per country.
- write tests for strops.hpp
- write tests that check error handling for corrupt files. (e.g. references to tax rates, project and cost center that failed to load)
- it is possible a referenced tax rate is loaded after an invoice is loaded. This means all invoices need to be recalculated after file load. (try to write a test for this).
diff --git a/include/administration.hpp b/include/administration.hpp
index 5053d7e..151df2a 100644
--- a/include/administration.hpp
+++ b/include/administration.hpp
@@ -46,12 +46,28 @@
#define MY_COMPANY_ID "C/1"
+typedef enum
+{
+ TAX_RATE_OUTGOING_INVOICE,
+ TAX_RATE_INCOMMING_INVOICE,
+
+ TAX_RATE_TYPE_END,
+} tax_rate_type;
+
+#define MAX_TAX_SECTION_PER_RATE 3
typedef struct
{
char id[MAX_LEN_ID]; // T/[id]
- char country_code[MAX_LEN_COUNTRY_CODE]; // 2 letter country code
+ char internal_code[MAX_LEN_SHORT_DESC];
float rate; // 0-100%
+ u32 tax_section_count;
+ char tax_sections[MAX_TAX_SECTION_PER_RATE][MAX_LEN_SHORT_DESC]; // Country specific tax section
+ tax_rate_type type;
+
+ // depricated:
+ char tax_section[MAX_LEN_SHORT_DESC];
char category_code[MAX_LEN_CODE]; // Category code. https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL5305/
+ char country_code[MAX_LEN_COUNTRY_CODE]; // 2 letter country code
} tax_rate;
typedef struct
diff --git a/include/countries.hpp b/include/countries.hpp
index 8b4bb88..68b6fa0 100644
--- a/include/countries.hpp
+++ b/include/countries.hpp
@@ -20,13 +20,14 @@
typedef struct
{
- char* country_code;
- bool is_EU;
- time_t (*get_default_invoice_expire_duration)();
- void (*fill_tax_report_with_categories)(tax_report* report);
- bool (*add_billing_item_to_tax_report)(tax_report* report, invoice* inv, billing_item* item);
- float (*calculate_tax_report_final)(tax_report* report);
- time_t (*get_invoice_date_to_use_for_tax_report)(invoice* inv);
+ char* country_code;
+ bool is_EU;
+ time_t (*get_default_invoice_expire_duration)();
+ void (*fill_tax_report_with_categories)(tax_report* report);
+ bool (*add_billing_item_to_tax_report)(tax_report* report, invoice* inv, billing_item* item);
+ float (*calculate_tax_report_final)(tax_report* report);
+ time_t (*get_invoice_date_to_use_for_tax_report)(invoice* inv);
+ u32 (*get_available_tax_rates)(tax_rate* buffer, u32 buffer_size);
} country_impl;
namespace country {
@@ -41,6 +42,6 @@ namespace country {
void fill_tax_report_with_categories(char* country_code, tax_report* report);
bool add_billing_item_to_tax_report(char* country_code, tax_report* report, invoice* inv, billing_item* item);
float calculate_tax_report_final(char* country_code, tax_report* report);
- time_t get_invoice_date_to_use_for_tax_report(char* country_code, invoice* inv);
-
+ time_t get_invoice_date_to_use_for_tax_report(char* country_code, invoice* inv);
+ u32 get_available_tax_rates(char* country_code, tax_rate* buffer, u32 buffer_size);
} \ No newline at end of file
diff --git a/manual/02_countries.md b/manual/02_countries.md
index 33ccb8f..a8d03dc 100644
--- a/manual/02_countries.md
+++ b/manual/02_countries.md
@@ -2,7 +2,10 @@
This section lists all supported countries. If the country you operate from is not listed below, some reporting requirements might not be handled by OpenBooks.
**Invoicing**:
-The Netherlands
+[The Netherlands](\ref page_the_netherlands)
**Tax reporting**:
-The Netherlands (for invoices after 1 January 2020) \ No newline at end of file
+The Netherlands (for invoices after 1 January 2020)
+
+**Peppol E-Invoicing**:
+- \ No newline at end of file
diff --git a/manual/Doxyfile b/manual/Doxyfile
index 5103bc8..085925f 100644
--- a/manual/Doxyfile
+++ b/manual/Doxyfile
@@ -991,7 +991,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
-INPUT = ../manual ../include
+INPUT = ../manual ../include ../src/countries
# This tag can be used to specify the character encoding of the source files
# that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses
@@ -1050,6 +1050,7 @@ FILE_PATTERNS = *.cc \
*.h \
*.hh \
*.hxx \
+ *.cpp \
*.hpp \
*.h++ \
*.l \
diff --git a/manual/OpenBooks_Manual.pdf b/manual/OpenBooks_Manual.pdf
index 1fef2aa..aa03e79 100644
--- a/manual/OpenBooks_Manual.pdf
+++ b/manual/OpenBooks_Manual.pdf
Binary files differ
diff --git a/run.bat b/run.bat
index 4838013..d097601 100644
--- a/run.bat
+++ b/run.bat
@@ -40,7 +40,7 @@ set LIB_SOURCES=libs\imgui-1.92.1\backends\imgui_impl_dx11.cpp^
libs\tinyfiledialogs\tinyfiledialogs.c
@set SOURCES= src\*.cpp src\ui\*.cpp src\locales\*.cpp src\ai_providers\*.cpp
@set LIBS=opengl32.lib Advapi32.lib Shell32.lib Ole32.lib User32.lib Pathcch.lib D3D11.lib Comdlg32.lib Kernel32.lib /LIBPATH:"libs/openssl-3.6.0-beta1/x64/lib" libssl.lib libcrypto.lib
-@set FLAGS=/nologo /Ob0 /MD /Oy- /Zi /FS /W4 /EHsc /utf-8 /F8000000
+@set FLAGS=/nologo /Ob0 /MD /Oy- /Zi /FS /W4 /EHsc /utf-8 /F16000000
@set INCLUDE_DIRS=/I"libs/imgui-1.92.1" /I"libs/imgui-1.92.1/backends" /I"/" /I"libs/openssl-3.6.0-beta1/x64/include" /I"libs/cpp-httplib" /I"libs/timer_lib" /I"libs/greatest" /I"libs/simclist-1.5" /I"libs/tinyfiledialogs" /I"libs/zip/src" /I"libs/xml.c/src" /I"libs/" /Iinclude
@set DEFINITIONS=/D_BUILD_DATE_=\"%date%\" /D_COMMIT_=\"%COMMIT_ID%\" /D_PLATFORM_=\"win64\" /D_CRT_SECURE_NO_WARNINGS
diff --git a/src/administration.cpp b/src/administration.cpp
index f79a0af..d01ec61 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -39,13 +39,6 @@ static s32 create_id()
return g_administration.next_id;
}
-static int compare_tax_countries(const void *a, const void *b)
-{
- tax_rate *objA = (tax_rate *)a;
- tax_rate *objB = (tax_rate *)b;
- return strcmp(objA->country_code, objB->country_code);
-}
-
time_t administration::get_default_invoice_expire_duration() // TODO depricated
{
return (30 * 24 * 60 * 60); // 30 days
@@ -53,170 +46,6 @@ time_t administration::get_default_invoice_expire_duration() // TODO depricated
static char* get_default_currency_for_country(char* country_code);
-static void create_default_tax_rates()
-{
- #define ADD_BRACKET(_country, _rate, _code)\
- {\
- tax_rate* tb = (tax_rate*)memops::alloc(sizeof(tax_rate));\
- strops::format(tb->id, sizeof(tb->id), "T/%d", create_id());\
- memops::copy(tb->country_code, _country, sizeof(tb->country_code));\
- tb->rate = _rate;\
- memops::copy(tb->category_code, _code, sizeof(tb->category_code));\
- list_append(&g_administration.tax_rates, tb);\
- g_administration.next_id++;\
- if (taxrate_changed_event_callback) taxrate_changed_event_callback(tb);\
- if (data_changed_event_callback) data_changed_event_callback();\
- }
-
- // General rates shared between countries.
- // Category options: https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL5305/
-
- // TODO unimplemented category L, M, B
-
- ADD_BRACKET("00", 0.0f, "AE"); // Vat Reverse Charge
- ADD_BRACKET("00", 0.0f, "E"); // Exempt from Tax
- ADD_BRACKET("00", 0.0f, "Z"); // Zero rated goods
- ADD_BRACKET("00", 0.0f, "G"); // Free export item, VAT not charged
- ADD_BRACKET("00", 0.0f, "O"); // Services outside scope of tax
- ADD_BRACKET("00", 0.0f, "K#G"); // VAT exempt for EEA intra-community supply of goods
- ADD_BRACKET("00", 0.0f, "K#S"); // VAT exempt for EEA intra-community supply of services
-
- // Austria
- ADD_BRACKET("AT", 20.0f, "S");
- ADD_BRACKET("AT", 10.0f, "S");
- ADD_BRACKET("AT", 13.0f, "S");
-
- // Belgium
- ADD_BRACKET("BE", 21.0f, "S");
- ADD_BRACKET("BE", 6.0f, "S");
- ADD_BRACKET("BE", 12.0f, "S");
-
- // Bulgaria
- ADD_BRACKET("BG", 20.0f, "S");
- ADD_BRACKET("BG", 9.0f, "S");
-
- // Cyprus
- ADD_BRACKET("CY", 19.0f, "S");
- ADD_BRACKET("CY", 5.0f, "S");
- ADD_BRACKET("CY", 9.0f, "S");
-
- // Czechia
- ADD_BRACKET("CZ", 21.0f, "S");
- ADD_BRACKET("CZ", 12.0f, "S");
-
- // Croatia
- ADD_BRACKET("HR", 25.0f, "S");
- ADD_BRACKET("HR", 5.0f, "S");
- ADD_BRACKET("HR", 13.0f, "S");
-
- // Denmark
- ADD_BRACKET("DK", 25.0f, "S");
-
- // Estonia
- ADD_BRACKET("EE", 22.0f, "S");
- ADD_BRACKET("EE", 9.0f, "S");
-
- // Finland
- ADD_BRACKET("FI", 25.5f, "S");
- ADD_BRACKET("FI", 10.0f, "S");
- ADD_BRACKET("FI", 14.0f, "S");
-
- // France
- ADD_BRACKET("FR", 20.0f, "S");
- ADD_BRACKET("FR", 5.5f, "S");
- ADD_BRACKET("FR", 10.0f, "S");
- ADD_BRACKET("FR", 2.1f, "S");
-
- // Germany
- ADD_BRACKET("DE", 19.0f, "S");
- ADD_BRACKET("DE", 7.0f, "S");
-
- // Greece
- ADD_BRACKET("GR", 24.0f, "S");
- ADD_BRACKET("GR", 6.0f, "S");
- ADD_BRACKET("GR", 13.0f, "S");
-
- // Hungary
- ADD_BRACKET("HU", 27.0f, "S");
- ADD_BRACKET("HU", 5.0f, "S");
- ADD_BRACKET("HU", 18.0f, "S");
-
- // Ireland
- ADD_BRACKET("IE", 23.0f, "S");
- ADD_BRACKET("IE", 9.0f, "S");
- ADD_BRACKET("IE", 13.5f, "S");
- ADD_BRACKET("IE", 4.8f, "S");
-
- // Italy
- ADD_BRACKET("IT", 22.0f, "S");
- ADD_BRACKET("IT", 5.0f, "S");
- ADD_BRACKET("IT", 10.0f, "S");
- ADD_BRACKET("IT", 4.0f, "S");
-
- // Latvia
- ADD_BRACKET("LV", 21.0f, "S");
- ADD_BRACKET("LV", 5.0f, "S");
- ADD_BRACKET("LV", 12.0f, "S");
-
- // Lithuania
- ADD_BRACKET("LT", 21.0f, "S");
- ADD_BRACKET("LT", 5.0f, "S");
- ADD_BRACKET("LT", 9.0f, "S");
-
- // Luxembourg
- ADD_BRACKET("LU", 17.0f, "S");
- ADD_BRACKET("LU", 8.0f, "S");
- ADD_BRACKET("LU", 14.0f, "S");
- ADD_BRACKET("LU", 3.0f, "S");
-
- // Malta
- ADD_BRACKET("MT", 18.0f, "S");
- ADD_BRACKET("MT", 5.0f, "S");
- ADD_BRACKET("MT", 7.0f, "S");
-
- // Netherlands
- ADD_BRACKET("NL", 21.0f, "S");
- ADD_BRACKET("NL", 9.0f, "S");
-
- // Poland
- ADD_BRACKET("PL", 23.0f, "S");
- ADD_BRACKET("PL", 5.0f, "S");
- ADD_BRACKET("PL", 8.0f, "S");
-
- // Portugal
- ADD_BRACKET("PT", 23.0f, "S");
- ADD_BRACKET("PT", 6.0f, "S");
- ADD_BRACKET("PT", 13.0f, "S");
-
- // Romania
- ADD_BRACKET("RO", 19.0f, "S");
- ADD_BRACKET("RO", 5.0f, "S");
- ADD_BRACKET("RO", 9.0f, "S");
-
- // Slovakia
- ADD_BRACKET("SK", 23.0f, "S");
- ADD_BRACKET("SK", 5.0f, "S");
- ADD_BRACKET("SK", 19.0f, "S");
-
- // Slovenia
- ADD_BRACKET("SI", 22.0f, "S");
- ADD_BRACKET("SI", 5.0f, "S");
- ADD_BRACKET("SI", 9.5f, "S");
-
- // Spain
- ADD_BRACKET("ES", 21.0f, "S");
- ADD_BRACKET("ES", 10.0f, "S");
- ADD_BRACKET("ES", 4.0f, "S");
-
- // Sweden
- ADD_BRACKET("SE", 25.0f, "S");
- ADD_BRACKET("SE", 6.0f, "S");
- ADD_BRACKET("SE", 12.0f, "S");
-
- list_attributes_comparator(&g_administration.tax_rates, compare_tax_countries);
- list_sort(&g_administration.tax_rates, -1);
-}
-
static void create_default_cost_centers()
{
#define ADD_COSTCENTER(_description, _code)\
@@ -354,7 +183,6 @@ void administration::create_empty(char* save_file)
void administration::create_default(char* save_file)
{
administration::create_empty(save_file);
- create_default_tax_rates();
create_default_cost_centers();
//administration::create_debug_data();
}
@@ -392,7 +220,7 @@ s32 administration::get_next_sequence_number()
return g_administration.next_sequence_number;
}
-bool administration::can_create_invoices()
+bool administration::can_create_invoices() // TODO rename to be more generic as it is used for more than invoices
{
return administration::contact_is_valid(g_administration.company_info) == A_ERR_SUCCESS;
}
@@ -1280,8 +1108,6 @@ a_err administration::tax_rate_import(tax_rate data)
return A_ERR_GENERIC;
}
- list_attributes_comparator(&g_administration.tax_rates, compare_tax_countries);
- list_sort(&g_administration.tax_rates, -1);
return A_ERR_SUCCESS;
}
@@ -1297,9 +1123,6 @@ a_err administration::tax_rate_add(tax_rate data)
g_administration.next_id++;
- list_attributes_comparator(&g_administration.tax_rates, compare_tax_countries);
- list_sort(&g_administration.tax_rates, -1);
-
if (taxrate_changed_event_callback) taxrate_changed_event_callback(&data);
if (data_changed_event_callback) data_changed_event_callback();
diff --git a/src/countries.cpp b/src/countries.cpp
index 7170e5b..d03848b 100644
--- a/src/countries.cpp
+++ b/src/countries.cpp
@@ -101,4 +101,12 @@ time_t country::get_invoice_date_to_use_for_tax_report(char* country_code, invoi
assert(index != -1);
return country_map[index].get_invoice_date_to_use_for_tax_report(inv);
+}
+
+u32 country::get_available_tax_rates(char* country_code, tax_rate* buffer, u32 buffer_size)
+{
+ s32 index = get_index_by_country_code(country_code);
+ assert(index != -1);
+
+ return country_map[index].get_available_tax_rates(buffer, buffer_size);
} \ No newline at end of file
diff --git a/src/countries/nl.cpp b/src/countries/nl.cpp
index 62f947f..4d507f4 100644
--- a/src/countries/nl.cpp
+++ b/src/countries/nl.cpp
@@ -14,6 +14,14 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+/**
+ * \page page_the_netherlands The Netherlands
+ *
+ * ## Tax reporting
+ * Tax reports can be generated for invoices that have been issued after 1 January 2020.
+ * Private usage (tax section 1d) is not managed by OpenBooks and needs to be handled by the user.
+ */
+
#include <math.h>
#include "countries.hpp"
@@ -104,11 +112,13 @@ bool _nl_add_billing_item_to_tax_report(tax_report* report, invoice* inv, billin
// Tax is paid to country of customer.
}
else {
+ // TODO: 3b is for companies (intra community)
+
tax_line* tl = administration::get_tax_line_from_report(report, "3b");
tl->total_net += totals.net;
// Tax is paid to country of customer.
}
- // TODO 3c
+ // TODO 3c is for sales to individuals
}
else {
@@ -173,6 +183,375 @@ time_t _nl_get_invoice_date_to_use_for_tax_report(invoice* inv)
return inv->issued_at;
}
+static tax_rate _create_tax_rate(tax_rate_type type, char* internal_code, float rate, ...)
+{
+ tax_rate result;
+ result.type = type;
+ result.tax_section_count = 0;
+ result.rate = rate;
+ strops::copy(result.internal_code, internal_code, sizeof(result.internal_code));
+
+ va_list args;
+ va_start(args, rate);
+
+ char* tax_category = 0;
+ do
+ {
+ tax_category = va_arg(args, char*);
+ if (tax_category) strops::copy(result.tax_sections[result.tax_section_count++], tax_category, MAX_LEN_SHORT_DESC);
+ else break;
+ } while (1);
+
+ va_end(args);
+
+ return result;
+}
+
+u32 _nl_get_available_tax_rates(tax_rate* buffer, u32 buffer_size)
+{
+ assert(buffer);
+ u32 cc = 0;
+
+ #define ADD(_line) if (cc < buffer_size) buffer[cc++] = _line; else assert(0);
+
+ // Outgoing
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/21", 21.00, "NL/1a", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/9", 9.00, "NL/1b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/0", 0.00, "NL/1e", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BTV", 0.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BVB", 0.00, "NL/1e", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PBEU", 0.00, "NL/3a", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PIEU", 0.00, "NL/3b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DIEU", 0.00, "NL/3b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/NBTW", 0.00, "", 0));
+
+ // Unieregeling diensten
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/18/D", 18.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/7/D", 7.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/21/D", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/6/D", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/12/D", 12.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/20/D", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/9/D", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/19/D", 19.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/9/D", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DK/25/D", 25.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/19/D", 19.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/7/D", 7.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/24/D", 24.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/9/D", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/25.5/D", 25.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/10/D", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/14/D", 14.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/20/D", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/5.5/D", 5.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/10/D", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/2.1/D", (float)2.10, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/24/D", 24.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/6/D", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/13/D", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/27/D", 27.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/18/D", 18.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/23/D", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/9/D", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/13.5/D", 13.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/4.8/D", (float)4.80, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/22/D", 22.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/10/D", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/4/D", 4.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/25/D", 25.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/13/D", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/21/D", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/12/D", 12.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/21/D", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/9/D", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/17/D", 17.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/8/D", 8.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/3/D", 3.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/14/D", 14.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/20/D", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/20/D", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/10/D", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/13/D", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/23/D", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/8/D", 8.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/23/D", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/6/D", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/13/D", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/21/D", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/11/D", 11.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/22/D", 22.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/5/D", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/9.5/D", 9.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/23/D", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/19/D", 19.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/21/D", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/10/D", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/4/D", 4.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/21/D", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/12/D", 12.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/25/D", 25.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/6/D", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/12/D", 12.00, "OBU", 0));
+
+ // Tax reported to foreign country AND the netherlands using NL/3c.
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/21/3C", 21.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/6/3C", 6.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/12/3C", 12.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/20/3C", 20.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/9/3C", 9.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/19/3C", 19.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/9/3C", 9.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DK/25/3C", 25.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/19/3C", 19.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/7/3C", 7.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/24/3C", 24.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/9/3C", 9.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/25.5/3C", 25.50, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/10/3C", 10.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/14/3C", 14.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/20/3C", 20.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/5.5/3C", 5.50, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/10/3C", 10.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/2.1/3C", (float)2.10, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/24/3C", 24.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/6/3C", 6.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/13/3C", 13.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/27/3C", 27.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/18/3C", 18.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/23/3C", 23.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/9/3C", 9.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/13.5/3C", 13.50, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/4.8/3C", (float)4.80, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/22/3C", 22.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/10/3C", 10.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/4/3C", 4.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/25/3C", 25.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/13/3C", 13.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/21/3C", 21.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/12/3C", 12.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/21/3C", 21.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/9/3C", 9.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/17/3C", 17.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/8/3C", 8.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/3/3C", 3.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/14/3C", 14.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/18/3C", 18.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/7/3C", 7.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/20/3C", 20.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/20/3C", 20.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/10/3C", 10.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/13/3C", 13.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/23/3C", 23.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/8/3C", 8.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/23/3C", 23.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/6/3C", 6.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/13/3C", 13.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/21/3C", 21.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/11/3C", 11.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/22/3C", 22.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/5/3C", 5.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/9.5/3C", 9.50, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/23/3C", 23.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/19/3C", 19.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/21/3C", 21.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/10/3C", 10.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/4/3C", 4.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/21/3C", 21.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/12/3C", 12.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/25/3C", 25.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/6/3C", 6.00, "NL/3c", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/12/3C", 12.00, "NL/3c", 0));
+
+ // Unieregeling Producten
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/21/P", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/6/P", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/12/P", 12.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/20/P", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/9/P", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/19/P", 19.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/9/P", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DK/25/P", 25.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/19/P", 19.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/7/P", 7.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/24/P", 24.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/9/P", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/25.5/P", 25.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/10/P", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/14/P", 14.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/20/P", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/5.5/P", 5.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/10/P", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/2.1/P", (float)2.10, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/24/P", 24.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/6/P", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/13/P", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/27/P", 27.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/18/P", 18.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/23/P", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/9/P", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/13.5/P", 13.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/4.8/P", (float)4.80, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/22/P", 22.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/10/P", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/4/P", 4.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/25/P", 25.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/13/P", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/21/P", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/12/P", 12.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/21/P", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/9/P", 9.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/17/P", 17.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/8/P", 8.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/3/P", 3.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/14/P", 14.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/18/P", 18.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/7/P", 7.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/20/P", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/20/P", 20.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/10/P", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/13/P", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/23/P", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/8/P", 8.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/23/P", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/6/P", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/13/P", 13.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/21/P", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/11/P", 11.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/22/P", 22.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/5/P", 5.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/9.5/P", 9.50, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/23/P", 23.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/19/P", 19.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/21/P", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/10/P", 10.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/4/P", 4.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/21/P", 21.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/12/P", 12.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/25/P", 25.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/6/P", 6.00, "OBU", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/12/P", 12.00, "OBU", 0));
+
+ // Tax reported in foreign country.
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/21", 21.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/6", 6.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BE/12", 12.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/20", 20.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/BG/9", 9.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/19", 19.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CY/9", 9.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DK/25", 25.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/19", 19.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/DE/7", 7.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/24", 24.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/EE/9", 9.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/25.5", 25.50, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/10", 10.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FI/14", 14.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/20", 20.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/5.5", 5.50, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/10", 10.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/FR/2.1", (float)2.10, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/24", 24.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/6", 6.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GR/13", 13.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/27", 27.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HU/18", 18.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/23", 23.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/9", 9.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/13.5", 13.50, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IE/4.8", (float)4.80, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/22", 22.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/10", 10.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/IT/4", 4.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/25", 25.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/HR/13", 13.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/21", 21.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LV/12", 12.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/21", 21.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LT/9", 9.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/17", 17.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/8", 8.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/3", 3.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/LU/14", 14.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/18", 18.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/MT/7", 7.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/20", 20.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/GB-NI/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/20", 20.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/10", 10.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/AT/13", 13.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/23", 23.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PL/8", 8.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/23", 23.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/6", 6.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/PT/13", 13.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/21", 21.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/RO/11", 11.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/22", 22.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/5", 5.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SI/9.5", 9.50, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/23", 23.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SK/19", 19.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/21", 21.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/10", 10.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/ES/4", 4.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/21", 21.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/CZ/12", 12.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/25", 25.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/6", 6.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_OUTGOING_INVOICE, "NL/SE/12", 12.00, "", 0));
+
+ // Incomming
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/21/5B", 21.00, "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/9/5B", 9.00, "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/BTV/5B", 0.00, "", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/NBTW/5B", 0.00, "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/BV/21", 21.00, "NL/2a", "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/BV/9", 9.00, "NL/2a", "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/BEUV/21", 21.00, "NL/4a", "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/BEUV/9", 9.00, "NL/4a", "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/IEUV/21", 21.00, "NL/4b", "NL/5b", 0));
+ ADD(_create_tax_rate(tax_rate_type::TAX_RATE_INCOMMING_INVOICE, "NL_IN/IEUV/9", 9.00, "NL/4b", "NL/5b", 0));
+
+ return cc;
+}
+
country_impl _nl_country_impl = {
"NL",
true,
@@ -181,4 +560,5 @@ country_impl _nl_country_impl = {
_nl_add_billing_item_to_tax_report,
_nl_calculate_tax_report_final,
_nl_get_invoice_date_to_use_for_tax_report,
+ _nl_get_available_tax_rates,
}; \ No newline at end of file
diff --git a/src/locales/en.cpp b/src/locales/en.cpp
index 5b78ec9..7a98d44 100644
--- a/src/locales/en.cpp
+++ b/src/locales/en.cpp
@@ -59,16 +59,6 @@ locale_entry en_locales[] = {
{"costcenter.customer_service_support", "Customer Service & Support"},
{"costcenter.other_specialized", "Other / Specialized"},
- // Tax category strings.
- {"taxcategory.AE", "VAT Reverse Charge"},
- {"taxcategory.E", "Exempt from Tax"},
- {"taxcategory.S", "Standard rate"},
- {"taxcategory.Z", "Zero rated goods"},
- {"taxcategory.G", "Free export item, VAT not charged"},
- {"taxcategory.O", "Services outside scope of tax"},
- {"taxcategory.K#G", "Intra-community supply of goods"},
- {"taxcategory.K#S", "Intra-community supply of services"},
-
// Countries
{ "country.AT", "Austria" },
{ "country.BE", "Belgium" },
@@ -145,8 +135,10 @@ locale_entry en_locales[] = {
{"settings.table.vatrates", "VAT Rates"},
{"settings.table.costcenters", "Cost Centers"},
{"settings.table.services", "Services"},
- {"settings.vat.table.country", "Country"},
- {"settings.vat.table.rates", "Rates"},
+ {"settings.vat.table.outgoing", "Sales invoice"},
+ {"settings.vat.table.incomming", "Purchase invoice"},
+ {"settings.vat.table.rates", "Rate"},
+ {"settings.vat.table.section", "Tax-report"},
{"settings.costcenters.table.code", "Code"},
{"settings.costcenters.table.description", "Description"},
{"settings.services.ai_service", "AI Service"},
@@ -214,6 +206,334 @@ locale_entry en_locales[] = {
{"import.error.query","Failure: Querying service failed"},
{"import.error.import","Failure: Service returned unparseable response. Try using another model."},
+ // Tax rate strings.
+ {"taxrate.code.NL/21","21% VAT"},
+ {"taxrate.code.NL/9","9% VAT"},
+ {"taxrate.code.NL/0","0% VAT"},
+ {"taxrate.code.NL/BTV","VAT exempt"},
+ {"taxrate.code.NL/BVB","Domestic reverse charge VAT"},
+ {"taxrate.code.NL/PBEU","Product outside EU (reverse charge)"},
+ {"taxrate.code.NL/PIEU","Product within EU (reverse charge)"},
+ {"taxrate.code.NL/DIEU","Service within EU (reverse charge)"},
+ {"taxrate.code.NL/NBTW","No VAT"},
+ {"taxrate.code.NL/MT/18/D","Malta 18% (Union Scheme) Service"},
+ {"taxrate.code.NL/MT/5/D","Malta 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/MT/7/D","Malta 7% (Union Scheme) Service"},
+ {"taxrate.code.NL/BE/21/D","Belgium 21% (Union Scheme) Service"},
+ {"taxrate.code.NL/BE/6/D","Belgium 6% (Union Scheme) Service"},
+ {"taxrate.code.NL/BE/12/D","Belgium 12% (Union Scheme) Service"},
+ {"taxrate.code.NL/BG/20/D","Bulgaria 20% (Union Scheme) Service"},
+ {"taxrate.code.NL/BG/9/D","Bulgaria 9% (Union Scheme) Service"},
+ {"taxrate.code.NL/CY/19/D","Cyprus 19% (Union Scheme) Service"},
+ {"taxrate.code.NL/CY/5/D","Cyprus 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/CY/9/D","Cyprus 9% (Union Scheme) Service"},
+ {"taxrate.code.NL/DK/25/D","Denmark 25% (Union Scheme) Service"},
+ {"taxrate.code.NL/DE/19/D","Germany 19% (Union Scheme) Service"},
+ {"taxrate.code.NL/DE/7/D","Germany 7% (Union Scheme) Service"},
+ {"taxrate.code.NL/EE/24/D","Estonia 24% (Union Scheme) Service"},
+ {"taxrate.code.NL/EE/9/D","Estonia 9% (Union Scheme) Service"},
+ {"taxrate.code.NL/FI/25.5/D","Finland 25.5% (Union Scheme) Service"},
+ {"taxrate.code.NL/FI/10/D","Finland 10% (Union Scheme) Service"},
+ {"taxrate.code.NL/FI/14/D","Finland 14% (Union Scheme) Service"},
+ {"taxrate.code.NL/FR/20/D","France 20% (Union Scheme) Service"},
+ {"taxrate.code.NL/FR/5.5/D","France 5.5% (Union Scheme) Service"},
+ {"taxrate.code.NL/FR/10/D","France 10% (Union Scheme) Service"},
+ {"taxrate.code.NL/FR/2.1/D","France 2.1% (Union Scheme) Service"},
+ {"taxrate.code.NL/GR/24/D","Greece 24% (Union Scheme) Service"},
+ {"taxrate.code.NL/GR/6/D","Greece 6% (Union Scheme) Service"},
+ {"taxrate.code.NL/GR/13/D","Greece 13% (Union Scheme) Service"},
+ {"taxrate.code.NL/HU/27/D","Hungary 27% (Union Scheme) Service"},
+ {"taxrate.code.NL/HU/5/D","Hungary 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/HU/18/D","Hungary 18% (Union Scheme) Service"},
+ {"taxrate.code.NL/IE/23/D","Ireland 23% (Union Scheme) Service"},
+ {"taxrate.code.NL/IE/9/D","Ireland 9% (Union Scheme) Service"},
+ {"taxrate.code.NL/IE/13.5/D","Ireland 13.5% (Union Scheme) Service"},
+ {"taxrate.code.NL/IE/4.8/D","Ireland 4.8% (Union Scheme) Service"},
+ {"taxrate.code.NL/IT/22/D","Italy 22% (Union Scheme) Service"},
+ {"taxrate.code.NL/IT/5/D","Italy 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/IT/10/D","Italy 10% (Union Scheme) Service"},
+ {"taxrate.code.NL/IT/4/D","Italy 4% (Union Scheme) Service"},
+ {"taxrate.code.NL/HR/25/D","Croatia 25% (Union Scheme) Service"},
+ {"taxrate.code.NL/HR/5/D","Croatia 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/HR/13/D","Croatia 13% (Union Scheme) Service"},
+ {"taxrate.code.NL/LV/21/D","Latvia 21% (Union Scheme) Service"},
+ {"taxrate.code.NL/LV/5/D","Latvia 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/LV/12/D","Latvia 12% (Union Scheme) Service"},
+ {"taxrate.code.NL/LT/21/D","Lithuania 21% (Union Scheme) Service"},
+ {"taxrate.code.NL/LT/5/D","Lithuania 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/LT/9/D","Lithuania 9% (Union Scheme) Service"},
+ {"taxrate.code.NL/LU/17/D","Luxembourg 17% (Union Scheme) Service"},
+ {"taxrate.code.NL/LU/8/D","Luxembourg 8% (Union Scheme) Service"},
+ {"taxrate.code.NL/LU/3/D","Luxembourg 3% (Union Scheme) Service"},
+ {"taxrate.code.NL/LU/14/D","Luxembourg 14% (Union Scheme) Service"},
+ {"taxrate.code.NL/GB-NI/20/D","Northern Ireland 20% (Union Scheme) Service"},
+ {"taxrate.code.NL/GB-NI/5/D","Northern Ireland 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/AT/20/D","Austria 20% (Union Scheme) Service"},
+ {"taxrate.code.NL/AT/10/D","Austria 10% (Union Scheme) Service"},
+ {"taxrate.code.NL/AT/13/D","Austria 13% (Union Scheme) Service"},
+ {"taxrate.code.NL/PL/23/D","Poland 23% (Union Scheme) Service"},
+ {"taxrate.code.NL/PL/5/D","Poland 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/PL/8/D","Poland 8% (Union Scheme) Service"},
+ {"taxrate.code.NL/PT/23/D","Portugal 23% (Union Scheme) Service"},
+ {"taxrate.code.NL/PT/6/D","Portugal 6% (Union Scheme) Service"},
+ {"taxrate.code.NL/PT/13/D","Portugal 13% (Union Scheme) Service"},
+ {"taxrate.code.NL/RO/21/D","Romania 21% (Union Scheme) Service"},
+ {"taxrate.code.NL/RO/11/D","Romania 11% (Union Scheme) Service"},
+ {"taxrate.code.NL/SI/22/D","Slovenia 22% (Union Scheme) Service"},
+ {"taxrate.code.NL/SI/5/D","Slovenia 5% (Union Scheme) Service"},
+ {"taxrate.code.NL/SI/9.5/D","Slovenia 9.5% (Union Scheme) Service"},
+ {"taxrate.code.NL/SK/23/D","Slovakia 23% (Union Scheme) Service"},
+ {"taxrate.code.NL/SK/19/D","Slovakia 19% (Union Scheme) Service"},
+ {"taxrate.code.NL/ES/21/D","Spain 21% (Union Scheme) Service"},
+ {"taxrate.code.NL/ES/10/D","Spain 10% (Union Scheme) Service"},
+ {"taxrate.code.NL/ES/4/D","Spain 4% (Union Scheme) Service"},
+ {"taxrate.code.NL/CZ/21/D","Czech Republic 21% (Union Scheme) Service"},
+ {"taxrate.code.NL/CZ/12/D","Czech Republic 12% (Union Scheme) Service"},
+ {"taxrate.code.NL/SE/25/D","Sweden 25% (Union Scheme) Service"},
+ {"taxrate.code.NL/SE/6/D","Sweden 6% (Union Scheme) Service"},
+ {"taxrate.code.NL/SE/12/D","Sweden 12% (Union Scheme) Service"},
+
+ {"taxrate.code.NL/BE/21/3C","Belgium 21% (NL/3c)"},
+ {"taxrate.code.NL/BE/6/3C","Belgium 6% (NL/3c)"},
+ {"taxrate.code.NL/BE/12/3C","Belgium 12% (NL/3c)"},
+ {"taxrate.code.NL/BG/20/3C","Bulgaria 20% (NL/3c)"},
+ {"taxrate.code.NL/BG/9/3C","Bulgaria 9% (NL/3c)"},
+ {"taxrate.code.NL/CY/19/3C","Cyprus 19% (NL/3c)"},
+ {"taxrate.code.NL/CY/5/3C","Cyprus 5% (NL/3c)"},
+ {"taxrate.code.NL/CY/9/3C","Cyprus 9% (NL/3c)"},
+ {"taxrate.code.NL/DK/25/3C","Denmark 25% (NL/3c)"},
+ {"taxrate.code.NL/DE/19/3C","Germany 19% (NL/3c)"},
+ {"taxrate.code.NL/DE/7/3C","Germany 7% (NL/3c)"},
+ {"taxrate.code.NL/EE/24/3C","Estonia 24% (NL/3c)"},
+ {"taxrate.code.NL/EE/9/3C","Estonia 9% (NL/3c)"},
+ {"taxrate.code.NL/FI/25.5/3C","Finland 25.5% (NL/3c)"},
+ {"taxrate.code.NL/FI/10/3C","Finland 10% (NL/3c)"},
+ {"taxrate.code.NL/FI/14/3C","Finland 14% (NL/3c)"},
+ {"taxrate.code.NL/FR/20/3C","France 20% (NL/3c)"},
+ {"taxrate.code.NL/FR/5.5/3C","France 5.5% (NL/3c)"},
+ {"taxrate.code.NL/FR/10/3C","France 10% (NL/3c)"},
+ {"taxrate.code.NL/FR/2.1/3C","France 2.1% (NL/3c)"},
+ {"taxrate.code.NL/GR/24/3C","Greece 24% (NL/3c)"},
+ {"taxrate.code.NL/GR/6/3C","Greece 6% (NL/3c)"},
+ {"taxrate.code.NL/GR/13/3C","Greece 13% (NL/3c)"},
+ {"taxrate.code.NL/HU/27/3C","Hungary 27% (NL/3c)"},
+ {"taxrate.code.NL/HU/5/3C","Hungary 5% (NL/3c)"},
+ {"taxrate.code.NL/HU/18/3C","Hungary 18% (NL/3c)"},
+ {"taxrate.code.NL/IE/23/3C","Ireland 23% (NL/3c)"},
+ {"taxrate.code.NL/IE/9/3C","Ireland 9% (NL/3c)"},
+ {"taxrate.code.NL/IE/13.5/3C","Ireland 13.5% (NL/3c)"},
+ {"taxrate.code.NL/IE/4.8/3C","Ireland 4.8% (NL/3c)"},
+ {"taxrate.code.NL/IT/22/3C","Italy 22% (NL/3c)"},
+ {"taxrate.code.NL/IT/5/3C","Italy 5% (NL/3c)"},
+ {"taxrate.code.NL/IT/10/3C","Italy 10% (NL/3c)"},
+ {"taxrate.code.NL/IT/4/3C","Italy 4% (NL/3c)"},
+ {"taxrate.code.NL/HR/25/3C","Croatia 25% (NL/3c)"},
+ {"taxrate.code.NL/HR/5/3C","Croatia 5% (NL/3c)"},
+ {"taxrate.code.NL/HR/13/3C","Croatia 13% (NL/3c)"},
+ {"taxrate.code.NL/LV/21/3C","Latvia 21% (NL/3c)"},
+ {"taxrate.code.NL/LV/5/3C","Latvia 5% (NL/3c)"},
+ {"taxrate.code.NL/LV/12/3C","Latvia 12% (NL/3c)"},
+ {"taxrate.code.NL/LT/21/3C","Lithuania 21% (NL/3c)"},
+ {"taxrate.code.NL/LT/5/3C","Lithuania 5% (NL/3c)"},
+ {"taxrate.code.NL/LT/9/3C","Lithuania 9% (NL/3c)"},
+ {"taxrate.code.NL/LU/17/3C","Luxembourg 17% (NL/3c)"},
+ {"taxrate.code.NL/LU/8/3C","Luxembourg 8% (NL/3c)"},
+ {"taxrate.code.NL/LU/3/3C","Luxembourg 3% (NL/3c)"},
+ {"taxrate.code.NL/LU/14/3C","Luxembourg 14% (NL/3c)"},
+ {"taxrate.code.NL/MT/18/3C","Malta 18% (NL/3c)"},
+ {"taxrate.code.NL/MT/5/3C","Malta 5% (NL/3c)"},
+ {"taxrate.code.NL/MT/7/3C","Malta 7% (NL/3c)"},
+ {"taxrate.code.NL/GB-NI/20/3C","Northern Ireland 20% (NL/3c)"},
+ {"taxrate.code.NL/GB-NI/5/3C","Northern Ireland 5% (NL/3c)"},
+ {"taxrate.code.NL/AT/20/3C","Austria 20% (NL/3c)"},
+ {"taxrate.code.NL/AT/10/3C","Austria 10% (NL/3c)"},
+ {"taxrate.code.NL/AT/13/3C","Austria 13% (NL/3c)"},
+ {"taxrate.code.NL/PL/23/3C","Poland 23% (NL/3c)"},
+ {"taxrate.code.NL/PL/5/3C","Poland 5% (NL/3c)"},
+ {"taxrate.code.NL/PL/8/3C","Poland 8% (NL/3c)"},
+ {"taxrate.code.NL/PT/23/3C","Portugal 23% (NL/3c)"},
+ {"taxrate.code.NL/PT/6/3C","Portugal 6% (NL/3c)"},
+ {"taxrate.code.NL/PT/13/3C","Portugal 13% (NL/3c)"},
+ {"taxrate.code.NL/RO/21/3C","Romania 21% (NL/3c)"},
+ {"taxrate.code.NL/RO/11/3C","Romania 11% (NL/3c)"},
+ {"taxrate.code.NL/SI/22/3C","Slovenia 22% (NL/3c)"},
+ {"taxrate.code.NL/SI/5/3C","Slovenia 5% (NL/3c)"},
+ {"taxrate.code.NL/SI/9.5/3C","Slovenia 9.5% (NL/3c)"},
+ {"taxrate.code.NL/SK/23/3C","Slovakia 23% (NL/3c)"},
+ {"taxrate.code.NL/SK/19/3C","Slovakia 19% (NL/3c)"},
+ {"taxrate.code.NL/ES/21/3C","Spain 21% (NL/3c)"},
+ {"taxrate.code.NL/ES/10/3C","Spain 10% (NL/3c)"},
+ {"taxrate.code.NL/ES/4/3C","Spain 4% (NL/3c)"},
+ {"taxrate.code.NL/CZ/21/3C","Czech Republic 21% (NL/3c)"},
+ {"taxrate.code.NL/CZ/12/3C","Czech Republic 12% (NL/3c)"},
+ {"taxrate.code.NL/SE/25/3C","Sweden 25% (NL/3c)"},
+ {"taxrate.code.NL/SE/6/3C","Sweden 6% (NL/3c)"},
+ {"taxrate.code.NL/SE/12/3C","Sweden 12% (NL/3c)"},
+
+ {"taxrate.code.NL/BE/21/P","Belgium 21% (Union Scheme) Product"},
+ {"taxrate.code.NL/BE/6/P","Belgium 6% (Union Scheme) Product"},
+ {"taxrate.code.NL/BE/12/P","Belgium 12% (Union Scheme) Product"},
+ {"taxrate.code.NL/BG/20/P","Bulgaria 20% (Union Scheme) Product"},
+ {"taxrate.code.NL/BG/9/P","Bulgaria 9% (Union Scheme) Product"},
+ {"taxrate.code.NL/CY/19/P","Cyprus 19% (Union Scheme) Product"},
+ {"taxrate.code.NL/CY/5/P","Cyprus 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/CY/9/P","Cyprus 9% (Union Scheme) Product"},
+ {"taxrate.code.NL/DK/25/P","Denmark 25% (Union Scheme) Product"},
+ {"taxrate.code.NL/DE/19/P","Germany 19% (Union Scheme) Product"},
+ {"taxrate.code.NL/DE/7/P","Germany 7% (Union Scheme) Product"},
+ {"taxrate.code.NL/EE/24/P","Estonia 24% (Union Scheme) Product"},
+ {"taxrate.code.NL/EE/9/P","Estonia 9% (Union Scheme) Product"},
+ {"taxrate.code.NL/FI/25.5/P","Finland 25.5% (Union Scheme) Product"},
+ {"taxrate.code.NL/FI/10/P","Finland 10% (Union Scheme) Product"},
+ {"taxrate.code.NL/FI/14/P","Finland 14% (Union Scheme) Product"},
+ {"taxrate.code.NL/FR/20/P","France 20% (Union Scheme) Product"},
+ {"taxrate.code.NL/FR/5.5/P","France 5.5% (Union Scheme) Product"},
+ {"taxrate.code.NL/FR/10/P","France 10% (Union Scheme) Product"},
+ {"taxrate.code.NL/FR/2.1/P","France 2.1% (Union Scheme) Product"},
+ {"taxrate.code.NL/GR/24/P","Greece 24% (Union Scheme) Product"},
+ {"taxrate.code.NL/GR/6/P","Greece 6% (Union Scheme) Product"},
+ {"taxrate.code.NL/GR/13/P","Greece 13% (Union Scheme) Product"},
+ {"taxrate.code.NL/HU/27/P","Hungary 27% (Union Scheme) Product"},
+ {"taxrate.code.NL/HU/5/P","Hungary 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/HU/18/P","Hungary 18% (Union Scheme) Product"},
+ {"taxrate.code.NL/IE/23/P","Ireland 23% (Union Scheme) Product"},
+ {"taxrate.code.NL/IE/9/P","Ireland 9% (Union Scheme) Product"},
+ {"taxrate.code.NL/IE/13.5/P","Ireland 13.5% (Union Scheme) Product"},
+ {"taxrate.code.NL/IE/4.8/P","Ireland 4.8% (Union Scheme) Product"},
+ {"taxrate.code.NL/IT/22/P","Italy 22% (Union Scheme) Product"},
+ {"taxrate.code.NL/IT/5/P","Italy 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/IT/10/P","Italy 10% (Union Scheme) Product"},
+ {"taxrate.code.NL/IT/4/P","Italy 4% (Union Scheme) Product"},
+ {"taxrate.code.NL/HR/25/P","Croatia 25% (Union Scheme) Product"},
+ {"taxrate.code.NL/HR/5/P","Croatia 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/HR/13/P","Croatia 13% (Union Scheme) Product"},
+ {"taxrate.code.NL/LV/21/P","Latvia 21% (Union Scheme) Product"},
+ {"taxrate.code.NL/LV/5/P","Latvia 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/LV/12/P","Latvia 12% (Union Scheme) Product"},
+ {"taxrate.code.NL/LT/21/P","Lithuania 21% (Union Scheme) Product"},
+ {"taxrate.code.NL/LT/5/P","Lithuania 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/LT/9/P","Lithuania 9% (Union Scheme) Product"},
+ {"taxrate.code.NL/LU/17/P","Luxembourg 17% (Union Scheme) Product"},
+ {"taxrate.code.NL/LU/8/P","Luxembourg 8% (Union Scheme) Product"},
+ {"taxrate.code.NL/LU/3/P","Luxembourg 3% (Union Scheme) Product"},
+ {"taxrate.code.NL/LU/14/P","Luxembourg 14% (Union Scheme) Product"},
+ {"taxrate.code.NL/MT/18/P","Malta 18% (Union Scheme) Product"},
+ {"taxrate.code.NL/MT/5/P","Malta 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/MT/7/P","Malta 7% (Union Scheme) Product"},
+ {"taxrate.code.NL/GB-NI/20/P","Northern Ireland 20% (Union Scheme) Product"},
+ {"taxrate.code.NL/GB-NI/5/P","Northern Ireland 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/AT/20/P","Austria 20% (Union Scheme) Product"},
+ {"taxrate.code.NL/AT/10/P","Austria 10% (Union Scheme) Product"},
+ {"taxrate.code.NL/AT/13/P","Austria 13% (Union Scheme) Product"},
+ {"taxrate.code.NL/PL/23/P","Poland 23% (Union Scheme) Product"},
+ {"taxrate.code.NL/PL/5/P","Poland 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/PL/8/P","Poland 8% (Union Scheme) Product"},
+ {"taxrate.code.NL/PT/23/P","Portugal 23% (Union Scheme) Product"},
+ {"taxrate.code.NL/PT/6/P","Portugal 6% (Union Scheme) Product"},
+ {"taxrate.code.NL/PT/13/P","Portugal 13% (Union Scheme) Product"},
+ {"taxrate.code.NL/RO/21/P","Romania 21% (Union Scheme) Product"},
+ {"taxrate.code.NL/RO/11/P","Romania 11% (Union Scheme) Product"},
+ {"taxrate.code.NL/SI/22/P","Slovenia 22% (Union Scheme) Product"},
+ {"taxrate.code.NL/SI/5/P","Slovenia 5% (Union Scheme) Product"},
+ {"taxrate.code.NL/SI/9.5/P","Slovenia 9.5% (Union Scheme) Product"},
+ {"taxrate.code.NL/SK/23/P","Slovakia 23% (Union Scheme) Product"},
+ {"taxrate.code.NL/SK/19/P","Slovakia 19% (Union Scheme) Product"},
+ {"taxrate.code.NL/ES/21/P","Spain 21% (Union Scheme) Product"},
+ {"taxrate.code.NL/ES/10/P","Spain 10% (Union Scheme) Product"},
+ {"taxrate.code.NL/ES/4/P","Spain 4% (Union Scheme) Product"},
+ {"taxrate.code.NL/CZ/21/P","Czech Republic 21% (Union Scheme) Product"},
+ {"taxrate.code.NL/CZ/12/P","Czech Republic 12% (Union Scheme) Product"},
+ {"taxrate.code.NL/SE/25/P","Sweden 25% (Union Scheme) Product"},
+ {"taxrate.code.NL/SE/6/P","Sweden 6% (Union Scheme) Product"},
+ {"taxrate.code.NL/SE/12/P","Sweden 12% (Union Scheme) Product"},
+
+ {"taxrate.code.NL/BE/21","Belgium 21%"},
+ {"taxrate.code.NL/BE/6","Belgium 6%"},
+ {"taxrate.code.NL/BE/12","Belgium 12%"},
+ {"taxrate.code.NL/BG/20","Bulgaria 20%"},
+ {"taxrate.code.NL/BG/9","Bulgaria 9%"},
+ {"taxrate.code.NL/CY/19","Cyprus 19%"},
+ {"taxrate.code.NL/CY/5","Cyprus 5%"},
+ {"taxrate.code.NL/CY/9","Cyprus 9%"},
+ {"taxrate.code.NL/DK/25","Denmark 25%"},
+ {"taxrate.code.NL/DE/19","Germany 19%"},
+ {"taxrate.code.NL/DE/7","Germany 7%"},
+ {"taxrate.code.NL/EE/24","Estonia 24%"},
+ {"taxrate.code.NL/EE/9","Estonia 9%"},
+ {"taxrate.code.NL/FI/25.5","Finland 25.5%"},
+ {"taxrate.code.NL/FI/10","Finland 10%"},
+ {"taxrate.code.NL/FI/14","Finland 14%"},
+ {"taxrate.code.NL/FR/20","France 20%"},
+ {"taxrate.code.NL/FR/5.5","France 5.5%"},
+ {"taxrate.code.NL/FR/10","France 10%"},
+ {"taxrate.code.NL/FR/2.1","France 2.1%"},
+ {"taxrate.code.NL/GR/24","Greece 24%"},
+ {"taxrate.code.NL/GR/6","Greece 6%"},
+ {"taxrate.code.NL/GR/13","Greece 13%"},
+ {"taxrate.code.NL/HU/27","Hungary 27%"},
+ {"taxrate.code.NL/HU/5","Hungary 5%"},
+ {"taxrate.code.NL/HU/18","Hungary 18%"},
+ {"taxrate.code.NL/IE/23","Ireland 23%"},
+ {"taxrate.code.NL/IE/9","Ireland 9%"},
+ {"taxrate.code.NL/IE/13.5","Ireland 13.5%"},
+ {"taxrate.code.NL/IE/4.8","Ireland 4.8%"},
+ {"taxrate.code.NL/IT/22","Italy 22%"},
+ {"taxrate.code.NL/IT/5","Italy 5%"},
+ {"taxrate.code.NL/IT/10","Italy 10%"},
+ {"taxrate.code.NL/IT/4","Italy 4%"},
+ {"taxrate.code.NL/HR/25","Croatia 25%"},
+ {"taxrate.code.NL/HR/5","Croatia 5%"},
+ {"taxrate.code.NL/HR/13","Croatia 13%"},
+ {"taxrate.code.NL/LV/21","Latvia 21%"},
+ {"taxrate.code.NL/LV/5","Latvia 5%"},
+ {"taxrate.code.NL/LV/12","Latvia 12%"},
+ {"taxrate.code.NL/LT/21","Lithuania 21%"},
+ {"taxrate.code.NL/LT/5","Lithuania 5%"},
+ {"taxrate.code.NL/LT/9","Lithuania 9%"},
+ {"taxrate.code.NL/LU/17","Luxembourg 17%"},
+ {"taxrate.code.NL/LU/8","Luxembourg 8%"},
+ {"taxrate.code.NL/LU/3","Luxembourg 3%"},
+ {"taxrate.code.NL/LU/14","Luxembourg 14%"},
+ {"taxrate.code.NL/MT/18","Malta 18%"},
+ {"taxrate.code.NL/MT/5","Malta 5%"},
+ {"taxrate.code.NL/MT/7","Malta 7%"},
+ {"taxrate.code.NL/GB-NI/20","Northern Ireland 20%"},
+ {"taxrate.code.NL/GB-NI/5","Northern Ireland 5%"},
+ {"taxrate.code.NL/AT/20","Austria 20%"},
+ {"taxrate.code.NL/AT/10","Austria 10%"},
+ {"taxrate.code.NL/AT/13","Austria 13%"},
+ {"taxrate.code.NL/PL/23","Poland 23%"},
+ {"taxrate.code.NL/PL/5","Poland 5%"},
+ {"taxrate.code.NL/PL/8","Poland 8%"},
+ {"taxrate.code.NL/PT/23","Portugal 23%"},
+ {"taxrate.code.NL/PT/6","Portugal 6%"},
+ {"taxrate.code.NL/PT/13","Portugal 13%"},
+ {"taxrate.code.NL/RO/21","Romania 21%"},
+ {"taxrate.code.NL/RO/11","Romania 11%"},
+ {"taxrate.code.NL/SI/22","Slovenia 22%"},
+ {"taxrate.code.NL/SI/5","Slovenia 5%"},
+ {"taxrate.code.NL/SI/9.5","Slovenia 9.5%"},
+ {"taxrate.code.NL/SK/23","Slovakia 23%"},
+ {"taxrate.code.NL/SK/19","Slovakia 19%"},
+ {"taxrate.code.NL/ES/21","Spain 21%"},
+ {"taxrate.code.NL/ES/10","Spain 10%"},
+ {"taxrate.code.NL/ES/4","Spain 4%"},
+ {"taxrate.code.NL/CZ/21","Czech Republic 21%"},
+ {"taxrate.code.NL/CZ/12","Czech Republic 12%"},
+ {"taxrate.code.NL/SE/25","Sweden 25%"},
+ {"taxrate.code.NL/SE/6","Sweden 6%"},
+ {"taxrate.code.NL/SE/12","Sweden 12%"},
+ {"taxrate.code.NL_IN/21/5B","21% VAT"},
+ {"taxrate.code.NL_IN/9/5B","9% VAT"},
+ {"taxrate.code.NL_IN/BTV/5B","VAT exempt"},
+ {"taxrate.code.NL_IN/NBTW/5B","No VAT"},
+ {"taxrate.code.NL_IN/BV/21","Domestic reverse charge 21% VAT"},
+ {"taxrate.code.NL_IN/BV/9","Domestic reverse charge 9% VAT"},
+ {"taxrate.code.NL_IN/BEUV/21","Outside EU reverse charge 21% VAT"},
+ {"taxrate.code.NL_IN/BEUV/9","Outside EU reverse charge 9% VAT"},
+ {"taxrate.code.NL_IN/IEUV/21","Intra-EU reverse charge 21% VAT"},
+ {"taxrate.code.NL_IN/IEUV/9","Intra-EU reverse charge 9% VAT"},
+
// Tax statement strings.
{"taxes.total", "Total"},
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index 7de543f..7feacb2 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -20,6 +20,7 @@
#include "memops.hpp"
#include "locales.hpp"
#include "importer.hpp"
+#include "countries.hpp"
#include "administration.hpp"
#include "administration_writer.hpp"
@@ -47,171 +48,59 @@ void ui::setup_settings()
select_company_tab = 1;
company_info = administration::company_info_get();
- tax_rate_count = administration::tax_rate_count();
- tax_rates = (tax_rate*)memops::alloc(tax_rate_count * sizeof(tax_rate));
- administration::tax_rate_get_all(tax_rates);
+ if (administration::can_create_invoices()) {
+ tax_rates = (tax_rate*)memops::alloc(sizeof(tax_rate) * 400);
+ tax_rate_count = country::get_available_tax_rates(administration::company_info_get().address.country_code, tax_rates, 400);
- cost_center_count = administration::cost_center_count();
- cost_centers = (cost_center*)memops::alloc(cost_center_count * sizeof(cost_center));
- administration::cost_center_get_all(cost_centers);
+ cost_center_count = administration::cost_center_count();
+ cost_centers = (cost_center*)memops::alloc(cost_center_count * sizeof(cost_center));
+ administration::cost_center_get_all(cost_centers);
- new_service = administration::get_ai_service();
+ new_service = administration::get_ai_service();
+ }
}
static void draw_vat_rates()
{
- static bool is_adding_item = false;
- static tax_rate new_tax_rate;
-
- static bool is_editing_item = false;
- static u32 editing_item_index = 0;
+ tax_rate_type type_iter = tax_rate_type::TAX_RATE_OUTGOING_INVOICE;
+ go_again:
- if (ImGui::BeginTable("TableVatRates", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
+ char id[MAX_LEN_SHORT_DESC];
+ strops::format(id, MAX_LEN_SHORT_DESC, "TableVatRates##%d", static_cast<int>(type_iter));
- ImGui::TableSetupColumn(locale::get("settings.vat.table.country"), ImGuiTableColumnFlags_WidthFixed, 220);
- ImGui::TableSetupColumn(locale::get("settings.vat.table.rates"));
+ if (ImGui::BeginTable(id, 3, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) {
- // Used to generate headers for each individual country.
- char prev_country[MAX_LEN_COUNTRY_CODE];
- prev_country[0] = 0;
+ ImGui::TableSetupColumn(locale::get("settings.vat.table.outgoing"), ImGuiTableColumnFlags_WidthStretch);
+ ImGui::TableSetupColumn(locale::get("settings.vat.table.rates"), ImGuiTableColumnFlags_WidthFixed, 120);
+ ImGui::TableSetupColumn(locale::get("settings.vat.table.section"), ImGuiTableColumnFlags_WidthFixed, 200);
+ ImGui::TableHeadersRow();
for (u32 i = 0; i < tax_rate_count; i++) {
tax_rate c = tax_rates[i];
+ if (c.type != type_iter) continue;
- // Set to false for shared rates.
- bool can_be_modified = false;
-
- // Check for fixed rates shared accross countries.
- if (strcmp(c.country_code, "00") == 0)
- {
- strops::copy(prev_country, c.country_code, 3);
- can_be_modified = false;
- }
- // Generate headers per country.
- else if (strcmp(c.country_code, prev_country) != 0)
- {
- strops::copy(prev_country, c.country_code, 3);
-
- // Empty row.
- ImGui::TableNextRow();
- ImGui::TableSetColumnIndex(0); ImGui::Text("");
- ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, IM_COL32(69, 69, 69, 255));
- ImGui::TableSetColumnIndex(1); ImGui::Text("");
- ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, IM_COL32(69, 69, 69, 255));
-
- ImGui::TableNextRow();
-
- char locale_buf[20];
- strops::format(locale_buf, sizeof(locale_buf), "country.%s", c.country_code);
- ImGui::TableSetColumnIndex(0);
- ImGui::Text(locale::get(locale_buf));
-
- // If not adding an item already, show + button next to country name.
- if (!is_adding_item)
- {
- ImGui::SameLine();
- char btn_name[20];
- strops::format(btn_name, sizeof(btn_name), "+##%d",i);
- ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0));
- if (ImGui::Button(btn_name, ImVec2(20,20))) {
- is_adding_item = true;
- is_editing_item = false;
- new_tax_rate = administration::tax_rate_create_empty();
- strops::copy(new_tax_rate.country_code, c.country_code, 3);
- }
- ImGui::PopStyleVar();
- }
-
- ImGui::TableSetColumnIndex(1); ImGui::Text("");
- }
-
- // Column 1: description of tax rate. Is only displayed on shared tax rates for clarity.
ImGui::TableNextRow();
- ImGui::TableSetColumnIndex(0);
-
- char category_code_desc[MAX_LEN_LONG_DESC];
- strops::format(category_code_desc, MAX_LEN_LONG_DESC, "taxcategory.%s", c.category_code);
- ImGui::Text(can_be_modified ? "" : locale::get(category_code_desc));
-
-
- // Column 2: When editing, show input for new rate. Else we display the stored rate and check for modify request.
- ImGui::TableSetColumnIndex(1);
- if (is_editing_item && editing_item_index == i)
- {
- ImGui::InputFloat("##Rate", &new_tax_rate.rate, 1.0f, 5.0f, "%.2f");
- if (new_tax_rate.rate < 0.0f) new_tax_rate.rate = 0.0f;
- if (new_tax_rate.rate > 100.0f) new_tax_rate.rate = 100.0f;
-
- ImGui::SameLine();
- if (ImGui::Button(locale::get("form.save"))) {
- is_editing_item = false;
- is_adding_item = false;
-
- administration::tax_rate_update(new_tax_rate);
-
- ui::destroy_settings();
- ui::setup_settings();
- }
-
- ImGui::SameLine();
- if (ImGui::Button(locale::get("form.cancel"))) {
- is_editing_item = false;
- is_adding_item = false;
- memops::zero(&new_tax_rate, sizeof(new_tax_rate));
- }
- }
- else
- {
- ImGui::Text("%.2f%%", c.rate);
-
- if (can_be_modified && ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))
- {
- is_editing_item = true;
- is_adding_item = false;
- editing_item_index = i;
- new_tax_rate = c;
- }
- }
-
- // When adding a new entry it is displayed at the bottom of the list of the country we are adding to.
- // Check for end of list (for last country in the list), or check if next country differs from current country.
- // If it is different we have reached the end of the list for the current country.
- if (i == tax_rate_count-1 || (i < tax_rate_count-1 && strcmp(tax_rates[i+1].country_code, c.country_code) != 0))
- {
- if (is_adding_item && strcmp(new_tax_rate.country_code, prev_country) == 0)
- {
- ImGui::TableNextRow();
- ImGui::TableSetColumnIndex(0); ImGui::Text("");
- ImGui::TableSetColumnIndex(1);
- ImGui::InputFloat("##Rate", &new_tax_rate.rate, 1.0f, 5.0f, "%.2f");
-
- if (new_tax_rate.rate < 0.0f) new_tax_rate.rate = 0.0f;
- if (new_tax_rate.rate > 100.0f) new_tax_rate.rate = 100.0f;
-
- ImGui::SameLine();
- if (ImGui::Button(locale::get("form.save"))) {
- is_editing_item = false;
- is_adding_item = false;
-
- administration::tax_rate_add(new_tax_rate);
-
- ui::destroy_settings();
- ui::setup_settings();
- }
-
- ImGui::SameLine();
- if (ImGui::Button(locale::get("form.cancel"))) {
- is_editing_item = false;
- is_adding_item = false;
- memops::zero(&new_tax_rate, sizeof(new_tax_rate));
- }
- }
+ char localized_code[MAX_LEN_LONG_DESC];
+ strops::format(localized_code, MAX_LEN_LONG_DESC, "taxrate.code.%s", c.internal_code);
+ ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(locale::get(localized_code));
+ ImGui::TableSetColumnIndex(1); ImGui::Text("%.2f%%", c.rate);
+ ImGui::TableSetColumnIndex(2);
+ for (u32 x = 0; x < c.tax_section_count; x++) {
+ if (x == 0) ImGui::TextUnformatted(c.tax_sections[x]);
+ else ImGui::Text(", %s", c.tax_sections[x]);
+ if (x != c.tax_section_count-1) ImGui::SameLine(0, 0);
}
}
ImGui::EndTable();
+ ImGui::Spacing();
+ ImGui::Spacing();
+ ImGui::Spacing();
}
+
+ type_iter = static_cast<tax_rate_type>(static_cast<int>(type_iter) + 1);
+ if (type_iter < TAX_RATE_TYPE_END) goto go_again;
}
static void draw_cost_centers()
@@ -226,6 +115,7 @@ static void draw_cost_centers()
ImGui::TableSetupColumn(locale::get("settings.costcenters.table.code"), ImGuiTableColumnFlags_WidthFixed, 140);
ImGui::TableSetupColumn(locale::get("settings.costcenters.table.description"));
+ ImGui::TableHeadersRow();
for (u32 i = 0; i < cost_center_count; i++) {
cost_center c = cost_centers[i];
@@ -443,20 +333,22 @@ void ui::draw_settings()
ImGui::EndTabItem();
}
- if (ImGui::BeginTabItem(locale::get("settings.table.vatrates")))
- {
- draw_vat_rates();
- ImGui::EndTabItem();
- }
- if (ImGui::BeginTabItem(locale::get("settings.table.costcenters")))
- {
- draw_cost_centers();
- ImGui::EndTabItem();
- }
- if (ImGui::BeginTabItem(locale::get("settings.table.services")))
- {
- draw_services();
- ImGui::EndTabItem();
+ if (administration::can_create_invoices()) {
+ if (ImGui::BeginTabItem(locale::get("settings.table.vatrates")))
+ {
+ draw_vat_rates();
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem(locale::get("settings.table.costcenters")))
+ {
+ draw_cost_centers();
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem(locale::get("settings.table.services")))
+ {
+ draw_services();
+ ImGui::EndTabItem();
+ }
}
ImGui::EndTabBar();
}