UNPKG

@k-msg/channel

Version:

AlimTalk channel and sender number management

132 lines (131 loc) 4.2 kB
/** * Business Verification System * 사업자 정보 및 서류 검증 시스템 */ import { DocumentType, type VerificationDocument, VerificationStatus } from "../../types/channel.types"; import { EventEmitter } from "../shared/event-emitter"; export interface BusinessInfo { businessName: string; businessRegistrationNumber: string; businessType: "corporation" | "individual" | "partnership" | "other"; industry: string; establishedDate: Date; address: { street: string; city: string; state: string; postalCode: string; country: string; }; contactInfo: { phoneNumber: string; email: string; website?: string; }; representatives: Array<{ name: string; position: string; phoneNumber: string; email: string; }>; } export interface VerificationRequest { id: string; channelId: string; businessInfo: BusinessInfo; documents: VerificationDocument[]; status: VerificationStatus; submittedAt: Date; reviewedAt?: Date; reviewedBy?: string; reviewNotes?: string; autoVerificationResults?: AutoVerificationResult[]; } export interface AutoVerificationResult { checkType: "business_registry" | "document_validation" | "address_verification" | "phone_verification"; status: "passed" | "failed" | "warning"; score: number; details: string; metadata?: Record<string, any>; } export interface DocumentValidationResult { isValid: boolean; confidence: number; extractedData?: Record<string, any>; issues: Array<{ type: "format" | "content" | "quality" | "authenticity"; severity: "low" | "medium" | "high" | "critical"; message: string; }>; } export interface BusinessVerifierOptions { enableAutoVerification: boolean; requiredDocuments: DocumentType[]; autoApprovalThreshold: number; requireManualReview: boolean; documentRetentionDays: number; enableExternalAPIs: boolean; externalAPIConfig?: { businessRegistryAPI?: string; addressVerificationAPI?: string; documentOCRAPI?: string; }; } export declare class BusinessVerifier extends EventEmitter { private options; private verificationRequests; private documentValidators; private defaultOptions; constructor(options?: Partial<BusinessVerifierOptions>); /** * Submit business verification request */ submitVerification(channelId: string, businessInfo: BusinessInfo, documents: VerificationDocument[]): Promise<VerificationRequest>; /** * Get verification request by ID */ getVerificationRequest(requestId: string): VerificationRequest | null; /** * Get verification request by channel ID */ getVerificationByChannelId(channelId: string): VerificationRequest | null; /** * Manually approve verification */ approveVerification(requestId: string, reviewerId: string, notes?: string): Promise<VerificationRequest>; /** * Manually reject verification */ rejectVerification(requestId: string, reviewerId: string, reason: string): Promise<VerificationRequest>; /** * Update verification request with additional documents */ addDocument(requestId: string, document: VerificationDocument): Promise<VerificationRequest>; /** * List verification requests with filters */ listVerificationRequests(filters?: { status?: VerificationStatus; channelId?: string; submittedAfter?: Date; submittedBefore?: Date; }): VerificationRequest[]; /** * Get verification statistics */ getVerificationStats(): { total: number; byStatus: Record<string, number>; averageProcessingTime: number; autoApprovalRate: number; }; private processAutoVerification; private validateRequiredDocuments; private verifyBusinessRegistration; private calculateBusinessRegistrationScore; private validateDocument; private verifyAddress; private verifyPhoneNumber; private initializeDocumentValidators; private generateRequestId; }