/** Stable request contracts shared by the channel controller and R5 domains. */ export interface CreateChannelDto { code: string; name: string; carrier?: string; carriers?: string[]; sendRegion?: string; protocol?: string; gatewayHost: string; gatewayPort?: number; enterpriseCode?: string; account: string; passwordCipher: string; srcId: string; cmppVersion?: string; rateLimitPerSecond?: number; unitPrice?: number; status?: string; desiredConnections?: number; windowSize?: number; heartbeatIntervalSeconds?: number; heartbeatMissThreshold?: number; config?: Record; } export type UpdateChannelDto = Partial; export interface CreateChannelGroupDto { code: string; name: string; carrier: string; description?: string; status?: string; retryEnabled?: boolean; retryTimeLimitHours?: number; retryTimeLimitMinutes?: number; } export interface CreateChannelGroupItemDto { groupId: string; channelId: string; carrier?: string; province?: string; priority?: number; weight?: number; isBackup?: boolean; } export interface UpdateChannelGroupDto { code?: string; name?: string; carrier?: string; description?: string; status?: string; retryEnabled?: boolean; retryTimeLimitHours?: number; retryTimeLimitMinutes?: number; items?: Array>; } export interface CreateRouteRuleDto { tenantId?: string; applicationId?: string; groupId: string; channelId?: string; carrier?: string; province?: string; priority?: number; status?: string; } export interface CreateReportFieldDto { channelId: string; drainageFieldId: string; reportType: 'signature' | 'drainage' | 'both'; code?: string; name?: string; fieldType?: string; required?: boolean; description?: string; sortOrder?: number; exportName?: string; columnWidth?: number; imageWidth?: number; imageHeight?: number; defaultValue?: string; transform?: string; status?: string; } export interface ReplaceReportFieldsDto { fields: Array>; } export interface CreateReportMaterialDto { signatureId: string; channelId: string; fieldCode: string; fieldValue?: string; fileObjectId?: string; } export interface CreateReportTaskDto { tenantId: string; signatureId: string; channelId: string; carrier?: string; reportType?: 'signature' | 'drainage'; drainageItemId?: string; createdById?: string; } export interface ChangeReportTaskStatusesDto { items: Array<{ signatureId: string; channelId: string; carrier?: string; status: string; reportType?: 'signature' | 'drainage'; drainageItemId?: string }>; reason?: string; operatorId?: string; sourceEntry?: 'enterprise_signature' | 'report_task' | 'channel_report'; } export interface CreateReportExportDto { fileObjectId?: string; fileName: string; rowCount?: number; } export interface CreateReceiptImportDto { fileObjectId?: string; fileName: string; fileContent?: string; delimiter?: ',' | '\t'; rowCount?: number; successCount?: number; failedCount?: number; statusAfter?: string; reason?: string; result?: Record; } export interface UpsertConnectionStateDto { tenantId?: string; applicationId?: string; channelId: string; connectionId: string; status: string; desiredConnections?: number; currentConnections?: number; lastConnectedAt?: string; lastDisconnectedAt?: string; lastHeartbeatAt?: string; reconnectCount?: number; lastReconnectAttemptAt?: string; nextReconnectAt?: string; lastErrorCategory?: string; lastError?: string; } export interface ChangeChannelStatusDto { status: string; operatorId?: string; reason?: string; } export interface CopyChannelDto { name?: string; code?: string; operatorId?: string; } export interface TestChannelDto { phoneNumber?: string; phones?: string[] | string; content?: string; accessNo?: string; operatorId?: string; }