How to Use Fiscal Positions in Odoo Accounting

How to Use Fiscal Positions in Odoo Accounting

Yannis, Odoo Expert
10 min read

Table of Contents

Introduction

Hong Kong is known for its simple, low-tax regime — no VAT, no GST, no sales tax. But that doesn't mean Hong Kong businesses can take a one-size-fits-all approach to tax handling.

The moment your business involves cross-border trade, things get complicated. Selling to mainland China clients means considering PRC VAT. Exporting to the EU requires dealing with VAT Reverse Charge. Importing from overseas may involve customs duties and import taxes. Even for local transactions, different revenue types need to be categorised into separate accounts for Profits Tax filing.

Odoo's fiscal positions solve exactly this problem. They automatically map default taxes and accounts to the correct alternatives based on customer location, tax status, or manual assignment. This guide walks through how to configure and use fiscal positions, with practical examples for Hong Kong businesses.


Why Do Hong Kong Businesses Need Fiscal Positions?

Many Hong Kong SME owners ask: "Hong Kong has no VAT — do I even need fiscal positions?" The answer: if you do any cross-border business, absolutely yes.

Hong Kong Tax Landscape

TaxRateNotes
Profits TaxFirst HK$2M: 8.25%, remainder: 16.5%Only on Hong Kong-sourced profits
Salaries TaxProgressive, max 15%Not relevant to fiscal positions
VAT/GSTN/AHong Kong imposes no consumption tax
Import DutyMost goods duty-freeOnly on alcohol, tobacco, hydrocarbon oils, methanol

When You Need Fiscal Positions

Transaction TypeTax TreatmentAccount Classification
Local sale (B2B/B2C)No tax (0%)Local sales revenue
Export to mainland ChinaNo tax (HK side); buyer handles PRC VATExport revenue — China
Export to EU B2BNo tax (Reverse Charge — buyer reports VAT)Export revenue — EU
Export to USNo tax (HK side)Export revenue — Other regions
Import from mainland ChinaMost goods duty-free; record import costsImport costs
Import from EUMay involve local VAT (record if refundable)Import costs — EU

The key point: while Hong Kong charges no consumption tax, correctly classifying local versus export revenue is critical for Profits Tax filing — especially for offshore income exemption claims.


What Are Fiscal Positions?

Fiscal positions are rule sets in Odoo's accounting module that automatically replace default taxes and accounts on products when specific conditions are met.

How they work:

  • You set default taxes on your products (e.g., "No Tax" for Hong Kong)
  • When a customer or transaction matches a fiscal position's criteria
  • The system substitutes the taxes and accounts defined by that position

Practical examples for Hong Kong businesses:

Customer TypeDefault TaxFiscal PositionApplied TaxAccount
Local customerNo taxNone (use default)No taxLocal sales revenue
Mainland China B2BNo taxChina ExportNo taxExport revenue — China
EU business customerNo taxEU B2B ExportNo taxExport revenue — EU
Other overseas customerNo taxOverseas ExportNo taxExport revenue — Other

Notice that in the Hong Kong context, fiscal positions are primarily used for account classification, not tax rate substitution. Hong Kong doesn't charge consumption tax, but you still need to separate revenue by region for:

  1. Profits Tax filing — distinguishing Hong Kong-sourced vs. offshore income
  2. Management reporting — understanding sales performance across markets
  3. Audit preparation — clear transaction classification reduces audit queries

Setting Up Fiscal Positions for Hong Kong

Step 1: Review Your Chart of Accounts

Before configuring fiscal positions, ensure your chart of accounts has sufficient classifications.

Recommended revenue account structure:

Account CodeAccount NamePurpose
4000Local Sales RevenueHong Kong domestic transactions
4100Export Revenue — Mainland ChinaSales to mainland China
4200Export Revenue — EUSales to European Union
4300Export Revenue — Other RegionsSales to all other overseas markets
4400Service Revenue — LocalLocal services
4500Service Revenue — OverseasCross-border services

Step 2: Create Fiscal Positions

Go to Accounting → Configuration → Fiscal Positions and create a position for each transaction type.

Example: Mainland China Export

  1. Click Create
  2. Name: "Mainland China Export"
  3. Under the Account Mapping tab:
    • Default account: 4000 (Local Sales Revenue) → Replacement: 4100 (Export Revenue — Mainland China)
    • Default account: 4400 (Service Revenue — Local) → Replacement: 4500 (Service Revenue — Overseas)
  4. In Legal Notes: "Export sale — No consumption tax applicable under Hong Kong tax law"

Example: EU B2B Export

  1. Name: "EU B2B Export"
  2. Account mapping: 4000 → 4200
  3. Legal notes: "Reverse Charge — VAT to be accounted for by the recipient per EU Council Directive 2006/112/EC"

Step 3: Configure Tax Mappings (If Applicable)

While most Hong Kong transactions involve no tax, you may need tax mappings for:

  • Withholding tax — some countries require withholding on payments to Hong Kong suppliers
  • Tax recorded for reference — recording the buyer's VAT liability (e.g., mainland China's 13% VAT) for reconciliation purposes
  • Agency-collected taxes — if you collect taxes on behalf of buyers through certain platforms

How Fiscal Positions Are Applied

Once configured, Odoo offers three methods to apply fiscal positions to transactions.

Method 1: Automatic Detection

The most efficient approach — the system determines the correct position based on customer data.

Setup steps:

  1. Go to Accounting → Configuration → Fiscal Positions
  2. Open a fiscal position (e.g., "Mainland China Export")
  3. Enable Detect Automatically
  4. Set conditions:
    • Country: Select "China"
    • Or Country Group: Select a country group you've created (e.g., "Southeast Asia")

Recommended automatic detection settings for Hong Kong businesses:

Fiscal PositionDetection Criteria
Mainland China ExportCountry = China
EU B2B ExportCountry Group = EU + VAT Required
Overseas ExportCountry Group = Non-HK, Non-China, Non-EU

Detection priority matters: Odoo tries to match fiscal positions in the order they appear in the list. More specific conditions should come first. For example, "Mainland China Export" should appear before "Overseas Export" — otherwise mainland customers would be incorrectly matched to the generic overseas position.

Method 2: Partner Default

Assign a default fiscal position to specific customers or vendors.

Steps:

  1. Go to Contacts and open the partner record
  2. Navigate to the Sales & Purchase tab
  3. Select the appropriate fiscal position in the Fiscal Position field

Best suited for:

  • Long-term mainland China clients
  • Regular overseas distributors
  • Partners with special tax arrangements

Method 3: Manual Override

Override the fiscal position directly on individual invoices or bills.

Steps:

  1. Create an invoice or bill
  2. Select the customer or vendor first
  3. Go to the Other Info tab
  4. Change the Fiscal Position field

Useful for one-off special transactions — for example, a local customer requesting direct shipment to an overseas destination.


Practical Use Cases

Case 1: Trading Company (Import/Export)

Background: A Hong Kong trading company sources products from mainland China and sells to Europe and Southeast Asia.

Fiscal position setup:

  • "Mainland China Supplier" — classify import costs to a dedicated account
  • "EU B2B Export" — classify export revenue + Reverse Charge legal notes
  • "Southeast Asia Export" — classify export revenue to a regional account

Results:

  • Each sales order is automatically categorised to the correct revenue account
  • Profits Tax filing clearly distinguishes local vs. offshore income
  • Invoices automatically include the correct legal disclaimers

Case 2: Professional Services Firm (Consulting/IT)

Background: A Hong Kong IT consulting firm serves both local and overseas clients.

Fiscal position setup:

  • Local clients use the default (Service Revenue — Local)
  • "Overseas Service" — classify service revenue to the overseas account
  • Revenue classification supports offshore income exemption claims

Results:

  • Service revenue is automatically split by geography
  • Offshore income claims are supported by clear accounting records
  • Year-end adjustments are significantly reduced

Case 3: Retail/E-commerce (Cross-border Sales)

Background: A Hong Kong e-commerce seller operates locally and sells to mainland China via cross-border platforms.

Fiscal position setup:

  • Local sales use the default
  • "Cross-border E-commerce — China" — records revenue from platform-mediated sales to mainland China (noting any platform-collected tax arrangements)

Results:

  • Local and cross-border revenue are clearly separated
  • Easy tracking of channel performance

Best Practices

Always Select the Customer First

When creating invoices or bills, always add the customer or vendor before adding product lines. This ensures the correct fiscal position is applied from the start and all subsequent taxes and accounts are calculated correctly.

Prefer Automatic Detection Over Manual Selection

Use automatic detection wherever possible. Manual selection is error-prone, especially at high transaction volumes.

Review Fiscal Positions Regularly

Tax regulations change. Review your fiscal position configurations at least annually to ensure:

  • Account classifications still meet tax filing requirements
  • Legal note text remains accurate
  • Automatic detection rules cover all common transaction types

Test Thoroughly Before Going Live

Create sample invoices with test customers from different regions and verify:

  • The correct fiscal position is automatically detected
  • Account mappings are applied correctly
  • Legal notes appear correctly on invoices
  • Reports correctly aggregate by region

Work With Your Tax Advisor

Hong Kong's offshore income exemption claim has strict requirements. Fiscal position account classification is only the first step — actual tax treatment should be guided by a qualified tax advisor.


Summary

For Hong Kong businesses, the core value of Odoo fiscal positions is not tax rate substitution (since Hong Kong charges no consumption tax) but automated revenue and expense classification. Key takeaways:

  • Account mapping is the primary function — automatically directing transactions from different regions to the correct ledger accounts
  • Automatic detection assigns the right fiscal position based on customer location, reducing human error
  • Legal notes ensure invoices carry the correct tax disclaimers (e.g., Reverse Charge)
  • Profits Tax filing benefits from clear revenue classification, especially the distinction between local and offshore income

Properly configured fiscal positions mean your books are organised by region and transaction type from day one — dramatically reducing year-end audit and tax filing workload.


What's Next

  • Review your existing chart of accounts to ensure sufficient revenue and cost classifications
  • Create fiscal positions for your primary trading markets
  • Set up automatic detection rules for your most common customer regions
  • Assign default fiscal positions to long-term partners
  • Test with sample invoices to verify everything works before going live

Tags

OdooAccountingFiscal PositionsTaxVAT
Professional businesswoman working with data and analytics in modern office environment

Need Help with Odoo Implementation in Hong Kong?

Zoo AI is a certified Odoo partner in Hong Kong, delivering expert ERP implementation and AI automation for SMEs. Get in touch to learn more.