fix: убрать «Обучение» из сумм к списанию — дублировало TrainingAmount

Осталось 5 категорий (ОС, СИЗ, подотчётная сумма, НМА, ТМЦ). У обучения уже
было отдельное поле TrainingAmount («Обучение: сумма», правит только КДП) —
второе одноимённое поле с другим поведением (любой согласующий) только
путало, даже с подписью группы над сеткой. WriteOffTrainingAmount убран из
модели/load/submit/манифеста; ClearanceView и RequestSection код не трогали —
они уже обходят WRITE_OFF_CATEGORIES обобщённо.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-08-26 14:17:54 +05:00
parent b010e3ec4a
commit 89fceaab1d
5 changed files with 20 additions and 21 deletions
@@ -55,10 +55,13 @@ RequestTypeId» в `docs/forms.md`). Тип уже зарегистрирова
заведённых руками, ссылки нет и поле не рендерится.
## Суммы к списанию (согласование)
6 НЕЗАВИСИМЫХ сумм, компактной сеткой (короткие подписи, обычная 2-колоночная
сетка секции), колонки `WriteOff{Assets,Ppe,Accountable,Training,Nma,Tmc}Amount`
(см. `model.ts WRITE_OFF_CATEGORIES`): «ОС», «СИЗ», «Подотчётная сумма»,
«Обучение», «НМА», «ТМЦ».
5 НЕЗАВИСИМЫХ сумм, компактной сеткой под подписью «СУММЫ К СПИСАНИЮ» (короткие
подписи, обычная 2-колоночная сетка секции), колонки
`WriteOff{Assets,Ppe,Accountable,Nma,Tmc}Amount` (см. `model.ts
WRITE_OFF_CATEGORIES`): «ОС», «СИЗ», «Подотчётная сумма», «НМА», «ТМЦ».
Обучение сюда НЕ входит — у него уже есть `TrainingAmount` (см. выше) с ДРУГИМ
поведением (правит только КДП); заводить второе одноимённое поле с иным
поведением рядом только путало.
- **Не привязаны к должности**, в отличие от отметок выше: заполнить может ЛЮБОЙ
согласующий, у которого сейчас активный шаг (`ClearanceView.canEditWriteOffs`,
@@ -41,7 +41,6 @@ export async function loadClearanceRequest(itemId: number, listId?: string): Pro
'WriteOffAssetsAmount',
'WriteOffPpeAmount',
'WriteOffAccountableAmount',
'WriteOffTrainingAmount',
'WriteOffNmaAmount',
'WriteOffTmcAmount',
'RequestStatus',
@@ -70,7 +69,6 @@ export async function loadClearanceRequest(itemId: number, listId?: string): Pro
WriteOffAssetsAmount: numberField(item.WriteOffAssetsAmount),
WriteOffPpeAmount: numberField(item.WriteOffPpeAmount),
WriteOffAccountableAmount: numberField(item.WriteOffAccountableAmount),
WriteOffTrainingAmount: numberField(item.WriteOffTrainingAmount),
WriteOffNmaAmount: numberField(item.WriteOffNmaAmount),
WriteOffTmcAmount: numberField(item.WriteOffTmcAmount)
};
@@ -39,13 +39,16 @@ export interface IFormData {
DismissalUrl: string;
/**
* Суммы к списанию по обходному листу — 6 независимых сумм (компактная сетка
* полей, см. WRITE_OFF_CATEGORIES). «Сырые» цифры без пробелов, как
* TrainingAmount (см. MoneyInput). Пусто = не заполнено. КАЖДАЯ —
* независимая: заполнить может любой активный согласующий (см.
* ClearanceView.canEditWriteOffs), но как только сумма непустая — блокируется
* НАВСЕГДА, для всех (включая того, кто её ввёл). Признак блокировки — сама
* непустая сумма, отдельного флага в списке нет.
* Суммы к списанию по обходному листу — 5 независимых сумм (компактная сетка
* полей, см. WRITE_OFF_CATEGORIES). Обучение сюда НЕ входит — для него уже
* есть отдельное поле `TrainingAmount` (см. выше) с ДРУГИМ поведением
* (правит только КДП, не любой согласующий); заводить второе «Обучение» с
* иным поведением рядом только путало (полностью совпадающие подписи).
* «Сырые» цифры без пробелов, как TrainingAmount (см. MoneyInput). Пусто =
* не заполнено. КАЖДАЯ — независимая: заполнить может любой активный
* согласующий (см. ClearanceView.canEditWriteOffs), но как только сумма
* непустая — блокируется НАВСЕГДА, для всех (включая того, кто её ввёл).
* Признак блокировки — сама непустая сумма, отдельного флага в списке нет.
*
* «За что конкретно» — своего поля НЕТ: заполнил хоть одну сумму — становится
* обязательным СТАНДАРТНЫЙ комментарий решения (DecisionPanel, «Ваше решение»),
@@ -57,22 +60,20 @@ export interface IFormData {
WriteOffAssetsAmount: string;
WriteOffPpeAmount: string;
WriteOffAccountableAmount: string;
WriteOffTrainingAmount: string;
WriteOffNmaAmount: string;
WriteOffTmcAmount: string;
}
/** Имена всех 6 сумм к списанию — см. IFormData.WriteOff*Amount. */
/** Имена всех 5 сумм к списанию — см. IFormData.WriteOff*Amount. */
export type WriteOffFieldKey =
| 'WriteOffAssetsAmount'
| 'WriteOffPpeAmount'
| 'WriteOffAccountableAmount'
| 'WriteOffTrainingAmount'
| 'WriteOffNmaAmount'
| 'WriteOffTmcAmount';
/**
* Одна из 6 независимых категорий списания — см. IFormData.WriteOff*Amount.
* Одна из 5 независимых категорий списания — см. IFormData.WriteOff*Amount.
* amountField сужен до WriteOffFieldKey (а не keyof IFormData целиком): у
* IFormData есть и булевы поля (ParkingCard/AccessCard), и `data[cat.amountField]`
* должен типизироваться строго строкой — иначе `.trim()` в валидации и
@@ -88,7 +89,6 @@ export const WRITE_OFF_CATEGORIES: IWriteOffCategory[] = [
{ key: 'assets', label: 'ОС', amountField: 'WriteOffAssetsAmount' },
{ key: 'ppe', label: 'СИЗ', amountField: 'WriteOffPpeAmount' },
{ key: 'accountable', label: 'Подотчётная сумма', amountField: 'WriteOffAccountableAmount' },
{ key: 'training', label: 'Обучение', amountField: 'WriteOffTrainingAmount' },
{ key: 'nma', label: 'НМА', amountField: 'WriteOffNmaAmount' },
{ key: 'tmc', label: 'ТМЦ', amountField: 'WriteOffTmcAmount' }
];
@@ -121,7 +121,6 @@ export const EMPTY_DATA: IFormData = {
WriteOffAssetsAmount: '',
WriteOffPpeAmount: '',
WriteOffAccountableAmount: '',
WriteOffTrainingAmount: '',
WriteOffNmaAmount: '',
WriteOffTmcAmount: ''
};
@@ -19,7 +19,6 @@
{ "internalName": "WriteOffAssetsAmount", "title": "Сумма к списанию: ОС", "type": "Number", "decimals": 2 },
{ "internalName": "WriteOffPpeAmount", "title": "Сумма к списанию: СИЗ", "type": "Number", "decimals": 2 },
{ "internalName": "WriteOffAccountableAmount", "title": "Сумма к списанию: подотчётная сумма", "type": "Number", "decimals": 2 },
{ "internalName": "WriteOffTrainingAmount", "title": "Сумма к списанию: обучение", "type": "Number", "decimals": 2 },
{ "internalName": "WriteOffNmaAmount", "title": "Сумма к списанию: НМА", "type": "Number", "decimals": 2 },
{ "internalName": "WriteOffTmcAmount", "title": "Сумма к списанию: ТМЦ", "type": "Number", "decimals": 2 }
]