UNPKG

@accounter/server

Version:
66 lines 2.57 kB
/** * Key generator utility for generating unique identifiers * Used for fields 1004, 1103, and 1153 which require randomly generated unique IDs */ /** * Generates a random numeric string of specified length * @param length - The length of the numeric string to generate (max 15 digits) * @returns A random numeric string padded with leading zeros if necessary */ export function generateRandomKey(length = 15) { if (length <= 0 || length > 15) { throw new Error('Key length must be between 1 and 15 digits'); } // Generate a random number with the specified number of digits // For length 15, max value is 999,999,999,999,999 (15 nines) const maxValue = Math.pow(10, length) - 1; const minValue = Math.pow(10, length - 1); // Ensures we always get the full length // Generate random number between minValue and maxValue const randomNum = Math.floor(Math.random() * (maxValue - minValue + 1)) + minValue; // Convert to string and pad with zeros if needed return randomNum.toString().padStart(length, '0'); } /** * Generates a primary identifier for fields 1004, 1103, and 1153 * These fields must have the same value across all records in a single file * @returns A 15-digit numeric string */ export function generatePrimaryIdentifier() { return generateRandomKey(15); } /** * Key generator context to maintain consistent IDs across records * This ensures that fields 1004, 1103, and 1153 use the same value within a single file */ export class KeyGeneratorContext { _primaryIdentifier = null; /** * Gets or generates the primary identifier for this context * Ensures the same ID is used across all records that require it */ getPrimaryIdentifier() { this._primaryIdentifier ||= generatePrimaryIdentifier(); return this._primaryIdentifier; } /** * Resets the context, generating new IDs for the next file */ reset() { this._primaryIdentifier = null; } /** * Sets a specific primary identifier (useful for testing or when you have a specific ID requirement) */ setPrimaryIdentifier(id) { if (!/^\d{1,15}$/.test(id)) { throw new Error('Primary identifier must be a numeric string with 1-15 digits'); } this._primaryIdentifier = id.padStart(15, '0'); } } /** * Default key generator context instance * Use this for most cases to ensure consistency across records */ export const defaultKeyGenerator = new KeyGeneratorContext(); //# sourceMappingURL=key-generator.js.map