121 lines
3.0 KiB
TypeScript
121 lines
3.0 KiB
TypeScript
// 用户类型
|
||
export enum UserType {
|
||
INDIVIDUAL = 'individual', // 普通用户
|
||
ENTERPRISE = 'enterprise', // 企业用户
|
||
}
|
||
|
||
// 通话类型
|
||
export enum CallType {
|
||
VOICE = 'voice', // 语音通话
|
||
VIDEO = 'video', // 视频通话
|
||
}
|
||
|
||
// 翻译类型
|
||
export enum TranslationType {
|
||
TEXT = 'text', // 文字翻译
|
||
SIGN_LANGUAGE = 'sign_language', // 手语翻译
|
||
HUMAN_INTERPRETER = 'human_interpreter', // 真人翻译
|
||
}
|
||
|
||
// 计费规则
|
||
export interface BillingRule {
|
||
id: string;
|
||
name: string;
|
||
callType: CallType;
|
||
translationType: TranslationType;
|
||
pricePerMinute: number; // 每分钟价格(分)
|
||
minimumCharge: number; // 最低收费(分)
|
||
userType: UserType;
|
||
}
|
||
|
||
// 用户账户信息
|
||
export interface UserAccount {
|
||
id: string;
|
||
userType: UserType;
|
||
balance: number; // 余额(分)
|
||
enterpriseContractId?: string; // 企业合同ID
|
||
creditLimit?: number; // 信用额度(分)
|
||
}
|
||
|
||
// 预约信息
|
||
export interface Appointment {
|
||
id: string;
|
||
userId: string;
|
||
title: string;
|
||
description?: string;
|
||
scheduledTime: Date;
|
||
duration: number; // 预计时长(分钟)
|
||
callType: CallType;
|
||
translationType: TranslationType;
|
||
interpreterIds?: string[]; // 翻译员ID列表
|
||
estimatedCost: number; // 预估费用(分)
|
||
status: 'scheduled' | 'confirmed' | 'in_progress' | 'completed' | 'cancelled';
|
||
createdAt: Date;
|
||
updatedAt: Date;
|
||
}
|
||
|
||
// 翻译员信息
|
||
export interface Interpreter {
|
||
id: string;
|
||
name: string;
|
||
avatar?: string;
|
||
languages: string[]; // 支持的语言
|
||
specialties: string[]; // 专业领域
|
||
rating: number; // 评分
|
||
pricePerMinute: number; // 每分钟价格(分)
|
||
availability: {
|
||
[key: string]: boolean; // 日期可用性
|
||
};
|
||
isOnline: boolean;
|
||
}
|
||
|
||
// 通话记录
|
||
export interface CallRecord {
|
||
id: string;
|
||
userId: string;
|
||
appointmentId?: string;
|
||
callType: CallType;
|
||
translationType: TranslationType;
|
||
interpreterIds?: string[];
|
||
startTime: Date;
|
||
endTime?: Date;
|
||
duration: number; // 实际时长(分钟)
|
||
cost: number; // 实际费用(分)
|
||
status: 'in_progress' | 'completed' | 'failed';
|
||
billingDetails: {
|
||
baseRate: number;
|
||
interpreterRate?: number;
|
||
totalMinutes: number;
|
||
totalCost: number;
|
||
};
|
||
}
|
||
|
||
// 充值记录
|
||
export interface RechargeRecord {
|
||
id: string;
|
||
userId: string;
|
||
amount: number; // 充值金额(分)
|
||
bonus: number; // 赠送金额(分)
|
||
paymentMethod: string;
|
||
status: 'pending' | 'completed' | 'failed';
|
||
createdAt: Date;
|
||
completedAt?: Date;
|
||
}
|
||
|
||
// 计费配置
|
||
export const BILLING_CONFIG = {
|
||
// 默认计费规则
|
||
DEFAULT_RATES: {
|
||
[CallType.VOICE]: {
|
||
[TranslationType.TEXT]: 50, // 0.5元/分钟
|
||
},
|
||
[CallType.VIDEO]: {
|
||
[TranslationType.SIGN_LANGUAGE]: 100, // 1元/分钟
|
||
[TranslationType.HUMAN_INTERPRETER]: 200, // 2元/分钟
|
||
},
|
||
},
|
||
// 低余额警告阈值(5分钟费用)
|
||
LOW_BALANCE_THRESHOLD_MINUTES: 5,
|
||
// 最低余额阈值(1分钟费用)
|
||
MINIMUM_BALANCE_THRESHOLD_MINUTES: 1,
|
||
};
|