# ТЗ Для 1С-Админа: Публикация OData (Read-Only)

## 1. Цель

Обеспечить доступ внешнего сервиса к копии базы 1С по стандартному OData-интерфейсу в режиме только чтения.

## 2. Контур

- База: `X:\1C\База бухгалтерии` (файловая ИБ, есть `1Cv8.1CD`)
- Рабочий проект интеграции: `X:\1C\NDC_1C`
- Среда: тестовая, не production

## 3. Что Нужно Сделать

1. Опубликовать базу на локальном веб-сервере (IIS или Apache), доступном с машины интеграции.
2. Включить стандартный интерфейс OData для опубликованной базы.
3. Создать отдельного технического пользователя для интеграции, только с правами чтения.
4. Запретить любые write-операции для этого пользователя (создание, изменение, удаление, проведение, перепроведение).
5. Открыть на старте только минимально нужные сущности: документы, контрагенты, договоры, организации, планы счетов, регистры/движения для проводок.
6. Передать команде интеграции параметры доступа:
базовый URL публикации, путь OData, логин и пароль read-only пользователя.

## 4. Формат Передачи Параметров

Ожидаемые переменные:

```env
ONEC_BASE_URL=http://<host_or_ip>
ONEC_INFOBASE=<published_base_name>
ONEC_USERNAME=<readonly_user>
ONEC_PASSWORD=<readonly_password>
ONEC_ODATA_PATH=/odata/standard.odata/
ONEC_TIMEOUT=30
ONEC_VERIFY_TLS=false
```

## 5. Проверка Готовности (Smoke Test)

Проверка должна выполняться read-only пользователем.

```powershell
$user = "<readonly_user>"
$pass = "<readonly_password>"
$pair = "$($user):$($pass)"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$token = [Convert]::ToBase64String($bytes)
$headers = @{ Authorization = "Basic $token" }

Invoke-WebRequest -Uri "http://<host>/<base>/odata/standard.odata/\$metadata" -Headers $headers -Method GET
Invoke-WebRequest -Uri "http://<host>/<base>/odata/standard.odata/" -Headers $headers -Method GET
```

Ожидаемо:

- `$metadata` отвечает `200`
- список сущностей доступен
- запросы чтения работают
- попытки изменения возвращают отказ по правам

## 6. Критерии Приёмки

1. OData endpoint отвечает и доступен по сети с машины интеграции.
2. Read-only пользователь успешно читает metadata и выбранные сущности.
3. Write-операции read-only пользователю недоступны.
4. Переданы все параметры подключения для заполнения `.env`.

## 7. Что Нельзя Делать

- Выдавать интеграционному пользователю расширенные права.
- Открывать доступ к production-базе.
- Разрешать запись в документы/регистры через OData.

## 8. Результат Для Команды Интеграции

Админ передаёт:

1. Рабочий URL OData.
2. Данные read-only пользователя.
3. Короткий отчёт о проверке (`200` на `$metadata`, подтверждение запрета записи).
