fix: примечание СБ в заявке на приём — необязательное

По просьбе заказчика примечание при отметке «Согласован СБ» больше не
требуется для отправки: поле по-прежнему появляется только при отметке,
но его можно оставить пустым.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-09 15:44:17 +05:00
parent 8330790bf9
commit e46632d67a
4 changed files with 7 additions and 18 deletions
@@ -86,7 +86,7 @@ export interface IFormData {
AgencyName: string;
AgencyTerms: string;
// Служба безопасности: инициатор при подаче отмечает, что кандидат согласован
// с СБ; при отметке обязательно примечание (см. validation.ts). Информационное —
// с СБ; примечание при отметке — по желанию. Информационное —
// на маршрут и решения не влияет.
HireSecurityApproved: boolean;
HireSecurityNote: string;
@@ -4,7 +4,7 @@ import { ISectionProps } from '../model';
/**
* 6. Служба безопасности: инициатор отмечает, что кандидат согласован с СБ, и
* тогда обязательно пишет примечание (см. validation.ts). Поле информационное —
* при желании пишет примечание (необязательно). Поле информационное —
* на маршрут и решения согласующих не влияет. При снятии отметки примечание
* очищается, чтобы в заявку не ушёл текст скрытого поля (как в AgencySection).
*/
@@ -20,7 +20,7 @@ export const SecuritySection: React.FC<ISectionProps> = ({ data, set }) => {
<Toggle checked={data.HireSecurityApproved} onChange={handleToggle} onLabel="Да" />
</FormField>
{data.HireSecurityApproved && (
<FormField label="6.2 Примечание СБ" htmlFor="HireSecurityNote" required full>
<FormField label="6.2 Примечание СБ" htmlFor="HireSecurityNote" full>
<TextArea
id="HireSecurityNote"
value={data.HireSecurityNote}
@@ -38,13 +38,8 @@ describe('RecruitingHire validation', () => {
});
});
it('«Согласован СБ» требует примечание СБ, без отметки — не требует', () => {
expect(labels(submitIssues(DRAFT_READY))).not.toContain('6.2 Примечание СБ');
expect(labels(submitIssues({ ...DRAFT_READY, HireSecurityApproved: true }))).toContain('6.2 Примечание СБ');
expect(
labels(submitIssues({ ...DRAFT_READY, HireSecurityApproved: true, HireSecurityNote: 'Проверка пройдена' }))
).not.toContain('6.2 Примечание СБ');
// Черновик без примечания сохранить можно.
it('примечание СБ необязательно, даже при отметке «Согласован СБ»', () => {
expect(labels(submitIssues({ ...DRAFT_READY, HireSecurityApproved: true }))).not.toContain('6.2 Примечание СБ');
expect(draftIssues({ ...DRAFT_READY, HireSecurityApproved: true })).toEqual([]);
});
@@ -19,7 +19,7 @@ interface IRequiredRule extends IFieldIssue {
* агентство» не проверяется — у булевых нет пустого состояния.
* 2.2 «Дата приёма» не нужна, если отмечено «По приезду на объект»
* (HireOnArrival) — тогда дату проставляет исполнитель на своём шаге.
* 6.2 «Примечание СБ» обязательно только при отметке 6.1 «Согласован СБ».
* 6.2 «Примечание СБ» необязательно (по просьбе заказчика) — даже при отметке 6.1.
*
* 1.3 «Проект» — хотя бы один проект из справочника: первый уходит в resolve
* маршрута (projectId), а без него approval-route отвечал 404 и заявка ушла бы
@@ -49,13 +49,7 @@ const REQUIRED_RULES: ReadonlyArray<IRequiredRule> = [
{ field: 'ProbationPeriod', label: '4.1 Испытательный срок', ok: (d) => !!d.ProbationPeriod },
{ field: 'SalaryProbation', label: '4.2 Оклад при испытательном сроке', ok: (d) => !!d.SalaryProbation.trim() },
{ field: 'SalaryAfterProbation', label: '4.3 Оклад по завершении ИС', ok: (d) => !!d.SalaryAfterProbation.trim() },
{ field: 'WorkSchedule', label: '4.4 График работы', ok: (d) => !!d.WorkSchedule },
{
field: 'HireSecurityNote',
label: '6.2 Примечание СБ',
message: 'отмечено «Согласован СБ» — укажите примечание',
ok: (d) => !d.HireSecurityApproved || !!d.HireSecurityNote.trim()
}
{ field: 'WorkSchedule', label: '4.4 График работы', ok: (d) => !!d.WorkSchedule }
];
function toIssue({ field, label, message }: IRequiredRule): IFieldIssue {