Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p

- `gr-mydata-v1`: Corrected exemption codes 3 and 4 mapping to `outside-scope`

### Added

- `ad`: Andorra regime

## [v0.308.0] - 2026-02-17

### Removed
Expand Down
4 changes: 2 additions & 2 deletions bill/invoice_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1098,8 +1098,8 @@ func TestInvoiceForUnknownRegime(t *testing.T) {
inv := baseInvoice(t, lines...)

// Set an undefined regime
inv.Supplier.TaxID.Country = l10n.AD.Tax()
assert.Nil(t, tax.RegimeDefFor(l10n.AD), "if Andorra is defined, change this to another country")
inv.Supplier.TaxID.Country = l10n.AO.Tax()
assert.Nil(t, tax.RegimeDefFor(l10n.AO), "if Angola is defined, change this to another country")
Comment thread
NicoGonMu marked this conversation as resolved.

assert.ErrorContains(t, inv.Calculate(), "currency: missing")
inv.Currency = currency.USD
Expand Down
232 changes: 232 additions & 0 deletions data/regimes/ad.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
{
"$schema": "https://gobl.org/draft-0/tax/regime-def",
"name": {
"ca": "Andorra",
"en": "Andorra",
"es": "Andorra"
},
"description": {
"en": "The main indirect tax in Andorra is the 'Impost General Indirecte (IGI)', and it is enforced since 1st of January 2013.\nIt has different rates:\n- General: 4.5% (general goods and services)\n- Reduced: 1.0% (food products, books, newspapers, magazines, medicines, etc.)\n- Super-reduced: 0.0% (health, education, social services)\n- Special: 2.5% (transportation, cultural goods and services)\n- Increased: 9.5% (banking and financial services)\n\nThe NRT (Número de Registre Tributari) is the tax identification number for companies in Andorra. It has the following format: 'X-999999-X'\n- A leading letter (identifying the type of person/entity):\n - F: Individual Residents\n - E: Non-resident Individuals\n - L: Limited Liability Companies (S.L.)\n - A: Joint-stock Corporations (S.A.)\n- Six digits.\n- A trailing control letter.\n\nInvoices allow corrections through credit notes (Nota d'Abonament) and debit notes and (Nota de Càrrec).\n\nInvoice presentation reqirements are:\n- Quarterly: Companies with a turnover of more than €250,000 (April, July, October, January).\n- Semestral: Companies with a turnover of less than €250,000 (July, January).\n- Start of activity: Generally declared semestrally (July and January), unless the special regime applies.\n\nSources:\n- [Departament de Tributs i de Fronteres - Andorra](https://www.impostos.ad)\n- [Andorra NRT number guide](https://lookuptax.com/docs/tax-identification-number/andorra-tax-id-guide)"
Comment thread
NicoGonMu marked this conversation as resolved.
},
"time_zone": "Europe/Andorra",
"country": "AD",
"currency": "EUR",
"tax_scheme": "VAT",
"scenarios": [
{
"schema": "bill/invoice",
"list": [
{
"tags": [
"reverse-charge"
],
"note": {
"key": "legal",
"src": "reverse-charge",
"text": "Reverse charge: Customer to account for VAT to the relevant tax authority."
}
}
]
}
],
"corrections": [
{
"schema": "bill/invoice",
"types": [
"credit-note",
"debit-note"
]
}
],
"categories": [
{
"code": "VAT",
"name": {
"ca": "IGI",
"en": "VAT",
"es": "IGI"
},
"title": {
"ca": "Impost General Indirecte",
"en": "General Indirect Tax",
"es": "Impuesto General Indirecto"
},
"desc": {
"ca": "L'Impost General Indirecte (IGI) és el principal impost indirecte que grava el consum a Andorra.",
"en": "The General Indirect Tax (IGI) is the main indirect tax levied on consumption in Andorra.",
"es": "El Impuesto General Indirecto (IGI) es el principal impuesto indirecto que grava el consumo en Andorra."
},
"keys": [
{
"key": "standard",
"name": {
"en": "Standard"
}
},
{
"key": "zero",
"name": {
"en": "Zero"
}
},
{
"key": "reverse-charge",
"name": {
"en": "Reverse charge"
},
"no_percent": true
},
{
"key": "exempt",
"name": {
"en": "Exempt"
},
"no_percent": true
},
{
"key": "export",
"name": {
"en": "Export"
},
"no_percent": true
},
{
"key": "intra-community",
"name": {
"en": "Intra-community"
},
"no_percent": true
},
{
"key": "outside-scope",
"name": {
"en": "Outside scope"
},
"no_percent": true
}
],
"rates": [
{
"rate": "general",
"keys": [
"standard"
],
"name": {
"ca": "Tipus general",
"en": "General Rate",
"es": "Tipo general"
},
"desc": {
"ca": "Tipus general de l'IGI aplicat a la majoria de béns i serveis (4,5%).",
"en": "General IGI rate applied to most goods and services (4.5%).",
"es": "Tipo general del IGI aplicado a la mayoría de bienes y servicios (4,5%)."
},
"values": [
{
"since": "2013-01-01",
"percent": "4.5%"
}
]
},
{
"rate": "reduced",
"keys": [
"standard"
],
"name": {
"ca": "Tipus reduït",
"en": "Reduced Rate",
"es": "Tipo reducido"
},
"desc": {
"ca": "Tipus reduït de l'IGI (1%).",
"en": "Reduced IGI rate (1%).",
"es": "Tipo reducido del IGI (1%)."
},
"values": [
{
"since": "2013-01-01",
"percent": "1.0%"
}
]
},
{
"rate": "super-reduced",
"keys": [
"zero"
],
"name": {
"ca": "Tipus superreduït",
"en": "Super-Reduced Rate",
"es": "Tipo superreducido"
},
"desc": {
"ca": "Tipus superreduït de l'IGI (0%).",
"en": "Super-reduced IGI rate (0%).",
"es": "Tipo superreducido del IGI (0%)."
},
"values": [
{
"since": "2013-01-01",
"percent": "0.0%"
}
]
},
{
"rate": "special",
"keys": [
"standard"
],
"name": {
"ca": "Tipus especial",
"en": "Special Rate",
"es": "Tipo especial"
},
"desc": {
"ca": "Tipus especial de l'IGI (2,5%).",
"en": "Special IGI rate (2.5%).",
"es": "Tipo especial del IGI (2,5%)."
},
"values": [
{
"since": "2013-01-01",
"percent": "2.5%"
}
]
},
{
"rate": "increased",
"keys": [
"standard"
],
"name": {
"ca": "Tipus incrementat",
"en": "Increased Rate",
"es": "Tipo incrementado"
},
"desc": {
"ca": "Tipus incrementat de l'IGI (9,5%).",
"en": "Increased IGI rate (9.5%).",
"es": "Tipo incrementado del IGI (9,5%)."
},
"values": [
{
"since": "2013-01-01",
"percent": "9.5%"
}
]
}
],
"sources": [
{
"title": {
"ca": "Departament de Tributs i de Fronteres - Andorra",
"en": "Departament de Tributs i de Fronteres - Andorra",
"es": "Departamento de Tributos y Fronteras - Andorra"
},
"url": "https://www.e-tramits.ad/tramits/ca/impostos/igi"
}
]
}
]
}
31 changes: 31 additions & 0 deletions examples/ad/credit-note.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
$schema: "https://gobl.org/draft-0/bill/invoice"
$regime: AD
type: credit-note
series: "2024"
code: "CN-0001"
issue_date: "2024-01-05"
currency: EUR
preceding:
- regime: AD
type: standard
series: "2024"
code: "0001"
issue_date: "2024-01-01"
supplier:
name: "Empresa Andorrana"
tax_id:
country: AD
code: L123456A
customer:
name: "Client Particular"
tax_id:
country: AD
code: F121212B
lines:
- quantity: 1
item:
name: "Producte Estàndard (Devolució)"
price: 100.00
taxes:
- cat: VAT
rate: general
40 changes: 40 additions & 0 deletions examples/ad/invoice.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
$schema: "https://gobl.org/draft-0/bill/invoice"
$regime: AD
type: standard
series: "2024"
code: "0001"
issue_date: "2024-01-01"
currency: EUR
supplier:
name: "Empresa Andorrana"
tax_id:
country: AD
code: L123456A
address:
street: "Av. Meritxell, 1"
locality: "Andorra la Vella"
country: AD
customer:
name: "Client Particular"
tax_id:
country: AD
code: F121212B
address:
street: "Carrer Major, 10"
locality: "Escaldes-Engordany"
country: AD
lines:
- quantity: 1
item:
name: "Producte Estàndard"
price: 100.00
taxes:
- cat: VAT
rate: general
- quantity: 2
item:
name: "Llibre (Tipus Reduït)"
price: 20.00
taxes:
- cat: VAT
rate: reduced
Loading