UNPKG

@accounter/shaam6111-generator

Version:

Fully typed application that generates, parses, and validates SHAAM 6111 tax reports.

93 lines (83 loc) 3.18 kB
import { generateHeaderRecord } from '../src/generators/generate-header.js'; import { AccountingMethod, AccountingSystem, BusinessType, CurrencyType, HeaderRecord, ReportingMethod, YesNo, } from '../src/types/header.js'; describe('generateHeaderRecord', () => { it('should generate a string of the correct length', () => { const header: HeaderRecord = { taxFileNumber: '123456782', taxYear: '2025', idNumber: '987654324', industryCode: '1234', businessType: BusinessType.INDUSTRIAL, reportingMethod: ReportingMethod.CASH, accountingMethod: AccountingMethod.SINGLE_ENTRY, accountingSystem: AccountingSystem.MANUAL, includesProfitLoss: YesNo.YES, includesTaxAdjustment: YesNo.NO, includesBalanceSheet: YesNo.YES, currencyType: CurrencyType.SHEKELS, amountsInThousands: YesNo.NO, }; const result = generateHeaderRecord(header); expect(result.length).toBe(142); }); it('should format fields correctly', () => { const header: HeaderRecord = { taxFileNumber: '123456782', taxYear: '2025', idNumber: '987654324', industryCode: '1234', businessType: BusinessType.INDUSTRIAL, reportingMethod: ReportingMethod.CASH, accountingMethod: AccountingMethod.SINGLE_ENTRY, accountingSystem: AccountingSystem.MANUAL, includesProfitLoss: YesNo.YES, includesTaxAdjustment: YesNo.NO, includesBalanceSheet: YesNo.YES, currencyType: CurrencyType.SHEKELS, amountsInThousands: YesNo.NO, }; const result = generateHeaderRecord(header); expect(result.startsWith('1234567822025987654324')).toBe(true); expect(result.includes('1234')).toBe(true); }); // test: padding should work correctly it('should pad fields correctly', () => { const header: HeaderRecord = { taxFileNumber: '123455', taxYear: '2025', idNumber: '98765431', industryCode: '1234', businessDescription: 'ניסיון', businessType: BusinessType.INDUSTRIAL, reportingMethod: ReportingMethod.CASH, accountingMethod: AccountingMethod.SINGLE_ENTRY, accountingSystem: AccountingSystem.MANUAL, includesProfitLoss: YesNo.YES, includesTaxAdjustment: YesNo.NO, includesBalanceSheet: YesNo.YES, currencyType: CurrencyType.SHEKELS, amountsInThousands: YesNo.NO, }; const result = generateHeaderRecord(header); // Check specific parts of the result expect(result.substring(0, 9)).toBe('000123455'); // taxFileNumber expect(result.substring(9, 13)).toBe('2025'); // taxYear expect(result.substring(13, 22)).toBe('098765431'); // idNumber // Check the Hebrew business description and its padding const businessDescriptionStart = 44; // Index where business description starts expect(result.substring(businessDescriptionStart, businessDescriptionStart + 6)).toBe('ניסיון'); expect(result.substring(businessDescriptionStart + 6, businessDescriptionStart + 50)).toMatch( / +/, ); // Check padding // Verify overall length is still correct expect(result.length).toBe(142); }); });