From c42e99747e6d33f2f6e9a5c274f72450f197e1bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 19 Jun 2026 07:24:26 +0300 Subject: [PATCH] =?UTF-8?q?feat(G1/SP3b):=20api-=D0=BE=D0=B1=D1=91=D1=80?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D1=80=D0=B5=D0=BA=D0=B2=D0=B8=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20(get/update/lookup-inn)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- app/resources/js/api/requisites.ts | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 app/resources/js/api/requisites.ts diff --git a/app/resources/js/api/requisites.ts b/app/resources/js/api/requisites.ts new file mode 100644 index 00000000..9413ab0e --- /dev/null +++ b/app/resources/js/api/requisites.ts @@ -0,0 +1,48 @@ +import { apiClient, ensureCsrfCookie } from './client'; + +/** Реквизиты тенанта. Совпадает с RequisitesResource (бэкенд SP2). */ +export interface Requisites { + subject_type: 'individual' | 'sole_proprietor' | 'legal_entity' | null; + contact_name: string | null; + contact_phone: string | null; + inn: string | null; + legal_name: string | null; + kpp: string | null; + ogrn: string | null; + legal_address: string | null; + bank_name: string | null; + bank_bik: string | null; + bank_account: string | null; + corr_account: string | null; + requisites_completed_at: string | null; +} + +/** Ответ POST /lookup-inn (мягкая подтяжка по DaData). */ +export interface InnLookupResult { + found: boolean; + legal_name?: string; + kpp?: string; + ogrn?: string; + legal_address?: string; + subject_type_hint?: 'sole_proprietor' | 'legal_entity'; +} + +/** GET /api/tenant/requisites — null если ещё не заполнялись. */ +export async function getRequisites(): Promise { + const { data } = await apiClient.get('/api/tenant/requisites'); + return data.data ?? null; +} + +/** PUT /api/tenant/requisites — upsert, возвращает сохранённое. */ +export async function updateRequisites(payload: Partial): Promise { + await ensureCsrfCookie(); + const { data } = await apiClient.put('/api/tenant/requisites', payload); + return data.data; +} + +/** POST /api/tenant/requisites/lookup-inn — ничего не сохраняет. */ +export async function lookupInn(inn: string): Promise { + await ensureCsrfCookie(); + const { data } = await apiClient.post('/api/tenant/requisites/lookup-inn', { inn }); + return data; +}