Programming

3. cheat_sheet

import pandas as pd

def get_blockc_structure():
    # Full structure we defined earlier
    return [
        {"code": "10000", "no": "", "name": "I ДАРАЖАЛИ КАПИТАЛ", "is_header": True, "level": 0},
        {"code": "10100", "no": "1", "name": "I ДАРАЖАЛИ АСОСИЙ КАПИТАЛ", "is_header": True, "level": 1},
        {"code": "10110", "no": "1.1.", "name": "Оддий акциялар, нетто", "is_header": False, "level": 3, "formula": "1.1 = a - б"},
        {"code": "10111", "no": "a", "name": "Тўлиқ тўланган оддий акциялар", "is_header": False, "level": 4},
        {"code": "10112", "no": "б", "name": "Минус: Қайта сотиб олинган оддий акциялар", "is_header": False, "level": 4},
        {"code": "10120", "no": "1.2.", "name": "Қўшимча капитал (оддий)", "is_header": False, "level": 3},
        {"code": "10130", "no": "1.3.", "name": "Тақсимланмаган фойда (зарар), шу жумладан капитал захиралар", "is_header": False, "level": 3, "formula": "1.3 = a + б - в - г"},
        {"code": "10131", "no": "a", "name": "Капитал ва бошқа захиралар", "is_header": False, "level": 4},
        {"code": "10132", "no": "б", "name": "Тақсимланмаган фойда", "is_header": False, "level": 4},
        {"code": "10133", "no": "в", "name": "Ўтган даврлар (йиллар) учун зарарлар", "is_header": False, "level": 4},
        {"code": "10134", "no": "г", "name": "Жорий йил учун зарар", "is_header": False, "level": 4},
        {"code": "10140", "no": "1.4.", "name": "Банкнинг консолидациялашган I даражали асосий капитал элементлари", "is_header": False, "level": 3},
        {"code": "10150", "no": "1.5.", "name": "Чегирмалар ҳисоблангунга қадар жами I даражали асосий капитал", "is_header": True, "level": 3, "formula": "1.5 = 1.1 + 1.2 + 1.3 + 1.4"},
        {"code": "10160", "no": "1.6.", "name": "I даражали асосий капиталдан чегирмалар", "is_header": False, "level": 3, "formula": "1.6 = Сумма(a...л)"},
        {"code": "10161", "no": "a", "name": "Гудвилл ҳамда банкнинг бошқа номоддий активлари", "is_header": False, "level": 4},
        {"code": "10162", "no": "б", "name": "Муддати узайтирилган солиқ талаблари", "is_header": False, "level": 4},
        {"code": "10163", "no": "в", "name": "Пул оқимларини хеджирлаш натижасида ҳосил бўлган фойда ёки зарар", "is_header": False, "level": 4},
        {"code": "10164", "no": "г", "name": "Активларни секьюритизация қилиш натижасида олинадиган фойда", "is_header": False, "level": 4},
        {"code": "10165", "no": "д", "name": "Банкнинг ўз оддий акцияларига тўғридан-тўғри ёки билвосита инвестициялари", "is_header": False, "level": 4},
        {"code": "10166", "no": "е", "name": "Банк ва бошқа банк ўзаро акцияларига инвестициялари", "is_header": False, "level": 4},
        {"code": "10167", "no": "ж", "name": "Конс. бўлмаган битта ташкилотга инв. банк 1ДАК 15% ошган қисми", "is_header": False, "level": 4},
        {"code": "10168", "no": "з", "name": "Конс. бўлмаган ташкилотларга жами инв. банк 1ДАК 50% ошган қисми", "is_header": False, "level": 4},
        {"code": "10169", "no": "и", "name": "Улуши сезиларли бўлмаган (≤10%) ташкилотларга инв. банк 1ДАК 10% ошган қисми", "is_header": False, "level": 4},
        {"code": "10170", "no": "к", "name": "Улуши сезиларли бўлган (>10%) ташкилотларга инв. банк 1ДАК 10% ошган қисми", "is_header": False, "level": 4},
        {"code": "10171", "no": "л", "name": "Банк томонидан муаммоли активлар бўйича қўшимча шакллантирилиши лозим бўлган захиралар", "is_header": False, "level": 4},
        {"code": "10900", "no": "I", "name": "I ДАРАЖАЛИ АСОСИЙ КАПИТАЛ", "is_header": True, "level": 2, "formula": "I = 1.5 - 1.6"},
        {"code": "20100", "no": "2", "name": "I ДАРАЖАЛИ ҚЎШИМЧА КАПИТАЛ", "is_header": True, "level": 1},
        {"code": "20110", "no": "2.1.", "name": "Имтиёзли акциялар", "is_header": False, "level": 3, "formula": "2.1 = a - б"},
        {"code": "20111", "no": "a", "name": "Тўлиқ тўланган имтиёзли акциялар", "is_header": False, "level": 4},
        {"code": "20112", "no": "б", "name": "Минус: Қайта сотиб олинган имтиёзли акциялар", "is_header": False, "level": 4},
        {"code": "20120", "no": "2.2.", "name": "Қўшимча капитал (имтиёзли)", "is_header": False, "level": 3},
        {"code": "20130", "no": "2.3.", "name": "I даражали қўшимча капиталга киритилган капитал воситалари", "is_header": False, "level": 3},
        {"code": "20140", "no": "2.4.", "name": "Банкнинг консолидациялашган I даражали қўшимча капитал элементлари", "is_header": False, "level": 3},
        {"code": "20150", "no": "2.5.", "name": "Чегирмалар ҳисоблангунга қадар жами I даражали қўшимча капитал", "is_header": True, "level": 3, "formula": "2.5 = 2.1 + 2.2 + 2.3 + 2.4"},
        {"code": "20160", "no": "2.6.", "name": "I даражали қўшимча капиталдан чегирмалар", "is_header": False, "level": 3, "formula": "2.6 = a + б"},
        {"code": "20161", "no": "a", "name": "Банк ўзининг I даражали қўшимча капитал элементларига киритган инвестициялари", "is_header": False, "level": 4},
        {"code": "20162", "no": "б", "name": "Банкнинг бошқа банкнинг I даражали қўшимча капиталига киритилган капитал элементларига инвестициялари", "is_header": False, "level": 4},
        {"code": "20900", "no": "II", "name": "ЖАМИ I ДАРАЖАЛИ ҚЎШИМЧА КАПИТАЛ", "is_header": True, "level": 2, "formula": "II = 2.5 - 2.6"},
        {"code": "30100", "no": "III", "name": "ЖАМИ ТЎҒРИЛАНГАН I ДАРАЖАЛИ КАПИТАЛ", "is_header": True, "level": 2, "formula": "III = I + II"},
        {"code": "30110", "no": "3.1.", "name": "I даражали капиталга алоқадор қарз олувчилар бўйича меъёрларни ҳисобга олган ҳолдаги тузатиш", "is_header": False, "level": 3},
        {"code": "30900", "no": "ЖАМИ", "name": "ЖАМИ I ДАРАЖАЛИ КАПИТАЛ", "is_header": True, "level": 1, "formula": "ЖАМИ = III - 3.1"},
        {"code": "40000", "no": "", "name": "II ДАРАЖАЛИ КАПИТАЛ", "is_header": True, "level": 0},
        {"code": "40110", "no": "4.1.", "name": "II даражали капиталга киритилган капитал воситалари", "is_header": False, "level": 3},
        {"code": "40120", "no": "4.2.", "name": "Қўшимча капитал (II даражали капитал воситалари бўйича)", "is_header": False, "level": 3},
        {"code": "40130", "no": "4.3.", "name": "Жорий йил соф фойдаси", "is_header": False, "level": 3},
        {"code": "40140", "no": "4.4.", "name": "Стандарт активларга яратилган захиралар", "is_header": False, "level": 3},
        {"code": "40150", "no": "4.5.", "name": "Банкнинг консолидациялашган II даражали капитал элементлари", "is_header": False, "level": 3},
        {"code": "40160", "no": "4.6.", "name": "Субординар қарз", "is_header": False, "level": 3},
        {"code": "40170", "no": "4.7.", "name": "Чегирмалар ҳисоблангунга қадар жами II даражали капитал", "is_header": True, "level": 3, "formula": "4.7 = 4.1 + 4.2 + 4.3 + 4.4 + 4.5 + 4.6"},
        {"code": "40180", "no": "4.8.", "name": "II даражали капиталдан чегирмалар", "is_header": False, "level": 3, "formula": "4.8 = a + б + в"},
        {"code": "40181", "no": "a", "name": "Банк ўзининг II даражали капитал элементларига киритган инвестициялари", "is_header": False, "level": 4},
        {"code": "40182", "no": "б", "name": "Банкнинг бошқа банкнинг II даражали капиталига инвестициялари", "is_header": False, "level": 4},
        {"code": "40183", "no": "в", "name": "II даражали капиталнинг I даражали капиталдан ортиқча қисми (чегирмаси)", "is_header": False, "level": 4},
        {"code": "40900", "no": "IV", "name": "ЧЕГИРМАЛАРНИ ҲИСОБГА ОЛГАН ҲОЛДAГИ II ДАРАЖАЛИ КАПИТАЛ", "is_header": True, "level": 2, "formula": "IV = 4.7 - 4.8"},
        {"code": "50000", "no": "V", "name": "ЖАМИ РЕГУЛЯТИВ КАПИТАЛ", "is_header": True, "level": 1, "formula": "V = ЖАМИ I ДАРАЖАЛИ КАПИТАЛ + IV"},
        {"code": "60000", "no": "VI", "name": "ТАВАККАЛЧИЛИККА ТОРТИЛГАН АКТИВЛАР УМУМИЙ СУММАСИ", "is_header": True, "level": 1, "formula": "VI = a + б + в"},
        {"code": "60001", "no": "a", "name": "Баланс ва балансдан ташқари активларнинг умумий суммаси", "is_header": False, "level": 4},
        {"code": "60002", "no": "б", "name": "Операцион таваккалчилик", "is_header": False, "level": 4},
        {"code": "60003", "no": "в", "name": "Бозор таваккалчилиги", "is_header": False, "level": 4},
        {"code": "70100", "no": "VII", "name": "I ДАРАЖАЛИ АСОСИЙ КАПИТАЛНИНГ МОНАДЛИК КОЭФФИЦИЕНТИ (Л/I)", "is_header": True, "level": 2, "formula": "VII = I / VI"},
        {"code": "70200", "no": "VIII", "name": "I ДАРАЖАЛИ КАПИТАЛНИНГ МОНАДЛИК КОЭФФИЦИЕНТИ (Ш/I)", "is_header": True, "level": 2, "formula": "VIII = ЖАМИ I ДАРАЖАЛИ КАПИТАЛ / VI"},
        {"code": "70300", "no": "IX", "name": "РЕГУЛЯТИВ КАПИТАЛНИНГ МОНАДЛИК КОЭФФИЦИЕНТИ (У/I)", "is_header": True, "level": 2, "formula": "IX = V / VI"},
        {"code": "80100", "no": "X", "name": "МИНИМАЛ КАПИТАЛ ТАЛАБЛАРИ (БУФЕРЛАРДАН ТАШҚАРИ)", "is_header": True, "level": 2},
        {"code": "80101", "no": "a", "name": "I даражали асосий капиталнинг монадлик коэффициенти", "is_header": False, "level": 4},
        {"code": "80102", "no": "б", "name": "I даражали капиталнинг монадлик коэффициенти", "is_header": False, "level": 4},
        {"code": "80103", "no": "в", "name": "Регулятив капиталнинг монадлик коэффициенти", "is_header": False, "level": 4},
        {"code": "80200", "no": "XI", "name": "ЖАМИ КАПИТАЛ БУФЕРЛАРИ", "is_header": True, "level": 2, "formula": "XI = a + б + в"},
        {"code": "80201", "no": "a", "name": "Консервацион капитал буфери коэффициенти", "is_header": False, "level": 4},
        {"code": "80202", "no": "б", "name": "Тизимли аҳамиятга эга банклар учун капитал буфери коэффициенти", "is_header": False, "level": 4},
        {"code": "80203", "no": "в", "name": "Контрциклик капитал буфери коэффициенти", "is_header": False, "level": 4},
        {"code": "80300", "no": "XII", "name": "ЖАМИ КАПИТАЛ БУФЕРЛАРИГА ҚАДАР I ДАРАЖАЛИ АСОСИЙ КАПИТАЛ КОЭФФИЦИЕНТИ*", "is_header": True, "level": 2},
        {"code": "80400", "no": "XIII", "name": "ЖАМИ КАПИТАЛ БУФЕРЛАРИ БЎЙИЧА ОРТИҚЧА (+) / ЕТИШМАГАН (-) СУММА", "is_header": True, "level": 2},
        {"code": "90100", "no": "XIV", "name": "Левераж ҳисоб-китоби учун активлар", "is_header": True, "level": 2, "formula": "XIV = a + б + в - г"},
        {"code": "90101", "no": "a", "name": "Жами активлар", "is_header": False, "level": 4},
        {"code": "90102", "no": "б", "name": "Балансдан ташқари активлар", "is_header": False, "level": 4},
        {"code": "90103", "no": "в", "name": "Ҳосилавий (дериватив) воситалар", "is_header": False, "level": 4},
        {"code": "90104", "no": "г", "name": "Минус: Жами захиралар ва капиталдан чегирмалар", "is_header": False, "level": 4},
        {"code": "90200", "no": "XV", "name": "Левераж коэффициенти", "is_header": True, "level": 1, "formula": "XV = I / XIV"}
    ]

def generate_excel():
    data = get_blockc_structure()
    
    # Prepare the list for Pandas
    rows = []
    for item in data:
        rows.append({
            "Unique Code": item.get("code", ""),
            "No.": item.get("no", ""),
            "Indicator Name (Кўрсаткичлар)": item.get("name", ""),
            "Formula / Note": item.get("formula", ""),
            "Is Header?": "Yes" if item.get("is_header") else ""
        })
        
    df = pd.DataFrame(rows)
    
    filename = "BlockC_CheatSheet.xlsx"
    
    # Create an Excel writer using xlsxwriter
    writer = pd.ExcelWriter(filename, engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Cheat Sheet', index=False)
    
    workbook  = writer.book
    worksheet = writer.sheets['Cheat Sheet']
    
    # Define formats
    header_format = workbook.add_format({
        'bold': True, 'text_wrap': True, 'valign': 'top', 
        'fg_color': '#D7E4BC', 'border': 1
    })
    
    highlight_format = workbook.add_format({
        'bold': True, 'bg_color': '#F2F2F2', 'border': 1
    })
    
    normal_format = workbook.add_format({'text_wrap': True, 'border': 1})
    
    # Set column widths to print nicely on A4
    worksheet.set_column('A:A', 12)  # Unique Code
    worksheet.set_column('B:B', 8)   # No.
    worksheet.set_column('C:C', 60)  # Indicator Name
    worksheet.set_column('D:D', 35)  # Formula
    worksheet.set_column('E:E', 12)  # Is Header
    
    # Apply header format
    for col_num, value in enumerate(df.columns.values):
        worksheet.write(0, col_num, value, header_format)
        
    # Apply row formatting
    for row_num in range(len(df)):
        is_head = df.iloc[row_num]['Is Header?'] == "Yes"
        fmt = highlight_format if is_head else normal_format
        
        worksheet.write(row_num + 1, 0, df.iloc[row_num]['Unique Code'], fmt)
        worksheet.write(row_num + 1, 1, df.iloc[row_num]['No.'], fmt)
        
        # Add visual indent for sub-items
        name_val = str(df.iloc[row_num]['Indicator Name (Кўрсаткичлар)'])
        if not is_head and df.iloc[row_num]['No.'] in ["a", "б", "в", "г", "д", "е", "ж", "з", "и", "к", "л"]:
            name_val = "      " + name_val
        elif not is_head:
            name_val = "   " + name_val
            
        worksheet.write(row_num + 1, 2, name_val, fmt)
        worksheet.write(row_num + 1, 3, df.iloc[row_num]['Formula / Note'], fmt)
        worksheet.write(row_num + 1, 4, df.iloc[row_num]['Is Header?'], fmt)
        
    writer.close()
    print(f"Success! {filename} has been created in your folder.")

if __name__ == "__main__":
    generate_excel()
Foydali bo'ldimi? Yoqmadi 0 Baholash uchun kiring