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

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 get_data(filters):
	"""Получаем данные по Sales Invoice с распределением по налоговым статьям"""
	
	# Получаем Sales Invoice Items с учетом фильтров
	invoice_items = get_sales_invoice_items(filters)
	
	if not invoice_items:
		return []
	
	# Получаем маппинг name -> article_name из Tax Article
	tax_article_names_mapping = get_tax_article_names_mapping()
	
	# Получаем маппинг полных названий к ключам полей
	tax_articles_mapping = get_tax_articles_mapping()
	
	# Группируем данные по Sales Invoice
	invoices_data = {}
	
	for item in invoice_items:
		invoice_name = item['parent']
		
		if invoice_name not in invoices_data:
			invoices_data[invoice_name] = {
				'sales_invoice': invoice_name,
				'posting_date': item['posting_date'],
				'company': item['company']
			}
			
			# Инициализируем все колонки нулями
			for field_key in tax_articles_mapping.values():
				invoices_data[invoice_name][field_key] = 0
		
		# Получаем полное название статьи по сокращенному name
		tax_article_name = item['tax_article']  # Это name из Tax Article
		if tax_article_name and tax_article_name in tax_article_names_mapping:
			full_article_name = tax_article_names_mapping[tax_article_name]  # Получаем article_name
			
			# Проверяем есть ли маппинг для полного названия
			if full_article_name in tax_articles_mapping:
				field_key = tax_articles_mapping[full_article_name]
				invoices_data[invoice_name][field_key] += flt(item['amount'])
	
	# Конвертируем в список и сортируем
	data = list(invoices_data.values())
	data.sort(key=lambda x: (x['posting_date'], x['sales_invoice']), 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_sales_invoice_items(filters):
	"""Получает Sales Invoice Items с учетом фильтров"""
	
	conditions = []
	values = []
	
	# Фильтр по компании
	if filters.get("company"):
		conditions.append("si.company = %s")
		values.append(filters.get("company"))
	
	# Фильтр по датам
	if filters.get("from_date"):
		conditions.append("si.posting_date >= %s")
		values.append(filters.get("from_date"))
	
	if filters.get("to_date"):
		conditions.append("si.posting_date <= %s")
		values.append(filters.get("to_date"))
	
	# Только подтвержденные документы
	conditions.append("si.docstatus = 1")
	
	# Только items, у которых есть налоговые статьи (через child table; см. JOIN ниже)
	conditions.append("sii.custom_si_row_key IS NOT NULL AND sii.custom_si_row_key != ''")
	
	where_clause = ""
	if conditions:
		where_clause = "WHERE " + " AND ".join(conditions)
	
	query = f"""
		SELECT 
			si.name as parent,
			si.posting_date,
			si.company,
			sita.tax_article,
			sii.amount
		FROM 
			`tabSales Invoice Item` sii
		JOIN
			`tabSales Invoice` si ON sii.parent = si.name
		INNER JOIN
			`tabSales Invoice Tax Article` sita ON sita.parent = sii.parent AND sita.parentfield = 'custom_item_tax_articles' AND sita.parent_row = sii.custom_si_row_key
		{where_clause}
		ORDER BY 
			si.posting_date DESC, si.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"
	}


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"
	}


def get_columns():
	"""Создает колонки отчета"""
	columns = []
	
	# Основные колонки
	columns.extend([
		{
			"label": "Sales Invoice",
			"fieldname": "sales_invoice",
			"fieldtype": "Link",
			"options": "Sales Invoice",
			"width": 150
		},
		{
			"label": "Tarix",
			"fieldname": "posting_date",
			"fieldtype": "Date",
			"width": 100
		}
	])
	
	# Получаем маппинг полей к названиям
	field_to_label = get_field_to_label_mapping()
	
	# Создаем колонки для каждого поля в правильном порядке
	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
		})
	
	return columns