From 6858572cf6116a6cc5ed2922e203e72bb420af5c Mon Sep 17 00:00:00 2001 From: ruszhum Date: Sun, 27 Sep 2026 17:14:11 +0000 Subject: [PATCH] add Word report + button in index.html + server route .docx --- .vibe42-run.log | 6 + .vibe42-run.pid | 2 +- index.html | 4 + mkword.py | 331 +++++++++++++++++++ server.js | 5 +- Анализ_расходов_по_сервисным_контрактам.docx | Bin 0 -> 41109 bytes 6 files changed, 345 insertions(+), 3 deletions(-) create mode 100644 mkword.py create mode 100644 Анализ_расходов_по_сервисным_контрактам.docx diff --git a/.vibe42-run.log b/.vibe42-run.log index cf1d345..6069ff9 100644 --- a/.vibe42-run.log +++ b/.vibe42-run.log @@ -12,3 +12,9 @@ server on port 3000 --- run Sun Sep 27 04:42:10 PM UTC 2026 :: node server.js CHECK: syntax OK, data.json rows: 103, 2025 total: 8 350 018 093 server on port 3000 +--- run Sun Sep 27 04:58:42 PM UTC 2026 :: node server.js +CHECK: syntax OK, data.json rows: 103, 2025 total: 8 350 018 093 +server on port 3000 +--- run Sun Sep 27 05:13:37 PM UTC 2026 :: node server.js +CHECK: syntax OK, data.json rows: 103, 2025 total: 8 350 018 093 +server on port 3000 diff --git a/.vibe42-run.pid b/.vibe42-run.pid index c882b49..a377090 100644 --- a/.vibe42-run.pid +++ b/.vibe42-run.pid @@ -1 +1 @@ -2597 +4826 diff --git a/index.html b/index.html index 4d42c13..f37b911 100644 --- a/index.html +++ b/index.html @@ -107,6 +107,10 @@ Показать презентацию + + + Анализ_расходов_по_сервисным_контрактам.docx + По кнопке «Опубликовать» откроется таблица; презентация живёт на отдельном URL — её можно открыть в другом окне. diff --git a/mkword.py b/mkword.py new file mode 100644 index 0000000..02ad19a --- /dev/null +++ b/mkword.py @@ -0,0 +1,331 @@ +import json, datetime +from docx import Document +from docx.shared import Pt, Cm, RGBColor +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL +from docx.oxml.ns import qn, nsmap +from docx.oxml import OxmlElement + +DARK = RGBColor(0x0D, 0x1B, 0x2A) +PANEL = RGBColor(0x14, 0x24, 0x33) +ACCENT = RGBColor(0x1B, 0x4F, 0x72) +OK = RGBColor(0x1A, 0x7F, 0x4B) +RISK = RGBColor(0xC0, 0x39, 0x2B) +WARN = RGBColor(0xD4, 0x68, 0x0A) +MUTE = RGBColor(0x88, 0x99, 0xA6) +DIM = RGBColor(0x6C, 0x8F, 0xA8) +FG = RGBColor(0xF0, 0xF4, 0xF8) +TXT = RGBColor(0x0C, 0x0A, 0x09) +TXT2 = RGBColor(0x78, 0x71, 0x6C) + +doc = Document() +# А4, поля +for s in doc.sections: + s.page_height = Cm(29.7); s.page_width = Cm(21.0) + s.top_margin = Cm(1.8); s.bottom_margin = Cm(1.5) + s.left_margin = Cm(1.5); s.right_margin = Cm(1.5) + +d = json.load(open('data.json')) +rows = d['rows'] +t23 = sum(r.get('y2023') or 0 for r in rows) +t24 = sum(r.get('y2024') or 0 for r in rows) +t25 = sum(r.get('y2025') or 0 for r in rows) +q26 = sum(r.get('q1_2026') or 0 for r in rows) +b = lambda v: v / 1e9 +m = lambda v: v / 1e6 + +# ---------- Заголовок ---------- +t = doc.add_paragraph() +t.alignment = WD_ALIGN_PARAGRAPH.CENTER +r = t.add_run('АНАЛИЗ РАСХОДОВ ПО СЕРВИСНЫМ КОНТРАКТАМ') +r.bold = True; r.font.size = Pt(22); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' +sub = doc.add_paragraph() +sub.alignment = WD_ALIGN_PARAGRAPH.CENTER +r = sub.add_run('Детализация 2023 г. – 1-е полугодие 2026 г. · 103 позиции · сумма в тенге (факт)') +r.font.size = Pt(11); r.font.color.rgb = TXT2; r.font.name = 'Segoe UI' +sub.paragraph_format.space_after = Pt(14) + +# ---------- KPI ---------- +def kpi_card(label, value, sub='', color=DARK): + p = doc.add_paragraph() + p.paragraph_format.space_after = Pt(2) + r = p.add_run(value) + r.bold = True; r.font.size = Pt(20); r.font.color.rgb = color; r.font.name = 'Segoe UI' + p2 = doc.add_paragraph() + p2.paragraph_format.space_after = Pt(0) + r = p2.add_run(label) + r.font.size = Pt(9); r.font.color.rgb = TXT2; r.font.name = 'Segoe UI' + if sub: + p3 = doc.add_paragraph() + p3.paragraph_format.space_after = Pt(4) + r = p3.add_run(sub) + r.font.size = Pt(8); r.font.italic = True; r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' + +tbl = doc.add_table(rows=1, cols=4) +tbl.style = 'Table Grid' +tbl.alignment = WD_TABLE_ALIGNMENT.CENTER +for i, (lbl, val, sub, col) in enumerate([ + ('2023', f'{b(t23):,.2f} млрд тг', '55 позиций', DARK), + ('2024', f'{b(t24):,.2f} млрд тг', '54 позиции · пик', RISK), + ('2025', f'{b(t25):,.2f} млрд тг', '45 позиций', DARK), + ('1пг 2026', f'{b(q26):,.2f} млрд тг', '31 позиция', OK), +]): + cell = tbl.rows[0].cells[i] + cell.width = Cm(3.8) + # Кнопка-фон: светлый + tcPr = cell._tc.get_or_add_tcPr() + shd = OxmlElement('w:shd'); shd.set(qn('w:fill'), 'F0F4F8'); tcPr.append(shd) + p = cell.paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.CENTER; p.paragraph_format.space_after = Pt(2) + r = p.add_run(val) + r.bold = True; r.font.size = Pt(18); r.font.color.rgb = col; r.font.name = 'Segoe UI' + p2 = cell.add_paragraph(); p2.alignment = WD_ALIGN_PARAGRAPH.CENTER; p2.paragraph_format.space_after = Pt(0) + r = p2.add_run(lbl) + r.bold = True; r.font.size = Pt(10); r.font.color.rgb = TXT; r.font.name = 'Segoe UI' + p3 = cell.add_paragraph(); p3.alignment = WD_ALIGN_PARAGRAPH.CENTER; p3.paragraph_format.space_after = Pt(2) + r = p3.add_run(sub) + r.font.size = Pt(8); r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' +doc.add_paragraph() + +# ---------- Сводка ---------- +h = doc.add_paragraph() +h.paragraph_format.space_before = Pt(6); h.paragraph_format.space_after = Pt(6) +r = h.add_run('1. Итоговый свод') +r.bold = True; r.font.size = Pt(14); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' + +def bullet(text, bold_lead=None): + p = doc.add_paragraph(style='List Bullet') + p.paragraph_format.space_after = Pt(6) + if bold_lead: + r = p.add_run(bold_lead + ' ') + r.bold = True; r.font.size = Pt(10.5); r.font.color.rgb = TXT; r.font.name = 'Segoe UI' + r = p.add_run(text) + r.font.size = Pt(10.5); r.font.color.rgb = TXT; r.font.name = 'Segoe UI' + return p + +d24_25 = t25 - t24; p24_25 = (t24 and d24_25 / t24 * 100) +d23_24 = t24 - t23; p23_24 = d23_24 / t23 * 100 +bullet(f'Изменение 2024 → 2025: −{b(abs(d24_25)):,.2f} млрд тг ({p24_25:+.1f} %) — это не экономия, а смена номенклатуры (FLM Expenses → FLM, Ericsson CS/5G part → общий договор, MS EA/COGS/G&A).'.replace('','').replace('',''), + bold_lead='Ключевой вывод') +bullet(f'2023 → 2024: рост на {b(d23_24):,.2f} млрд тг ({p23_24:+.1f} %) — пик расходов.', + bold_lead='Динамика') +bullet(f'Темп 1пг 2026 ({b(q26):,.2f} млрд за полго­да), удвоенный на год ≈ {b(q26*2):,.2f} млрд — на уровне 2024.', + bold_lead='Прогноз 2026') +bullet('Структура 2025: FLM 3 232 млн · Ericsson 790 млн · MS EA 630 млн · MS EA COGS 513 млн · FLM Expenses 3 481 млн (2024) — крупнейшие статьи.', + bold_lead='Топ статей 2025') + +# ---------- Отклонения 2025 vs 2024 ---------- +doc.add_paragraph() +h = doc.add_paragraph() +h.paragraph_format.space_before = Pt(10) +r = h.add_run('2. Отклонения 2025 vs 2024 (существующие статьи, |Δ| ≥ 50 млн тг)') +r.bold = True; r.font.size = Pt(14); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' + +tab = doc.add_table(rows=1, cols=5) +tab.alignment = WD_TABLE_ALIGNMENT.CENTER +hdr = tab.rows[0].cells +labels = ['Позиция', '2024, млн тг', '2025, млн тг', 'Δ, млн тг', 'Δ %'] +for i, l in enumerate(labels): + cell = hdr[i] + tcPr = cell._tc.get_or_add_tcPr() + shd = OxmlElement('w:shd'); shd.set(qn('w:fill'), '142433'); tcPr.append(shd) + p = cell.paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.RIGHT if i > 0 else WD_ALIGN_PARAGRAPH.LEFT + r = p.add_run(l) + r.bold = True; r.font.size = Pt(9); r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' + +cands = [r for r in rows if (r.get('d25') or 0) not in (0, None) and (r.get('y2025') or 0) > 0 and (r.get('y2024') or 0) > 0] +cands.sort(key=lambda r: abs(r.get('d25') or 0), reverse=True) +cands = [c for c in cands if abs(c['d25']) >= 50e6][:15] +ri = 0 +for it in cands: + row = tab.add_row().cells + for i, (v, fmt) in enumerate([ + (it.get('name'), '{:s}'), + (it.get('y2024') / 1e6, '{:,.1f}'), + (it.get('y2025') / 1e6, '{:,.1f}'), + (it.get('d25') / 1e6, '{:+,.1f}'), + (it.get('p25'), '{:+.1f} %'), + ]): + cell = row[i] + if v is None or v == '': + continue + tcPr = cell._tc.get_or_add_tcPr() + shd = OxmlElement('w:shd') + if i == 0: + shd.set(qn('w:fill'), 'F0F4F8' if ri % 2 else 'FFFFFF') + else: + shd.set(qn('w:fill'), 'F0F4F8' if ri % 2 else 'FFFFFF') + tcPr.append(shd) + if i == 0: + p = cell.paragraphs[0]; r = p.add_run(fmt.format(v)); r.font.size = Pt(9); r.font.color.rgb = TXT; r.font.name = 'Segoe UI' + else: + p = cell.paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.RIGHT + r = p.add_run(fmt.format(v)); r.font.size = Pt(9); r.font.name = 'Segoe UI' + if i == 3 or i == 4: + color = RISK if v > 0 else OK + r.bold = True; r.font.color.rgb = color + ri += 1 +cap = doc.add_paragraph() +cap.paragraph_format.space_before = Pt(4) +r = cap.add_run('Красное — рост относительно 2024, зелёное — снижение. Полный список — лист «Детализация» в Excel-отчёте.') +r.font.size = Pt(8); r.font.italic = True; r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' + +# ---------- 1пг 2026 ---------- +doc.add_paragraph() +h = doc.add_paragraph() +h.paragraph_format.space_before = Pt(10) +r = h.add_run('3. 1-е полугодие 2026: существующие статьи (|Δ| ≥ 50 млн тг, к темпу 2025)') +r.bold = True; r.font.size = Pt(14); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' +tab = doc.add_table(rows=1, cols=5) +tab.alignment = WD_TABLE_ALIGNMENT.CENTER +hdr = tab.rows[0].cells +labels = ['Позиция', 'Темп 1пг 2025, млн', '1пг 2026, млн', 'Δ, млн тг', 'Δ %'] +for i, l in enumerate(labels): + cell = hdr[i] + tcPr = cell._tc.get_or_add_tcPr() + shd = OxmlElement('w:shd'); shd.set(qn('w:fill'), '142433'); tcPr.append(shd) + p = cell.paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.RIGHT if i > 0 else WD_ALIGN_PARAGRAPH.LEFT + r = p.add_run(l) + r.bold = True; r.font.size = Pt(9); r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' + +cands26 = [r for r in rows if (r.get('q1_2026') or 0) > 0 and (r.get('y2025') or 0) > 0] +for c in cands26: + c['q1_2025'] = c['y2025'] / 2 + c['d26'] = c['q1_2026'] - c['q1_2025'] + c['p26'] = c['d26'] / c['q1_2025'] * 100 if c['q1_2025'] else 0 +cands26.sort(key=lambda r: abs(r.get('d26') or 0), reverse=True) +cands26 = [c for c in cands26 if abs(c['d26']) >= 50e6][:15] +ri = 0 +for it in cands26: + row = tab.add_row().cells + for i, (v, fmt) in enumerate([ + (it.get('name'), '{:s}'), + (it.get('q1_2025') / 1e6, '{:,.1f}'), + (it.get('q1_2026') / 1e6, '{:,.1f}'), + (it.get('d26') / 1e6, '{:+,.1f}'), + (it.get('p26'), '{:+.1f} %'), + ]): + cell = row[i] + tcPr = cell._tc.get_or_add_tcPr() + shd = OxmlElement('w:shd'); shd.set(qn('w:fill'), 'F0F4F8' if ri % 2 else 'FFFFFF'); tcPr.append(shd) + if i == 0: + p = cell.paragraphs[0]; r = p.add_run(fmt.format(v)); r.font.size = Pt(9); r.font.color.rgb = TXT; r.font.name = 'Segoe UI' + else: + p = cell.paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.RIGHT + r = p.add_run(fmt.format(v)); r.font.size = Pt(9); r.font.name = 'Segoe UI' + if i == 3 or i == 4: + color = RISK if v > 0 else OK + r.bold = True; r.font.color.rgb = color + ri += 1 +cap = doc.add_paragraph() +cap.paragraph_format.space_before = Pt(4) +r = cap.add_run('«Темп 1пг 2025» = факт 2025 / 2 (ориентир при равномерном распределении). Красное — рост, зелёное — снижение.') +r.font.size = Pt(8); r.font.italic = True; r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' + +# ---------- Новые / исчезнувшие ---------- +doc.add_paragraph() +h = doc.add_paragraph() +h.paragraph_format.space_before = Pt(10) +r = h.add_run('4. Смена номенклатуры: что появилось / исчезло в 2025') +r.bold = True; r.font.size = Pt(14); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' + +names24 = set(r['name'] for r in rows if (r.get('y2024') or 0) > 0 and (r.get('y2025') or 0) == 0) +new25 = [r for r in rows if (r.get('y2025') or 0) > 0 and (r.get('y2024') or 0) == 0] +gone25 = [r for r in rows if (r.get('y2024') or 0) > 0 and (r.get('y2025') or 0) == 0] +new25.sort(key=lambda r: r['y2025'], reverse=True) +gone25.sort(key=lambda r: r['y2024'], reverse=True) + +def small_table(rows_, idx, ykey, title): + h2 = doc.add_paragraph() + h2.paragraph_format.space_before = Pt(6); h2.paragraph_format.space_after = Pt(4) + r = h2.add_run(title) + r.bold = True; r.font.size = Pt(11); r.font.color.rgb = ACCENT; r.font.name = 'Segoe UI' + t2 = doc.add_table(rows=1, cols=3) + t2.alignment = WD_TABLE_ALIGNMENT.CENTER + hdr = t2.rows[0].cells + for i, l in enumerate(['Позиция', f'{ykey}, млн тг', 'Коммент']): + cell = hdr[i] + tcPr = cell._tc.get_or_add_tcPr() + shd = OxmlElement('w:shd'); shd.set(qn('w:fill'), 'F0F4F8'); tcPr.append(shd) + p = cell.paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.RIGHT if i == 1 else WD_ALIGN_PARAGRAPH.LEFT + r = p.add_run(l) + r.bold = True; r.font.size = Pt(8); r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' + for it in rows_: + row = t2.add_row().cells + row[0].paragraphs[0].add_run(it['name']).font.size = Pt(8) + p = row[1].paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.RIGHT + r = p.add_run(f"{it[ykey]/1e6:,.1f}"); r.font.size = Pt(8) + row[2].paragraphs[0].add_run('').font.size = Pt(8) + # Итог + tr = t2.add_row().cells + tr[0].paragraphs[0].add_run(f"Итого: {len(rows_)} шт.").bold = True + p = tr[1].paragraphs[0]; p.alignment = WD_ALIGN_PARAGRAPH.RIGHT + r = p.add_run(f"{sum(r_[ykey] for r_ in rows_)/1e6:,.1f}"); r.bold = True; r.font.size = Pt(8) + # Заполнить фон итога + for cell in tr: + tcPr = cell._tc.get_or_add_tcPr() + shd = OxmlElement('w:shd'); shd.set(qn('w:fill'), 'EEF4FB'); tcPr.append(shd) + +small_table(new25[:12], 0, 'y2025', f'Появились в 2025 (нет в 2024): {len(new25)} шт.') +small_table(gone25[:12], 1, 'y2024', f'Исчезли в 2025 (были в 2024): {len(gone25)} шт.') +cap = doc.add_paragraph() +cap.paragraph_format.space_before = Pt(4) +sum_new = sum(r['y2025'] for r in new25) +sum_gone = sum(r['y2024'] for r in gone25) +r = cap.add_run(f'Пришло {b(sum_new):,.2f} млрд тг, ушло {b(sum_gone):,.2f} млрд тг. Чистая смена номенклатуры: {b(sum_new - sum_gone):+.2f} млрд тг — это механика спада 2025.') +r.font.size = Pt(9); r.font.color.rgb = TXT2; r.font.name = 'Segoe UI' + +# ---------- Рекомендации ---------- +doc.add_paragraph() +h = doc.add_paragraph() +h.paragraph_format.space_before = Pt(10) +r = h.add_run('5. Рекомендации') +r.bold = True; r.font.size = Pt(14); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' +recs = [ + ('Приоритет 1 — сверить периметры 1пг 2026.', + 'MS EA (базовая строка 630 млн = как за весь 2025), Oracle HW (376 млн, новая), Ericsson «общий новый договор» (827 млн, объединение CS part + 5G part).'), + ('Приоритет 2 — консолидация Ericsson.', + 'Объединение в один договор уже сделано в 2026. Следующий шаг — переход на гибридную модель (P1 + RMA за вендора, P2/P3 силами КТ).'), + ('Приоритет 3 — проверить FLM.', + '+35,1 % к темпу 2025. 2 184 млн тг за 1пг 2026. Если рост продолжается — пересмотреть условия.'), + ('Приоритет 4 — зафиксировать сокращения.', + 'CORM-Ронекс −26,9 млн, Aitu Passport −21,9 млн, Nexign −68 млн (к темпу 2025). Заложить в план 2027.'), + ('Приоритет 5 — реестр статусов.', + 'К каждой статье: «прямой / посредник / дистрибьютор», «готов к инсорсингу / нужен вендор», P1/RMA за период.'), +] +for i, (b_, s_) in enumerate(recs, 1): + p = doc.add_paragraph() + p.paragraph_format.space_after = Pt(4) + r = p.add_run(f' {b_}') + r.bold = True; r.font.size = Pt(10.5); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' + p2 = doc.add_paragraph() + p2.paragraph_format.space_after = Pt(10) + p2.paragraph_format.left_indent = Cm(0.75) + r = p2.add_run(s_) + r.font.size = Pt(9.5); r.font.color.rgb = TXT2; r.font.name = 'Segoe UI' + +# ---------- Итог ---------- +doc.add_paragraph() +h = doc.add_paragraph() +h.paragraph_format.space_before = Pt(10) +r = h.add_run('6. Итог') +r.bold = True; r.font.size = Pt(14); r.font.color.rgb = DARK; r.font.name = 'Segoe UI' +p = doc.add_paragraph() +p.paragraph_format.space_after = Pt(6) +r = p.add_run(f'−{b(abs(t25-t24)):,.2f} млрд тг ({p24_25:+.1f} %) к 2025') +r.bold = True; r.font.size = Pt(20); r.font.color.rgb = ACCENT; r.font.name = 'Segoe UI' +bullets = [ + 'Падение 2025 — не экономия, а смена номенклатуры (FLM Expenses → FLM, Ericsson part → общий договор, MS EA COGS/G&A).', + '1пг 2026 показывает рост +1,3 % к темпу 2025: драйверы — MS EA +15,7 млн, Checkpoint +64,9 млн.', + 'Главный риск 2027 — MS EA: 630 млн за 1пг 2026 = как за весь 2025. При сохранении темпа год ≈ +100 %. Следующий шаг — сверить периметры договоров и зафиксировать реестр статусов (прямой / посредник, инсорсинг / вендор).', +] +for b_ in bullets: + bullet(b_) + +# ---------- Подпись ---------- +doc.add_paragraph() +p = doc.add_paragraph() +r = p.add_run('Источник: «Расходы по сервисным контрактам.xlsx», факт. Детали: Excel-отчёт (6 листов) и презентация Power Point.') +r.font.size = Pt(8); r.font.italic = True; r.font.color.rgb = MUTE; r.font.name = 'Segoe UI' + +doc.save('Анализ_расходов_по_сервисным_контрактам.docx') +print('OK: Анализ_расходов_по_сервисным_контрактам.docx') diff --git a/server.js b/server.js index abc039d..a997c40 100644 --- a/server.js +++ b/server.js @@ -32,14 +32,15 @@ const srv = http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "application/json" }); return fs.createReadStream(path.join(__dirname, "data.json")).pipe(res); } - // Отчёт — xlsx. Отдаём как приложение, чтобы браузер скачал, а не попробовал показать. - const m = url.match(/^\/([^\/]+\.(xlsx|csv|json|html|js|css))/i); + // Отчёт — xlsx/docx. Отдаём как приложение, чтобы браузер скачал, а не попробовал показать. + const m = url.match(/^\/([^\/]+\.(xlsx|docx|csv|json|html|js|css))/i); if (m) { const file = path.basename(decodeURIComponent(m[1])); const fp = path.join(__dirname, file); if (fs.existsSync(fp)) { const ct = file.toLowerCase().endsWith(".xlsx") ? "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" : + file.toLowerCase().endsWith(".docx") ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document" : file.toLowerCase().endsWith(".csv") ? "text/csv; charset=utf-8" : file.toLowerCase().endsWith(".json") ? "application/json" : file.toLowerCase().endsWith(".js") ? "text/javascript" : diff --git a/Анализ_расходов_по_сервисным_контрактам.docx b/Анализ_расходов_по_сервисным_контрактам.docx new file mode 100644 index 0000000000000000000000000000000000000000..70683d8936b329d6bab1c042761e47e8a7a246b1 GIT binary patch literal 41109 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 I>|ekB2iQdc8UO$Q literal 0 HcmV?d00001