# CISD Init Request Schema Spec (Preset-Version Driven) ## 1. Scope This document defines the frontend request schema for CISD initialization in TMS when product version is preset by device metadata. - Frontend must call `GET /api/v1/device/status` first. - If `presetProductType` is empty or invalid, initialization is forbidden. - Frontend must render version-specific form fields automatically; user does not manually choose version. ## 2. Device status fields used by frontend `/api/v1/device/status` response includes: - `presetProductType`: `ENTERPRISE | INDIRECT | DIRECT` - `presetVersion`: preset package version - `presetSource`: where preset was loaded from (e.g., `CONFIG`, future `DB`) ## 3. Init preview request payload Endpoint: `POST /api/v1/init/preview` ```json { "orgCodeType": "BIC", "orgCode": "AAAABBBBXXX", "orgNameCn": "示例机构", "orgNameEn": "Example Bank", "deployMode": "DUAL", "nodes": { "node01Ip": "10.0.0.1", "node02Ip": "10.0.0.2", "node03Ip": "127.0.0.1", "node04Ip": "127.0.0.1" }, "mq": { "mqType": "RABBITMQ", "channelUsername": "channel_user", "channelPassword": "channel_password", "tlqLicenseFileId": "file-tlq-license", "cfmqConfigFileId": "file-cfmq-config" }, "licenses": { "receiverLicenseFileId": "file-receiver-license", "cfgZipFileId": "file-cfg-zip" }, "signServer": { "signHost": "172.30.1.101", "signPort": 50006, "signType": "Infosec", "signCertDn": "CN=...", "signCertSn": "1154809590", "signPassword": "***" } } ``` ## 4. Mandatory fields by product type ### 4.1 Common mandatory fields (all versions) - `orgCodeType`, `orgCode`, `orgNameCn` - `deployMode` - `nodes.node01Ip` - `mq.mqType`, `mq.channelUsername`, `mq.channelPassword` - `licenses.receiverLicenseFileId` ### 4.2 ENTERPRISE / INDIRECT Allowed values: - `deployMode`: `SINGLE | DUAL` - `mq.mqType`: `RABBITMQ | TLQ` Conditional required fields: - `deployMode=DUAL` -> `nodes.node02Ip` - `mqType=TLQ` -> `mq.tlqLicenseFileId` ### 4.3 DIRECT Allowed values: - `deployMode`: `SINGLE | DUAL | QUAD` - `mq.mqType`: `RABBITMQ_TLQ | RABBITMQ_CFMQ` Always required: - `licenses.cfgZipFileId` - `signServer.signHost` - `signServer.signPort` - `signServer.signType` - `signServer.signCertDn` - `signServer.signCertSn` - `signServer.signPassword` Conditional required fields: - `deployMode=DUAL|QUAD` -> `nodes.node02Ip` - `deployMode=QUAD` -> `nodes.node03Ip`, `nodes.node04Ip` - `mqType=RABBITMQ_TLQ` -> `mq.tlqLicenseFileId` - `mqType=RABBITMQ_CFMQ` -> `mq.cfmqConfigFileId` ## 5. Prefilled vs user-input fields ### 5.1 Prefilled and hidden from frontend - Product preset metadata: version type and package version - Database deployment credentials and root/app user passwords - RabbitMQ admin username/password ### 5.2 User input fields - Institution identity and node addresses - MQ channel username/password - Version-conditional file uploads (receiver license, TLQ license, CFMQ config, direct CFG zip) - Direct sign server information ## 6. Validation behavior - Validation errors return code `4001` with field message. - Missing/invalid preset product type returns business error and initialization is blocked.