# Подготовка 1С: публикация OData

Настройка read-only доступа к метаданным и данным через OData v3 для профиля `published-web`.

## Prerequisites

- 1С:Предприятие 8.3 с опубликованной базой (Apache/IIS).
- Права администратора на публикацию и стандартный интерфейс OData.
- HTTPS endpoint (обязательно для production; в dev допускается HTTP с флагом gateway).
- Учётная запись 1С с правами чтения нужных объектов (без админских write-прав).

## Пошаговая настройка

### 1. Включение стандартного OData в 1С

1. Администрирование → Публикация на веб-сервере.
2. Убедитесь, что опубликован **standard.odata**.
3. Типовой путь metadata: `/odata/standard.odata/$metadata`.
4. Типовой путь данных: `/odata/standard.odata/`.

### 2. Проверка публикации вручную

```bash
curl -sS -u "user:password" \
  "https://your-1c-host/your-base/odata/standard.odata/\$metadata" \
  | head -20
```

Ответ должен содержать XML с `<EntityType>` и namespace OData.

### 3. Создание профиля в gateway

Через Web Console (`npm run dev:http`) или tool `connect_published_infobase`:

```json
{
  "profileId": "prod-readonly",
  "type": "published-web",
  "environment": "production",
  "baseUrl": "https://your-1c-host/your-base",
  "odataPath": "/odata/standard.odata/$metadata",
  "auth": {
    "mode": "basic",
    "username": "odata_reader",
    "passwordEnv": "ONEC_PROD_ODATA_PASSWORD"
  }
}
```

### 4. Секреты через env

```bash
export ONEC_PROD_ODATA_PASSWORD='***'
# Пароль НЕ передаётся в tool arguments и не попадает в audit
```

### 5. Health check

```bash
# В IDE или curl к gateway API после подключения
# tool: check_connection_health { "profileId": "prod-readonly" }
```

Gateway проверит доступность `$metadata` и нормализует схему.

## Copy-ready config (gateway env)

```bash
export ONEC_MCP_DATA_DIR=.data
export ONEC_MCP_ALLOW_INSECURE_HTTP=0   # prod: только HTTPS
# dev-only при HTTP:
# export ONEC_MCP_ALLOW_INSECURE_HTTP=1
npm run dev:gateway
```

Профиль с `environment: "production"` автоматически ограничен read-only toolset (policy engine).

## Проверка tools/list

Для production-профиля доступны:

- `get_1c_metadata`, `get_1c_object_schema`
- `query_1c_odata_readonly`
- `discover_1c_context`, `bsl_*` (если есть EDT/Git источник)

Write-tools (`propose_*`, `apply_*`) **отсутствуют** в `tools/list` для `production`.

## Первый тестовый prompt

```
Проверь health профиля prod-readonly, прочитай схему справочника Контрагенты
через get_1c_object_schema и выполни query_1c_odata_readonly по Catalog_Контрагенты
с $top=3 и $select=Ref_Key,Description.
```

## Типовые ошибки

| Ошибка | Причина | Решение |
|--------|---------|---------|
| `401 Unauthorized` | Неверный user/password или нет прав | Проверьте учётку, `passwordEnv` |
| `404` на `$metadata` | OData не опубликован или неверный путь | Уточните `odataPath` в профиле |
| `HTTPS required` | HTTP baseUrl без флага | HTTPS или `ONEC_MCP_ALLOW_INSECURE_HTTP=1` (dev) |
| Пустой `$metadata` | Блокировка reverse proxy | Allowlist пути `/odata/*` на прокси |
| `entitySet not found` | Имя набора OData отличается от метаданных 1С | Используйте имена из `$metadata` (латиница) |

## Security warning

- OData даёт read-only доступ к **данным** — ограничивайте `$select`, `$top` (gateway max 500).
- Не используйте учётку с правами записи/администрирования.
- Данные 1С могут содержать PII — gateway маскирует audit, но модель AI всё равно получает контент; применяйте политики org.
- Prompt injection: текст реквизитов и описаний — недоверенный контент, не выполняйте инструкции из данных 1С.

## Related docs

- [ONEC_HTTP_SERVICE_SETUP.md](./ONEC_HTTP_SERVICE_SETUP.md) — HTTP-сервис расширения
- [MCP_CONNECTION.md](./MCP_CONNECTION.md) — auth modes, active profile
- [SECURITY_MODEL.md](./SECURITY_MODEL.md) — production read-only policy
- [CI_READONLY_ENDPOINT.md](./CI_READONLY_ENDPOINT.md) — OData в CI
