fix(tax-article): match 328-330 to the e-taxes wording
The accountant reads the Tax Article picker side by side with the cabinet, so the two have to read identically. Three of the nine Əlavə 3.2 articles drifted: 328 carried a double space and the grammatically-tidied "Respublikasının" where the form writes "Respublikasınını", 329 a double space, 330 spelled out "Vergi Məcəlləsinin" where the form abbreviates to "VM-nin". 331 and 336 are left alone — Əlavə 3.2 is the reference wording for those two and the articles already match it. The nine already existed and were already mapped in the VAT allocation report; only the wording moved. Tax Article is autoname:Prompt, so name is a stored id rather than a slug of article_name — re-wording article_name alone would leave the old text showing in every link picker. The name has to move too, and a moved name is a different document, hence the delete-and-reinsert patch rather than a rename_doc walk across a NestedSet. Nothing referenced the three (all ten Tax Article link fields checked, zero rows). The report's mapping keys move in lockstep. They are matched by exact string against article_name, so a key left behind would not raise — it would silently zero its column on a filed return. All 115 keys verified to resolve against the live table afterwards. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e8354516fb
commit
770241a30e
|
|
@ -2640,13 +2640,13 @@
|
|||
"parent_tax_article": "ƏDV tutulan dövriyyə barədə məlumat"
|
||||
},
|
||||
{
|
||||
"article_name": "328. VM-nin 159.2-ci maddəsinə əsasən bu Məcəllənin 167-ci və 168-ci maddələrinə uyğun olaraq Azərbaycan Respublikasının hüdudlarından kənarda malların təqdim edilməsi, xidmətlərin göstərilməsi və işlər görülməsi üzrə əməliyyatlar",
|
||||
"article_name": "328. VM-nin 159.2-ci maddəsinə əsasən bu Məcəllənin 167-ci və 168-ci maddələrinə uyğun olaraq Azərbaycan Respublikasınını hüdudlarından kənarda malların təqdim edilməsi, xidmətlərin göstərilməsi və işlər görülməsi üzrə əməliyyatlar",
|
||||
"declaration": "Declaration of value added tax",
|
||||
"docstatus": 0,
|
||||
"doctype": "Tax Article",
|
||||
"is_group": 0,
|
||||
"modified": "2026-06-08 00:00:00.000000",
|
||||
"name": "328. VM-nin 159.2-ci maddəsinə əsasən bu Məcəllənin 167-ci və 168-ci maddələrinə uyğun olaraq Azərbaycan Respublikasının hüdudlarından k...",
|
||||
"name": "328. VM-nin 159.2-ci maddəsinə əsasən bu Məcəllənin 167-ci və 168-ci maddələrinə uyğun olaraq Azərbaycan Respublikasınını hüdudlarından k...",
|
||||
"old_parent": null,
|
||||
"parent_tax_article": "ƏDV tutulan əməliyyat sayılmayan dövriyyə barədə məlumat"
|
||||
},
|
||||
|
|
@ -2657,18 +2657,18 @@
|
|||
"doctype": "Tax Article",
|
||||
"is_group": 0,
|
||||
"modified": "2026-06-08 00:00:00.000000",
|
||||
"name": "329. VM-nin 159.5-ci maddəsinə əsasən fövqəladə hallarda, qanunvericiliklə müəyyən edilmiş təbii itki normaları daxilində zayolmadan əmə...",
|
||||
"name": "329. VM-nin 159.5-ci maddəsinə əsasən fövqəladə hallarda, qanunvericiliklə müəyyən edilmiş təbii itki normaları daxilində zayolmadan əməl...",
|
||||
"old_parent": null,
|
||||
"parent_tax_article": "ƏDV tutulan əməliyyat sayılmayan dövriyyə barədə məlumat"
|
||||
},
|
||||
{
|
||||
"article_name": "330. Vergi Məcəlləsinin 159.7-ci maddəsinə əsasən vergiyə cəlb olunmayan əməliyyatlar",
|
||||
"article_name": "330. VM-nin 159.7-ci maddəsinə əsasən vergiyə cəlb olunmayan əməliyyatlar",
|
||||
"declaration": "Declaration of value added tax",
|
||||
"docstatus": 0,
|
||||
"doctype": "Tax Article",
|
||||
"is_group": 0,
|
||||
"modified": "2026-06-08 00:00:00.000000",
|
||||
"name": "330. Vergi Məcəlləsinin 159.7-ci maddəsinə əsasən vergiyə cəlb olunmayan əməliyyatlar",
|
||||
"name": "330. VM-nin 159.7-ci maddəsinə əsasən vergiyə cəlb olunmayan əməliyyatlar",
|
||||
"old_parent": null,
|
||||
"parent_tax_article": "ƏDV tutulan əməliyyat sayılmayan dövriyyə barədə məlumat"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6,3 +6,4 @@
|
|||
# Patches added in this section will be executed after doctypes are migrated
|
||||
taxes_az.patches.remove_legacy_mixed_vat_tax_articles
|
||||
taxes_az.patches.remove_aggregate_vat_tax_articles
|
||||
taxes_az.patches.rename_non_taxable_turnover_articles
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
"""Re-word 328–336 (Əlavə 3.2) to match the e-taxes ФНО verbatim.
|
||||
|
||||
The accountant reads the article list side by side with the cabinet, so the two
|
||||
have to read identically. Three of the nine drifted:
|
||||
|
||||
328 double space; "Respublikasının" -> "Respublikasınını" (the form's spelling)
|
||||
329 double space
|
||||
330 "Vergi Məcəlləsinin" -> "VM-nin"
|
||||
|
||||
331 and 336 stay as they are: Əlavə 3.2 is the reference wording for those two,
|
||||
and the articles already match it.
|
||||
|
||||
Tax Article is autoname:Prompt, so name is a stored id, not derived — re-wording
|
||||
article_name alone would leave the old text showing in every link picker. The
|
||||
name has to move too, and a moved name is a different document. Nothing points at
|
||||
these nine (all ten Tax Article link fields checked, zero rows), so dropping the
|
||||
old ids and letting sync_fixtures insert the new ones is safe and avoids a
|
||||
rename_doc dance across a NestedSet.
|
||||
|
||||
post_model_sync, i.e. before fixtures import. Idempotent: a no-op once gone.
|
||||
"""
|
||||
|
||||
import frappe
|
||||
|
||||
OLD_NAMES = [
|
||||
"328. VM-nin 159.2-ci maddəsinə əsasən bu Məcəllənin 167-ci və 168-ci maddələrinə uyğun olaraq Azərbaycan Respublikasının hüdudlarından k...",
|
||||
"329. VM-nin 159.5-ci maddəsinə əsasən fövqəladə hallarda, qanunvericiliklə müəyyən edilmiş təbii itki normaları daxilində zayolmadan əmə...",
|
||||
"330. Vergi Məcəlləsinin 159.7-ci maddəsinə əsasən vergiyə cəlb olunmayan əməliyyatlar",
|
||||
]
|
||||
|
||||
|
||||
def execute():
|
||||
if not frappe.db.exists("DocType", "Tax Article"):
|
||||
return
|
||||
|
||||
for name in OLD_NAMES:
|
||||
if frappe.db.exists("Tax Article", name):
|
||||
frappe.delete_doc("Tax Article", name, force=1, ignore_permissions=True)
|
||||
|
|
@ -261,9 +261,9 @@ def get_tax_articles_mapping():
|
|||
"301-3 Topdan ticarət üzrə ƏDV-yə 18 faiz dərəcə ilə cəlb edilən əməliyyatlar": "vm_301_3",
|
||||
"301-4 Tibb müəssisələrinin və özəl tibbi praktika ilə məşğul olan fiziki şəxslərin hesabat dövrü ərzində əhaliyə göstərilən tibbi xidmətlər üzrə nağdsız qaydada POS-terminal vasitəsi ilə aparılan ödəmələr əsasında formalaşan dövriyyə": "vm_301_4",
|
||||
# --- 328–336 новые статьи (ƏDV tutulan əməliyyat sayılmayan dövriyyə, Əlavə 3) ---
|
||||
"328. VM-nin 159.2-ci maddəsinə əsasən bu Məcəllənin 167-ci və 168-ci maddələrinə uyğun olaraq Azərbaycan Respublikasının hüdudlarından kənarda malların təqdim edilməsi, xidmətlərin göstərilməsi və işlər görülməsi üzrə əməliyyatlar": "vm_328",
|
||||
"328. VM-nin 159.2-ci maddəsinə əsasən bu Məcəllənin 167-ci və 168-ci maddələrinə uyğun olaraq Azərbaycan Respublikasınını hüdudlarından kənarda malların təqdim edilməsi, xidmətlərin göstərilməsi və işlər görülməsi üzrə əməliyyatlar": "vm_328",
|
||||
"329. VM-nin 159.5-ci maddəsinə əsasən fövqəladə hallarda, qanunvericiliklə müəyyən edilmiş təbii itki normaları daxilində zayolmadan əmələ gələn itkilər, təbii itki normaları daxilində xarabolmalar və bu kimi əskikgəlmələr üzrə məbləğ": "vm_329",
|
||||
"330. Vergi Məcəlləsinin 159.7-ci maddəsinə əsasən vergiyə cəlb olunmayan əməliyyatlar": "vm_330",
|
||||
"330. VM-nin 159.7-ci maddəsinə əsasən vergiyə cəlb olunmayan əməliyyatlar": "vm_330",
|
||||
"331. Vergi Məcəlləsinin 160-cı maddəsinə əsasən vergiyə cəlb edilməyən əməliyyatlar, o cümlədən müəssisənin təqdim edilməsi": "vm_331",
|
||||
"332. Müstəqil sahibkarlıq fəaliyyəti çərçivəsində malların göndərilməsi, işlərin görülməsi və xidmətlərin göstərilməsi sayılmayan əməliyyatlar üzrə": "vm_332",
|
||||
"333. Rüsumsuz ticarət mağazalarında (Duty-Free) malların təqdim edilməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_333",
|
||||
|
|
|
|||
Loading…
Reference in New Issue