From 0cdfa04d77b011ddae522dd673f46897da44f63c Mon Sep 17 00:00:00 2001 From: MatrixHasYou Date: Mon, 12 Oct 2026 23:19:25 +0400 Subject: [PATCH] feat(legal): build master legal corpus PDF with Constitutional, Housing, Criminal, Admin and State Construction codes --- legal_corpus_builder.py | 208 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 legal_corpus_builder.py diff --git a/legal_corpus_builder.py b/legal_corpus_builder.py new file mode 100644 index 0000000..ae5773c --- /dev/null +++ b/legal_corpus_builder.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python3 +""" +Legal Corpus Builder for Domovoy 2.0 (PyMuPDF Native Engine). +Формирует сводный нормативно-правовой корпус законов РФ (LEGAL_CORPUS_MANDATORY.pdf). +Полностью автономен, не требует сторонних рендереров. +""" + +import os +import sys +import logging +from pathlib import Path +import fitz # PyMuPDF + +BASE_DIR = Path(__file__).resolve().parent +LEGAL_DIR = BASE_DIR / "legal_sources" +LEGAL_DIR.mkdir(parents=True, exist_ok=True) +OUTPUT_MASTER = BASE_DIR / "LEGAL_CORPUS_MANDATORY.pdf" + +logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s") +log = logging.getLogger("LegalCorpusBuilder") + +CORE_LAWS = [ + { + "filename": "01_Конституция_РФ_Выдержки_МКД.pdf", + "title": "КОНСТИТУЦИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ (НОРМЫ ЗАЩИТЫ ПРАВ ГРАЖДАН)", + "subtitle": "Принята всенародным голосованием 12 декабря 1993 г.", + "articles": [ + ("Статья 33", "Граждане Российской Федерации имеют право обращаться лично, а также направлять индивидуальные и коллективные обращения в государственные органы и органы местного самоуправления."), + ("Статья 35", "Право частной собственности охраняется законом. Каждый вправе иметь имущество в собственности, владеть, пользоваться и распоряжаться им как единолично, так и совместно с другими лицами. Никто не может быть лишен своего имущества иначе как по решению суда."), + ("Статья 45", "Государственная защита прав и свобод человека и гражданина в Российской Федерации гарантируется. Каждый вправе защищать свои права и свободы всеми способами, не запрещенными законом."), + ("Статья 46", "Каждому гарантируется судебная защита его прав и свобод. Решения и действия (или бездействие) органов государственной власти, органов местного самоуправления, общественных объединений и должностных лиц могут быть обжалованы в суд."), + ("Статья 53", "Каждый имеет право на возмещение государством вреда, причиненного незаконными действиями (или бездействием) органов государственной власти или их должностных лиц.") + ] + }, + { + "filename": "02_ФЗ_59_Порядок_Рассмотрения_Обращений.pdf", + "title": "ФЕДЕРАЛЬНЫЙ ЗАКОН № 59-ФЗ «О ПОРЯДКЕ РАССМОТРЕНИЯ ОБРАЩЕНИЙ ГРАЖДАН РФ»", + "subtitle": "От 02 мая 2006 года (с изменениями)", + "articles": [ + ("Статья 8. Направление и регистрация письменного обращения", + "Ч. 2. Письменное обращение подлежит обязательной регистрации в течение трех дней с момента поступления в государственный орган или орган местного самоуправления.\n" + "Ч. 6. ЗАПРЕЩАЕТСЯ направлять жалобу на рассмотрение в государственный орган, орган местного самоуправления или должностному лицу, решение или действие (бездействие) которых обжалуется."), + ("Статья 10. Обязанности должностных лиц при рассмотрении обращения", + "Государственный орган или должностное лицо: обеспечивает объективное, всестороннее и своевременное рассмотрение обращения; запрашивает необходимые документы и материалы; принимает меры, направленные на восстановление или защиту нарушенных прав; дает письменный ответ по существу."), + ("Статья 12. Сроки рассмотрения письменного обращения", + "Ч. 1. Письменное обращение рассматривается в течение 30 ДНЕЙ со дня регистрации.\n" + "Ч. 2. В исключительных случаях срок может быть продлен не более чем на 30 дней с обязательным письменным уведомлением гражданина до истечения первого срока."), + ("Статья 15. Ответственность за нарушение законодательства", + "Лица, виновные в нарушении настоящего Федерального закона, несут ответственность, предусмотренную законодательством РФ (ст. 5.59 КоАП РФ — административный штраф на должностных лиц).") + ] + }, + { + "filename": "03_Жилищный_Кодекс_РФ_Ключевые_Главы.pdf", + "title": "ЖИЛИЩНЫЙ КОДЕКС РОССИЙСКОЙ ФЕДЕРАЦИИ (КЛЮЧЕВЫЕ СТАТЬИ ПО УПРАВЛЕНИЮ МКД)", + "subtitle": "Федеральный закон от 29.12.2004 № 188-ФЗ", + "articles": [ + ("Статья 36. Право собственности на общее имущество собственников в МКД", + "Собственникам помещений в МКД принадлежит на праве общей долевой собственности общее имущество: крыши, ограждающие несущие и ненесущие конструкции, механическое, электрическое, санитарно-техническое и иное оборудование, земельный участок под домом."), + ("Статья 39. Содержание общего имущества в многоквартирном доме", + "Собственники несут бремя расходов на содержание общего имущества соразмерно своей доле. Правила содержания устанавливаются Правительством РФ (ПП № 491)."), + ("Статьи 44-46. Общее собрание собственников (ОСС)", + "ОСС является высшим органом управления МКД. Решения ОСС оформляются протоколами. Решения и протокол ОСС являются официальными документами, влекущими юридические последствия. Их фальсификация влечет уголовную ответственность по ст. 327 УК РФ."), + ("Статья 161. Выбор способа управления МКД", + "Управление МКД должно обеспечивать благоприятные и безопасные условия проживания граждан, надлежащее содержание общего имущества. Надлежащее содержание общего имущества обеспечивается управляющей организацией."), + ("Статья 162. Договор управления многоквартирным домом", + "По договору управления управляющая организация по заданию собственников обязуется выполнять работы и оказывать услуги по надлежащему содержанию и ремонту общего имущества, предоставлять коммунальные услуги. УК обязана ежегодно в течение первого квартала представлять собственникам отчет о выполнении договора."), + ("Статьи 192-196. Лицензирование деятельности по управлению МКД", + "Деятельность УК осуществляется на основании лицензии. За грубые нарушения лицензионных требований дом исключается из реестра лицензий УК (ст. 198 ЖК РФ).") + ] + }, + { + "filename": "04_ПП_РФ_354_Коммунальные_Услуги.pdf", + "title": "ПОСТАНОВЛЕНИЕ ПРАВИТЕЛЬСТВА РФ № 354 «ПРАВИЛА ПРЕДОСТАВЛЕНИЯ КОММУНАЛЬНЫХ УСЛУГ»", + "subtitle": "От 06 мая 2011 года", + "articles": [ + ("Пункт 31. Обязанности исполнителя (УК)", + "Исполнитель обязан: предоставлять потребителю коммунальные услуги надлежащего качества; немедленно, но НЕ ПОЗДНЕЕ 2 ЧАСОВ с момента получения сообщения потребителя об аварии организовать проверку факта нарушения; вести учет жалоб; производить перерасчет размера платы."), + ("Пункты 98-103. Перерасчет платы за коммунальные услуги ненадлежащего качества", + "При предоставлении коммунальной услуги ненадлежащего качества размер платы снижается вплоть до полного освобождения потребителя от оплаты за каждый час превышения допустимой продолжительности перерыва."), + ("Пункты 104-109. Порядок фиксации нарушения качества услуги и составления акта", + "По результатам проверки составляется акт проверки. Если представитель УК не явился в течение 2 часов, потребитель вправе составить акт с участием председателя совета дома и не менее чем 2 соседей.") + ] + }, + { + "filename": "05_ПП_РФ_491_Содержание_Общего_Имущества.pdf", + "title": "ПОСТАНОВЛЕНИЕ ПРАВИТЕЛЬСТВА РФ № 491 «ПРАВИЛА СОДЕРЖАНИЯ ОБЩЕГО ИМУЩЕСТВА В МКД»", + "subtitle": "От 13 августа 2006 года", + "articles": [ + ("Пункт 10. Требования к содержанию общего имущества", + "Общее имущество должно содержаться в состоянии, обеспечивающем: надежность и безопасность многоквартирного дома; безопасность для жизни и здоровья граждан; постоянную готовность инженерных коммуникаций; соблюдение прав и законных интересов собственников."), + ("Пункт 42. Ответственность управляющей организации", + "Управляющие организации отвечают перед собственниками помещений за нарушение своих обязательств и несут ответственность за надлежащее содержание общего имущества в соответствии с законодательством РФ и договором управления.") + ] + }, + { + "filename": "06_Постановление_Госстроя_170_Сроки_Ремонта.pdf", + "title": "ПОСТАНОВЛЕНИЕ ГОССТРОЯ РФ № 170 «ПРАВИЛА И НОРМЫ ТЕХНИЧЕСКОЙ ЭКСПЛУАТАЦИИ ЖИЛФОНДА»", + "subtitle": "От 27 сентября 2003 года (Предельные сроки устранения неисправностей при авариях)", + "articles": [ + ("Приложение № 2. Предельные сроки устранения аварий", + "• Протечки в отдельных местах кровли: СТРОГО 1 СУТКИ с момента обращения.\n" + "• Повреждения водосточных труб, воронок, колен: 1 СУТКИ.\n" + "• Неисправности аварийного порядка трубопроводов (отопление, ГВС, ХВС): НЕМЕДЛЕННО.\n" + "• Неисправности лифта: НЕ БОЛЕЕ 1 СУТОК.\n" + "• Разбитые стекла и сорванные створки оконных переплетов в подъездах (зимой): 1 СУТКИ.\n" + "• Неисправности электроснабжения (отсутствие света в подъездах): 7 ЧАСОВ.\n" + "• Засор мусоропровода, канализации: 1 СУТКИ."), + ("Пункт 4.6.3.2", + "При обнаружении протечек в отдельных местах кровли, независимо от причин их возникновения, управляющая организация обязана немедленно принять меры к их устранению.") + ] + }, + { + "filename": "07_КоАП_РФ_Статьи_Нарушений_ЖКХ.pdf", + "title": "КОДЕКС ОБ АДМИНИСТРАТИВНЫХ ПРАВОНАРУШЕНИЯХ РФ (СТАТЬИ ОТВЕТСТВЕННОСТИ УК И ВЕДОМСТВ)", + "subtitle": "Применяются при обращениях в ГЖИ, Прокуратуру и Роспотребнадзор", + "articles": [ + ("Статья 5.39. Отказ в предоставлении информации", + "Неправомерный отказ в предоставлении гражданину информации, предоставление которой предусмотрено законом — влечет наложение штрафа на должностных лиц до 10 000 руб."), + ("Статья 5.59. Нарушение порядка рассмотрения обращений граждан (по 59-ФЗ)", + "Нарушение установленного порядка рассмотрения обращений граждан должностными лицами госорганов — влечет наложение штрафа от 5 000 до 10 000 руб."), + ("Статья 7.22. Нарушение правил содержания и ремонта жилых домов", + "Нарушение лицами, ответственными за содержание жилых домов, правил содержания и ремонта — влечет наложение штрафа на юридических лиц (УК) от 40 000 до 50 000 рублей."), + ("Статья 7.23. Нарушение нормативов обеспечения коммунальными услугами", + "Нарушение нормативного уровня или режима обеспечения населения коммунальными услугами — влечет наложение штрафа на юридических лиц до 100 000 рублей (повторное — до 500 000 руб.)."), + ("Статья 7.23.3. Нарушение правил предпринимательской деятельности по управлению МКД", + "Влечет наложение штрафа на УК от 150 000 до 250 000 рублей."), + ("Статья 14.1.3. Управление МКД с нарушением лицензионных требований", + "Влечет наложение штрафа на УК от 250 000 до 300 000 рублей или дисквалификацию руководителя на срок до 3 лет.") + ] + }, + { + "filename": "08_Уголовный_Кодекс_РФ_Преступления_ЖКХ.pdf", + "title": "УГОЛОВНЫЙ КОДЕКС РФ (СТАТЬИ ПО ФАЛЬСИФИКАЦИЯМ И ХИЩЕНИЯМ В СФЕРЕ ЖКХ)", + "subtitle": "Применяются при обращениях в Следственный Комитет и МВД", + "articles": [ + ("Статья 159. Мошенничество", + "Хищение денежных средств собственников МКД путем обмана или злоупотребления доверием (приписки в отчетах, списание средств за невыполненные работы). Наказывается лишением свободы на срок до 10 лет."), + ("Статья 160. Присвоение или растрата", + "Хищение чужого имущества, вверенного виновному (нецелевое расходование средств текущего ремонта или фонда содержания общего имущества дома)."), + ("Статья 201. Злоупотребление полномочиями", + "Использование лицом, выполняющим управленческие функции в УК, своих полномочий вопреки законным интересам организации и граждан."), + ("Статья 293. Халатность", + "Неисполнение или ненадлежащее исполнение должностным лицом надзорного органа (ГЖИ, Администрации) своих обязанностей вследствие недобросовестного отношения к службе."), + ("Статья 327. Подделка официальных документов", + "Подделка официального документа (бюллетеней голосования ОСС, протокола общего собрания собственников МКД) в целях его использования. Наказывается лишением свободы на срок до 2 лет.") + ] + } +] + +def build_pdf_document(law: dict) -> Path: + doc = fitz.open() + page = doc.new_page(width=595, height=842) # A4 + + # Header + page.draw_rect(fitz.Rect(35, 30, 560, 85), color=(0.1, 0.25, 0.5), fill=(0.95, 0.97, 1.0), width=1) + page.insert_text(fitz.Point(45, 52), law["title"][:70], fontsize=10.5, color=(0.05, 0.15, 0.35)) + page.insert_text(fitz.Point(45, 68), law["subtitle"][:85], fontsize=8, color=(0.3, 0.3, 0.3)) + page.insert_text(fitz.Point(45, 80), "ЮРИДИЧЕСКИЙ КОРПУС СИСТЕМЫ «ДОМОВОЙ 2.0» | ЛЕНКОМ 37", fontsize=7, color=(0.1, 0.3, 0.6)) + + y = 105 + for title, text in law["articles"]: + # Проверяем, помещается ли статья на странице + est_height = 40 + len(text) * 0.25 + if y + est_height > 800: + page = doc.new_page(width=595, height=842) + y = 40 + + page.draw_rect(fitz.Rect(35, y, 560, y + 16), color=(0.85, 0.88, 0.92), fill=(0.92, 0.94, 0.97), width=0.5) + page.insert_text(fitz.Point(42, y + 12), title[:85], fontsize=9, color=(0.08, 0.2, 0.45)) + y += 22 + + rect = fitz.Rect(40, y, 555, y + est_height) + page.insert_textbox(rect, text, fontsize=8.5, color=(0.12, 0.12, 0.12)) + y += est_height + 10 + + out_path = LEGAL_DIR / law["filename"] + doc.save(out_path, garbage=3, deflate=True) + doc.close() + log.info(f"Generated: {out_path.name}") + return out_path + +def consolidate_legal_corpus(): + log.info("Generating individual legal PDFs...") + pdf_paths = [build_pdf_document(law) for law in CORE_LAWS] + + log.info("Consolidating all legal sources into master LEGAL_CORPUS_MANDATORY.pdf...") + master = fitz.open() + toc = [] + page_count = 0 + + for idx, p in enumerate(pdf_paths, 1): + doc = fitz.open(p) + doc_len = len(doc) + title = CORE_LAWS[idx-1]["title"] + toc.append([1, title, page_count + 1]) + master.insert_pdf(doc) + page_count += doc_len + doc.close() + + master.set_toc(toc) + master.save(OUTPUT_MASTER, garbage=3, deflate=True) + master.close() + + size_kb = OUTPUT_MASTER.stat().st_size / 1024 + log.info(f"✅ Master Legal Corpus compiled: {OUTPUT_MASTER} ({size_kb:.1f} KB, {page_count} pages)") + +if __name__ == "__main__": + consolidate_legal_corpus()