Source

core/interfaces/verification-services/other-verification.interface.ts

import { VerificationResponse } from '../verification-adapter.interface';

// Address verification request
export interface AddressVerificationRequest {
  address: string;
  state?: string;
  lga?: string;
}

// NYSC verification request
export interface NYSCVerificationRequest {
  certificateNumber: string;
  firstName?: string;
  lastName?: string;
}

// Insurance policy verification request
export interface InsurancePolicyVerificationRequest {
  policyNumber: string;
}

// National ID verification request
export interface NationalIDVerificationRequest {
  nationalIdNumber: string;
  firstName?: string;
  lastName?: string;
}

// WAEC verification request
export interface WAECVerificationRequest {
  examNumber: string;
  examYear: string;
  examType?: string;
}

// Document verification request
export interface DocumentVerificationRequest {
  documentType: string;
  documentNumber: string;
  image?: string; // Base64 encoded document image
}

// Document verification with face matching
export interface DocumentWithFaceVerificationRequest extends DocumentVerificationRequest {
  faceImage: string; // Base64 encoded face image
}

// Address verification data structure
export interface AddressVerificationData {
  address: string;
  verified: boolean;
  state?: string;
  lga?: string;
  landmark?: string;
  [key: string]: any;
}

// NYSC verification data structure
export interface NYSCVerificationData {
  certificateNumber: string;
  firstName: string;
  lastName: string;
  stateOfService?: string;
  yearOfService?: string;
  institution?: string;
  [key: string]: any;
}

// Insurance policy verification data structure
export interface InsurancePolicyVerificationData {
  policyNumber: string;
  policyHolderName?: string;
  status?: string;
  expiryDate?: string;
  issueDate?: string;
  insuranceCompany?: string;
  [key: string]: any;
}

// National ID verification data structure
export interface NationalIDVerificationData {
  nationalIdNumber: string;
  firstName: string;
  lastName: string;
  dateOfBirth?: string;
  [key: string]: any;
}

// WAEC verification data structure
export interface WAECVerificationData {
  examNumber: string;
  examYear: string;
  candidateName?: string;
  results?: Array<{
    subject: string;
    grade: string;
  }>;
  [key: string]: any;
}

// Document verification data structure
export interface DocumentVerificationData {
  documentType: string;
  documentNumber: string;
  verified: boolean;
  ownerName?: string;
  [key: string]: any;
}

/**
 * Interface for other miscellaneous verification services
 * Implementations should throw NotImplementedException for unsupported methods
 */
export interface IOtherVerificationService {
  /**
   * Address verification - OPTIONAL
   */
  verifyAddress?(data: AddressVerificationRequest): Promise<VerificationResponse<AddressVerificationData>>;
  
  /**
   * NYSC (National Youth Service Corps) certificate verification - OPTIONAL
   */
  verifyNYSC?(data: NYSCVerificationRequest): Promise<VerificationResponse<NYSCVerificationData>>;
  
  /**
   * Insurance policy verification - OPTIONAL
   */
  verifyInsurancePolicy?(data: InsurancePolicyVerificationRequest): Promise<VerificationResponse<InsurancePolicyVerificationData>>;
  
  /**
   * National ID verification - OPTIONAL
   */
  verifyNationalID?(data: NationalIDVerificationRequest): Promise<VerificationResponse<NationalIDVerificationData>>;
  
  /**
   * WAEC (West African Examinations Council) verification - OPTIONAL
   */
  verifyWAEC?(data: WAECVerificationRequest): Promise<VerificationResponse<WAECVerificationData>>;
  
  /**
   * Generic document verification - OPTIONAL
   */
  verifyDocument?(data: DocumentVerificationRequest): Promise<VerificationResponse<DocumentVerificationData>>;
  
  /**
   * Document verification with face matching - OPTIONAL
   */
  verifyDocumentWithFace?(data: DocumentWithFaceVerificationRequest): Promise<VerificationResponse<DocumentVerificationData>>;
  
  /**
   * Check if the service is ready and configured
   */
  isReady(): boolean;
}