@seidor-cloud-produtos/tax-core 0.0.9-beta11 → 0.0.9-beta13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/taxReport/CounterRegister.js +2 -2
- package/dist/taxReport/CounterRegister.js.map +1 -1
- package/dist/taxReport/CounterRegister.mjs +2 -2
- package/dist/taxReport/CounterRegister.mjs.map +1 -1
- package/dist/taxReport/ReportGenerator.js +2 -2
- package/dist/taxReport/ReportGenerator.js.map +1 -1
- package/dist/taxReport/ReportGenerator.mjs +2 -2
- package/dist/taxReport/ReportGenerator.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -368,10 +368,10 @@ var CounterRegister = class {
|
|
|
368
368
|
return this.reg;
|
|
369
369
|
}
|
|
370
370
|
getChildren() {
|
|
371
|
-
|
|
371
|
+
return [];
|
|
372
372
|
}
|
|
373
373
|
getKeyValue() {
|
|
374
|
-
|
|
374
|
+
return `${this.reg}${this.reg_blc}`;
|
|
375
375
|
}
|
|
376
376
|
};
|
|
377
377
|
__decorateClass([
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["import_reflect_metadata","FieldDataType","valueProviderType"]}
|
|
1
|
+
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["import_reflect_metadata","FieldDataType","valueProviderType"]}
|
package/dist/index.mjs
CHANGED
|
@@ -344,10 +344,10 @@ var CounterRegister = class {
|
|
|
344
344
|
return this.reg;
|
|
345
345
|
}
|
|
346
346
|
getChildren() {
|
|
347
|
-
|
|
347
|
+
return [];
|
|
348
348
|
}
|
|
349
349
|
getKeyValue() {
|
|
350
|
-
|
|
350
|
+
return `${this.reg}${this.reg_blc}`;
|
|
351
351
|
}
|
|
352
352
|
};
|
|
353
353
|
__decorateClass([
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO;;;ACAP,SAAS,oBAAoB;;;ACa7B,SAAS,iBAAiB,OAAc,UAAiD;AACrF,SAAO;AAAA,IACH;AAAA,IACA,cAAc,SAAS,YAAY;AAAA,IACnC,MAAM;AAAA,EACV;AACJ;AAEO,SAAS,qBAAqB,UAAiD;AAClF,SAAO,iBAAiB,2CAAwB,QAAQ;AAC5D;;;ADbA,IAA8B,QAA9B,MACuD;AAAA,EAK3C,YAAY,MAAc,YAA6B;AAJjE,wBAAiB;AACjB,wBAAQ;AACR,wBAAU;AAGR,SAAK,QAAQ;AACb,SAAK,eAAe,IAAI,aAAa;AACrC,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAIO,YAAY,WAAoC;AACrD,SAAK,aAAa,KAAK,UAAU,OAAO,SAAS;AAAA,EACnD;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAY;AACd,UAAM,eAAe,CAAC,GAAuB,MAC3C,EAAE,IAAI,cAAc,EAAE,GAAG;AAC3B,WAAO,KAAK,iBAAiB,IAAI,EAAE,KAAK,YAAY;AAAA,EACtD;AAAA,EAEO,cAAc,YAAgC;AACnD,SAAK,aAAa,8CAA2B,SAAU,MAAM;AAC3D,aAAO,WAAW,aAAa,KAAK,YAAY,IAAI;AAAA,IACtD,CAAC;AAAA,EACH;AAAA,EAEO,YAA0C,UAAa;AAC5D,SAAK,iBAAiB,IAAI,QAAQ;AAClC,SAAK,YAAY,qBAAqB,QAAQ,CAAC;AAAA,EACjD;AAAA,EAEO,aAAsB;AAC3B,WAAO,KAAK,iBAAiB,aAAa;AAAA,EAC5C;AAAA,EAEO,iBAAiB,aAAyC;AAC/D,WAAO,KAAK,iBAAiB,SAAS,WAAW;AAAA,EACnD;AACF;;;AExDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAElC,IAAK,gBAAL,kBAAKA,mBAAL;AACL,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AAFU,SAAAA;AAAA,GAAA;AAKL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,sCAAA;AACA,EAAAA,sCAAA;AAFU,SAAAA;AAAA,GAAA;AAcZ,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAuBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB,wBAAgC,GAChC;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAqBO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;AC9NO,IAAe,WAAf,MAAsD;AAAA,EAQ3D,YAAY,aAAqB,UAAwC;AALzE,wBAAQ;AACR,wBAAiB;AAGjB,+BAAc;AAEZ,SAAK,YAAY,CAAC;AAClB,SAAK,MAAM;AACX,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EACA,UAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,SAAS,OAAiB;AAClC,SAAK,UAAU,KAAK,KAAK;AACzB,SAAK,kBAAoB,YAAY,qBAAqB,KAAK,CAAC;AAAA,EAClE;AAAA,EAEO,cAAoC;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,cAAsB;AAC3B,UAAM,iBAAiC,QAAQ;AAAA,MAC7C;AAAA,MACA;AAAA,IACF;AACA,QAAI,SAAS;AACb,eAAW,gBAAgB,eAAe,QAAQ;AAChD,eAAS,OAAO,OAAO,KAAK,aAAa,SAAS,CAAC;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AACF;AA9BE;AAAA,EADC,IAAI;AAAA,GANe,SAOpB;;;ACnBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAqB,aAArB,MAAgC;AAAA,EAGrB,cAAc;AAFrB,wBAAQ;AAGJ,SAAK,kBAAkB,oBAAI,IAAiC;AAAA,EAChE;AAAA,EAEO,cAAc,UAA8B;AAC/C,UAAM,cAAc,SAAS,IAAI,CAAC;AAElC,QAAI;AACJ,eAAW,CAAC,KAAK,gBAAgB,IAAI,WAAW,IAAI,oBAAI,IAAoB,IAAI,KAAK,gBAAgB,IAAI,WAAW;AACpH,KAAC,SAAS,IAAI,SAAS,GAAG,IAAI,SAAS,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,IAAI,SAAS,KAAM,SAAS,IAAI,SAAS,GAAG,IAAK,CAAE;AAC1H,SAAK,gBAAgB,IAAI,aAAa,QAAQ;AAAA,EAClD;AAAA,EAEO,uBAAuB,aAA6B;AACvD,QAAI,sBAAsB;AAC1B,UAAM,gBAAgB,KAAK,gBAAgB,IAAI,WAAW;AAC1D,QAAI,CAAC,eAAe;AAChB,aAAO;AAAA,IACX;AACA,eAAW,SAAS,cAAc,OAAO,GAAG;AACxC,6BAAuB;AAAA,IAC3B;AACA,WAAO;AAAA,EACX;AAAA,EAEO,qBAA0C;AAC7C,UAAM,MAAM,oBAAI,IAAoB;AAEpC,UAAM,aAAa,MAAM,KAAK,KAAK,gBAAgB,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5F,eAAW,QAAQ,CAAC,aAAa;AAC7B,YAAM,QAAQ,KAAK,gBAAgB,IAAI,QAAQ;AAC/C,YAAM,eAAe,MAAM,KAAK,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAC/E,mBAAa,QAAQ,CAAC,QAAQ;AAC1B,YAAI,IAAI,KAAK,MAAM,IAAI,GAAG,CAAE;AAAA,MAChC,CAAC;AAAA,IACL,CAAC;AAED,WAAO;AAAA,EACX;AACJ;;;ACxCA,IAAqB,eAArB,cAA0C,MAAM;AAAA,EAE5C,YAAY,YAA6B,OAAe,KAAK;AACzD,UAAM,MAAM,UAAU;AAAA,EAC1B;AAAA,EAEA,aAAa,WAA8B;AAAA,EAE3C;AACJ;;;ACVA,IAAqB,gBAArB,MAAqB,eAAyC;AAAA,EAQpD,cAAc;AAPtB,wBAAQ;AACR,wBAAQ;AAON,SAAK,YAAY,oBAAI,IAA6B;AAClD,SAAK,iBAAiB,oBAAI,IAAsB;AAAA,EAClD;AAAA,EAPA,OAAc,iBAAgC;AAC5C,WAAO,IAAI,eAAc;AAAA,EAC3B;AAAA,EAOA,SAAS,aAA2C;AAClD,WAAO,KAAK,eAAe,IAAI,WAAW;AAAA,EAC5C;AAAA,EAEA,IAAI,QAAgB,WAA6B;AAC/C,SAAK,UAAU,IAAI,QAAQ,SAAS;AACpC,eAAW,OAAO,WAAW;AAC3B,WAAK,eAAe,GAAG;AAAA,IACzB;AAAA,EACF;AAAA,EACQ,eAAe,KAAe;AACpC,QAAI,KAAK,eAAe,IAAI,IAAI,YAAY,CAAC,GAAG;AAC9C,YAAM,IAAI,MAAM,2BAA2B,IAAI,YAAY,CAAC,EAAE;AAAA,IAChE;AACA,SAAK,eAAe,IAAI,IAAI,YAAY,GAAG,GAAG;AAAA,EAChD;AAAA,EAEA,eAAwB;AACtB,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA,EAEA,MAAkB;AAGhB,QAAI,iBAA6B,IAAI,MAAgB;AACrD,eAAW,CAAC,SAAS,MAAM,KAAK,KAAK,WAAW;AAC9C,uBAAiB,CAAC,GAAG,gBAAgB,GAAG,MAAM;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK,UAAU,IAAI,MAAM;AAAA,EAClC;AAAA,EAEA,IAAI,QAAyB;AAC3B,WAAO,KAAK,UAAU,IAAI,MAAM;AAAA,EAClC;AAAA,EAEA,IAAI,UAA0B;AAC5B,QAAI,CAAC,KAAK,UAAU,IAAI,SAAS,GAAG,GAAG;AACrC,WAAK,UAAU,IAAI,SAAS,KAAK,CAAC,CAAC;AAAA,IACrC;AACA,SAAK,UAAU,IAAI,SAAS,GAAG,GAAG,KAAK,QAAQ;AAC/C,SAAK,eAAe,QAAQ;AAAA,EAC9B;AACF;;;AC1DA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA,EACA,cAAsB;AAClB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;;;ACXJ,IAAqB,gBAArB,MAAqB,eAAsC;AAAA,EACjD,cAAc;AAAA,EAAC;AAAA,EAEvB,OAAO,iBAAgC;AACrC,WAAO,IAAI,eAAc;AAAA,EAC3B;AAAA,EAEA,MAAM,SAAuB;AAC3B,YAAQ,IAAI,OAAO;AAAA,EACrB;AAAA,EACA,OAAa;AACX,YAAQ,IAAI,gBAAgB;AAAA,EAC9B;AACF;;;ACFA,IAAqB,uBAArB,MAAqB,sBAAkD;AAAA,EAG7D,YAAY,SAAkC;AAFtD,wBAAU;AAGR,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,OAAa;AACX,SAAK,SAAS,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEA,OAAO,eACL,SAAuB,cAAc,eAAe,GAC3B;AACzB,WAAO;AAAA,MACL;AAAA,MACA,gBAAgB;AAAA,MAChB,6BAA6B;AAAA,MAC7B,2BAA2B;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,OAAO,wBAA8C;AACnD,WAAO,KAAK,eAAe,KAAK,eAAe,CAAC;AAAA,EAClD;AAAA,EAEA,OAAO,eACL,SACsB;AACtB,WAAO,IAAI,sBAAqB,OAAO;AAAA,EACzC;AAAA,EAEA,IAAI,SAAuB;AACzB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,SAAS,UAA0B;AACjC,QAAI,cAAc,GAAG,KAAK,SAAS,8BAA8B,KAAK,SAAS,iBAAiB,EAAE,GAAG,SAAS,GAAG,GAAG,KAAK,SAAS,cAAc;AAChJ,UAAM,eAAe,QAAQ,gBAAgB,QAAQ;AACrD,aAAQ,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC3C,YAAM,cAAc,aAAa,CAAC;AAClC,YAAM,WAAwB,QAAQ,YAAY,aAAa,QAAQ;AAEvE,cAAQ,SAAS,UAAU;AAAA,QACzB;AAEE,wBAAc,YAAY;AAAA,YACxB,KAAK,kBAAkB,UAAU,SAAS,WAAW,CAAC;AAAA,YACtD,KAAK,aAAa,SAAS,IAC1B,KAAK,SAAS,iBACd;AAAA,UACH;AACA;AAAA,QACF;AAEE,wBAAc,YAAY;AAAA,YACxB,KAAK,aAAa,UAAU,SAAS,WAAW,CAAC;AAAA,YACjD,KAAK,aAAa,SAAS,IAC1B,KAAK,SAAS,iBACd;AAAA,UACH;AACA;AAAA,MACJ;AAAA,IACF;AACA,QAAI,KAAK,SAAS,2BAA2B;AAC3C,oBAAc,YAAY,OAAO,KAAK,SAAS,cAAc;AAAA,IAC/D;AAEA,SAAK,OAAO,MAAM,WAAW;AAAA,EAC/B;AAAA,EAEQ,kBAAkB,UAAuB,OAAoB;AACnE,QAAI,CAAC,SAAS,OAAO,SAAS,UAAU;AACtC,aAAO;AAAA,IACT;AACA,QAAI,SAAiB,OAAO,KAAK;AACjC,QAAI,SAAS,kBAAkB;AAC7B,eAAS,OACN,OAAO,SAAS,eAAe,GAAG,EAClC,MAAM,GAAG,SAAS,aAAa;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,UAAuB,OAAoB;AAC9D,QAAI,SAAiB,IACnB;AAEF,KAAC,QAAQ,WAAW,IAAI,QAAQ,OAAO,KAAK,EAAE,MAAM,GAAG,IAAI;AAE3D,QAAI,SAAS,wBAAwB,GAAG;AACtC,UAAI,aAAa;AACf,sBAAc,YACX,MAAM,GAAG,SAAS,qBAAqB,EACvC,OAAO,SAAS,uBAAuB,GAAG;AAAA,MAC/C,OAAO;AACL,sBAAc,GAAG,OAAO,SAAS,uBAAuB,GAAG;AAAA,MAC7D;AACA,eAAS,OAAO,OAAO,KAAK,WAAW;AAAA,IACzC;AAEA,WAAO;AAAA,EACT;AACF;;;ANvGA,IAAM,uBAAuB;AAC7B,IAAM,aAAa;AACnB,IAAM,cAAc;AAcb,IAAM,YAAN,cAAwB,SAAS;AAAA,EAKtC,cAAc;AACZ,UAAM,sBAAsB,CAAC,CAA0B;AAHzD,mCAAkB;AAAA,EAIlB;AACF;AALE;AAAA,EADC,QAAQ;AAAA,GAFE,UAGX;AAOK,IAAM,YAAN,cAAwB,SAAS;AAAA,EACtC,YAAY,KAAa;AACvB,UAAM,KAAK,CAAC,CAA0B;AAIxC,mCAAkB;AAAA,EAHlB;AAIF;AADE;AAAA,EADC,aAAa,CAAC;AAAA,GALJ,UAMX;AAGK,IAAM,aAAN,cAAyB,SAAS;AAAA,EACvC,YAAY,KAAa;AACvB,UAAM,KAAK,CAAC,CAA0B;AAGxC,mCAAkB;AAAA,EAFlB;AAGF;AAEO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAInB,YAAY,SAAkC;AAHtD,wBAAU;AACV,wBAAU;AAGR,SAAK,WAAW;AAChB,SAAK,YAAY,IAAI,WAAW;AAAA,EAClC;AAAA,EAEA,OAAO,eACL,kBACA,mBACyB;AACzB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,sBAAsB,kBAA6C;AACxE,WAAO,KAAK;AAAA,MACV,KAAK;AAAA,QACH;AAAA,QACA,qBAAqB,sBAAsB;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,eAAe,SAAmD;AACvE,WAAO,IAAI,iBAAgB,OAAO;AAAA,EACpC;AAAA,EAEQ,iBAAiB,WAAsB;AAC7C,SAAK,YAAY,KAAK,SAAS,gBAAgB;AAAA,EACjD;AAAA,EAEQ,WAAW,WAAsB;AACvC,UAAM,SAAS,UAAU;AACzB,eAAW,SAAS,QAAQ;AAC1B,WAAK,SAAS,KAAK;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,gBAAgB,WAAsB;AAC5C,UAAM,cAAc,KAAK,UAAU,mBAAmB;AACtD,UAAM,eAAe,IAAI,aAAa,cAAc,eAAe,CAAC;AACpE,UAAM,oBAAoB,IAAI,UAAU;AACxC,gBAAY,QAAQ,CAAC,QAAQ,QAAQ;AACnC,YAAM,kBAAkB,IAAI,gBAAgB;AAC5C,sBAAgB,UAAU;AAC1B,sBAAgB,cAAc;AAC9B,wBAAkB,WAAW;AAC7B,mBAAa,YAAY,eAAqC;AAAA,IAChE,CAAC;AACD,SAAK,SAAS,YAAY;AAO1B,sBAAkB,WAAW,YAAY,OAAO;AAChD,SAAK,SAAS,kBAAkB,SAAS,iBAAiB;AAAA,EAC5D;AAAA,EAEU,sBAAsB,OAAoB;AAClD,UAAM,YAAuB,IAAI;AAAA,MAC/B,GAAG,MAAM,IAAI,GAAG,KAAK,SAAS,UAAU;AAAA,IAC1C;AACA,cAAU,UAAU,MAAM,WAAW,IACjC,qBACA;AACJ,SAAK,YAAY,SAAS;AAAA,EAC5B;AAAA,EAEU,gBAAgB,OAAoB;AAC5C,eAAW,YAAY,MAAM,WAAW;AACtC,WAAK,YAAY,QAAQ;AAAA,IAC3B;AAAA,EACF;AAAA,EAEU,yBAAyB,UAA8B;AAAA,EAAE;AAAA,EAEzD,mBAAmB,UAA8B;AACzD,SAAK,SAAS,kBAAkB,SAAS,QAAQ;AACjD,eAAW,SAAS,SAAS,YAAY,GAAG;AAC1C,WAAK,YAAY,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EAEU,wBAAwB,UAA8B;AAC9D,SAAK,UAAU,cAAc,QAAQ;AAAA,EACvC;AAAA,EAEU,qBAAqB,OAAc;AAC3C,UAAM,aAAyB,IAAI;AAAA,MACjC,GAAG,MAAM,IAAI,GAAG,KAAK,SAAS,WAAW;AAAA,IAC3C;AACA,eAAW,UAAU,KAAK,UAAU,uBAAuB,MAAM,IAAI,IAAI;AACzE,SAAK,YAAY,UAAU;AAAA,EAC7B;AAAA,EAEQ,SAAS,OAAc;AAC7B,SAAK,sBAAsB,KAAK;AAChC,SAAK,gBAAgB,KAAK;AAC1B,SAAK,qBAAqB,KAAK;AAAA,EACjC;AAAA,EAEQ,YAAY,UAA8B;AAChD,SAAK,yBAAyB,QAAQ;AACtC,SAAK,mBAAmB,QAAQ;AAChC,SAAK,wBAAwB,QAAQ;AAAA,EACvC;AAAA,EAEO,aAAa,WAA4B;AAC9C,SAAK,iBAAiB,SAAS;AAC/B,SAAK,WAAW,SAAS;AACzB,SAAK,gBAAgB,SAAS;AAC9B,SAAK,SAAS,kBAAkB,KAAK;AAAA,EACvC;AACF;;;AO/KA,IAA8B,YAA9B,MAAwC;AAAA,EAE1B,cAAc;AADxB,wBAAiB;AAEb,SAAK,UAAU,oBAAI,IAAmB;AAAA,EAC1C;AAAA,EAEU,cAAc,OAAyB;AAC7C,SAAK,QAAQ,IAAI,MAAM,MAAM,KAAK;AAClC,WAAO;AAAA,EACX;AAAA,EAEU,SAAS,MAAiC;AAChD,WAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,EAChC;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,MAAM,KAAK,KAAK,QAAQ,OAAO,CAAC;AAAA,EAC3C;AACJ;","names":["FieldDataType","valueProviderType"]}
|
|
1
|
+
{"version":3,"sources":["../lib/index.ts","../lib/taxReport/Block.ts","../lib/taxReport/interfaces/RegisterEventNotifier.ts","../lib/taxReport/Decorators.ts","../lib/taxReport/Register.ts","../lib/taxReport/ReportGenerator.ts","../lib/taxReport/TagCounter.ts","../lib/taxReport/CounterBlock.ts","../lib/taxReport/implementations/MemoryPersist.ts","../lib/taxReport/CounterRegister.ts","../lib/taxReport/implementations/ConsoleOutput.ts","../lib/taxReport/implementations/TaxRegisterGenerator.ts","../lib/taxReport/TaxReport.ts"],"sourcesContent":["import \"reflect-metadata\"\nimport Block from \"./taxReport/Block\";\nimport * as Decorators from \"./taxReport/Decorators\";\nimport { Register } from \"./taxReport/Register\";\nimport * as Generation from \"./taxReport/ReportGenerator\";\nimport TaxReport from \"./taxReport/TaxReport\";\nimport ConsoleOutput from \"./taxReport/implementations/ConsoleOutput\";\nimport MemoryPersist from \"./taxReport/implementations/MemoryPersist\";\nimport TaxRegisterGenerator from \"./taxReport/implementations/TaxRegisterGenerator\";\nimport { OutputWriter } from \"./taxReport/interfaces/OutputWriter\";\nimport RegisterEventNotifier from \"./taxReport/interfaces/RegisterEventNotifier\";\nimport RegisterGenerator from \"./taxReport/interfaces/RegisterGenerator\";\nimport RegisterPersist from \"./taxReport/interfaces/RegisterPersist\";\nimport RegisterSubscriber from \"./taxReport/interfaces/RegisterSubscriber\";\n\nexport {\n Block,\n Decorators,\n Register,\n Generation,\n TaxReport,\n ConsoleOutput,\n MemoryPersist,\n TaxRegisterGenerator,\n OutputWriter,\n RegisterEventNotifier,\n RegisterGenerator,\n RegisterPersist,\n RegisterSubscriber,\n};\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import Block from \"./Block\";\n\nexport default abstract class TaxReport {\n private readonly _blocks: Map<string, Block>;\n protected constructor() {\n this._blocks = new Map<string, Block>();\n }\n\n protected registerBlock(block: Block): TaxReport {\n this._blocks.set(block.name, block);\n return this\n }\n\n protected getBlock(name: string): Block | undefined {\n return this._blocks.get(name)\n }\n\n get Blocks() {\n return Array.from(this._blocks.values())\n }\n}\n"],"mappings":"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","names":["FieldDataType","valueProviderType"]}
|
|
@@ -128,10 +128,10 @@ var CounterRegister = class {
|
|
|
128
128
|
return this.reg;
|
|
129
129
|
}
|
|
130
130
|
getChildren() {
|
|
131
|
-
|
|
131
|
+
return [];
|
|
132
132
|
}
|
|
133
133
|
getKeyValue() {
|
|
134
|
-
|
|
134
|
+
return `${this.reg}${this.reg_blc}`;
|
|
135
135
|
}
|
|
136
136
|
};
|
|
137
137
|
__decorateClass([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/Decorators.ts"],"sourcesContent":["import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n
|
|
1
|
+
{"version":3,"sources":["../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/Decorators.ts"],"sourcesContent":["import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,8BAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAqBzC,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA+DO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;ADtOA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,WAAO,CAAC;AAAA,EACZ;AAAA,EACA,cAAsB;AAClB,WAAO,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO;AAAA,EACrC;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;","names":[]}
|
|
@@ -105,10 +105,10 @@ var CounterRegister = class {
|
|
|
105
105
|
return this.reg;
|
|
106
106
|
}
|
|
107
107
|
getChildren() {
|
|
108
|
-
|
|
108
|
+
return [];
|
|
109
109
|
}
|
|
110
110
|
getKeyValue() {
|
|
111
|
-
|
|
111
|
+
return `${this.reg}${this.reg_blc}`;
|
|
112
112
|
}
|
|
113
113
|
};
|
|
114
114
|
__decorateClass([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../lib/taxReport/Decorators.ts","../../lib/taxReport/CounterRegister.ts"],"sourcesContent":["import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n
|
|
1
|
+
{"version":3,"sources":["../../lib/taxReport/Decorators.ts","../../lib/taxReport/CounterRegister.ts"],"sourcesContent":["import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAqBzC,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA+DO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;ACtOA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,WAAO,CAAC;AAAA,EACZ;AAAA,EACA,cAAsB;AAClB,WAAO,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO;AAAA,EACrC;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;","names":[]}
|
|
@@ -315,10 +315,10 @@ var CounterRegister = class {
|
|
|
315
315
|
return this.reg;
|
|
316
316
|
}
|
|
317
317
|
getChildren() {
|
|
318
|
-
|
|
318
|
+
return [];
|
|
319
319
|
}
|
|
320
320
|
getKeyValue() {
|
|
321
|
-
|
|
321
|
+
return `${this.reg}${this.reg_blc}`;
|
|
322
322
|
}
|
|
323
323
|
};
|
|
324
324
|
__decorateClass([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../lib/taxReport/ReportGenerator.ts","../../lib/taxReport/Decorators.ts","../../lib/taxReport/interfaces/RegisterEventNotifier.ts","../../lib/taxReport/Register.ts","../../lib/taxReport/TagCounter.ts","../../lib/taxReport/Block.ts","../../lib/taxReport/CounterBlock.ts","../../lib/taxReport/implementations/MemoryPersist.ts","../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/implementations/ConsoleOutput.ts","../../lib/taxReport/implementations/TaxRegisterGenerator.ts"],"sourcesContent":["import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../lib/taxReport/ReportGenerator.ts","../../lib/taxReport/Decorators.ts","../../lib/taxReport/interfaces/RegisterEventNotifier.ts","../../lib/taxReport/Register.ts","../../lib/taxReport/TagCounter.ts","../../lib/taxReport/Block.ts","../../lib/taxReport/CounterBlock.ts","../../lib/taxReport/implementations/MemoryPersist.ts","../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/implementations/ConsoleOutput.ts","../../lib/taxReport/implementations/TaxRegisterGenerator.ts"],"sourcesContent":["import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n","import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,8BAAO;AACA,IAAM,yBAAyB,OAAO,KAAK;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAqBzC,SAAS,aACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACA,eACA,eACA,mBAA4B,OAC5B,wBAAgC,GACnB;AACb,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAqBO,SAAS,QACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,sBACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN,YAAY,SAAS;AAAA,MACrB;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AA+DO,SAAS,aACd,WAAoB,OACpB,mBAA4B,OAC5B,gBAAwB,2BACxB;AACA,SAAO,SAAU,QAAa,aAAkB,OAAa;AAC3D,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ,iBAA2B;AAAA,QACnC;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAWA,SAAS,MAAM;AACb,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,EACX;AACF;AAEA,SAAS,mBACP,WACA,eACA;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAmBO,SAAS,MAAM;AACpB,SAAO,SAAU,QAAa,aAAkB,OAAmB;AACjE,QAAI;AACJ,qBAAiB,QAAQ,YAAY,wBAAwB,MAAM;AACnE,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,IAAI;AAAA,IACvB;AACA,mBAAe,OAAO;AAAA,MACpB;AAAA,QACE;AAAA,QACA,QAAQ,iBAA2B;AAAA,MACrC;AAAA,IACF;AACA,YAAQ,eAAe,wBAAwB,gBAAgB,MAAM;AAAA,EACvE;AACF;;;AC7NA,SAAS,iBAAiB,OAAc,UAAiD;AACrF,SAAO;AAAA,IACH;AAAA,IACA,cAAc,SAAS,YAAY;AAAA,IACnC,MAAM;AAAA,EACV;AACJ;AAEO,SAAS,qBAAqB,UAAiD;AAClF,SAAO,iBAAiB,2CAAwB,QAAQ;AAC5D;;;ACXO,IAAe,WAAf,MAAsD;AAAA,EAQ3D,YAAY,aAAqB,UAAwC;AALzE,wBAAQ;AACR,wBAAiB;AAGjB,+BAAc;AAEZ,SAAK,YAAY,CAAC;AAClB,SAAK,MAAM;AACX,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EACA,UAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,SAAS,OAAiB;AAClC,SAAK,UAAU,KAAK,KAAK;AACzB,SAAK,kBAAoB,YAAY,qBAAqB,KAAK,CAAC;AAAA,EAClE;AAAA,EAEO,cAAoC;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,cAAsB;AAC3B,UAAM,iBAAiC,QAAQ;AAAA,MAC7C;AAAA,MACA;AAAA,IACF;AACA,QAAI,SAAS;AACb,eAAW,gBAAgB,eAAe,QAAQ;AAChD,eAAS,OAAO,OAAO,KAAK,aAAa,SAAS,CAAC;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AACF;AA9BE;AAAA,EADC,IAAI;AAAA,GANe,SAOpB;;;ACjBF,IAAqB,aAArB,MAAgC;AAAA,EAGrB,cAAc;AAFrB,wBAAQ;AAGJ,SAAK,kBAAkB,oBAAI,IAAiC;AAAA,EAChE;AAAA,EAEO,cAAc,UAA8B;AAC/C,UAAM,cAAc,SAAS,IAAI,CAAC;AAElC,QAAI;AACJ,eAAW,CAAC,KAAK,gBAAgB,IAAI,WAAW,IAAI,oBAAI,IAAoB,IAAI,KAAK,gBAAgB,IAAI,WAAW;AACpH,KAAC,SAAS,IAAI,SAAS,GAAG,IAAI,SAAS,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,IAAI,SAAS,KAAM,SAAS,IAAI,SAAS,GAAG,IAAK,CAAE;AAC1H,SAAK,gBAAgB,IAAI,aAAa,QAAQ;AAAA,EAClD;AAAA,EAEO,uBAAuB,aAA6B;AACvD,QAAI,sBAAsB;AAC1B,UAAM,gBAAgB,KAAK,gBAAgB,IAAI,WAAW;AAC1D,QAAI,CAAC,eAAe;AAChB,aAAO;AAAA,IACX;AACA,eAAW,SAAS,cAAc,OAAO,GAAG;AACxC,6BAAuB;AAAA,IAC3B;AACA,WAAO;AAAA,EACX;AAAA,EAEO,qBAA0C;AAC7C,UAAM,MAAM,oBAAI,IAAoB;AAEpC,UAAM,aAAa,MAAM,KAAK,KAAK,gBAAgB,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5F,eAAW,QAAQ,CAAC,aAAa;AAC7B,YAAM,QAAQ,KAAK,gBAAgB,IAAI,QAAQ;AAC/C,YAAM,eAAe,MAAM,KAAK,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAC/E,mBAAa,QAAQ,CAAC,QAAQ;AAC1B,YAAI,IAAI,KAAK,MAAM,IAAI,GAAG,CAAE;AAAA,MAChC,CAAC;AAAA,IACL,CAAC;AAED,WAAO;AAAA,EACX;AACJ;;;AC5CA,yBAA6B;AAU7B,IAA8B,QAA9B,MACuD;AAAA,EAK3C,YAAY,MAAc,YAA6B;AAJjE,wBAAiB;AACjB,wBAAQ;AACR,wBAAU;AAGR,SAAK,QAAQ;AACb,SAAK,eAAe,IAAI,gCAAa;AACrC,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAIO,YAAY,WAAoC;AACrD,SAAK,aAAa,KAAK,UAAU,OAAO,SAAS;AAAA,EACnD;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAY;AACd,UAAM,eAAe,CAAC,GAAuB,MAC3C,EAAE,IAAI,cAAc,EAAE,GAAG;AAC3B,WAAO,KAAK,iBAAiB,IAAI,EAAE,KAAK,YAAY;AAAA,EACtD;AAAA,EAEO,cAAc,YAAgC;AACnD,SAAK,aAAa,8CAA2B,SAAU,MAAM;AAC3D,aAAO,WAAW,aAAa,KAAK,YAAY,IAAI;AAAA,IACtD,CAAC;AAAA,EACH;AAAA,EAEO,YAA0C,UAAa;AAC5D,SAAK,iBAAiB,IAAI,QAAQ;AAClC,SAAK,YAAY,qBAAqB,QAAQ,CAAC;AAAA,EACjD;AAAA,EAEO,aAAsB;AAC3B,WAAO,KAAK,iBAAiB,aAAa;AAAA,EAC5C;AAAA,EAEO,iBAAiB,aAAyC;AAC/D,WAAO,KAAK,iBAAiB,SAAS,WAAW;AAAA,EACnD;AACF;;;ACpDA,IAAqB,eAArB,cAA0C,MAAM;AAAA,EAE5C,YAAY,YAA6B,OAAe,KAAK;AACzD,UAAM,MAAM,UAAU;AAAA,EAC1B;AAAA,EAEA,aAAa,WAA8B;AAAA,EAE3C;AACJ;;;ACVA,IAAqB,gBAArB,MAAqB,eAAyC;AAAA,EAQpD,cAAc;AAPtB,wBAAQ;AACR,wBAAQ;AAON,SAAK,YAAY,oBAAI,IAA6B;AAClD,SAAK,iBAAiB,oBAAI,IAAsB;AAAA,EAClD;AAAA,EAPA,OAAc,iBAAgC;AAC5C,WAAO,IAAI,eAAc;AAAA,EAC3B;AAAA,EAOA,SAAS,aAA2C;AAClD,WAAO,KAAK,eAAe,IAAI,WAAW;AAAA,EAC5C;AAAA,EAEA,IAAI,QAAgB,WAA6B;AAC/C,SAAK,UAAU,IAAI,QAAQ,SAAS;AACpC,eAAW,OAAO,WAAW;AAC3B,WAAK,eAAe,GAAG;AAAA,IACzB;AAAA,EACF;AAAA,EACQ,eAAe,KAAe;AACpC,QAAI,KAAK,eAAe,IAAI,IAAI,YAAY,CAAC,GAAG;AAC9C,YAAM,IAAI,MAAM,2BAA2B,IAAI,YAAY,CAAC,EAAE;AAAA,IAChE;AACA,SAAK,eAAe,IAAI,IAAI,YAAY,GAAG,GAAG;AAAA,EAChD;AAAA,EAEA,eAAwB;AACtB,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA,EAEA,MAAkB;AAGhB,QAAI,iBAA6B,IAAI,MAAgB;AACrD,eAAW,CAAC,SAAS,MAAM,KAAK,KAAK,WAAW;AAC9C,uBAAiB,CAAC,GAAG,gBAAgB,GAAG,MAAM;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK,UAAU,IAAI,MAAM;AAAA,EAClC;AAAA,EAEA,IAAI,QAAyB;AAC3B,WAAO,KAAK,UAAU,IAAI,MAAM;AAAA,EAClC;AAAA,EAEA,IAAI,UAA0B;AAC5B,QAAI,CAAC,KAAK,UAAU,IAAI,SAAS,GAAG,GAAG;AACrC,WAAK,UAAU,IAAI,SAAS,KAAK,CAAC,CAAC;AAAA,IACrC;AACA,SAAK,UAAU,IAAI,SAAS,GAAG,GAAG,KAAK,QAAQ;AAC/C,SAAK,eAAe,QAAQ;AAAA,EAC9B;AACF;;;AC1DA,IAAqB,kBAArB,MAAmE;AAAA,EAW/D,YAAY,cAAsB,GAAG,WAAmB,QAAQ;AAThE;AAIA,mCAAkB;AAGlB,uCAAsB;AAGlB,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACvB;AAAA,EACA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,cAAoC;AAChC,WAAO,CAAC;AAAA,EACZ;AAAA,EACA,cAAsB;AAClB,WAAO,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO;AAAA,EACrC;AACJ;AAlBI;AAAA,EAFC,IAAI;AAAA,EACJ,aAAa;AAAA,GALG,gBAMjB;AAGA;AAAA,EADC,QAAQ;AAAA,GARQ,gBASjB;;;ACXJ,IAAqB,gBAArB,MAAqB,eAAsC;AAAA,EACjD,cAAc;AAAA,EAAC;AAAA,EAEvB,OAAO,iBAAgC;AACrC,WAAO,IAAI,eAAc;AAAA,EAC3B;AAAA,EAEA,MAAM,SAAuB;AAC3B,YAAQ,IAAI,OAAO;AAAA,EACrB;AAAA,EACA,OAAa;AACX,YAAQ,IAAI,gBAAgB;AAAA,EAC9B;AACF;;;ACFA,IAAqB,uBAArB,MAAqB,sBAAkD;AAAA,EAG7D,YAAY,SAAkC;AAFtD,wBAAU;AAGR,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,OAAa;AACX,SAAK,SAAS,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEA,OAAO,eACL,SAAuB,cAAc,eAAe,GAC3B;AACzB,WAAO;AAAA,MACL;AAAA,MACA,gBAAgB;AAAA,MAChB,6BAA6B;AAAA,MAC7B,2BAA2B;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,OAAO,wBAA8C;AACnD,WAAO,KAAK,eAAe,KAAK,eAAe,CAAC;AAAA,EAClD;AAAA,EAEA,OAAO,eACL,SACsB;AACtB,WAAO,IAAI,sBAAqB,OAAO;AAAA,EACzC;AAAA,EAEA,IAAI,SAAuB;AACzB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,SAAS,UAA0B;AACjC,QAAI,cAAc,GAAG,KAAK,SAAS,8BAA8B,KAAK,SAAS,iBAAiB,EAAE,GAAG,SAAS,GAAG,GAAG,KAAK,SAAS,cAAc;AAChJ,UAAM,eAAe,QAAQ,gBAAgB,QAAQ;AACrD,aAAQ,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC3C,YAAM,cAAc,aAAa,CAAC;AAClC,YAAM,WAAwB,QAAQ,YAAY,aAAa,QAAQ;AAEvE,cAAQ,SAAS,UAAU;AAAA,QACzB;AAEE,wBAAc,YAAY;AAAA,YACxB,KAAK,kBAAkB,UAAU,SAAS,WAAW,CAAC;AAAA,YACtD,KAAK,aAAa,SAAS,IAC1B,KAAK,SAAS,iBACd;AAAA,UACH;AACA;AAAA,QACF;AAEE,wBAAc,YAAY;AAAA,YACxB,KAAK,aAAa,UAAU,SAAS,WAAW,CAAC;AAAA,YACjD,KAAK,aAAa,SAAS,IAC1B,KAAK,SAAS,iBACd;AAAA,UACH;AACA;AAAA,MACJ;AAAA,IACF;AACA,QAAI,KAAK,SAAS,2BAA2B;AAC3C,oBAAc,YAAY,OAAO,KAAK,SAAS,cAAc;AAAA,IAC/D;AAEA,SAAK,OAAO,MAAM,WAAW;AAAA,EAC/B;AAAA,EAEQ,kBAAkB,UAAuB,OAAoB;AACnE,QAAI,CAAC,SAAS,OAAO,SAAS,UAAU;AACtC,aAAO;AAAA,IACT;AACA,QAAI,SAAiB,OAAO,KAAK;AACjC,QAAI,SAAS,kBAAkB;AAC7B,eAAS,OACN,OAAO,SAAS,eAAe,GAAG,EAClC,MAAM,GAAG,SAAS,aAAa;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,UAAuB,OAAoB;AAC9D,QAAI,SAAiB,IACnB;AAEF,KAAC,QAAQ,WAAW,IAAI,QAAQ,OAAO,KAAK,EAAE,MAAM,GAAG,IAAI;AAE3D,QAAI,SAAS,wBAAwB,GAAG;AACtC,UAAI,aAAa;AACf,sBAAc,YACX,MAAM,GAAG,SAAS,qBAAqB,EACvC,OAAO,SAAS,uBAAuB,GAAG;AAAA,MAC/C,OAAO;AACL,sBAAc,GAAG,OAAO,SAAS,uBAAuB,GAAG;AAAA,MAC7D;AACA,eAAS,OAAO,OAAO,KAAK,WAAW;AAAA,IACzC;AAEA,WAAO;AAAA,EACT;AACF;;;AVvGA,IAAM,uBAAuB;AAC7B,IAAM,aAAa;AACnB,IAAM,cAAc;AAcb,IAAM,YAAN,cAAwB,SAAS;AAAA,EAKtC,cAAc;AACZ,UAAM,sBAAsB,CAAC,CAA0B;AAHzD,mCAAkB;AAAA,EAIlB;AACF;AALE;AAAA,EADC,QAAQ;AAAA,GAFE,UAGX;AAOK,IAAM,YAAN,cAAwB,SAAS;AAAA,EACtC,YAAY,KAAa;AACvB,UAAM,KAAK,CAAC,CAA0B;AAIxC,mCAAkB;AAAA,EAHlB;AAIF;AADE;AAAA,EADC,aAAa,CAAC;AAAA,GALJ,UAMX;AAGK,IAAM,aAAN,cAAyB,SAAS;AAAA,EACvC,YAAY,KAAa;AACvB,UAAM,KAAK,CAAC,CAA0B;AAGxC,mCAAkB;AAAA,EAFlB;AAGF;AAEO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAInB,YAAY,SAAkC;AAHtD,wBAAU;AACV,wBAAU;AAGR,SAAK,WAAW;AAChB,SAAK,YAAY,IAAI,WAAW;AAAA,EAClC;AAAA,EAEA,OAAO,eACL,kBACA,mBACyB;AACzB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,sBAAsB,kBAA6C;AACxE,WAAO,KAAK;AAAA,MACV,KAAK;AAAA,QACH;AAAA,QACA,qBAAqB,sBAAsB;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,eAAe,SAAmD;AACvE,WAAO,IAAI,iBAAgB,OAAO;AAAA,EACpC;AAAA,EAEQ,iBAAiB,WAAsB;AAC7C,SAAK,YAAY,KAAK,SAAS,gBAAgB;AAAA,EACjD;AAAA,EAEQ,WAAW,WAAsB;AACvC,UAAM,SAAS,UAAU;AACzB,eAAW,SAAS,QAAQ;AAC1B,WAAK,SAAS,KAAK;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,gBAAgB,WAAsB;AAC5C,UAAM,cAAc,KAAK,UAAU,mBAAmB;AACtD,UAAM,eAAe,IAAI,aAAa,cAAc,eAAe,CAAC;AACpE,UAAM,oBAAoB,IAAI,UAAU;AACxC,gBAAY,QAAQ,CAAC,QAAQ,QAAQ;AACnC,YAAM,kBAAkB,IAAI,gBAAgB;AAC5C,sBAAgB,UAAU;AAC1B,sBAAgB,cAAc;AAC9B,wBAAkB,WAAW;AAC7B,mBAAa,YAAY,eAAqC;AAAA,IAChE,CAAC;AACD,SAAK,SAAS,YAAY;AAO1B,sBAAkB,WAAW,YAAY,OAAO;AAChD,SAAK,SAAS,kBAAkB,SAAS,iBAAiB;AAAA,EAC5D;AAAA,EAEU,sBAAsB,OAAoB;AAClD,UAAM,YAAuB,IAAI;AAAA,MAC/B,GAAG,MAAM,IAAI,GAAG,KAAK,SAAS,UAAU;AAAA,IAC1C;AACA,cAAU,UAAU,MAAM,WAAW,IACjC,qBACA;AACJ,SAAK,YAAY,SAAS;AAAA,EAC5B;AAAA,EAEU,gBAAgB,OAAoB;AAC5C,eAAW,YAAY,MAAM,WAAW;AACtC,WAAK,YAAY,QAAQ;AAAA,IAC3B;AAAA,EACF;AAAA,EAEU,yBAAyB,UAA8B;AAAA,EAAE;AAAA,EAEzD,mBAAmB,UAA8B;AACzD,SAAK,SAAS,kBAAkB,SAAS,QAAQ;AACjD,eAAW,SAAS,SAAS,YAAY,GAAG;AAC1C,WAAK,YAAY,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EAEU,wBAAwB,UAA8B;AAC9D,SAAK,UAAU,cAAc,QAAQ;AAAA,EACvC;AAAA,EAEU,qBAAqB,OAAc;AAC3C,UAAM,aAAyB,IAAI;AAAA,MACjC,GAAG,MAAM,IAAI,GAAG,KAAK,SAAS,WAAW;AAAA,IAC3C;AACA,eAAW,UAAU,KAAK,UAAU,uBAAuB,MAAM,IAAI,IAAI;AACzE,SAAK,YAAY,UAAU;AAAA,EAC7B;AAAA,EAEQ,SAAS,OAAc;AAC7B,SAAK,sBAAsB,KAAK;AAChC,SAAK,gBAAgB,KAAK;AAC1B,SAAK,qBAAqB,KAAK;AAAA,EACjC;AAAA,EAEQ,YAAY,UAA8B;AAChD,SAAK,yBAAyB,QAAQ;AACtC,SAAK,mBAAmB,QAAQ;AAChC,SAAK,wBAAwB,QAAQ;AAAA,EACvC;AAAA,EAEO,aAAa,WAA4B;AAC9C,SAAK,iBAAiB,SAAS;AAC/B,SAAK,WAAW,SAAS;AACzB,SAAK,gBAAgB,SAAS;AAC9B,SAAK,SAAS,kBAAkB,KAAK;AAAA,EACvC;AACF;","names":[]}
|
|
@@ -289,10 +289,10 @@ var CounterRegister = class {
|
|
|
289
289
|
return this.reg;
|
|
290
290
|
}
|
|
291
291
|
getChildren() {
|
|
292
|
-
|
|
292
|
+
return [];
|
|
293
293
|
}
|
|
294
294
|
getKeyValue() {
|
|
295
|
-
|
|
295
|
+
return `${this.reg}${this.reg_blc}`;
|
|
296
296
|
}
|
|
297
297
|
};
|
|
298
298
|
__decorateClass([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../lib/taxReport/Decorators.ts","../../lib/taxReport/interfaces/RegisterEventNotifier.ts","../../lib/taxReport/Register.ts","../../lib/taxReport/TagCounter.ts","../../lib/taxReport/Block.ts","../../lib/taxReport/CounterBlock.ts","../../lib/taxReport/implementations/MemoryPersist.ts","../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/implementations/ConsoleOutput.ts","../../lib/taxReport/implementations/TaxRegisterGenerator.ts","../../lib/taxReport/ReportGenerator.ts"],"sourcesContent":["import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n throw new Error(\"Method not implemented.\");\n }\n getKeyValue(): string {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../lib/taxReport/Decorators.ts","../../lib/taxReport/interfaces/RegisterEventNotifier.ts","../../lib/taxReport/Register.ts","../../lib/taxReport/TagCounter.ts","../../lib/taxReport/Block.ts","../../lib/taxReport/CounterBlock.ts","../../lib/taxReport/implementations/MemoryPersist.ts","../../lib/taxReport/CounterRegister.ts","../../lib/taxReport/implementations/ConsoleOutput.ts","../../lib/taxReport/implementations/TaxRegisterGenerator.ts","../../lib/taxReport/ReportGenerator.ts"],"sourcesContent":["import \"reflect-metadata\"\nexport const keyCompositionMetadata = Symbol(\"key\");\n\nexport const maximumNumericLength = 19;\nexport const defaultAlphanumericLength = 255;\n\nexport enum FieldDataType {\n alphanumeric,\n numeric,\n}\n\nexport enum valueProviderType {\n property,\n method,\n}\n\nexport interface FieldFormat {\n required: boolean;\n dataType: FieldDataType;\n maximumLength: number;\n maximumDecimalsLength: number;\n fillEntireLength: boolean;\n valueProvider: valueProviderType;\n}\n\nfunction numericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.numeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\nfunction alphanumericField(\n required: boolean,\n maximumLength: number,\n valueProvider: valueProviderType,\n fillEntireLength: boolean = false,\n maximumDecimalsLength: number = 0,\n): FieldFormat {\n return {\n required: required,\n dataType: FieldDataType.alphanumeric,\n maximumLength: maximumLength,\n maximumDecimalsLength: maximumDecimalsLength,\n fillEntireLength: fillEntireLength,\n valueProvider: valueProvider,\n } as FieldFormat;\n}\n\n// const Numeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Numeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey.toString(),\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\n// const Decimal = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = maximumNumericLength,\n// maximumDecimalsLength: number = 2,\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// numericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// maximumDecimalsLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Decimal(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = maximumNumericLength,\n maximumDecimalsLength: number = 2,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n numericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n maximumDecimalsLength,\n ),\n target,\n );\n };\n}\n\n// const Alphanumeric = (\n// required: boolean = false,\n// fillEntireLength: boolean = false,\n// maximumLength: number = defaultAlphanumericLength\n// ) => {\n// return function (target: any, propertyKey: string, other?: any) {\n// Reflect.defineMetadata(\n// propertyKey,\n// alphanumericField(\n// required,\n// maximumLength,\n// other ? valueProviderType.method : valueProviderType.property,\n// fillEntireLength,\n// ),\n// target,\n// );\n// };\n// }\n\nexport function Alphanumeric(\n required: boolean = false,\n fillEntireLength: boolean = false,\n maximumLength: number = defaultAlphanumericLength,\n) {\n return function (target: any, propertyKey: any, other?: any) {\n Reflect.defineMetadata(\n propertyKey,\n alphanumericField(\n required,\n maximumLength,\n other ? valueProviderType.method : valueProviderType.property,\n fillEntireLength,\n ),\n target,\n );\n };\n}\n\nexport interface KeyComposition {\n fields: KeyFieldDefinition[];\n}\n\nexport interface KeyFieldDefinition {\n fieldName: string;\n valueProvider: valueProviderType;\n}\n\nfunction key() {\n return {\n fields: [],\n } as KeyComposition;\n}\n\nfunction keyFieldDefinition(\n fieldName: string,\n valueProvider: valueProviderType,\n) {\n return {\n fieldName: fieldName,\n valueProvider: valueProvider,\n } as KeyFieldDefinition;\n}\n\n// const Key = () => {\n// return function (target: any, propertyKey: string, other?: any): void {\n// let keyComposition: KeyComposition;\n// keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n// if (!keyComposition) {\n// keyComposition = key();\n// }\n// keyComposition.fields.push(\n// keyFieldDefinition(\n// propertyKey,\n// other ? valueProviderType.method : valueProviderType.property,\n// ),\n// );\n// Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n// };\n// }\n\nexport function Key() {\n return function (target: any, propertyKey: any, other?: any): void {\n let keyComposition: KeyComposition;\n keyComposition = Reflect.getMetadata(keyCompositionMetadata, target);\n if (!keyComposition) {\n keyComposition = key();\n }\n keyComposition.fields.push(\n keyFieldDefinition(\n propertyKey,\n other ? valueProviderType.method : valueProviderType.property,\n ),\n );\n Reflect.defineMetadata(keyCompositionMetadata, keyComposition, target);\n };\n}\n\n// export {Numeric, Decimal, Alphanumeric, Key}","import { Register, RegisterDefinition } from \"../Register\";\r\nimport RegisterSubscriber from \"./RegisterSubscriber\";\r\n\r\nexport enum Event {\r\n REGISTER_CREATED = \"register_created\",\r\n}\r\n\r\nexport interface RegisterEventData {\r\n event: Event\r\n dataTypeName: string\r\n data: RegisterDefinition\r\n}\r\n\r\nfunction newRegisterEvent(event: Event, register: RegisterDefinition): RegisterEventData {\r\n return {\r\n event: event,\r\n dataTypeName: register.constructor.name,\r\n data: register\r\n }\r\n}\r\n\r\nexport function newRegisterEventData(register: RegisterDefinition): RegisterEventData {\r\n return newRegisterEvent(Event.REGISTER_CREATED, register)\r\n}\r\n\r\n\r\nexport default interface RegisterEventNotifier {\r\n addSubscriber(subscriber: RegisterSubscriber): void\r\n notifyEvent(eventData: RegisterEventData): void\r\n}\r\n","import { Key, KeyComposition, keyCompositionMetadata } from \"./Decorators\";\nimport RegisterEventNotifier, {\n newRegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport interface RegisterDefinition {\n [reg: string]: any;\n tagName(): string\n getChildren(): RegisterDefinition[]\n getKeyValue(): string\n}\n\nexport abstract class Register implements RegisterDefinition {\n [key: string]: any;\n\n private _registerNotifier: RegisterEventNotifier | null;\n private readonly _children: RegisterDefinition[];\n\n @Key()\n reg: string = \"\";\n constructor(registerTag: string, notifier: RegisterEventNotifier | null) {\n this._children = [];\n this.reg = registerTag;\n this._registerNotifier = notifier;\n }\n tagName(): string {\n return this.reg;\n }\n\n protected addChild(child: Register) {\n this._children.push(child);\n this._registerNotifier!!.notifyEvent(newRegisterEventData(child));\n }\n\n public getChildren(): RegisterDefinition[] {\n return this._children;\n }\n\n public getKeyValue(): string {\n const keyComposition: KeyComposition = Reflect.getMetadata(\n keyCompositionMetadata,\n this,\n );\n let result = \"\";\n for (const keyFieldData of keyComposition.fields) {\n result = result.concat(this[keyFieldData.fieldName]);\n }\n return result;\n }\n}\n","import { RegisterDefinition } from \"./Register\";\n\nexport default class TagCounter {\n private _blocksCounters: Map<string, Map<string, number>>;\n\n public constructor() {\n this._blocksCounters = new Map<string, Map<string, number>>();\n }\n\n public countRegister(register: RegisterDefinition) {\n const blockLetter = register.reg[0];\n\n let counters: Map<string, number>;\n counters = !this._blocksCounters.has(blockLetter) ? new Map<string, number>() : this._blocksCounters.get(blockLetter)!\n !counters.has(register.reg) ? counters.set(register.reg, 1) : counters.set(register.reg, (counters.get(register.reg)! + 1))\n this._blocksCounters.set(blockLetter, counters);\n }\n\n public getBlockRegistersTotal(blockLetter: string): number {\n let blockRegistersTotal = 0;\n const blocksCounter = this._blocksCounters.get(blockLetter);\n if (!blocksCounter) {\n return blockRegistersTotal;\n }\n for (const value of blocksCounter.values()) {\n blockRegistersTotal += value\n }\n return blockRegistersTotal\n }\n\n public getAllTagsCounters(): Map<string, number> {\n const all = new Map<string, number>();\n\n const blocksKeys = Array.from(this._blocksCounters.keys()).sort((a, b) => a.localeCompare(b));\n blocksKeys.forEach((blockKey) => {\n const block = this._blocksCounters.get(blockKey)!\n const registerKeys = Array.from(block.keys()).sort((a, b) => a.localeCompare(b));\n registerKeys.forEach((tag) => {\n all.set(tag, block.get(tag)!)\n })\n })\n\n return all;\n }\n}\n","import { EventEmitter } from \"node:events\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport RegisterSubscriber from \"./interfaces/RegisterSubscriber\";\nimport RegisterEventNotifier, {\n Event,\n newRegisterEventData,\n RegisterEventData,\n} from \"./interfaces/RegisterEventNotifier\";\n\nexport default abstract class Block\n implements RegisterEventNotifier, RegisterSubscriber {\n private readonly _name: string;\n private eventEmitter: EventEmitter;\n protected registersPersist: RegisterPersist;\n\n protected constructor(name: string, regPersist: RegisterPersist) {\n this._name = name;\n this.eventEmitter = new EventEmitter();\n this.registersPersist = regPersist;\n }\n\n abstract eventHandler(eventData: RegisterEventData): void;\n\n public notifyEvent(eventData: RegisterEventData): void {\n this.eventEmitter.emit(eventData.event, eventData);\n }\n\n get name() {\n return this._name;\n }\n\n get registers() {\n const sortApproach = (a: RegisterDefinition, b: RegisterDefinition) =>\n a.reg.localeCompare(b.reg);\n return this.registersPersist.all().sort(sortApproach);\n }\n\n public addSubscriber(subscriber: RegisterSubscriber) {\n this.eventEmitter.on(Event.REGISTER_CREATED, function (data) {\n return subscriber.eventHandler.call(subscriber, data);\n });\n }\n\n public addRegister<T extends RegisterDefinition>(register: T) {\n this.registersPersist.add(register);\n this.notifyEvent(newRegisterEventData(register));\n }\n\n public hasContent(): boolean {\n return this.registersPersist.hasRegisters();\n }\n\n public getRegisterByKey(registerKey: string): RegisterDefinition {\n return this.registersPersist.getByKey(registerKey)!;\n }\n}\n","import Block from \"./Block\";\nimport RegisterPersist from \"./interfaces/RegisterPersist\";\nimport {RegisterEventData} from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterBlock extends Block {\n\n constructor(regPersist: RegisterPersist, name: string = \"9\") {\n super(name, regPersist);\n }\n\n eventHandler(eventData: RegisterEventData) {\n // throw new Error(\"Method not implemented.\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterPersist from \"../interfaces/RegisterPersist\";\n\nexport default class MemoryPersist implements RegisterPersist {\n private registers: Map<string, Array<Register>>;\n private registersByKey: Map<string, Register>;\n\n public static createInstance(): MemoryPersist {\n return new MemoryPersist();\n }\n\n private constructor() {\n this.registers = new Map<string, Array<Register>>();\n this.registersByKey = new Map<string, Register>();\n }\n\n getByKey(registerKey: string): Register | undefined {\n return this.registersByKey.get(registerKey);\n }\n\n set(regTag: string, registers: Register[]): void {\n this.registers.set(regTag, registers);\n for (const reg of registers) {\n this.addRegisterKey(reg);\n }\n }\n private addRegisterKey(reg: Register) {\n if (this.registersByKey.has(reg.getKeyValue())) {\n throw new Error(`duplicate register key: ${reg.getKeyValue()}`);\n }\n this.registersByKey.set(reg.getKeyValue(), reg);\n }\n\n hasRegisters(): boolean {\n return this.registers.size !== 0;\n }\n\n all(): Register[] {\n //TODO: Check the expected order of registers\n //TODO: Check the performance + memory use of this implementation\n let localRegisters: Register[] = new Array<Register>();\n for (const [_regTag, values] of this.registers) {\n localRegisters = [...localRegisters, ...values];\n }\n return localRegisters;\n }\n\n get(regTag: string) {\n return this.registers.get(regTag);\n }\n\n has(regTag: string): boolean {\n return this.registers.has(regTag);\n }\n\n add(register: Register): void {\n if (!this.registers.has(register.reg)) {\n this.registers.set(register.reg, []);\n }\n this.registers.get(register.reg)?.push(register);\n this.addRegisterKey(register);\n }\n}\n","import { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Key, Numeric } from \"./Decorators\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nexport default class CounterRegister implements RegisterDefinition {\n\n reg: string;\n\n @Key()\n @Alphanumeric()\n reg_blc: string = \"\";\n\n @Numeric()\n qtd_reg_blc: number = 0;\n\n constructor(qtd_reg_blc: number = 0, register: string = \"9900\") {\n this.reg = register;\n this.qtd_reg_blc = qtd_reg_blc;\n }\n tagName(): string {\n return this.reg;\n }\n getChildren(): RegisterDefinition[] {\n return [];\n }\n getKeyValue(): string {\n return `${this.reg}${this.reg_blc}`\n }\n}\n","import { OutputWriter } from \"../interfaces/OutputWriter\";\n\nexport default class ConsoleOutput implements OutputWriter {\n private constructor() {}\n\n static createInstance(): ConsoleOutput {\n return new ConsoleOutput();\n }\n\n write(content: string): void {\n console.log(content);\n }\n save(): void {\n console.log(\"Saving content\");\n }\n}\n","import { Register } from \"../Register\";\nimport RegisterGenerator from \"../interfaces/RegisterGenerator\";\nimport ConsoleOutput from \"./ConsoleOutput\";\nimport { OutputWriter } from \"../interfaces/OutputWriter\";\nimport { FieldDataType, FieldFormat } from \"../Decorators\";\n\nexport interface ReportGenerationOptions {\n writer: OutputWriter;\n fieldSeparator: string;\n separatorAtTheRegisterStart: boolean;\n separatorAtTheRegisterEnd: boolean;\n}\n\nexport default class TaxRegisterGenerator implements RegisterGenerator {\n protected _options: ReportGenerationOptions;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n }\n save(): void {\n this._options.writer.save();\n }\n\n static defaultOptions(\n writer: OutputWriter = ConsoleOutput.createInstance(),\n ): ReportGenerationOptions {\n return {\n writer: writer,\n fieldSeparator: \"|\",\n separatorAtTheRegisterStart: false,\n separatorAtTheRegisterEnd: false,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(): TaxRegisterGenerator {\n return this.newWithOptions(this.defaultOptions());\n }\n\n static newWithOptions(\n options: ReportGenerationOptions,\n ): TaxRegisterGenerator {\n return new TaxRegisterGenerator(options);\n }\n\n get writer(): OutputWriter {\n return this._options.writer;\n }\n\n generate(register: Register): void {\n let registerStr = `${this._options.separatorAtTheRegisterStart ? this._options.fieldSeparator : \"\"}${register.reg}${this._options.fieldSeparator}`;\n const metadataKeys = Reflect.getMetadataKeys(register);\n for(let i = 0; i < metadataKeys.length; i++) {\n const metadataKey = metadataKeys[i]\n const metadata: FieldFormat = Reflect.getMetadata(metadataKey, register);\n\n switch (metadata.dataType) {\n case FieldDataType.alphanumeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.alphanumericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n case FieldDataType.numeric:\n // @ts-ignore\n registerStr = registerStr.concat(\n this.numericValue(metadata, register[metadataKey]),\n i != metadataKeys.length - 1 ?\n this._options.fieldSeparator :\n \"\",\n );\n break;\n }\n }\n if (this._options.separatorAtTheRegisterEnd) {\n registerStr = registerStr.concat(this._options.fieldSeparator);\n }\n\n this.writer.write(registerStr);\n }\n\n private alphanumericValue(metadata: FieldFormat, value: any): string {\n if (!value && typeof value != \"number\") {\n return \"\";\n }\n let result: string = String(value);\n if (metadata.fillEntireLength) {\n result = result\n .padEnd(metadata.maximumLength, \" \")\n .slice(0, metadata.maximumLength);\n }\n return result;\n }\n\n private numericValue(metadata: FieldFormat, value: any): string {\n let result: string = \"\",\n decimalPart: string;\n\n [result, decimalPart] = value ? String(value).split(\".\") : \"0\";\n\n if (metadata.maximumDecimalsLength > 0) {\n if (decimalPart) {\n decimalPart = decimalPart\n .slice(0, metadata.maximumDecimalsLength)\n .padEnd(metadata.maximumDecimalsLength, \"0\");\n } else {\n decimalPart = \"\".padEnd(metadata.maximumDecimalsLength, \"0\");\n }\n result = result.concat(\",\", decimalPart);\n }\n\n return result;\n }\n}\n","import TaxReport from \"./TaxReport\";\nimport Block from \"./Block\";\nimport { Register, RegisterDefinition } from \"./Register\";\nimport { Alphanumeric, Numeric } from \"./Decorators\";\nimport TagCounter from \"./TagCounter\";\nimport CounterBlock from \"./CounterBlock\";\nimport MemoryPersist from \"./implementations/MemoryPersist\";\nimport CounterRegister from \"./CounterRegister\";\nimport RegisterGenerator from \"./interfaces/RegisterGenerator\";\nimport TaxRegisterGenerator from \"./implementations/TaxRegisterGenerator\";\nimport RegisterEventNotifier from \"./interfaces/RegisterEventNotifier\";\n\nconst tagCloseFileRegister = \"9999\";\nconst openSuffix = \"001\";\nconst closeSuffix = \"990\";\n\nexport interface ReportGenerationOptions {\n openSuffix: string;\n closeSuffix: string;\n openFileRegister: Register;\n registerGenerator: RegisterGenerator;\n}\n\nenum IndicatorBlockContent {\n hasContent = 0,\n hasNoContent = 1,\n}\n\nexport class CloseFile extends Register {\n // @ts-ignore\n @Numeric()\n qtd_lin: number = 0;\n\n constructor() {\n super(tagCloseFileRegister, {} as RegisterEventNotifier);\n }\n}\n\nexport class OpenBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n // @ts-ignore\n @Alphanumeric(1)\n ind_mov: number = IndicatorBlockContent.hasNoContent;\n}\n\nexport class CloseBlock extends Register {\n constructor(tag: string) {\n super(tag, {} as RegisterEventNotifier);\n }\n\n qtd_lin: number = 0;\n}\n\nexport class ReportGenerator {\n protected _options: ReportGenerationOptions;\n protected _counters: TagCounter;\n\n private constructor(options: ReportGenerationOptions) {\n this._options = options;\n this._counters = new TagCounter();\n }\n\n static defaultOptions(\n openFileRegister: Register,\n registerGenerator: RegisterGenerator,\n ): ReportGenerationOptions {\n return {\n openSuffix: openSuffix,\n closeSuffix: closeSuffix,\n openFileRegister: openFileRegister,\n registerGenerator: registerGenerator,\n } as ReportGenerationOptions;\n }\n\n static newWithDefaultOptions(openFileRegister: Register): ReportGenerator {\n return this.newWithOptions(\n this.defaultOptions(\n openFileRegister,\n TaxRegisterGenerator.newWithDefaultOptions(),\n ),\n );\n }\n\n static newWithOptions(options: ReportGenerationOptions): ReportGenerator {\n return new ReportGenerator(options);\n }\n\n private beforeGeneration(taxReport: TaxReport) {\n this.addRegister(this._options.openFileRegister);\n }\n\n private generation(taxReport: TaxReport) {\n const blocks = taxReport.Blocks;\n for (const block of blocks) {\n this.addBlock(block);\n }\n }\n\n private afterGeneration(taxReport: TaxReport) {\n const tagCounters = this._counters.getAllTagsCounters();\n const counterBlock = new CounterBlock(MemoryPersist.createInstance());\n const closeFileRegister = new CloseFile();\n tagCounters.forEach((amount, tag) => {\n const counterRegister = new CounterRegister();\n counterRegister.reg_blc = tag;\n counterRegister.qtd_reg_blc = amount;\n closeFileRegister.qtd_lin += amount;\n counterBlock.addRegister(counterRegister as RegisterDefinition);\n });\n this.addBlock(counterBlock);\n //This should register all lines of the taxReport\n // To calculate this, we need to sum:\n // total lines = registers lines (qtd_reg_blc) +\n // lines of counters (tagCounters.size) +\n // counters open and close line (2) +\n // close file line (1)\n closeFileRegister.qtd_lin += tagCounters.size + 3;\n this._options.registerGenerator.generate(closeFileRegister);\n }\n\n protected beforeBlockGeneration(block: Block): void {\n const openBlock: OpenBlock = new OpenBlock(\n `${block.name}${this._options.openSuffix}`,\n );\n openBlock.ind_mov = block.hasContent()\n ? IndicatorBlockContent.hasContent\n : IndicatorBlockContent.hasNoContent;\n this.addRegister(openBlock);\n }\n\n protected blockGeneration(block: Block): void {\n for (const register of block.registers) {\n this.addRegister(register);\n }\n }\n\n protected beforeRegisterGeneration(register: RegisterDefinition) { }\n\n protected registerGeneration(register: RegisterDefinition) {\n this._options.registerGenerator.generate(register);\n for (const child of register.getChildren()) {\n this.addRegister(child);\n }\n }\n\n protected afterRegisterGeneration(register: RegisterDefinition) {\n this._counters.countRegister(register);\n }\n\n protected afterBlockGeneration(block: Block) {\n const closeBlock: CloseBlock = new CloseBlock(\n `${block.name}${this._options.closeSuffix}`,\n );\n closeBlock.qtd_lin = this._counters.getBlockRegistersTotal(block.name) + 1;\n this.addRegister(closeBlock);\n }\n\n private addBlock(block: Block) {\n this.beforeBlockGeneration(block);\n this.blockGeneration(block);\n this.afterBlockGeneration(block);\n }\n\n private addRegister(register: RegisterDefinition) {\n this.beforeRegisterGeneration(register);\n this.registerGeneration(register);\n this.afterRegisterGeneration(register);\n }\n\n public generateFile(taxReport: TaxReport): void {\n this.beforeGeneration(taxReport);\n this.generation(taxReport);\n this.afterGeneration(taxReport);\n this._options.registerGenerator.save();\n }\n}\n"],"mappings":"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","names":[]}
|