Skip to content

Conversation

@pritambiswal
Copy link

Summary

  • Add new RGS (Referentie Grootboekschema) compliant Chart of Accounts for Netherlands with proper 5-digit account numbers for Dutch regulatory compliance
  • Add comprehensive tax setup for Netherlands including tax categories, sales/purchase tax templates, and item tax templates

Changes

  • New file: nl_rgs_standard.json - Netherlands RGS Standard COA with account numbers following Dutch accounting standards
  • Updated: country_wise_tax.json - Added Netherlands tax configuration:
    • Tax categories: NL-Domestic, NL-Domestic-Reduced, EU-B2B, EU-B2C, Non-EU, NL-RC-Construction, Exempt
    • Sales tax templates: BTW 21%, 9%, 0% Export, 0% ICP, Verlegd (reverse charge)
    • Purchase tax templates with reverse charge handling for EU and non-EU purchases
    • Item tax templates for various VAT scenarios

Test Plan

  • Create a new company with Netherlands as country
  • Select "Netherlands - RGS Standard" as Chart of Accounts
  • Verify accounts are created with correct account numbers
  • Verify tax templates are created correctly
  • Test sales invoice with different tax categories
  • Test purchase invoice with reverse charge scenarios

- Add new RGS (Referentie Grootboekschema) compliant chart of accounts
  with proper 5-digit account numbers for Dutch regulatory compliance
- Add comprehensive tax setup for Netherlands including:
  - Tax categories (NL-Domestic, EU-B2B, EU-B2C, Non-EU, etc.)
  - Sales tax templates (BTW 21%, 9%, 0% Export, ICP, Verlegd)
  - Purchase tax templates with reverse charge handling
  - Item tax templates for various VAT scenarios
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 9, 2026

📝 Walkthrough

Walkthrough

This pull request adds Dutch financial accounting and taxation support to ERPNext. The changes introduce a complete Netherlands RGS Standard chart of accounts structure (768 lines) with hierarchical account groupings including fixed assets, current assets, equity, liabilities, income, and expense categories. Additionally, the Netherlands tax configuration is expanded with seven tax categories (NL-Domestic, EU-B2B, EU-B2C, Non-EU, NL-RC-Construction, and Exempt), comprehensive VAT template sets for sales and purchases covering multiple rates (21%, 9%, 0%), and handling for reverse charge scenarios. The configuration replaces the VAT 6% entry with a VAT 9% entry. All changes are data file additions with no executable logic modifications.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: adding a Netherlands RGS Standard Chart of Accounts, which is the primary focus of the pull request.
Description check ✅ Passed The description is well-related to the changeset, providing clear context about the RGS Standard chart and tax setup changes with a comprehensive test plan.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In
`@erpnext/accounts/doctype/account/chart_of_accounts/verified/nl_rgs_standard.json`:
- Around line 5-8: The root group account_number values use inconsistent digit
lengths: change the "account_number" for "VASTE ACTIVA" from "0" to a 5-digit
value (e.g., "00000") and for "VLOTTENDE ACTIVA" from "1" to a 5-digit value
(e.g., "10000") to match the 5-digit convention used by other root groups (like
"EIGEN VERMOGEN" → "05000" and "NETTO-OMZET" → "80000"); apply the same 5-digit
normalization for the other occurrences noted (lines 112-115) so all root group
keys use consistent 5-digit account_number formatting.

In `@erpnext/setup/setup_wizard/data/country_wise_tax.json`:
- Around line 4378-4386: The tax category entries in "tax_categories" are never
referenced by templates; update every template in "sales_tax_templates" and
"purchase_tax_templates" to include a "tax_category" field that matches the
appropriate category title (e.g., "NL-Domestic", "EU-B2B", "Non-EU", etc.) so
templates auto-select based on customer/supplier tax category; locate the
"tax_categories" array and then add "tax_category": "<matching title>" to each
template object (follow the pattern used in the France config where templates
include "tax_category": "Vente Domestique") and apply this to all templates
between the noted ranges.
🧹 Nitpick comments (1)
erpnext/setup/setup_wizard/data/country_wise_tax.json (1)

4709-4730: Duplicate item tax templates with identical configurations.

Multiple item tax template pairs have the exact same account references and rates:

Template A Template B Accounts
BTW Inkoop EU 21% (verleggingsregeling) (Line 4709) BTW Inkoop ICP Goederen 21% (Line 4778) 15130 +21, 15310 -21
BTW Inkoop EU 9% (verleggingsregeling) (Line 4732) BTW Inkoop ICP Goederen 9% (Line 4801) 15130 +9, 15310 -9
BTW Inkoop Verlegd 21% (Line 4755) BTW Inkoop Verlegd Non-EU 21% (Line 4824) 15120 +21, 15300 -21

If the distinction is intentional for reporting, please add a comment or differentiate the accounting treatment. Otherwise, consolidate these to reduce user confusion.

Also applies to: 4778-4799

Comment on lines +5 to +8
"VASTE ACTIVA": {
"root_type": "Asset",
"is_group": 1,
"account_number": "0",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Inconsistent root group account_number format: single-digit vs. 5-digit.

VASTE ACTIVA uses "0" and VLOTTENDE ACTIVA uses "1", while all other root groups (e.g., EIGEN VERMOGEN"05000", NETTO-OMZET"80000") use 5-digit numbers. This breaks the "5-digit formatting" convention stated in the PR description and may cause unexpected sorting behavior in account listings.

Consider using consistent 5-digit root group numbers such as "00000" and "10000" (or appropriate RGS-aligned numbers).

Also applies to: 112-115

🤖 Prompt for AI Agents
In
`@erpnext/accounts/doctype/account/chart_of_accounts/verified/nl_rgs_standard.json`
around lines 5 - 8, The root group account_number values use inconsistent digit
lengths: change the "account_number" for "VASTE ACTIVA" from "0" to a 5-digit
value (e.g., "00000") and for "VLOTTENDE ACTIVA" from "1" to a 5-digit value
(e.g., "10000") to match the 5-digit convention used by other root groups (like
"EIGEN VERMOGEN" → "05000" and "NETTO-OMZET" → "80000"); apply the same 5-digit
normalization for the other occurrences noted (lines 112-115) so all root group
keys use consistent 5-digit account_number formatting.

Comment on lines +4378 to +4386
"tax_categories": [
{"title": "NL-Domestic"},
{"title": "NL-Domestic-Reduced"},
{"title": "EU-B2B"},
{"title": "EU-B2C"},
{"title": "Non-EU"},
{"title": "NL-RC-Construction"},
{"title": "Exempt"}
],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Tax categories defined but never referenced by any template.

Seven tax categories are declared (e.g., NL-Domestic, EU-B2B, Non-EU), but none of the sales_tax_templates or purchase_tax_templates include a "tax_category" field linking them. Compare with the France configuration (e.g., Line 602: "tax_category": "Vente Domestique"), where templates are explicitly associated with categories.

Without the tax_category linkage, these categories won't auto-select templates based on customer/supplier tax category, defeating the purpose of defining them.

Example fix for the first sales template
 				"sales_tax_templates": [
 					{
 						"title": "NL BTW Verkoop 21%",
 						"is_default": 1,
+						"tax_category": "NL-Domestic",
 						"taxes": [

Apply similar tax_category associations to all sales and purchase templates.

Also applies to: 4389-4466

🤖 Prompt for AI Agents
In `@erpnext/setup/setup_wizard/data/country_wise_tax.json` around lines 4378 -
4386, The tax category entries in "tax_categories" are never referenced by
templates; update every template in "sales_tax_templates" and
"purchase_tax_templates" to include a "tax_category" field that matches the
appropriate category title (e.g., "NL-Domestic", "EU-B2B", "Non-EU", etc.) so
templates auto-select based on customer/supplier tax category; locate the
"tax_categories" array and then add "tax_category": "<matching title>" to each
template object (follow the pattern used in the France config where templates
include "tax_category": "Vente Domestique") and apply this to all templates
between the noted ranges.

@diptanilsaha diptanilsaha self-assigned this Feb 9, 2026
@codecov
Copy link

codecov bot commented Feb 9, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.39%. Comparing base (4d94121) to head (cafdbb5).
⚠️ Report is 200 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop   #52588      +/-   ##
===========================================
+ Coverage    79.25%   79.39%   +0.13%     
===========================================
  Files         1168     1168              
  Lines       122725   123321     +596     
===========================================
+ Hits         97266    97905     +639     
+ Misses       25459    25416      -43     

see 73 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants