# Contract: No Hardcoded Vendors or Models Version: 1.1 ## Purpose Запрет на хардкод названий вендоров, моделей и партномеров в коде. See `README.md` for code examples. ## Правило Названия вендоров, моделей, серий оборудования и партномеров **не появляются в коде**. Они приходят из данных: БД, конфига, входного документа, справочника. - Запрещены сравнения и switch по имени вендора (`if device.Vendor == "Dell"`) и списки вендоров в коде (`var knownVendors = []string{...}`). - Логика определяется по полям из данных (`device.HasIPMI`, `device.ParserType`), не по названию вендора. - Если нужен маппинг вендор → поведение, он живёт в конфиге или справочной таблице БД. ## Исключения Допускается упоминание вендора **только** в: - Названиях пакетов/директорий парсеров: `internal/parser/vendors/dell/` - Комментариях и документации - Тестовых фикстурах (XML/JSON с реальными данными оборудования) В этих местах название вендора — идентификатор модуля, не условие в логике. ## Почему Хардкод вендора делает код хрупким: новый вендор требует правок в коде, а не в данных. Опечатка в строке (`"HPE"` vs `"HP"`) создаёт незаметный баг. Регистр не контролируется (см. `identifier-normalization` contract).