64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { ValidationLevel } from '../interfaces.js';
|
|
import type { ValidationResult, ValidationError } from '../interfaces.js';
|
|
|
|
/**
|
|
* Base validator class that defines common validation functionality
|
|
* for all invoice format validators
|
|
*/
|
|
export abstract class BaseValidator {
|
|
protected xml: string;
|
|
protected errors: ValidationError[] = [];
|
|
|
|
constructor(xml: string) {
|
|
this.xml = xml;
|
|
}
|
|
|
|
/**
|
|
* Validates XML against the specified level of validation
|
|
* @param level Validation level (syntax, semantic, business)
|
|
* @returns Result of validation
|
|
*/
|
|
abstract validate(level?: ValidationLevel): ValidationResult;
|
|
|
|
/**
|
|
* Gets all validation errors found during validation
|
|
* @returns Array of validation errors
|
|
*/
|
|
public getValidationErrors(): ValidationError[] {
|
|
return this.errors;
|
|
}
|
|
|
|
/**
|
|
* Checks if the document is valid
|
|
* @returns True if no validation errors were found
|
|
*/
|
|
public isValid(): boolean {
|
|
return this.errors.length === 0;
|
|
}
|
|
|
|
/**
|
|
* Validates XML against schema
|
|
* @returns True if schema validation passed
|
|
*/
|
|
protected abstract validateSchema(): boolean;
|
|
|
|
/**
|
|
* Validates business rules
|
|
* @returns True if business rule validation passed
|
|
*/
|
|
protected abstract validateBusinessRules(): boolean;
|
|
|
|
/**
|
|
* Adds an error to the validation errors list
|
|
* @param code Error code
|
|
* @param message Error message
|
|
* @param location Location in the XML where the error occurred
|
|
*/
|
|
protected addError(code: string, message: string, location: string = ''): void {
|
|
this.errors.push({
|
|
code,
|
|
message,
|
|
location
|
|
});
|
|
}
|
|
} |