@k-msg/channel
Version:
AlimTalk channel and sender number management
132 lines (131 loc) • 4.2 kB
TypeScript
/**
* 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;
}