onec-contract-generator


Nameonec-contract-generator JSON
Version 2.2.0 PyPI version JSON
download
home_pagehttps://github.com/onec-contract-generator/onec-contract-generator
SummaryAutonomous system for generating structured JSON contracts from 1C:Enterprise configurations
upload_time2025-07-22 18:54:06
maintainerNone
docs_urlNone
author1C Contract Generator Team
requires_python>=3.7
licenseNone
keywords 1c enterprise metadata contracts generation analysis json xml documentation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🚀 OneC Contract Generator

[![PyPI version](https://badge.fury.io/py/onec-contract-generator.svg)](https://badge.fury.io/py/onec-contract-generator)
[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**Autonomous system for generating structured JSON contracts from 1C:Enterprise configurations**

Полностью автономная система для генерации структурированных JSON-контрактов из конфигураций 1С, включая контракты метаданных объектов, форм и модулей.

## 📋 Возможности

- 🎯 **Контракты метаданных** - структурированное описание объектов (справочники, документы, обработки)
- 📋 **Контракты форм** - архитектура форм с элементами управления и атрибутами
- 🔧 **Контракты модулей** - описание модулей объектов с функциями и процедурами
- 🔍 **Группированные логи** - структурированный вывод результатов с группировкой по категориям
- 📊 **Статистика и отчеты** - анализ структуры конфигурации
- 🚀 **Интерактивный режим** - пошаговый мастер с подсказками
- ⚡ **Командный режим** - автоматизация через аргументы
- 🔍 **Semantic Search Ready** - оптимизированная структура для поисковых систем

## 🚀 Быстрый старт

### Установка

```bash
# Установка с PyPI
pip install onec-contract-generator
```

### Использование

#### Интерактивный режим (рекомендуется)

```bash
onec-contract-generate
```

Запустится пошаговый мастер:
1. 📁 Выбор директории конфигурации
2. 📄 Выбор файла отчета
3. 📂 Выбор выходной директории
4. 🔧 Выбор компонентов для генерации
5. 🎯 Подтверждение и запуск

#### Командный режим

```bash
onec-contract-generate --auto \
  --conf-dir "C:\YourProject\YourConfig\conf_files" \
  --report-path "C:\YourProject\YourConfig\conf_report\ОтчетПоКонфигурации.txt" \
  --output-dir "C:\YourProject\YourConfig\metadata_contracts"
```

#### Анализ контрактов

```bash
# Статистика
onec-contract-analyze --action stats

# Поиск
onec-contract-analyze --action search --query "ДокументыПредприятия"

# Валидация
onec-contract-analyze --action validate

# Экспорт отчета
onec-contract-analyze --action report --output analysis.md
```

#### Тестирование

```bash
# Запуск тестов
onec-contract-test

# Или с pytest
pytest tests/
```

## 🏗️ Структура проекта

```
onec-contract-generator/
├── src/                                    # Исходный код
│   ├── core/                               # Основные компоненты
│   │   ├── launcher.py                     # 🚀 Единый запускатор
│   │   ├── metadata_generator.py           # 📋 Генератор контрактов метаданных
│   │   ├── form_generator.py               # 📝 Генератор контрактов форм
│   │   └── module_generator.py             # 🔧 Генератор контрактов модулей
│   ├── utils/                              # Утилиты
│   └── parsers/                            # Парсеры
├── scripts/                                # Скрипты запуска
│   ├── generate.py                         # 🚀 Главный скрипт
│   ├── analyze.py                          # 📊 Скрипт анализа
│   ├── test.py                             # 🧪 Скрипт тестирования
│   └── publish.py                          # 📦 Скрипт публикации на PyPI
├── tests/                                  # Тесты
├── docs/                                   # Документация
├── examples/                               # Примеры
├── old/                                    # Резервная копия старого функционала
├── setup.py                                # Конфигурация пакета
├── pyproject.toml                          # Современная конфигурация
├── requirements.txt                        # Зависимости
├── requirements-dev.txt                    # Зависимости для разработки
└── README.md                               # Эта документация
```

## 📦 Установка для разработки

```bash
# Клонируйте репозиторий
git clone <repository-url>
cd onec-contract-generator

# Установка в режиме разработки
pip install -e ".[dev]"

# Или установка зависимостей вручную
pip install -r requirements-dev.txt
```

## 🛠️ Ручной запуск без pip

Если вы хотите запустить генератор без установки через pip, используйте прямые скрипты:

### Клонирование и настройка

```bash
# Клонируйте репозиторий
git clone <repository-url>
cd onec-contract-generator

# Установите зависимости (если нужно)
pip install -r requirements.txt
```

### Запуск через Python скрипты

```bash
# Основной генератор
python scripts/generate.py

# Или с параметрами
python scripts/generate.py --auto \
  --conf-dir "C:\YourProject\YourConfig\conf_files" \
  --report-path "C:\YourProject\YourConfig\conf_report\ОтчетПоКонфигурации.txt" \
  --output-dir "C:\YourProject\YourConfig\metadata_contracts"

# Анализ контрактов
python scripts/analyze.py --action stats

# Тестирование
python scripts/test.py
```

### Запуск через модули напрямую

```bash
# Запуск основного модуля
python -m src.core.launcher

# Или с параметрами
python -m src.core.launcher --auto \
  --conf-dir "C:\YourProject\YourConfig\conf_files" \
  --report-path "C:\YourProject\YourConfig\conf_report\ОтчетПоКонфигурации.txt" \
  --output-dir "C:\YourProject\YourConfig\metadata_contracts"
```

### Запуск отдельных компонентов

```bash
# Только генератор метаданных
python -c "
from src.core.metadata_generator import MetadataGenerator
generator = MetadataGenerator('output_dir')
generator.generate('path/to/report.txt')
"

# Только генератор форм
python -c "
from src.core.form_generator import FormGenerator
generator = FormGenerator('output_dir')
generator.generate('path/to/conf_files')
"
```

## 📁 Поддерживаемые типы объектов 1С

### Основные объекты
- **Справочники** - справочные данные
- **Документы** - документооборот
- **Отчеты** - отчетные формы
- **Обработки** - обработки данных

### Регистры
- **РегистрыСведений** - регистры сведений
- **РегистрыНакопления** - регистры накопления
- **РегистрыБухгалтерии** - регистры бухгалтерии
- **РегистрыРасчета** - регистры расчета

### Планы
- **ПланыВидовХарактеристик** - планы видов характеристик
- **ПланыОбмена** - планы обмена
- **ПланыСчетов** - планы счетов
- **ПланыВидовРасчета** - планы видов расчета

### Общие объекты
- **Перечисления** - перечисления
- **ОбщиеМодули** - общие модули
- **ОбщиеКартинки** - общие картинки
- **ОбщиеКоманды** - общие команды

### Сервисы
- **HTTPСервисы** - HTTP сервисы
- **WebСервисы** - Web сервисы
- **XDTOПакеты** - XDTO пакеты

## 📊 Примеры выходных данных

### Контракт метаданных
```json
{
  "type": "Справочник",
  "name": "Номенклатура",
  "comment": "Номенклатура товаров и услуг",
  "properties": [
    {
      "name": "Код",
      "type": "Строка",
      "length": 9,
      "comment": "Код номенклатуры"
    },
    {
      "name": "Наименование",
      "type": "Строка",
      "length": 150,
      "comment": "Наименование номенклатуры"
    }
  ],
  "search_info": {
    "type": "Справочник",
    "category": "ОсновныеОбъекты",
    "full_name": "Справочник_Номенклатура",
    "search_keywords": ["Справочник", "Номенклатура", "товары", "услуги"],
    "object_short_name": "Номенклатура"
  }
}
```

### Контракт формы
```json
{
  "form_type": "ФормаЭлемента",
  "object_name": "Справочник.Номенклатура",
  "form_name": "ФормаЭлементаФорма",
  "controls": [
    {
      "name": "Код",
      "type": "Поле",
      "data_path": "Объект.Код",
      "title": "Код"
    },
    {
      "name": "Наименование",
      "type": "Поле",
      "data_path": "Объект.Наименование",
      "title": "Наименование"
    }
  ]
}
```

## 🔧 Конфигурация

### Переменные окружения
- `ONEC_DEBUG` - включить отладочный режим
- `ONEC_LOG_LEVEL` - уровень логирования (INFO, WARNING, ERROR)

### Параметры командной строки
- `--auto` - автоматический режим
- `--conf-dir` - директория конфигурации
- `--report-path` - путь к отчету
- `--output-dir` - выходная директория
- `--skip-metadata` - пропустить метаданные
- `--skip-forms` - пропустить формы
- `--skip-modules` - пропустить модули

## 📚 Документация

- [📖 Полная документация](docs/README.md)
- [🚀 Руководство по использованию](docs/USAGE.md)
- [📋 Примеры использования](docs/EXAMPLES.md)
- [🔧 API документация](docs/API.md)
- [🛠️ Руководство разработчика](docs/DEVELOPMENT.md)
- [📦 Руководство по публикации](PUBLISH_GUIDE.md)

## 🧪 Тестирование

```bash
# Запуск всех тестов
pytest

# Запуск с покрытием
pytest --cov=src

# Запуск конкретного теста
pytest tests/test_launcher.py::test_main_function

# Запуск с подробным выводом
pytest -v
```

## 🤝 Вклад в проект

1. Форкните репозиторий
2. Создайте ветку для новой функции (`git checkout -b feature/amazing-feature`)
3. Зафиксируйте изменения (`git commit -m 'Add amazing feature'`)
4. Отправьте в ветку (`git push origin feature/amazing-feature`)
5. Откройте Pull Request

## 📄 Лицензия

Этот проект лицензирован под MIT License - см. файл [LICENSE](LICENSE) для деталей.

## 🆘 Поддержка

- **Issues**: [GitHub Issues](https://github.com/onec-contract-generator/onec-contract-generator/issues)
- **Email**: support@onec-contract-generator.dev
- **Документация**: [Полная документация](docs/README.md)

## 📈 Статистика проекта

- **Версия**: 2.2.0
- **Python**: 3.7+
- **Лицензия**: MIT
- **Статус**: Активная разработка
- **PyPI**: [onec-contract-generator](https://pypi.org/project/onec-contract-generator/)

---

**Создано с ❤️ для сообщества 1С:Предприятие** 

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/onec-contract-generator/onec-contract-generator",
    "name": "onec-contract-generator",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "1C Contract Generator Team <support@onec-contract-generator.dev>",
    "keywords": "1c, enterprise, metadata, contracts, generation, analysis, json, xml, documentation",
    "author": "1C Contract Generator Team",
    "author_email": "1C Contract Generator Team <support@onec-contract-generator.dev>",
    "download_url": "https://files.pythonhosted.org/packages/f2/08/3973fad06dee27874f8ea82f241af10327b9958b555cfbb0604f230eb3f7/onec_contract_generator-2.2.0.tar.gz",
    "platform": null,
    "description": "# \ud83d\ude80 OneC Contract Generator\r\n\r\n[![PyPI version](https://badge.fury.io/py/onec-contract-generator.svg)](https://badge.fury.io/py/onec-contract-generator)\r\n[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\n**Autonomous system for generating structured JSON contracts from 1C:Enterprise configurations**\r\n\r\n\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 JSON-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 1\u0421, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0444\u043e\u0440\u043c \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.\r\n\r\n## \ud83d\udccb \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\r\n\r\n- \ud83c\udfaf **\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445** - \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438)\r\n- \ud83d\udccb **\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0444\u043e\u0440\u043c** - \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0444\u043e\u0440\u043c \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438\r\n- \ud83d\udd27 **\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043c\u043e\u0434\u0443\u043b\u0435\u0439** - \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438\r\n- \ud83d\udd0d **\u0413\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438** - \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0441 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c\r\n- \ud83d\udcca **\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438 \u043e\u0442\u0447\u0435\u0442\u044b** - \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\r\n- \ud83d\ude80 **\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c** - \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440 \u0441 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u043c\u0438\r\n- \u26a1 **\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c** - \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b\r\n- \ud83d\udd0d **Semantic Search Ready** - \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\r\n\r\n## \ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\r\n\r\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n\r\n```bash\r\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441 PyPI\r\npip install onec-contract-generator\r\n```\r\n\r\n### \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\r\n\r\n#### \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)\r\n\r\n```bash\r\nonec-contract-generate\r\n```\r\n\r\n\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440:\r\n1. \ud83d\udcc1 \u0412\u044b\u0431\u043e\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\r\n2. \ud83d\udcc4 \u0412\u044b\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u0447\u0435\u0442\u0430\r\n3. \ud83d\udcc2 \u0412\u044b\u0431\u043e\u0440 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\r\n4. \ud83d\udd27 \u0412\u044b\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438\r\n5. \ud83c\udfaf \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\r\n\r\n#### \u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\r\n\r\n```bash\r\nonec-contract-generate --auto \\\r\n  --conf-dir \"C:\\YourProject\\YourConfig\\conf_files\" \\\r\n  --report-path \"C:\\YourProject\\YourConfig\\conf_report\\\u041e\u0442\u0447\u0435\u0442\u041f\u043e\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.txt\" \\\r\n  --output-dir \"C:\\YourProject\\YourConfig\\metadata_contracts\"\r\n```\r\n\r\n#### \u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432\r\n\r\n```bash\r\n# \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430\r\nonec-contract-analyze --action stats\r\n\r\n# \u041f\u043e\u0438\u0441\u043a\r\nonec-contract-analyze --action search --query \"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\"\r\n\r\n# \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\r\nonec-contract-analyze --action validate\r\n\r\n# \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u043e\u0442\u0447\u0435\u0442\u0430\r\nonec-contract-analyze --action report --output analysis.md\r\n```\r\n\r\n#### \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\n\r\n```bash\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432\r\nonec-contract-test\r\n\r\n# \u0418\u043b\u0438 \u0441 pytest\r\npytest tests/\r\n```\r\n\r\n## \ud83c\udfd7\ufe0f \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\r\n\r\n```\r\nonec-contract-generator/\r\n\u251c\u2500\u2500 src/                                    # \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434\r\n\u2502   \u251c\u2500\u2500 core/                               # \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\r\n\u2502   \u2502   \u251c\u2500\u2500 launcher.py                     # \ud83d\ude80 \u0415\u0434\u0438\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u043e\u0440\r\n\u2502   \u2502   \u251c\u2500\u2500 metadata_generator.py           # \ud83d\udccb \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445\r\n\u2502   \u2502   \u251c\u2500\u2500 form_generator.py               # \ud83d\udcdd \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0444\u043e\u0440\u043c\r\n\u2502   \u2502   \u2514\u2500\u2500 module_generator.py             # \ud83d\udd27 \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u0435\u0439\r\n\u2502   \u251c\u2500\u2500 utils/                              # \u0423\u0442\u0438\u043b\u0438\u0442\u044b\r\n\u2502   \u2514\u2500\u2500 parsers/                            # \u041f\u0430\u0440\u0441\u0435\u0440\u044b\r\n\u251c\u2500\u2500 scripts/                                # \u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\r\n\u2502   \u251c\u2500\u2500 generate.py                         # \ud83d\ude80 \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\r\n\u2502   \u251c\u2500\u2500 analyze.py                          # \ud83d\udcca \u0421\u043a\u0440\u0438\u043f\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\r\n\u2502   \u251c\u2500\u2500 test.py                             # \ud83e\uddea \u0421\u043a\u0440\u0438\u043f\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\r\n\u2502   \u2514\u2500\u2500 publish.py                          # \ud83d\udce6 \u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 PyPI\r\n\u251c\u2500\u2500 tests/                                  # \u0422\u0435\u0441\u0442\u044b\r\n\u251c\u2500\u2500 docs/                                   # \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\r\n\u251c\u2500\u2500 examples/                               # \u041f\u0440\u0438\u043c\u0435\u0440\u044b\r\n\u251c\u2500\u2500 old/                                    # \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430\r\n\u251c\u2500\u2500 setup.py                                # \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430\r\n\u251c\u2500\u2500 pyproject.toml                          # \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\r\n\u251c\u2500\u2500 requirements.txt                        # \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\r\n\u251c\u2500\u2500 requirements-dev.txt                    # \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\n\u2514\u2500\u2500 README.md                               # \u042d\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\r\n```\r\n\r\n## \ud83d\udce6 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\n\r\n```bash\r\n# \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\r\ngit clone <repository-url>\r\ncd onec-contract-generator\r\n\r\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\npip install -e \".[dev]\"\r\n\r\n# \u0418\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e\r\npip install -r requirements-dev.txt\r\n```\r\n\r\n## \ud83d\udee0\ufe0f \u0420\u0443\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u0435\u0437 pip\r\n\r\n\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 pip, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b:\r\n\r\n### \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\r\n\r\n```bash\r\n# \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\r\ngit clone <repository-url>\r\ncd onec-contract-generator\r\n\r\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 (\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e)\r\npip install -r requirements.txt\r\n```\r\n\r\n### \u0417\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 Python \u0441\u043a\u0440\u0438\u043f\u0442\u044b\r\n\r\n```bash\r\n# \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\r\npython scripts/generate.py\r\n\r\n# \u0418\u043b\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438\r\npython scripts/generate.py --auto \\\r\n  --conf-dir \"C:\\YourProject\\YourConfig\\conf_files\" \\\r\n  --report-path \"C:\\YourProject\\YourConfig\\conf_report\\\u041e\u0442\u0447\u0435\u0442\u041f\u043e\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.txt\" \\\r\n  --output-dir \"C:\\YourProject\\YourConfig\\metadata_contracts\"\r\n\r\n# \u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432\r\npython scripts/analyze.py --action stats\r\n\r\n# \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\npython scripts/test.py\r\n```\r\n\r\n### \u0417\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e\r\n\r\n```bash\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f\r\npython -m src.core.launcher\r\n\r\n# \u0418\u043b\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438\r\npython -m src.core.launcher --auto \\\r\n  --conf-dir \"C:\\YourProject\\YourConfig\\conf_files\" \\\r\n  --report-path \"C:\\YourProject\\YourConfig\\conf_report\\\u041e\u0442\u0447\u0435\u0442\u041f\u043e\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.txt\" \\\r\n  --output-dir \"C:\\YourProject\\YourConfig\\metadata_contracts\"\r\n```\r\n\r\n### \u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\r\n\r\n```bash\r\n# \u0422\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445\r\npython -c \"\r\nfrom src.core.metadata_generator import MetadataGenerator\r\ngenerator = MetadataGenerator('output_dir')\r\ngenerator.generate('path/to/report.txt')\r\n\"\r\n\r\n# \u0422\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0444\u043e\u0440\u043c\r\npython -c \"\r\nfrom src.core.form_generator import FormGenerator\r\ngenerator = FormGenerator('output_dir')\r\ngenerator.generate('path/to/conf_files')\r\n\"\r\n```\r\n\r\n## \ud83d\udcc1 \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 1\u0421\r\n\r\n### \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\r\n- **\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438** - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\r\n- **\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b** - \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043e\u0431\u043e\u0440\u043e\u0442\r\n- **\u041e\u0442\u0447\u0435\u0442\u044b** - \u043e\u0442\u0447\u0435\u0442\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b\r\n- **\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438** - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\r\n\r\n### \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u041d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u0438** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u0438\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u0420\u0430\u0441\u0447\u0435\u0442\u0430** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u0430\r\n\r\n### \u041f\u043b\u0430\u043d\u044b\r\n- **\u041f\u043b\u0430\u043d\u044b\u0412\u0438\u0434\u043e\u0432\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a** - \u043f\u043b\u0430\u043d\u044b \u0432\u0438\u0434\u043e\u0432 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\r\n- **\u041f\u043b\u0430\u043d\u044b\u041e\u0431\u043c\u0435\u043d\u0430** - \u043f\u043b\u0430\u043d\u044b \u043e\u0431\u043c\u0435\u043d\u0430\r\n- **\u041f\u043b\u0430\u043d\u044b\u0421\u0447\u0435\u0442\u043e\u0432** - \u043f\u043b\u0430\u043d\u044b \u0441\u0447\u0435\u0442\u043e\u0432\r\n- **\u041f\u043b\u0430\u043d\u044b\u0412\u0438\u0434\u043e\u0432\u0420\u0430\u0441\u0447\u0435\u0442\u0430** - \u043f\u043b\u0430\u043d\u044b \u0432\u0438\u0434\u043e\u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\r\n\r\n### \u041e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\r\n- **\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f** - \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\r\n- **\u041e\u0431\u0449\u0438\u0435\u041c\u043e\u0434\u0443\u043b\u0438** - \u043e\u0431\u0449\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438\r\n- **\u041e\u0431\u0449\u0438\u0435\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438** - \u043e\u0431\u0449\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438\r\n- **\u041e\u0431\u0449\u0438\u0435\u041a\u043e\u043c\u0430\u043d\u0434\u044b** - \u043e\u0431\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\r\n\r\n### \u0421\u0435\u0440\u0432\u0438\u0441\u044b\r\n- **HTTP\u0421\u0435\u0440\u0432\u0438\u0441\u044b** - HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u044b\r\n- **Web\u0421\u0435\u0440\u0432\u0438\u0441\u044b** - Web \u0441\u0435\u0440\u0432\u0438\u0441\u044b\r\n- **XDTO\u041f\u0430\u043a\u0435\u0442\u044b** - XDTO \u043f\u0430\u043a\u0435\u0442\u044b\r\n\r\n## \ud83d\udcca \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445\r\n\r\n### \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445\r\n```json\r\n{\r\n  \"type\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\",\r\n  \"name\": \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\",\r\n  \"comment\": \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0438 \u0443\u0441\u043b\u0443\u0433\",\r\n  \"properties\": [\r\n    {\r\n      \"name\": \"\u041a\u043e\u0434\",\r\n      \"type\": \"\u0421\u0442\u0440\u043e\u043a\u0430\",\r\n      \"length\": 9,\r\n      \"comment\": \"\u041a\u043e\u0434 \u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u044b\"\r\n    },\r\n    {\r\n      \"name\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\",\r\n      \"type\": \"\u0421\u0442\u0440\u043e\u043a\u0430\",\r\n      \"length\": 150,\r\n      \"comment\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u044b\"\r\n    }\r\n  ],\r\n  \"search_info\": {\r\n    \"type\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\",\r\n    \"category\": \"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435\u041e\u0431\u044a\u0435\u043a\u0442\u044b\",\r\n    \"full_name\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a_\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\",\r\n    \"search_keywords\": [\"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\", \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\", \"\u0442\u043e\u0432\u0430\u0440\u044b\", \"\u0443\u0441\u043b\u0443\u0433\u0438\"],\r\n    \"object_short_name\": \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\"\r\n  }\r\n}\r\n```\r\n\r\n### \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0444\u043e\u0440\u043c\u044b\r\n```json\r\n{\r\n  \"form_type\": \"\u0424\u043e\u0440\u043c\u0430\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\",\r\n  \"object_name\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\",\r\n  \"form_name\": \"\u0424\u043e\u0440\u043c\u0430\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0424\u043e\u0440\u043c\u0430\",\r\n  \"controls\": [\r\n    {\r\n      \"name\": \"\u041a\u043e\u0434\",\r\n      \"type\": \"\u041f\u043e\u043b\u0435\",\r\n      \"data_path\": \"\u041e\u0431\u044a\u0435\u043a\u0442.\u041a\u043e\u0434\",\r\n      \"title\": \"\u041a\u043e\u0434\"\r\n    },\r\n    {\r\n      \"name\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\",\r\n      \"type\": \"\u041f\u043e\u043b\u0435\",\r\n      \"data_path\": \"\u041e\u0431\u044a\u0435\u043a\u0442.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\",\r\n      \"title\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\"\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## \ud83d\udd27 \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\r\n\r\n### \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\r\n- `ONEC_DEBUG` - \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\r\n- `ONEC_LOG_LEVEL` - \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (INFO, WARNING, ERROR)\r\n\r\n### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438\r\n- `--auto` - \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c\r\n- `--conf-dir` - \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\r\n- `--report-path` - \u043f\u0443\u0442\u044c \u043a \u043e\u0442\u0447\u0435\u0442\u0443\r\n- `--output-dir` - \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\r\n- `--skip-metadata` - \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435\r\n- `--skip-forms` - \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u044b\r\n- `--skip-modules` - \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438\r\n\r\n## \ud83d\udcda \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\r\n\r\n- [\ud83d\udcd6 \u041f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](docs/README.md)\r\n- [\ud83d\ude80 \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e](docs/USAGE.md)\r\n- [\ud83d\udccb \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f](docs/EXAMPLES.md)\r\n- [\ud83d\udd27 API \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](docs/API.md)\r\n- [\ud83d\udee0\ufe0f \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430](docs/DEVELOPMENT.md)\r\n- [\ud83d\udce6 \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438](PUBLISH_GUIDE.md)\r\n\r\n## \ud83e\uddea \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\n\r\n```bash\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\r\npytest\r\n\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0441 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435\u043c\r\npytest --cov=src\r\n\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430\r\npytest tests/test_launcher.py::test_main_function\r\n\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c\r\npytest -v\r\n```\r\n\r\n## \ud83e\udd1d \u0412\u043a\u043b\u0430\u0434 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\r\n\r\n1. \u0424\u043e\u0440\u043a\u043d\u0438\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\r\n2. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432\u0435\u0442\u043a\u0443 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (`git checkout -b feature/amazing-feature`)\r\n3. \u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (`git commit -m 'Add amazing feature'`)\r\n4. \u041e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u0432 \u0432\u0435\u0442\u043a\u0443 (`git push origin feature/amazing-feature`)\r\n5. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 Pull Request\r\n\r\n## \ud83d\udcc4 \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\r\n\r\n\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 MIT License - \u0441\u043c. \u0444\u0430\u0439\u043b [LICENSE](LICENSE) \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439.\r\n\r\n## \ud83c\udd98 \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430\r\n\r\n- **Issues**: [GitHub Issues](https://github.com/onec-contract-generator/onec-contract-generator/issues)\r\n- **Email**: support@onec-contract-generator.dev\r\n- **\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f**: [\u041f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](docs/README.md)\r\n\r\n## \ud83d\udcc8 \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\r\n\r\n- **\u0412\u0435\u0440\u0441\u0438\u044f**: 2.2.0\r\n- **Python**: 3.7+\r\n- **\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f**: MIT\r\n- **\u0421\u0442\u0430\u0442\u0443\u0441**: \u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\r\n- **PyPI**: [onec-contract-generator](https://pypi.org/project/onec-contract-generator/)\r\n\r\n---\r\n\r\n**\u0421\u043e\u0437\u0434\u0430\u043d\u043e \u0441 \u2764\ufe0f \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435** \r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Autonomous system for generating structured JSON contracts from 1C:Enterprise configurations",
    "version": "2.2.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/onec-contract-generator/onec-contract-generator/issues",
        "Changelog": "https://github.com/onec-contract-generator/onec-contract-generator/blob/main/CHANGELOG.md",
        "Documentation": "https://github.com/onec-contract-generator/onec-contract-generator#readme",
        "Homepage": "https://github.com/onec-contract-generator/onec-contract-generator",
        "Repository": "https://github.com/onec-contract-generator/onec-contract-generator"
    },
    "split_keywords": [
        "1c",
        " enterprise",
        " metadata",
        " contracts",
        " generation",
        " analysis",
        " json",
        " xml",
        " documentation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "acae3318edccf8bc41dc867cba1f81868e104f282a4115395236b098c782fbd2",
                "md5": "50bf9bcdb5f321aeb0bd4fa987d9da0f",
                "sha256": "3be28c454677ae48a59d3d192595c4ac418fd3c0db7cbe69cb28dc96cfb9f4b7"
            },
            "downloads": -1,
            "filename": "onec_contract_generator-2.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "50bf9bcdb5f321aeb0bd4fa987d9da0f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 25020,
            "upload_time": "2025-07-22T18:54:04",
            "upload_time_iso_8601": "2025-07-22T18:54:04.825169Z",
            "url": "https://files.pythonhosted.org/packages/ac/ae/3318edccf8bc41dc867cba1f81868e104f282a4115395236b098c782fbd2/onec_contract_generator-2.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f2083973fad06dee27874f8ea82f241af10327b9958b555cfbb0604f230eb3f7",
                "md5": "91e9ddfba1d8f29ff841215fe41d228b",
                "sha256": "03d646befd10ed98cf190c686830abf64cab11099a771dc11e0207be9764ccd9"
            },
            "downloads": -1,
            "filename": "onec_contract_generator-2.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "91e9ddfba1d8f29ff841215fe41d228b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 51481,
            "upload_time": "2025-07-22T18:54:06",
            "upload_time_iso_8601": "2025-07-22T18:54:06.414099Z",
            "url": "https://files.pythonhosted.org/packages/f2/08/3973fad06dee27874f8ea82f241af10327b9958b555cfbb0604f230eb3f7/onec_contract_generator-2.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-22 18:54:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "onec-contract-generator",
    "github_project": "onec-contract-generator",
    "github_not_found": true,
    "lcname": "onec-contract-generator"
}
        
Elapsed time: 1.61561s