# Copyright (c) 2026, Your Company and contributors
# For license information, please see license.txt

import json

import frappe
from frappe import _
from frappe.utils import flt


def execute(filters=None):
	columns, data = get_columns(), get_data(filters)
	return columns, data


def _parse_tax_articles(value):
	"""Parse the stored ``tax_articles`` JSON list; tolerate empty/legacy values."""
	if not value:
		return []
	try:
		parsed = json.loads(value)
	except (ValueError, TypeError):
		return [value]
	if isinstance(parsed, list):
		return [a for a in parsed if a]
	return [parsed] if parsed else []


def get_data(filters):
	"""Получаем данные по VAT Allocation с распределением по налоговым статьям"""

	# Получаем VAT Allocation Items с учетом фильтров
	allocation_items = get_vat_allocation_items(filters)

	if not allocation_items:
		return []

	# Получаем маппинг name -> article_name из Tax Article
	tax_article_names_mapping = get_tax_article_names_mapping()

	# Получаем маппинг полных названий к ключам полей
	tax_articles_mapping = get_tax_articles_mapping()

	# Группируем данные по VAT Allocation
	allocations_data = {}

	for item in allocation_items:
		allocation_name = item['vat_allocation']

		if allocation_name not in allocations_data:
			allocations_data[allocation_name] = {
				'vat_allocation': allocation_name,
				'year': item['year'],
				'month': item['month'],
				'posting_date': item['posting_date']
			}

			# Инициализируем все колонки нулями (amount + ödəniş)
			for field_key in tax_articles_mapping.values():
				allocations_data[allocation_name][field_key] = 0
				allocations_data[allocation_name][f"{field_key}_odenis"] = 0

		# Каждая строка несёт JSON-список статей; одна и та же сумма строки
		# попадает в КАЖДУЮ статью из списка (как на ФНО, где один оборот может
		# стоять под несколькими maddə).
		for tax_article_name in _parse_tax_articles(item.get('tax_articles')):
			if tax_article_name not in tax_article_names_mapping:
				continue

			full_article_name = tax_article_names_mapping[tax_article_name]

			# Проверяем есть ли маппинг для полного названия
			if full_article_name in tax_articles_mapping:
				field_key = tax_articles_mapping[full_article_name]
				allocations_data[allocation_name][field_key] += flt(item['amount'])
				allocations_data[allocation_name][f"{field_key}_odenis"] += flt(item['allocated_amount'])

	# Конвертируем в список и сортируем
	data = list(allocations_data.values())
	data.sort(key=lambda x: (x['posting_date'], x['vat_allocation']), reverse=True)

	return data


def get_tax_article_names_mapping():
	"""Получает маппинг name -> article_name из таблицы Tax Article"""
	tax_articles = frappe.db.sql("""
		SELECT name, article_name
		FROM `tabTax Article`
		WHERE article_name IS NOT NULL AND article_name != ''
	""", as_dict=True)

	return {article['name']: article['article_name'] for article in tax_articles}


def get_vat_allocation_items(filters):
	"""
	Получает данные из VAT Allocation sales invoice table
	"""
	conditions = []
	values = []

	# Фильтр по company - ИГНОРИРУЕМ (нет поля в VAT Allocation)
	# Фильтр присутствует только для совместимости с formula editor

	# Фильтр по датам - конвертируем year + month в дату
	# Используем STR_TO_DATE для конвертации названия месяца в дату
	if filters.get("from_date"):
		conditions.append("STR_TO_DATE(CONCAT('01 ', va.month, ' ', va.year), '%%d %%M %%Y') >= %s")
		values.append(filters.get("from_date"))

	if filters.get("to_date"):
		conditions.append("STR_TO_DATE(CONCAT('01 ', va.month, ' ', va.year), '%%d %%M %%Y') <= %s")
		values.append(filters.get("to_date"))

	# Только submitted документы
	conditions.append("va.docstatus = 1")

	# Только строки с amount > 0 или allocated_amount > 0
	conditions.append("(vasi.amount > 0 OR vasi.allocated_amount > 0)")

	# Только строки с tax_articles (непустой JSON-список)
	conditions.append("vasi.tax_articles IS NOT NULL AND vasi.tax_articles != '' AND vasi.tax_articles != '[]'")

	where_clause = "WHERE " + " AND ".join(conditions) if conditions else ""

	query = f"""
		SELECT
			va.name as vat_allocation,
			va.year,
			va.month,
			STR_TO_DATE(CONCAT('01 ', va.month, ' ', va.year), '%%d %%M %%Y') as posting_date,
			vasi.customer,
			vasi.tax_articles,
			vasi.amount,
			vasi.allocated_amount
		FROM
			`tabVAT allocation` va
		INNER JOIN
			`tabVAT allocation sales invoice` vasi ON va.name = vasi.parent
		{where_clause}
		ORDER BY
			STR_TO_DATE(CONCAT('01 ', va.month, ' ', va.year), '%%d %%M %%Y') DESC, va.name
	"""

	return frappe.db.sql(query, values, as_dict=True)


def get_tax_articles_mapping():
	"""Жесткий маппинг налоговых статей к полям"""
	return {
		# 165.1.x статьи
		"Vergi Məcəlləsinin 165.1.1-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_1",
		"Vergi Məcəlləsinin 165.1.2-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_2",
		"Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən malların ixracı üzrə aparılmış əməliyyatlar": "vm_165_1_3_mal",
		"Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən bu Məcəllənin 168.1.5-ci maddəsində göstərilmiş xidmətlərin ixracı üzrə aparılmış əməliyyatlar": "vm_165_1_3_xid",
		"Vergi Məcəlləsinin 165.1.4-cü maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_4",
		"Vergi Məcəlləsinin 165.1.5-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_5",
		"Vergi Məcəlləsinin 165.1.9-cu maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_9",
		"Vergi Məcəlləsinin 165.1.10-cu maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_10",
		"Vergi Məcəlləsinin 165.1.11-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_11",

		# 164.1.x статьи
		"VM-nin 164.1.1-ci maddəsinə əsasən özəlləşdirilmə qaydasında dövlət müəssisəsindən satın alınan əmlakın dəyəri, habelə dövlət əmlakının icarəyə verilməsindən alınan icarə haqqının büdcəyə ödənilməli olan hissəsi": "vm_164_1_1",
		"VM-nin 164.1.2-ci maddəsinə əsasən maliyyə xidmətlərinin göstərilməsi, o cümlədən maliyyə lizinqi əməliyyatları üzrə ödənilən faizlər": "vm_164_1_2",
		"VM-nin 164.1.3-cü maddəsinə əsasən milli və ya xarici valyutanın (numizmatika məqsədlərindən başqa), həmçinin qiymətli kağızların göndərilməsi": "vm_164_1_3",
		"VM-nin 164.1.5-ci maddəsinə əsasən idxal olunan əmlak istisna olmaqla müəssisənin nizamnamə fonduna (kapitalına) pay şəklində hər hansı əmlakın (əsas vəsaitlər istisna olmaqla) qoyulması (əmlakın pay şəklində qoyuluşu, onun müqabilində bilavasitə digər əmlakın əldə edilməsi ilə əlaqədar olmadıqda)": "vm_164_1_5",
		"VM-nin 164.1.6-cı maddəsinə əsasən tutulan məbləğlər hədlərində dövlət hakimiyyəti, maliyyə bazarlarına nəzarət, yerli özünüidarəetmə və digər səlahiyyətli orqanların tutduğu dövlət rüsumu, icazə haqları, yığımlar, xüsusi notariusların aldığı haqlar (notariat hərəkətlərinin aparılmasına və notariat hərəkətləri ilə əlaqədar göstərilən xidmətə görə) və onların tutulması müqabilində göstərdiyi xidmətlər": "vm_164_1_6",
		"VM-nin 164.1.7-ci maddəsinə əsasən siyahısı Azərbaycan Respublikasının Nazirlər Kabineti tərəfindən təsdiq edilən media məhsullarının və kitabların (elektron kitablar istisna olmaqla), habelə dərslik komplektlərinin idxalı və satışı, həmin malların (məhsulların) istehsalı (nəşri) ilə bağlı rulon və ya vərəqə şəklində kağızın idxalı və satışı": "vm_164_1_7",
		"VM-nin 164.1.8-ci maddəsinə əsasən amətbu media məhsullarının və kitabların (o cümlədən elektron kitabların), habelə dərslik komplektlərinin istehsalı ilə bağlı redaksiya, nəşriyyat və poliqrafiya fəaliyyəti (reklam xidmətləri istisna olmaqla)": "vm_164_1_8",
		"VM-nin 164.1.9-cu maddəsinə əsasən dəfn və qəbiristanlığın mərasim xidmətləri": "vm_164_1_9",
		"VM-nin 164.1.10-cu maddəsinə əsasən Azərbaycan Respublikasının Dövlət Neft Fondunun qanunvericiliklə nəzərdə tutulmuş vəzifələrinin yerinə yetirilməsi ilə bağlı mal idxalı, iş görülməsi və xidmət göstərilməsi": "vm_164_1_10",
		"VM-nin 164.1.11-ci maddəsinə əsasən Azərbaycan Respublikasına, o cümlədən onu təmsil edən hüquqi şəxslərə neft-qaz ehtiyatlarının kəşfiyyatı, işlənməsi və hasilatın pay bölgüsü, ixrac boru kəmərləri haqqında və bu qəbildən olan digər sazişlərə uyğun olaraq verilməsi nəzərdə tutulan əsas fondların, daşınan əmlakın və digər aktivlərin Azərbaycan Respublikası Dövlət Neft Fonduna və ya Azərbaycan Respublikasını təmsil edən tərəfə hər hansı şəkildə təqdim edilməsi": "vm_164_1_11",
		"VM-nin 164.1.12-ci maddəsinə əsasən metropolitenlə sərnişindaşıma xidmətləri": "vm_164_1_12",
		"VM-nin 164.1.13-cü maddəsinə əsasən ödənişli təhsil xidmətlərinin göstərilməsi (digər fəaliyyətləri ilə bağlı xidmətlərin göstərilməsi istisna olmaqla)": "vm_164_1_13",
		"VM-nin 164.1.14-cü maddəsinə əsasən Vergi Məcəllənin 106.1.9-106.1.11-ci maddələri ilə müəyyən olunan aktivlərin dəyəri və onların hər hansı şəkildə təqdim olunması üzrə əməliyyatlar": "vm_164_1_14",
		"VM-nin 164.1.17-ci maddəsinə əsasən hüquqi şəxsin iştirak paylarının və ya səhmlərinin təqdim edilməsi": "vm_164_1_17",
		"VM-nin 164.1.18-ci maddəsinə əsasən kənd təsərrüfatı məhsullarının istehsalçıları (o cümlədən, sənaye üsulu ilə) tərəfindən özlərinin istehsal etdikləri kənd təsərrüfatı məhsullarının satışı üzrə dövriyyələr": "vm_164_1_18",
		"VM-nin 164.1.27-ci maddəsinə əsasən buğdanın satışı, buğda ununun və çörəyin istehsalı və satışı": "vm_164_1_27",
		"VM-nin 164.1.29-cu maddəsinə əsasən damazlıq heyvanların satışı": "vm_164_1_29",
		"VM-nin 164.1.30-cu maddəsinə əsasən toxum və tinglərin satışı": "vm_164_1_30",
		"VM-nin 164.1.31-ci maddəsinə əsasən siyahısı müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən təsdiq edilən mineral gübrələrin, pestisidlərin idxalı və satışı": "vm_164_1_31",
		"VM-nin 164.1.32-ci maddəsinə əsasən toxumların yetişdirilməsi, quşçuluq və arıçılıq üçün avadanlıqların, o cümlədən laboratoriya avadanlıqlarının, toxum, taxıl və quru paxlalı bitkilərin təmizlənməsi, çeşidlənməsi və ya kalibrlənməsi üçün maşınların satışı": "vm_164_1_32",
		"VM-nin 164.1.34-cü maddəsinə əsasən siyahısı Azərbaycan Respublikasının Nazirlər Kabineti tərəfindən təsdiq olunmuş bilavasitə kənd təsərrüfatı təyinatlı suvarma və digər qurğuların, maşınların, avadanlıqların və texnikaların, habelə kənd təsərrüfatı texnikasının ehtiyat hissələrinin istehsalı, idxalı və satışı": "vm_164_1_34",
		"VM-nin 164.1.36-cı maddəsinə əsasən ödəmə qabiliyyətini itirmiş bankların rezolyusiyası və sağlamlaşdırma tədbirləri çərçivəsində Azərbaycan Respublikasının Prezidentinin müəyyən etdiyi qaydada qeyri-işlək (toksik) aktivlərin təqdim edilməsi, habelə bankın iflas proseduru çərçivəsində aktivlərinin təqdim edilməsi": "vm_164_1_36",
		"VM-nin 164.1.37-ci maddəsinə əsasən heyvan və quş ətinin satışı": "vm_164_1_37",
		"VM-nin 164.1.42-ci maddəsinə əsasən \"Məşğulluq haqqında\" Azərbaycan Respublikasının Qanununa uyğun olaraq müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən haqqı ödənilən ictimai işlərin təşkili ilə əlaqədar işçi qüvvəsinin təqdim edilməsi üzrə əməliyyatlar": "vm_164_1_42",
		"VM-nin 164.1.43-cü maddəsinə əsasən kəpəyin istehsalı və satışı": "vm_164_1_43",
		"VM-nin 164.1.46-cı maddəsinə əsasən heyvandarlıq və quşçuluq təsərrüfatlarında istifadə edilən siyahısı Azərbaycan Respublikasının Nazirlər Kabineti tərəfindən təsdiq edilən yem və yem əlavələrinin satışı üzrə dövriyyələr": "vm_164_1_46",
		"VM-nin 164.1.47-ci maddəsinə əsasən bina tikintisi fəaliyyəti ilə məşğul olan şəxslər tərəfindən tikilən binanın yaşayış sahəsinin dövlətə ayrılan hissəsi üzrə dövriyyələr": "vm_164_1_47",
		"VM-nin 164.1.48-ci maddəsinə əsasən siyahısı müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) (Prezident) tərəfindən təsdiq edilən dövlət adından yaradılan publik hüquqi şəxslər tərəfindən nizamnaməsində nəzərdə tutulan və ona həvalə edilən vəzifələrin yerinə yetirilməsi üçün büdcə qanunvericiliyinə uyğun olaraq dövlət büdcəsindən ayrılmış vəsait hesabına Maliyyə Nazirliyi ilə bağlanılmış müqavilə əsasında işlərin və xidmətlərin göstərilməsi": "vm_164_1_48",
		"VM-nin 164.1.49-cu maddəsinə əsasən Azərbaycan Respublikasında keçirilən Formula 1 və Formula 2 yarışları ilə bağlı Gənclər və İdman Nazirliyi ilə bağlanılmış müqavilə əsasında mal, iş və xidmətin təqdim edilməsi": "vm_164_1_49",
		"VM-nin 164.1.50-ci maddəsinə əsasən Azərbaycan Respublikasında daimi nümayəndəlik yaratmayan qeyri-rezident şəxslərin mülki aviasiya fəaliyyəti çərçivəsində hava gəmilərinin və hava gəmilərinin mühərriklərinin rezident hüquqi şəxslərə icarəyə və ya lizinqə verilməsi": "vm_164_1_50",
		"VM-nin 164.1.51-ci maddəsinə əsasən \"Tibbi sığorta haqqında\" Azərbaycan Respublikasının Qanununa uyğun olaraq icbari tibbi sığorta fondunun, habelə siyahısı müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən təsdiq edilən ictimai və sosial məqsədlər üçün yaradılmış fondların vəsaiti hesabına tibbi xidmətlərin göstərilməsi": "vm_164_1_51",
		"VM-nin 164.1.55-ci maddəsinə əsasən külçə, sikkə və ya qranul şəklində qızılın və gümüşün satışı": "vm_164_1_55",
		"VM-nin 164.1.34-1-ci maddəsinə əsasən kənd təsərrüfatı texnikalarının mülkiyyət hüququnun keçməməsi şərtilə kənd təsərrüfatı istehsalçılarına lizinqə (icarəyə) verilməsi": "vm_164_1_34_1",
		"VM-nin 164.1.34-2-ci maddəsinə əsasən kənd təsərrüfatı məhsullarının istehsalçılarına aqrotexniki xidmətlərin göstərilməsi": "vm_164_1_34_2",
		"VM-nin 164.1.41-ci maddəsinə əsasən yalnız elektrik mühərriki ilə işləyən avtomobillərin satışı": "vm_164_1_41",
		"VM-nin 164.1.41-1-ci maddəsinə əsasən istehsal tarixi 3 ildən və mühərrikinin həcmi 2500 kubsantimetrdən çox olmayan hibrid avtomobillərin satışı": "vm_164_1_41_1",
		"VM-nin 164.1.41-2-ci maddəsinə əsasən Elektrik mühərriki ilə işləyən avtomobillər üçün ikinci və üçüncü səviyyə elektrik enerji doldurucularının satışı": "vm_164_1_41_2",
		"VM-nin 164.1.41-3-cü maddəsinə əsasən Azərbaycan Respublikasının ərazisində istehsal olunan minik avtomobillərinin satışı": "vm_164_1_41_3",
		"VM-nin 164.1.41-4-ci maddəsinə əsasən Azərbaycan Respublikasının ərazisində istehsal olunan avtobusların satışı": "vm_164_1_41_4",
		"VM-nin 164.1.57-ci maddəsinə əsasən lotereya biletlərinin satıcısı ilə bağlanmış müqavilə əsasında və ya onun tapşırığı əsasında lotereya biletlərinin bütün mərhələlərdə agent qaydasında satışının həyata keçirilməsi üzrə xidmətlərin göstərilməsi": "vm_164_1_57",
		"VM-nin 164.1.10-1-ci maddəsinə əsasən yaşayış sahələrini satmaq öhdəliyi ilə kirayəyə vermə sahəsində fəaliyyət göstərən müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən yaşayış sahələrinin kirayəçilərə təqdim edilməsi": "vm_164_1_10_1",
		"VM-nin 164.1.58-ci maddəsinə əsasən özəl baytarlıq xidmətlərinin göstərilməsi": "vm_164_1_58",
		"VM-nin 164.1.59-cu maddəsinə əsasən vəkillər və vəkil qurumları tərəfindən order markasının əldə edilməsi ilə bağlı Azərbaycan Respublikasının Vəkillər Kollegiyasına edilən ödənişlər": "vm_164_1_59",
		"VM-nin 164.1.8-1-ci maddəsinə əsasən media subyektləri (audiovizual media subyektləri istisna olmaqla) tərəfindən istehsal olunan media məhsullarının təqdim edilməsi, habelə Azərbaycan Respublikasında daimi nümayəndəlik yaratmayan qeyri-rezident şəxslər tərəfindən media subyektlərinə (audiovizual media subyektləri istisna olmaqla) media fəaliyyəti ilə bilavasitə bağlı olan işlərin görülməsi və xidmətlərin göstərilməsi": "vm_164_1_8_1",
		"VM-nin 164.1.56-1-ci maddəsinə əsasən Azərbaycan Respublikasının Minatəmizləmə Agentliyinin təsdiqedici sənədi əsasında Azərbaycan Respublikasının işğaldan azad edilmiş ərazilərinin, habelə müharibə və hərbi əməliyyatların təsirinə məruz qalmış digər ərazilərin minalardan və partlamamış hərbi sursatdan, tərkibində partlayıcı olan qurğulardan və digər partlayıcı qalıqlardan təmizlənməsi çərçivəsində bütün növ texnikanın, avadanlıqların, texniki vasitələrin və qurğuların, onların ehtiyat hissələrinin, fərdi zirehli qoruyucu geyimlərin, alətlərin, partlayıcı və pirotexniki vasitələrin istehsalı və satışı": "vm_164_1_56_1",
		"VM-nin 164.1.19-cu maddəsinə əsasən müdafiə təyinatlı məmulatların yaradılması və istehsalı fəaliyyətini həyata keçirən şəxslər tərəfindən bu məqsədlə Azərbaycan Respublikasının Müdafiə Sənayesi Nazirliyinin təsdiqedici sənədi əsasında texnologiyaların, avadanlıqların, dəstləşdirici hissələrin və xammalın idxalı və həmin şəxslər tərəfindən istehsal edilmiş müdafiə təyinatlı məmulatların satışı": "vm_164_1_19",
		"VM-nin 164.1.19-1-ci maddəsinə əsasən müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən verilmiş təsdiqedici sənəd əsasında müdafiə və dövlət təhlükəsizliyi məqsədləri üçün istifadə olunan bütün növ texnika və texniki vasitələrin, onların ehtiyat hissələrinin, xüsusi proqram təminatlarının və silah-sursatın idxalı və satışı": "vm_164_1_19_1",
		"VM-nin 164.1.2-1-ci maddəsinə əsasən ƏDV-dən azad olunan, yaxud ƏDV-yə cəlb edilməyən əməliyyatlar çərçivəsində əldə edilmiş aktivlərin (əsas vəsaitlərin) maliyyə lizinqi müqaviləsi üzrə təqdim edilməsi": "vm_164_1_2_1",
		"VM-nin 164.1.9-1-ci maddəsinə əsasən müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən verilmiş təsdiqedici sənəd əsasında müdafiə və dövlət təhlükəsizliyi məqsədləri üçün istifadə olunan bütün növ texnika və texniki vasitələrin, onların ehtiyat hissələrinin, xüsusi proqram təminatlarının və silah-sursatın idxalı və satışı": "vm_164_1_9_1",
		"VM-nin 164.1.51-1-ci maddəsinə əsasən tədris bazası kimi fəaliyyət göstərən tibb müəssisələrində tibbi xidmətlərin göstərilməsi": "vm_164_1_51_1",
		# --- 302.x / 303.x новые статьи (0% и ƏDV-dən azad) ---
		"302-1 Elektron ticarət üzrə ƏDV-yə sıfır (0) dərəcə ilə cəlb edilən əməliyyatlar": "vm_302_1",
		"302-2 Pərakəndə ticarət üzrə ƏDV-yə sıfır (0) dərəcə ilə cəlb edilən əməliyyatlar": "vm_302_2",
		"302-3 Topdan ticarət üzrə ƏDV-yə sıfır (0) dərəcə ilə cəlb edilən əməliyyatlar": "vm_302_3",
		"302.11 Xüsusi iqtisadi zonalar haqqında qanunlar çərçivəsində aparılan əməliyyatlar üzrə": "vm_302_11",
		"302.12 Azərbaycan Respublikasının tərəfdar çıxdığı beynəlxalq müqavilələr üzrə": "vm_302_12",
		"302.6 Qanunla təsdiq olunmuş hasilatın pay bölgüsü haqqında, əsas boru kəməri haqqında və digər bu qəbildən olan sazişlərdə və ya qanunlarda, o cümlədən neft və qaz haqqında, ixrac məqsədli neft-qaz fəaliyyəti haqqında qanunlar çərçivəsində aparılan əməliyyatlar": "vm_302_6",
		"302.6.1 o cümlədən əvvəlcədən alınmış ödənişlər": "vm_302_6_1",
		"302.7 Təqdim ediləcək malların (işlərin, xidmətlərin) hesabına əvvəlcədən alınmış ödənişlər üzrə": "vm_302_7",
		"303-1 Elektron ticarət üzrə ƏDV-dən azad olunan əməliyyatlar": "vm_303_1",
		"303-2 Pərakəndə ticarət üzrə ƏDV-dən azad olunan əməliyyatlar": "vm_303_2",
		"303-3 Topdan ticarət üzrə ƏDV-dən azad olunan əməliyyatlar": "vm_303_3",
		"303.41 Təqdim ediləcək malların (işlərin, xidmətlərin) hesabına əvvəlcədən alınmış ödənişləri": "vm_303_41",
		"303.42 Azərbaycan Respublikasının tərəfdar çıxdığı beynəlxalq müqavilələr üzrə": "vm_303_42",
		"303.53 Xüsusi iqtisadi zonalar haqqında qanunlar çərçivəsində aparılan əməliyyatlar": "vm_303_53",
		# --- 301.x новые статьи (ƏDV tutulan dövriyyə barədə məlumat, Əlavə 3) ---
		"301.1.1.1 Girov əmlakların(malların) təqdim edilməsi": "vm_301_1_1_1",
		"301.1.1.2 Əmək haqqının əvəzınə təqdim edilmiş mallar": "vm_301_1_1_2",
		"301.1.1.3 Agent vasitəsi ilə təqdim edilmiş mallar üzrə gəlirlər": "vm_301_1_1_3",
		"301.1.1.4 Müstəqil ƏDV ödəyicisi olan struktur bölmələri arasında təqdim edilmiş mallar": "vm_301_1_1_4",
		"301.1.1.5 Haqqı ödənilməklə və ya əvəzsiz qaydada öz işçilərinə və digər şəxslərə mal verilməsi": "vm_301_1_1_5",
		"301.1.1.6 Barter əməliyyatları üzrə malların təqdim edilməsi": "vm_301_1_1_6",
		"301.1.1.7 Digər malların təqdim edilməsi üzrə əməliyyatlar": "vm_301_1_1_7",
		"301.1.1.8 Təqdim ediləcək malların hesabına əvvəlcədən alınmış ödənişləri": "vm_301_1_1_8",
		"301.1.1.9 Daşınan və daşınmaz əmlakın təqdim edilməkdən gəlirlər": "vm_301_1_1_9",
		"301.1.1.10 Mallar təqdim edildikdən sonra verilmiş borclar": "vm_301_1_1_10",
		"301.1.1.11 Mallar təqdim edilənədək verilmiş borclar": "vm_301_1_1_11",
		"301.1.1.12 Malların təqdim edilməsi üzrə yaranan debitor borclar üzrə iddia müddətinin bitməsi": "vm_301_1_1_12",
		"301.1.1.13 Qarşılıqlı hesablaşmalar aparıldıqda öhdəliyin ləğv edilməsi və ya ödənilməsi": "vm_301_1_1_13",
		"301.1.1.14 Tələb hüququ güzəşt edildikdə – güzəşt edilən məbləğ": "vm_301_1_1_14",
		"301.1.2.1 Daşınan və daşınmaz əmlakın icarəyə verilməsindən gəlirlər": "vm_301_1_2_1",
		"301.1.2.2 Əmək haqqının  əvəzinə işlərin görülməsi və  xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_301_1_2_2",
		"301.1.2.3 Müstəqil ƏDV ödəyicisi olan struktur bölmələri arasında işlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_301_1_2_3",
		"301.1.2.4 Əvəzsiz işlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_301_1_2_4",
		"301.1.2.5 Barter əməliyyatları üzrə işlərin görülməsi və xidmətlərin göstərilməsi": "vm_301_1_2_5",
		"301.1.2.6 Sair işlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_301_1_2_6",
		"301.1.2.7 Təqdim ediləcək işlərin və xidmətlərin hesabına əvvəlcədən alınmış ödənişləri": "vm_301_1_2_7",
		"301.1.2.8 Emal əməliyyatları üzrə işlərin görülməsi və xidmətlərin göstərilməsi": "vm_301_1_2_8",
		"301.1.2.9 İşlər, xidmətlər təqdim edildikdən sonra verilmiş borclar": "vm_301_1_2_9",
		"301.1.2.10 İşlər, xidmətlər təqdim edilənədək verilmiş borclar": "vm_301_1_2_10",
		"301.1.2.11 Tələb hüququ güzəşt edildikdə – güzəşt edilən məbləğ": "vm_301_1_2_11",
		"301.1.2.12 İşlərin, xidmətlərin təqdim edilməsi üzrə yaranan debitor borclar üzrə iddia müddətinin bitməsi": "vm_301_1_2_12",
		"301.1.2.13 Qarşılıqlı hesablaşmalar aparıldıqda öhdəliyin ləğv edilməsi və ya ödənilməsi": "vm_301_1_2_13",
		"301.1.3 Vergi Məcəlləsinin 159.5-ci maddəsinə əsasən ƏDV tutulan əməliyyat sayılan mallardan (işlərdən, xidmətlərdən) qeyri-kommersiya məqsədləri üçün istifadə edilməsi, fövqəladə hallardan başqa malların itməsi, əksik gəlməsi, xarab olması, tam amortizasiya olunmadan uçotdan silinməsi və ya oğurlanması üzrə məbləğ": "vm_301_1_3",
		"301.1.4 Vergi Məcəlləsinin 159.6-cü maddəsinə əsasən ƏDV üzrə qeydiyyatı ləğv edilmə tarixinə olan mal qalığının məbləği": "vm_301_1_4",
		"301-1 Elektron ticarət üzrə ƏDV-yə 18 faiz dərəcə ilə cəlb edilən əməliyyatlar": "vm_301_1",
		"301-2 Pərakəndə ticarət üzrə ƏDV-yə 18 faiz dərəcə ilə cəlb edilən əməliyyatlar": "vm_301_2",
		"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",
		"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. 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",
		"334. Qeyri-sahibkarlıq fəaliyyəti üzrə əməliyyatlar": "vm_334",
		"335. Pul vəsaitləri üzrə əməliyyatlar (maliyyə xidmətləri istisna olmaqla)": "vm_335",
		"336. Torpaq sahələrinin təqdim edilməsi üzrə əməliyyatlar": "vm_336",
	}


def get_field_to_label_mapping():
	"""Маппинг ключей полей к коротким названиям колонок"""
	return {
		# 165.1.x статьи
		"vm_165_1_1": "VM 165.1.1",
		"vm_165_1_2": "VM 165.1.2",
		"vm_165_1_3_mal": "VM 165.1.3 Mal",
		"vm_165_1_3_xid": "VM 165.1.3 Xid",
		"vm_165_1_4": "VM 165.1.4",
		"vm_165_1_5": "VM 165.1.5",
		"vm_165_1_9": "VM 165.1.9",
		"vm_165_1_10": "VM 165.1.10",
		"vm_165_1_11": "VM 165.1.11",

		# 164.1.x статьи
		"vm_164_1_1": "VM 164.1.1",
		"vm_164_1_2": "VM 164.1.2",
		"vm_164_1_3": "VM 164.1.3",
		"vm_164_1_5": "VM 164.1.5",
		"vm_164_1_6": "VM 164.1.6",
		"vm_164_1_7": "VM 164.1.7",
		"vm_164_1_8": "VM 164.1.8",
		"vm_164_1_9": "VM 164.1.9",
		"vm_164_1_10": "VM 164.1.10",
		"vm_164_1_11": "VM 164.1.11",
		"vm_164_1_12": "VM 164.1.12",
		"vm_164_1_13": "VM 164.1.13",
		"vm_164_1_14": "VM 164.1.14",
		"vm_164_1_17": "VM 164.1.17",
		"vm_164_1_18": "VM 164.1.18",
		"vm_164_1_27": "VM 164.1.27",
		"vm_164_1_29": "VM 164.1.29",
		"vm_164_1_30": "VM 164.1.30",
		"vm_164_1_31": "VM 164.1.31",
		"vm_164_1_32": "VM 164.1.32",
		"vm_164_1_34": "VM 164.1.34",
		"vm_164_1_36": "VM 164.1.36",
		"vm_164_1_37": "VM 164.1.37",
		"vm_164_1_42": "VM 164.1.42",
		"vm_164_1_43": "VM 164.1.43",
		"vm_164_1_46": "VM 164.1.46",
		"vm_164_1_47": "VM 164.1.47",
		"vm_164_1_48": "VM 164.1.48",
		"vm_164_1_49": "VM 164.1.49",
		"vm_164_1_50": "VM 164.1.50",
		"vm_164_1_51": "VM 164.1.51",
		"vm_164_1_55": "VM 164.1.55",
		"vm_164_1_34_1": "VM 164.1.34-1",
		"vm_164_1_34_2": "VM 164.1.34-2",
		"vm_164_1_41": "VM 164.1.41",
		"vm_164_1_41_1": "VM 164.1.41-1",
		"vm_164_1_41_2": "VM 164.1.41-2",
		"vm_164_1_41_3": "VM 164.1.41-3",
		"vm_164_1_41_4": "VM 164.1.41-4",
		"vm_164_1_57": "VM 164.1.57",
		"vm_164_1_10_1": "VM 164.1.10-1",
		"vm_164_1_58": "VM 164.1.58",
		"vm_164_1_59": "VM 164.1.59",
		"vm_164_1_8_1": "VM 164.1.8-1",
		"vm_164_1_56_1": "VM 164.1.56-1",
		"vm_164_1_19": "VM 164.1.19",
		"vm_164_1_19_1": "VM 164.1.19-1",
		"vm_164_1_2_1": "VM 164.1.2-1",
		"vm_164_1_9_1": "VM 164.1.9-1",
		"vm_164_1_51_1": "VM 164.1.51-1",
		# --- 302.x / 303.x новые статьи ---
		"vm_302_1": "302-1",
		"vm_302_2": "302-2",
		"vm_302_3": "302-3",
		"vm_302_11": "302.11",
		"vm_302_12": "302.12",
		"vm_302_6": "302.6",
		"vm_302_6_1": "302.6.1",
		"vm_302_7": "302.7",
		"vm_303_1": "303-1",
		"vm_303_2": "303-2",
		"vm_303_3": "303-3",
		"vm_303_41": "303.41",
		"vm_303_42": "303.42",
		"vm_303_53": "303.53",
		# --- 301.x новые статьи ---
		"vm_301_1_1_1": "301.1.1.1",
		"vm_301_1_1_2": "301.1.1.2",
		"vm_301_1_1_3": "301.1.1.3",
		"vm_301_1_1_4": "301.1.1.4",
		"vm_301_1_1_5": "301.1.1.5",
		"vm_301_1_1_6": "301.1.1.6",
		"vm_301_1_1_7": "301.1.1.7",
		"vm_301_1_1_8": "301.1.1.8",
		"vm_301_1_1_9": "301.1.1.9",
		"vm_301_1_1_10": "301.1.1.10",
		"vm_301_1_1_11": "301.1.1.11",
		"vm_301_1_1_12": "301.1.1.12",
		"vm_301_1_1_13": "301.1.1.13",
		"vm_301_1_1_14": "301.1.1.14",
		"vm_301_1_2_1": "301.1.2.1",
		"vm_301_1_2_2": "301.1.2.2",
		"vm_301_1_2_3": "301.1.2.3",
		"vm_301_1_2_4": "301.1.2.4",
		"vm_301_1_2_5": "301.1.2.5",
		"vm_301_1_2_6": "301.1.2.6",
		"vm_301_1_2_7": "301.1.2.7",
		"vm_301_1_2_8": "301.1.2.8",
		"vm_301_1_2_9": "301.1.2.9",
		"vm_301_1_2_10": "301.1.2.10",
		"vm_301_1_2_11": "301.1.2.11",
		"vm_301_1_2_12": "301.1.2.12",
		"vm_301_1_2_13": "301.1.2.13",
		"vm_301_1_3": "301.1.3",
		"vm_301_1_4": "301.1.4",
		"vm_301_1": "301-1",
		"vm_301_2": "301-2",
		"vm_301_3": "301-3",
		"vm_301_4": "301-4",
		# --- 328–336 новые статьи ---
		"vm_328": "328",
		"vm_329": "329",
		"vm_330": "330",
		"vm_331": "331",
		"vm_332": "332",
		"vm_333": "333",
		"vm_334": "334",
		"vm_335": "335",
		"vm_336": "336",
	}


def get_columns():
	"""Создает колонки отчета"""
	columns = []

	# Основные колонки
	columns.extend([
		{
			"label": "VAT Allocation",
			"fieldname": "vat_allocation",
			"fieldtype": "Link",
			"options": "VAT allocation",
			"width": 150
		},
		{
			"label": "Year",
			"fieldname": "year",
			"fieldtype": "Int",
			"width": 80
		},
		{
			"label": "Month",
			"fieldname": "month",
			"fieldtype": "Data",
			"width": 100
		},
		{
			"label": "Date",
			"fieldname": "posting_date",
			"fieldtype": "Date",
			"width": 100
		}
	])

	# Получаем маппинг полей к названиям
	field_to_label = get_field_to_label_mapping()

	# Создаем колонки для каждого поля в правильном порядке.
	# Для каждой статьи: сумма (amount) и сразу следом ödəniş (allocated_amount).
	for field_key in sorted(field_to_label.keys()):
		label = field_to_label[field_key]
		columns.append({
			"label": label,
			"fieldname": field_key,
			"fieldtype": "Currency",
			"width": 120
		})
		columns.append({
			"label": f"{label} Ödəniş",
			"fieldname": f"{field_key}_odenis",
			"fieldtype": "Currency",
			"width": 120
		})

	return columns
