From 6aef9a5ba96fabe76c80694d9ba20a28c66b4071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Wed, 28 Oct 2026 15:18:04 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BF=D0=BE=D0=BB=D1=8F=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4=D0=B0=20=C2=AB=D0=9D=D0=B0=D0=B4=D0=B1=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20/=20=D0=B4=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D0=B0=C2=BB?= =?UTF-8?q?=20=D0=B2=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D0=B9=20=D0=A2?= =?UTF-8?q?=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Второй разобранный вид: основание (а–д из шаблона ТЗ — надбавка это или доплата, видно из пункта), срок с/по или «бессрочно», размер с переключателем «% / ₸» и обоснование, куда пишется и объём доп. работы при совмещении. Проценты принимают дробные значения (7,5 %), тенге — целые; при переходе на тенге дробная часть отбрасывается. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../forms/ContractChange/README.md | 8 +- .../Allowance/AllowanceSection.module.scss | 13 +++ .../byType/Allowance/AllowanceSection.tsx | 87 +++++++++++++++++++ .../byType/Allowance/UnitSwitch.module.scss | 40 +++++++++ .../byType/Allowance/UnitSwitch.tsx | 36 ++++++++ .../byType/Allowance/amount.test.ts | 33 +++++++ .../ContractChange/byType/Allowance/amount.ts | 25 ++++++ .../byType/Allowance/options.ts | 31 +++++++ .../byType/ChangeTypeSections.tsx | 4 +- .../forms/ContractChange/load.ts | 27 ++++-- .../forms/ContractChange/model.ts | 28 +++++- .../forms/ContractChange/provisioning.json | 16 +++- .../forms/ContractChange/submit.ts | 36 ++++++-- 13 files changed, 369 insertions(+), 15 deletions(-) create mode 100644 src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.module.scss create mode 100644 src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.tsx create mode 100644 src/webparts/requestPortal/forms/ContractChange/byType/Allowance/UnitSwitch.module.scss create mode 100644 src/webparts/requestPortal/forms/ContractChange/byType/Allowance/UnitSwitch.tsx create mode 100644 src/webparts/requestPortal/forms/ContractChange/byType/Allowance/amount.test.ts create mode 100644 src/webparts/requestPortal/forms/ContractChange/byType/Allowance/amount.ts create mode 100644 src/webparts/requestPortal/forms/ContractChange/byType/Allowance/options.ts diff --git a/src/webparts/requestPortal/forms/ContractChange/README.md b/src/webparts/requestPortal/forms/ContractChange/README.md index 0fb02fd..6bd46da 100644 --- a/src/webparts/requestPortal/forms/ContractChange/README.md +++ b/src/webparts/requestPortal/forms/ContractChange/README.md @@ -58,7 +58,13 @@ RequestTypeId» в `docs/forms.md`). Тип и маршрут в админке | Вид | Секция | Поля (все необязательные, без ограничений) | | --- | --- | --- | | Повышение должностного оклада | `SalaryIncrease` | текущий оклад, новый оклад (`MoneyInput`, Number), дата изменения, причина (испытательный срок / расширение функционала / иное), обоснование — при «иное» это и есть текст причины | -| Остальные 9 | — | ещё не разобраны с кадрами | +| Установление надбавки / доплаты | `Allowance` | основание (а–д: надбавка или доплата видно из пункта), дата начала, дата окончания или «бессрочно» (флажок прячет и очищает дату), размер + переключатель «% / ₸» (`UnitSwitch`, по умолчанию %), обоснование — в т.ч. объём доп. работы при совмещении и текст «иное». Письменное согласие работника на совмещение оформляет кадровик после согласования — не в форме. Вложение «Результаты аттестации» (обязательно при основании «г») — следующим шагом | +| Остальные 8 | — | ещё не разобраны с кадрами | + +**Вложения по колонке ТЗ «Что приложить»** (решение 2026-10-28): фиксированные +подписанные слоты по виду (подпись — что за документ); обязательны там, где ТЗ +прямо требует документ (вид 2 «г» — аттестация, вид 3 — ДИ, вид 8 — новая ДИ; +вид 9 — текст ИЛИ файл), «можно приложить» — необязательно (вид 7). ## Открытые вопросы (проверить на тесте) - Выдаёт ли бэкенд (вебхуки) права на элемент по People-колонке `Employee`? Если да — diff --git a/src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.module.scss b/src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.module.scss new file mode 100644 index 0000000..306c74d --- /dev/null +++ b/src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.module.scss @@ -0,0 +1,13 @@ +@import '../../../../../../styles/design-tokens'; + +// Сумма + переключатель «% / ₸» в одну строку: поле тянется, переключатель — по содержимому. +.amount { + display: flex; + align-items: stretch; + gap: $sp-2; +} + +.amountInput { + flex: 1; + min-width: 0; +} diff --git a/src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.tsx b/src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.tsx new file mode 100644 index 0000000..155d547 --- /dev/null +++ b/src/webparts/requestPortal/forms/ContractChange/byType/Allowance/AllowanceSection.tsx @@ -0,0 +1,87 @@ +import * as React from 'react'; +import { CollapseSection, FormField, MoneyInput, TextInput, TextArea, Select, Checkbox } from '../../../../shared/ui'; +import { CHANGE_TYPE_LABELS } from '../../changeTypes'; +import { ISectionProps } from '../../model'; +import { ALLOWANCE_REASONS } from './options'; +import { UnitSwitch } from './UnitSwitch'; +import { sanitizePercentInput, amountForUnit } from './amount'; +import styles from './AllowanceSection.module.scss'; + +/** + * Поля вида «Установление надбавки / доплаты». Состав согласован с Тимуром по ТЗ + * кадров: основание (а–д), срок с/по или бессрочно, размер в % или ₸, обоснование + * (в т.ч. объём доп. работы при совмещении). Все необязательные. + * + * Поля — прямо в CollapseSection, без FormGrid (тело секции само сетка). + */ +export const AllowanceSection: React.FC = ({ data, set }) => ( + + +