feat(localization): убрать «ИНН» из UI — РК использует ИИН/БИН

ИНН — российское поле. В Казахстане физлица используют ИИН (12 цифр),
юрлица — БИН (12 цифр). Колонок «inn» в БД у нас нет (есть Bin для
юрлица + TaxNumber для ИИН физлица), миграция drop column не нужна —
только лейблы и комментарии.

Поправлено:
- EmployeesPage: «ИИН/ИНН» → «ИИН» (12 цифр, inputMode=numeric).
- CounterpartiesPage: убрано поле «ИНН / другой» — оставлены БИН и ИИН
  с правильными ограничениями (12 цифр, numeric).
- SuperAdminOrgCreatePage / SuperAdminSetupPage: «БИН/ИНН» → «БИН».
- MoySkladImportPage: «(ИНН ...)» в ответе test → «(идентификатор ...)».
- Domain comments в Employee.cs / Counterparty.cs обновлены.

Внутренний MoySklad-DTO `Inn` оставлен — это входящий JSON из российского
API МойСклад, поле там действительно так называется. Маппится в Bin
при импорте контрагента (как и было).
This commit is contained in:
nns 2026-05-06 11:19:28 +05:00
parent c6ece2adea
commit dcb28a9811
6 changed files with 8 additions and 11 deletions

View file

@ -21,7 +21,7 @@ public class Employee : TenantEntity
/// <summary>Оклад в валюте организации, опц.</summary>
public decimal? Salary { get; set; }
/// <summary>ИИН/ИНН (12-14 символов), опц.</summary>
/// <summary>ИИН (12 цифр для физлица в РК), опционально.</summary>
public string? TaxNumber { get; set; }
/// <summary>Произвольное описание (комментарий HR'а).</summary>
public string? Description { get; set; }

View file

@ -143,13 +143,10 @@ export function CounterpartiesPage() {
</Select>
</Field>
<Field label="БИН (юрлицо РК)">
<TextInput value={form.bin} onChange={(e) => setForm({ ...form, bin: e.target.value })} />
<TextInput value={form.bin} onChange={(e) => setForm({ ...form, bin: e.target.value })} placeholder="12 цифр" maxLength={12} inputMode="numeric" />
</Field>
<Field label="ИИН (физлицо РК)">
<TextInput value={form.iin} onChange={(e) => setForm({ ...form, iin: e.target.value })} />
</Field>
<Field label="ИНН / другой">
<TextInput value={form.taxNumber} onChange={(e) => setForm({ ...form, taxNumber: e.target.value })} />
<TextInput value={form.iin} onChange={(e) => setForm({ ...form, iin: e.target.value })} placeholder="12 цифр" maxLength={12} inputMode="numeric" />
</Field>
<Field label="Страна">
<Select value={form.countryId} onChange={(e) => setForm({ ...form, countryId: e.target.value })}>

View file

@ -298,8 +298,8 @@ export function EmployeesPage() {
<Field label="Оклад">
<TextInput type="number" value={form.salary} onChange={(e) => setForm({ ...form, salary: e.target.value })} placeholder="—" />
</Field>
<Field label="ИИН/ИНН">
<TextInput value={form.taxNumber} onChange={(e) => setForm({ ...form, taxNumber: e.target.value })} placeholder="12-14 цифр" maxLength={20} />
<Field label="ИИН">
<TextInput value={form.taxNumber} onChange={(e) => setForm({ ...form, taxNumber: e.target.value })} placeholder="12 цифр" maxLength={12} inputMode="numeric" />
</Field>
</div>
<Field label="Описание / комментарий">

View file

@ -142,7 +142,7 @@ export function MoySkladImportPage() {
{test.data && (
<div className="text-sm text-emerald-700 dark:text-emerald-400 flex items-center gap-1.5">
<CheckCircle className="w-4 h-4" /> Подключено: <strong>{test.data.organization}</strong>
{test.data.inn && <span className="text-slate-500">(ИНН {test.data.inn})</span>}
{test.data.inn && <span className="text-slate-500">(идентификатор {test.data.inn})</span>}
</div>
)}
{test.error && <div className="text-sm text-red-600">{formatError(test.error)}</div>}

View file

@ -79,7 +79,7 @@ export function SuperAdminOrgCreatePage() {
</Field>
</div>
<div className="grid grid-cols-2 gap-3">
<Field label="БИН/ИНН"><TextInput value={bin} onChange={(e) => setBin(e.target.value)} /></Field>
<Field label="БИН"><TextInput value={bin} onChange={(e) => setBin(e.target.value)} placeholder="12 цифр" maxLength={12} inputMode="numeric" /></Field>
<Field label="Телефон"><PhoneInput value={phone} onChange={setPhone} /></Field>
</div>
<Field label="Адрес"><TextInput value={address} onChange={(e) => setAddress(e.target.value)} /></Field>

View file

@ -141,7 +141,7 @@ export function SuperAdminSetupPage() {
</Field>
</div>
<div className="grid grid-cols-2 gap-3">
<Field label="БИН/ИНН"><TextInput value={bin} onChange={(e) => setBin(e.target.value)} /></Field>
<Field label="БИН"><TextInput value={bin} onChange={(e) => setBin(e.target.value)} placeholder="12 цифр" maxLength={12} inputMode="numeric" /></Field>
<Field label="Телефон"><TextInput value={phone} onChange={(e) => setPhone(e.target.value)} /></Field>
</div>
<div className="flex gap-2">