feat(validation): add validators
This commit is contained in:
64
ts/formats/base.validator.ts
Normal file
64
ts/formats/base.validator.ts
Normal file
@ -0,0 +1,64 @@
|
||||
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
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user