type: standard
aspect: policy
title: "Политика хранения данных проектов"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.1.0
Дата: 2025-12-18
$WORKSPACE = КОД (git) → Что ДЕЛАЕТ система
$DATASPACE = ДАННЫЕ (S3) → С чем РАБОТАЕТ система
Переменные окружения:
WORKSPACE=$WORKSPACE
DATASPACE=$DATASPACE
ФАЙЛЫ ($DATASPACE) → Неструктурированные, входящие, временные
БАЗА ДАННЫХ (NocoDB) → Структурированные, рабочие, постоянные
| Тип данных | Формат | Пример |
|---|---|---|
| Входящие от поставщиков | xlsx, csv | Прайс-лист |
| Изображения | jpg, png | Фото товаров |
| Документы | pdf, docx | Договоры |
| Бэкапы | sql, tar.gz | Дампы БД |
| Временные/разовые | любой | Тестовые данные |
| Тип данных | Таблица | Пример |
|---|---|---|
| Справочники | Products, Categories | Товары, категории |
| Транзакции | Orders, Payments | Заказы, платежи |
| Связи | SKU_Mappings | Связь артикулов |
| Аналитика | Analytics_Daily | Агрегаты по дням |
| Состояние | Clients, Tasks | CRM данные |
┌─────────────────────────────────────────────────────────┐
│ NocoDB Server │
│ (data.0kt.ru:8443) │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ← ПЛАТФОРМА (общие) │
│ │ Platform Base │ - Users, Roles │
│ │ │ - Settings │
│ └─────────────────┘ - Integrations │
│ │
│ ┌─────────────────┐ ← БИЗНЕС (pirotehnika) │
│ │ Пиротехника │ - Products (4626) │
│ │ pt7k98pv0fwi1el │ - SKU_Mappings (1702) │
│ │ │ - OZON_Orders │
│ │ │ - PriceList │
│ └─────────────────┘ - Channel │
│ │
│ ┌─────────────────┐ ← БИЗНЕС (mcrm) │
│ │ MCRM │ - Clients (3087) │
│ │ pkxgq45k5mwsdwh │ - Tasks │
│ │ │ - Campaigns │
│ └─────────────────┘ - Messages │
│ │
│ ┌─────────────────┐ ← БИЗНЕС (lideravto) │
│ │ Лидер Авто │ - Products │
│ │ (будущее) │ - Categories │
│ └─────────────────┘ - Orders │
│ │
└─────────────────────────────────────────────────────────┘
| Уровень | База | Что хранит |
|---|---|---|
| Платформа | Platform | Общие справочники, пользователи, настройки |
| Бизнес | {business} | Данные конкретного бизнеса |
| Проект | (в рамках бизнеса) | Отдельные таблицы с префиксом |
| Префикс | Назначение | Пример |
|---|---|---|
| (без) | Общие сущности | Products, Orders |
ozon_ |
Данные OZON | ozon_transactions |
pim_ |
PIM система | pim_attributes |
sync_ |
Синхронизация | sync_log |
1. ВХОДЯЩИЕ 2. ОБРАБОТКА 3. ХРАНЕНИЕ
_inbox/price.xlsx → Python скрипт → NocoDB: Products
(файл) (парсинг) (структурированно)
↓ ↑
archive/2025/ SELECT/UPDATE
(после обработки) (работа с данными)
# NocoDB URL из окружения
NOCODB_URL = os.environ.get('NOCODB_URL') # https://data.0kt.ru:8443
# База бизнеса из .env проекта
NOCODB_BASE_ID = os.environ.get('NOCODB_BASE_ID') # pt7k98pv0fwi1el
# PostgreSQL напрямую (для аналитики)
DATABASE_URL = os.environ.get('DATABASE_URL')
# postgresql://user:pass@host:5432/nocodb
| Тип | Расширения | Примеры |
|---|---|---|
| Исходный код | .py, .php, .js, .sh | app/, scripts/ |
| Конфиги (шаблоны) | .example, .yaml, .json | config.yaml, .env.example |
| Документация | .md | CLAUDE.md, README.md |
| SQL миграции | .sql | migrations/ |
| Шаблоны | .html, .jinja2 | templates/ |
| Тесты | .py, .js | tests/ |
| Тип | Расширения | Папка |
|---|---|---|
| Входящие файлы | любые | _inbox/ |
| Прайсы/каталоги | .xlsx, .csv | prices/ |
| Изображения | .jpg, .png, .webp | images/ |
| Экспорты/отчёты | .xlsx, .csv, .json | exports/ |
| Бэкапы | .sql, .tar.gz, .zip | backups/ |
| Архив | любые | archive/{год}/ |
{name}/
├── CLAUDE.md ← AI контекст
├── index.yaml ← Метаданные
├── .env ← Секреты (не в git!)
│
├── app/ ← Код приложения
├── scripts/ ← Утилиты
├── modules/ ← Модули/аддоны
├── docs/ ← Документация
└── management/ ← STATUS.md, TODO.md
{name}/
├── _inbox/ ← Входящие (необработанные)
├── prices/ ← Прайсы поставщиков
├── images/ ← Фото товаров
├── exports/ ← Выгрузки, отчёты
├── backups/ ← Бэкапы БД и файлов
└── archive/ ← Архив
└── {год}/
Все внешние файлы сначала попадают в _inbox/:
- Прайсы от поставщиков
- Базы клиентов
- Документы от партнёров
После обработки — перемещаются в соответствующую папку или archive/.
Всё что генерирует код:
- Отчёты
- Выгрузки для маркетплейсов
- Аналитика
archive/
├── 2024/
│ ├── prices/
│ └── exports/
└── 2025/
Если в git появился .xlsx, .csv, .jpg — это ошибка.
Исключение: тестовые fixtures (маленькие файлы для тестов).
import os
DATASPACE = os.environ.get('DATASPACE')
WORKSPACE = os.environ.get('WORKSPACE')
# Данные
INBOX_DIR = os.path.join(DATASPACE, 'projects/myproject/_inbox')
PRICES_DIR = os.path.join(DATASPACE, 'projects/myproject/prices')
EXPORTS_DIR = os.path.join(DATASPACE, 'projects/myproject/exports')
# Код
PROJECT_DIR = os.path.join(WORKSPACE, 'projects/myproject')
При обнаружении данных в $WORKSPACE:
# 1. Создать структуру
mkdir -p $DATASPACE/projects/{name}/{_inbox,prices,images,exports,backups,archive}
# 2. Перенести данные
mv $WORKSPACE/projects/{name}/data/* $DATASPACE/projects/{name}/
# 3. Обновить пути в коде
# DATASPACE = os.environ.get('DATASPACE')
# Не должно быть данных в WORKSPACE
find $WORKSPACE/projects -type f \( -name "*.xlsx" -o -name "*.csv" -o -name "*.xls" \) \
| grep -v venv | grep -v node_modules
# Должно вернуть 0 файлов
Версия: 1.1.0