Форматирование
Объявлять данные надо до их использования
У опций не может быть параметра value

Не смог придумать что им передавать.
Цены на опции как и цены на тарифы зависят от длины периода
Параметр change_state не должен передаваться с серверной стороны

Он может определяться на фронтэнде следующим образом:
change_state = true если выбран какой-то тариф, либо если по группе
                    есть абонемент;
             = false если не выбран ни один из тарифов и нет про-
                    данного абонемента.
login_required - параметр из справочника тарифов. login_error отражает состояние экспорта.

Корректнее разместил параметры по сущностям.
У сайтов всегда есть группы, для группы передается только состояние "включено".

Группы обеспечивают более ровную структуру данных, меньше исключений.
Состояние "выключено" нет смысла хранить и передавать, по этому
достаточно передать коды включенных групп.
Включенные тарифы можно передать без объекта

- передано true - тариф включен (вариантов по периоду нет, если
                  варианты есть, то выбран первый)
- передано число - тариф включен, код периода - это переданное
                  число.