/**
 * 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;
}
