diff --git a/generate_pdf.py b/generate_pdf.py new file mode 100644 index 0000000..a537c6b --- /dev/null +++ b/generate_pdf.py @@ -0,0 +1,364 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from reportlab.lib import colors +from reportlab.lib.pagesizes import A4, landscape +from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak +from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle +from reportlab.lib.units import cm, inch +from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFont + +# Register a font that supports Cyrillic (using DejaVu or similar if available) +# For simplicity, we'll use a standard font that should work +try: + pdfmetrics.registerFont(TTFont('DejaVu', '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf')) + FONT_NAME = 'DejaVu' +except: + FONT_NAME = 'Helvetica' # Fallback (won't support Cyrillic properly) + +def create_pdf(): + doc = SimpleDocTemplate( + "projects_report.pdf", + pagesize=landscape(A4), + rightMargin=1.5*cm, + leftMargin=1.5*cm, + topMargin=1.5*cm, + bottomMargin=1.5*cm + ) + + styles = getSampleStyleSheet() + + # Custom styles + title_style = ParagraphStyle( + 'CustomTitle', + parent=styles['Heading1'], + fontSize=24, + textColor=colors.HexColor('#1e3a5f'), + spaceAfter=30, + alignment=TA_CENTER, + fontName=FONT_NAME + ) + + subtitle_style = ParagraphStyle( + 'CustomSubtitle', + parent=styles['Heading2'], + fontSize=14, + textColor=colors.HexColor('#64748b'), + spaceAfter=20, + alignment=TA_CENTER, + fontName=FONT_NAME + ) + + heading_style = ParagraphStyle( + 'CustomHeading', + parent=styles['Heading2'], + fontSize=16, + textColor=colors.HexColor('#1e3a5f'), + spaceAfter=12, + spaceBefore=12, + fontName=FONT_NAME + ) + + subheading_style = ParagraphStyle( + 'CustomSubHeading', + parent=styles['Heading3'], + fontSize=12, + textColor=colors.HexColor('#3b82f6'), + spaceAfter=8, + spaceBefore=8, + fontName=FONT_NAME + ) + + normal_style = ParagraphStyle( + 'CustomNormal', + parent=styles['Normal'], + fontSize=10, + textColor=colors.HexColor('#334155'), + spaceAfter=6, + alignment=TA_JUSTIFY, + fontName=FONT_NAME + ) + + bullet_style = ParagraphStyle( + 'CustomBullet', + parent=styles['Normal'], + fontSize=10, + textColor=colors.HexColor('#334155'), + spaceAfter=4, + leftIndent=20, + fontName=FONT_NAME + ) + + story = [] + + # Title page + story.append(Spacer(1, 2*cm)) + story.append(Paragraph("ОТЧЕТ ПО ПРОЕКТАМ БКВ", title_style)) + story.append(Paragraph("Справка о ходе реализации 9 проектов", subtitle_style)) + story.append(Spacer(1, 1*cm)) + + # Summary table + summary_data = [ + ['№', 'Проект', 'Статус', 'Период', 'План/Освоено (тыс. ₸)'], + ['1', 'Smart Aqkol 2025', 'Завершена', '2025-2028', '334 192'], + ['2', 'Комплексное решение для приемных покоев', 'Рассмотрение заявок', '2026-2032', '3 794 965'], + ['3', 'Смарт-видеожетоны', 'Рассмотрение заявок', '2026-2033', '4 240 714'], + ['4', 'GenAI KT', 'Внедрение', '-', '727 000 (доход)'], + ['5', 'Единая инфраструктура дронов', 'Масштабирование', '2025-2030', '1 210 956'], + ['6', 'Национальный каталог товаров', 'Опытная эксплуатация', '-', 'На финансировании'], + ['7', 'ЦОД в г. Косшы', 'Завершающая стадия', '-', '3 711 077'], + ['8', 'Вычислительные мощности для ИИ', 'Масштабирование', '2 этапа', '-'], + ['9', 'Холодовая цепь', 'Подготовка к запуску', 'Старт 01.10.2026', '-'] + ] + + summary_table = Table(summary_data, colWidths=[0.8*cm, 5*cm, 3.5*cm, 3*cm, 4*cm]) + summary_table.setStyle(TableStyle([ + ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1e3a5f')), + ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), + ('ALIGN', (0, 0), (-1, -1), 'CENTER'), + ('FONTNAME', (0, 0), (-1, 0), FONT_NAME), + ('FONTSIZE', (0, 0), (-1, 0), 11), + ('BOTTOMPADDING', (0, 0), (-1, 0), 12), + ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#f1f5f9')), + ('FONTNAME', (0, 1), (-1, -1), FONT_NAME), + ('FONTSIZE', (0, 1), (-1, -1), 9), + ('TOPPADDING', (0, 1), (-1, -1), 8), + ('BOTTOMPADDING', (0, 1), (-1, -1), 8), + ('GRID', (0, 0), (-1, -1), 1, colors.HexColor('#cbd5e1')), + ])) + + story.append(summary_table) + story.append(Spacer(1, 0.5*cm)) + story.append(Paragraph("Дата формирования отчета: Август 2026", normal_style)) + story.append(PageBreak()) + + # Project details + projects = [ + { + 'title': '1. Проект «Smart Aqkol 2025: Расширение цифровых решений и внедрение ИИ»', + 'status': 'Завершена', + 'period': '4 года (2025-2028)', + 'budget': '334 192 тыс. ₸', + 'details': [ + ('СПП элемент', 'I.25.DBD.58.002'), + ('Сумма договора (без НДС)', '151 897 тыс. ₸'), + ('План доходов', '1 114 082 тыс. ₸'), + ('План расходов', '636 090 тыс. ₸'), + ('Фактический расход', '0 тыс. ₸'), + ('План CAPEX', '334 192,2 тыс. ₸'), + ('Фактически освоенный CAPEX', '334 192 тыс. ₸'), + ], + 'description': 'В рамках совместной работы, ДУПом было подписано дополнительное соглашение к договору с Консорциумом в составе АО «Логиком» совместно с ТОО «ОптикСтрой».', + 'current_status': 'По данному объекту в рамках договора № 1098000/2025/5 от 12.06.2025 подрядной организации передан заказ №1098000/2025/5/004. СМР в работе. Подрядчик продолжает выполнение строительно-монтажных работ.' + }, + { + 'title': '2. Проект «Комплексное решение для приемных покоев»', + 'status': 'Рассмотрение заявок', + 'period': '7 лет (2026-2032)', + 'budget': '3 794 965 тыс. ₸', + 'details': [ + ('СПП элемент', 'I.26.DBD.58.006/01-01'), + ('План БКВ на 2026 год', '3 794 965 тыс. ₸'), + ('План доходов', '12 362 599 тыс. ₸'), + ('План расходов', '6 061 935 тыс. ₸'), + ('План CAPEX', '3 794 964,9 тыс. ₸'), + ], + 'description': '', + 'current_status': 'Прием заявок завершен. Ведется рассмотрение заявок на портале zakup.sk.kz.' + }, + { + 'title': '3. Проект «Смарт-видеожетоны»', + 'status': 'Рассмотрение заявок', + 'period': '8 лет (2026-2033)', + 'budget': '4 240 714 тыс. ₸', + 'details': [ + ('Ответственный', 'Қапан Даурен'), + ('СПП элемент', 'I.26.DBD.58.002/01-01'), + ('План БКВ на 2026 год', '4 240 714 тыс. ₸'), + ('План доходов', '10 614 456 тыс. ₸'), + ('План расходов', '5 143 647 тыс. ₸'), + ('План CAPEX', '4 240 714,2 тыс. ₸'), + ], + 'description': '', + 'current_status': 'Прием заявок завершен. Ведется рассмотрение заявок на портале zakup.sk.kz.' + }, + { + 'title': '4. Проект «GenAI KT»', + 'status': 'Внедрение', + 'period': '-', + 'budget': '727 млн ₸ (доход 2026)', + 'details': [ + ('Направление', 'Разработка и коммерциализация решений на базе ИИ'), + ('Клиенты', 'АО «Самрук-Қазына» и портфельные компании'), + ], + 'description': 'GenAI KT - это направление по разработке и коммерциализации решений на базе искусственного интеллекта для корпоративного и государственного сектора. Проект включает создание AI-агентов, Generative AI и аналитических решений.', + 'current_status': 'В 2026 году получены доходы в размере 727 млн. тенге. Разработаны: AI-рекрутер, AI-юрист, AI БиОТ, AI по социальной стабильности, SKAI, SKAI Data, AI-агент «Жеті Жарғы» для Сената. Проводятся тестирование и внедрение с портфельными компаниями (АО «Казпочта», АО «Самрук-Энерго», АО «НГК «Тау-Кен Самрук», АО «KEGOC»).', + 'bullets': [ + 'Внедрение ИИ-агентов - 727 млн. тенге', + 'Увеличение штатной численности Департамента AI', + 'Проводится работа по коммерциализации и заключению доходных договоров' + ] + }, + { + 'title': '5. Проект «Единая инфраструктура дронов»', + 'status': 'Масштабирование', + 'period': '2025-2030', + 'budget': '1 210 956,26 тыс. ₸ (освоено в 2025)', + 'details': [ + ('Освоено 2025', '1 210 956,26 тыс. ₸'), + ('CAPEX 2026', 'Не предусмотрен'), + ('Оборудование', '89 дронов с док-станциями'), + ('Штат', '18 сотрудников (Служба БПЛА)'), + ], + 'description': 'Инновационная платформа, объединяющая сервисную модель предоставления дронов и облачное ПО для планирования миссий и управления воздушным трафиком.', + 'current_status': '2025: Закуп оборудования и платформы, создание Службы БПЛА, пилотные проекты с госорганами, введение в эксплуатацию. 2026: Получение разрешений на полеты, заключены доходные договоры с госорганами, ведется масштабирование.' + }, + { + 'title': '6. Проект «Национальный каталог товаров»', + 'status': 'Опытная эксплуатация', + 'period': '-', + 'budget': 'На рассмотрении в Минфине', + 'details': [ + ('Утверждение БП', 'Протокол № 32 от 8 июля 2026'), + ('Статус системы', 'Акт запуска от 31.12.2025'), + ('Финансирование', 'На рассмотрении в Министерстве финансов'), + ], + 'description': 'ТОО «Центр развития цифровой экономики» обеспечивает функционирование и развитие информационной системы НКТ.', + 'current_status': 'НКТ функционирует в режиме опытной эксплуатации с 1 января 2026 года. Выполняются функции по регистрации товаров и актуализации сведений. Разработаны Методика пост-мониторинга и План-график реализации (на проверке).', + 'bullets': [ + 'Регистрация и ведение карточек товаров', + 'Присвоение кодов NTIN', + 'Модерация и актуализация сведений', + 'Развитие ИИ-инструментов для анализа карточек', + 'Проработка обеспечения GPU-ресурсами' + ] + }, + { + 'title': '7. Проект «Строительство ЦОД в г. Косшы»', + 'status': 'Завершающая стадия', + 'period': '-', + 'budget': '3 711 077 тыс. ₸ (освоено янв-авг 2026)', + 'details': [ + ('Освоено (янв-авг 2026)', '3 711 077 тыс. ₸'), + ('Готовность здания', '100%'), + ('Готовность оборудования', '100%'), + ('Характеристики', '248 стоек, мощность ≥ 3,5 МВт'), + ('№ закупа подстанций', '1234623'), + ], + 'description': 'Проект предусматривает создание современной инфраструктуры ЦОД с размещением IT-оборудования и соответствующими инженерными системами.', + 'current_status': 'Основное здание и оборудование имеют 100% готовность. Проводятся тендерные процедуры по расширению (модернизации) подстанций (рассмотрение заявок).' + }, + { + 'title': '8. Проект «Развитие вычислительных мощностей для ИИ-решений»', + 'status': 'Масштабирование (2 этап)', + 'period': '-', + 'budget': '-', + 'details': [ + ('Основание', 'Поручение ГГ от 25.01.2025 (ППРК № 592)'), + ('Локация', 'г. Алматы, ул. Диваева, 39'), + ('Этап I', '50 серверов HGX, 400 GPU NVIDIA H200, СХД 6 ПБ'), + ('Этап II', '60 серверов HGX, 480 GPU NVIDIA B300'), + ('Статус Этапа I', 'Введен в эксплуатацию 19.09.2025, используется на 100%'), + ('Статус Этапа II', 'Договор от 05.06.2026, монтаж до конца 2026'), + ], + 'description': 'Суперкомпьютерный комплекс Al-Farabium для предоставления вычислительных мощностей в аренду B2B & B2G клиентам.', + 'current_status': 'Этап I: 323 GPU (80%) выделено коммерческим клиентам, 77 GPU (20%) - пилотным проектам. Этап II: Договор с ТОО «АСБИС Казахстан» заключен, планируется поставка, монтаж и установка в ЦОД г. Косшы до конца III квартала 2026.', + 'bullets': [ + '1 квартал 2026: Защита бизнес-плана, закупочные процедуры', + '2 квартал 2026: Закуп B300, заключение договора', + '3 квартал 2026: Монтаж и установка в ЦОД Косшы', + '4 квартал 2026: Бенч-тесты, ввод в эксплуатацию, коммерциализация' + ] + }, + { + 'title': '9. Проект «Холодовая цепь»', + 'status': 'Подготовка к запуску', + 'period': 'Старт 1 октября 2026', + 'budget': '-', + 'details': [ + ('Старт услуг', '1 октября 2026'), + ('Датчики', '15 000 штук (первая партия)'), + ('Технический партнер', '«КейДата»'), + ], + 'description': 'Система мониторинга для медицинских организаций.', + 'current_status': 'Подписан договор на 33 медорганизации с УЗ ЗКО, на регистрации договор на 51 медорганизацию по Астане. Ожидается подписание на 27 организаций в Актобе. В Жетісу и Шымкенте договоры заключаются напрямую. В 5 областях бюджет выделен, КП направлено.', + 'bullets': [ + 'ИС развернута в тестовой среде', + 'Датчики проходят таможенные процедуры', + 'Вопросы с техпартнером прорабатываются ежедневно' + ] + }, + ] + + for i, project in enumerate(projects): + story.append(Paragraph(project['title'], heading_style)) + story.append(Spacer(1, 0.3*cm)) + + # Status bar + status_data = [['Статус:', project['status'], 'Период:', project['period'], 'Бюджет:', project['budget']]] + status_table = Table(status_data, colWidths=[1.5*cm, 4*cm, 1.5*cm, 4*cm, 1.5*cm, 5*cm]) + status_table.setStyle(TableStyle([ + ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#f1f5f9')), + ('FONTNAME', (0, 0), (-1, 0), FONT_NAME), + ('FONTSIZE', (0, 0), (-1, 0), 9), + ('TOPPADDING', (0, 0), (-1, 0), 8), + ('BOTTOMPADDING', (0, 0), (-1, 0), 8), + ('ALIGN', (0, 0), (-1, 0), 'LEFT'), + ])) + story.append(status_table) + story.append(Spacer(1, 0.3*cm)) + + # Details table + if project['details']: + details_data = [['Параметр', 'Значение']] + for key, value in project['details']: + details_data.append([key, value]) + + details_table = Table(details_data, colWidths=[6*cm, 8*cm]) + details_table.setStyle(TableStyle([ + ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#3b82f6')), + ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke), + ('FONTNAME', (0, 0), (-1, 0), FONT_NAME), + ('FONTSIZE', (0, 0), (-1, 0), 10), + ('TOPPADDING', (0, 0), (-1, 0), 8), + ('BOTTOMPADDING', (0, 0), (-1, 0), 8), + ('BACKGROUND', (0, 1), (-1, -1), colors.HexColor('#f8fafc')), + ('FONTNAME', (0, 1), (-1, -1), FONT_NAME), + ('FONTSIZE', (0, 1), (-1, -1), 9), + ('TOPPADDING', (0, 1), (-1, -1), 6), + ('BOTTOMPADDING', (0, 1), (-1, -1), 6), + ('GRID', (0, 0), (-1, -1), 0.5, colors.HexColor('#cbd5e1')), + ('VALIGN', (0, 0), (-1, -1), 'TOP'), + ])) + story.append(details_table) + story.append(Spacer(1, 0.3*cm)) + + # Description + if project.get('description'): + story.append(Paragraph("Описание проекта:", subheading_style)) + story.append(Paragraph(project['description'], normal_style)) + story.append(Spacer(1, 0.2*cm)) + + # Current status + if project.get('current_status'): + story.append(Paragraph("Текущий статус:", subheading_style)) + story.append(Paragraph(project['current_status'], normal_style)) + story.append(Spacer(1, 0.2*cm)) + + # Bullets + if project.get('bullets'): + for bullet in project['bullets']: + story.append(Paragraph(f"• {bullet}", bullet_style)) + + story.append(Spacer(1, 0.5*cm)) + if i < len(projects) - 1: + story.append(PageBreak()) + + # Build PDF + doc.build(story) + print("PDF успешно создан: projects_report.pdf") + +if __name__ == '__main__': + create_pdf() diff --git a/projects_report.pdf b/projects_report.pdf new file mode 100644 index 0000000..74f3d89 Binary files /dev/null and b/projects_report.pdf differ