Compare commits

..

1 Commits
pages ... main

Author SHA1 Message Date
2f07950554 add PDF report 2026-08-26 05:04:29 +00:00
2 changed files with 364 additions and 0 deletions

364
generate_pdf.py Normal file
View File

@ -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()

BIN
projects_report.pdf Normal file

Binary file not shown.