UNPKG

poster-prro-kit

Version:

Цей Kit призначений для роботи з PRRO, а саме для генерації XML документів для податкової, генерації фіскальних чеків для термопринтерів, генерації документів для PRRO в офлайн режимі, розрахунку податків та генераціі посилання на фіскальний чек в кабін

438 lines (430 loc) 21.4 kB
import defaultReceiptConfig from "./config/receipt.js"; import { alternativeSstData, cashboxData, fiscalReceiptDataMock, getServiceInputBodyMock, getServiceOutputBodyMock, xReportDataMock, zReportDataMock, } from "../../mock.js"; import { generateTextFiscalReceipt, generateTextServiceTransactionReceipt, generateXZReport, } from "./index.js"; describe("receiptGenerator", () => { it("generateFiscalReceipt should has this structure", () => { const expectedReceipt = [ " ТОВ ТЕСТ ПРРО ", ' "Кафе "Мʼята"" ', " Дніпропетровська область, м. Дніпро, ", " Амур-Нижньодніпровський район, вул. ", " Шолом-Алейхема, 4, кв. (Офіс) 31 ", " ІД 12345678 ", " Касир Шевченко Т.Г. ", "----------------------------------------", "Чек № 485 ", "Тип замовлення У закладі ", "Відкрито 16 липня 2024 19:29:35 ", "Надруковано 16 липня 2024 19:30:35 ", "Стіл № 6 (Основний зал) ", "К-сть гостей 2 ", "", "----------------------------------------", "2 x 130,02 ", "2204109600 ", "12345678 ", "ADCC123123 ", "Вино игристое вкусное 260,04 ДГ", "Знижка 10,04 ДГ", "Ціна зі знижкою 250,00 ДГ", " ", "4 x 260,00 ", "2204888600 ", "Сир 1040,00 Д", " ", "Сирна палочка 5,00 Д", "", "----------------------------------------", "ПриватБанк ", "S1260S6Y ", "Оплата ", "ЕПЗ 4422********6333", "ПЛАТІЖНА СИСТЕМА VISA", "КОД АВТ. 159345", "RRN 083998389823", "", "----------------------------------------", "Готівка 1000,00 грн", "Безготівкова 295,00 грн", " Картка ", "----------------------------------------", "Сума 1295,00 грн", "ПДВ 0% Г 0% 0,00", "Акциз Д 5% 61,66", "----------------------------------------", "До сплати 1295,00 грн", "Решта 0,00 грн", "----------------------------------------", " На вас чекає приємний сюрприз! ", "----------------------------------------", " Чек № 2462757750 ", " 16.05.2024 19:29:35 ", " ОНЛАЙН ", " ФН ПРРО 4000244601 ", " ФІСКАЛЬНИЙ ЧЕК ", " Poster POS ", ].join("\n"); expect( generateTextFiscalReceipt({ ...fiscalReceiptDataMock, receiptConfig: defaultReceiptConfig, }), ).toEqual(expectedReceipt); }); it("offline generateFiscalReceipt should has this structure", () => { const expectedReceipt = [ " ТОВ ТЕСТ ПРРО ", ' "Кафе "Мʼята"" ', " Дніпропетровська область, м. Дніпро, ", " Амур-Нижньодніпровський район, вул. ", " Шолом-Алейхема, 4, кв. (Офіс) 31 ", " ІД 12345678 ", " Касир Шевченко Т.Г. ", "----------------------------------------", "Чек № 485 ", "Тип замовлення У закладі ", "Відкрито 16 липня 2024 19:29:35 ", "Надруковано 16 липня 2024 19:30:35 ", "Стіл № 6 (Основний зал) ", "К-сть гостей 2 ", "", "----------------------------------------", "2 x 130,02 ", "2204109600 ", "12345678 ", "ADCC123123 ", "Вино игристое вкусное 260,04 ДГ", "Знижка 10,04 ДГ", "Ціна зі знижкою 250,00 ДГ", " ", "4 x 260,00 ", "2204888600 ", "Сир 1040,00 Д", " ", "Сирна палочка 5,00 Д", "", "----------------------------------------", "ПриватБанк ", "S1260S6Y ", "Оплата ", "ЕПЗ 4422********6333", "ПЛАТІЖНА СИСТЕМА VISA", "КОД АВТ. 159345", "RRN 083998389823", "", "----------------------------------------", "Готівка 1000,00 грн", "Безготівкова 295,00 грн", " Картка ", "----------------------------------------", "Сума 1295,00 грн", "ПДВ 0% Г 0% 0,00", "Акциз Д 5% 61,66", "----------------------------------------", "До сплати 1295,00 грн", "Решта 0,00 грн", "----------------------------------------", " На вас чекає приємний сюрприз! ", "----------------------------------------", " Чек № 31619581.2.2634 ", " 16.05.2024 19:29:35 ", " ОФЛАЙН ", " 2634 ", " ФН ПРРО 4000244601 ", " ФІСКАЛЬНИЙ ЧЕК ", " Poster POS ", ].join("\n"); expect( generateTextFiscalReceipt({ ...fiscalReceiptDataMock, fiscalId: "31619581.2.2634", isOffline: true, cashboxData, receiptConfig: defaultReceiptConfig, }), ).toEqual(expectedReceipt); }); it("generateFiscalReceipt with alternative sstData", () => { const expectedReceipt = [ " ТОВ ТЕСТ ПРРО ", ' "Кафе "Мʼята"" ', " Дніпропетровська область, м. Дніпро, ", " Амур-Нижньодніпровський район, вул. ", " Шолом-Алейхема, 4, кв. (Офіс) 31 ", " ІД 12345678 ", " Касир Шевченко Т.Г. ", "----------------------------------------", "2 x 130,02 ", "2204109600 ", "12345678 ", "ADCC123123 ", "Вино игристое вкусное 260,04 ДГ", "Знижка 10,04 ДГ", "Ціна зі знижкою 250,00 ДГ", " ", "4 x 260,00 ", "2204888600 ", "Сир 1040,00 Д", " ", "Сирна палочка 5,00 Д", "", "----------------------------------------", "S1K70F0U ", "Оплата ", "ЕПЗ XXXXXXXXXXXX1935", "ПЛАТІЖНА СИСТЕМА MasterCard", "КОД АВТ. 400035", "RRN 085875832176", "", "----------------------------------------", "Готівка 1000,00 грн", "Безготівкова 295,00 грн", " Картка ", "----------------------------------------", "Сума 1295,00 грн", "ПДВ 0% Г 0% 0,00", "Акциз Д 5% 61,66", "----------------------------------------", "До сплати 1295,00 грн", "Решта 0,00 грн", "----------------------------------------", " Чек № 2462757750 ", " 16.05.2024 19:29:35 ", " ОНЛАЙН ", " ФН ПРРО 4000244601 ", " ФІСКАЛЬНИЙ ЧЕК ", " Poster POS ", ].join("\n"); expect( generateTextFiscalReceipt({ ...fiscalReceiptDataMock, headerServiceData: null, footerServiceData: null, sstData: alternativeSstData, receiptConfig: defaultReceiptConfig, }), ).toEqual(expectedReceipt); }); it("generateTextServiceTransactionReceipt should has this structure for input", () => { const expectedReceipt = [ " ТОВ ТЕСТ ПРРО ", ' "Кафе "Мʼята"" ', " Дніпропетровська область, м. Дніпро, ", " Амур-Нижньодніпровський район, вул. ", " Шолом-Алейхема, 4, кв. (Офіс) 31 ", " ІД 12345678 ", " Касир Шевченко Т.Г. ", "----------------------------------------", " СЛУЖБОВЕ ВНЕСЕННЯ ", "----------------------------------------", "Готівка 2850,00 грн", "", "----------------------------------------", " 16.05.2024 19:28:35 ", " ОНЛАЙН ", " ФН ПРРО 4000244601 ", " СЛУЖБОВИЙ ЧЕК ", " Poster POS ", ].join("\n"); expect( generateTextServiceTransactionReceipt(getServiceInputBodyMock), ).toEqual(expectedReceipt); }); it("generateTextServiceTransactionReceipt should has this structure for output", async () => { const expectedReceipt = [ " ТОВ ТЕСТ ПРРО ", ' "Кафе "Мʼята"" ', " Дніпропетровська область, м. Дніпро, ", " Амур-Нижньодніпровський район, вул. ", " Шолом-Алейхема, 4, кв. (Офіс) 31 ", " ІД 12345678 ", " Касир Шевченко Т.Г. ", "----------------------------------------", " СЛУЖБОВЕ ВИЛУЧЕННЯ ", "----------------------------------------", "Готівка 750,00 грн", "", "----------------------------------------", " 16.05.2024 19:28:35 ", " ОНЛАЙН ", " ФН ПРРО 4000244601 ", " СЛУЖБОВИЙ ЧЕК ", " Poster POS ", ].join("\n"); expect( await generateTextServiceTransactionReceipt(getServiceOutputBodyMock), ).toEqual(expectedReceipt); }); it("generateXReport should has this structure", () => { const expectedReceipt = [ " ТОВ ТЕСТ ПРРО ", ' "Кафе "Мʼята"" ', " Дніпропетровська область, м. Дніпро, ", " Амур-Нижньодніпровський район, вул. ", " Шолом-Алейхема, 4, кв. (Офіс) 31 ", " ІД 12345678 ", " Касир Шевченко Т.Г. ", " X-звіт ", "----------------------------------------", "Зміна відкрита 24.05.2024 16:20:05", "Останній фіскальний 27.05.2024 20:22:06", "чек ", "Фіскальний номер 2469255615", "останього чеку ", "Валюта звіту грн", "", " Продаж ", "----------------------------------------", "Загальний обіг 2681,80", "Готівка 2020,80", "Безготівкова 661,00", "Картка ", "Кількість чеків 31", "", "ПДВ В 7% ", "Сума податку 24,60", "Обіг без податку 326,84", "Обіг за податком 351,44", "", "ПДВ Г 20% ", "Сума податку 184,26", "Обіг без податку 737,04", "Обіг за податком 921,30", "", "Акцизний податок Д 5% ", "Сума податку 127,70", "Обіг без податку 2426,20", "Обіг за податком 2553,90", "", " Повернення ", "----------------------------------------", "Загальний обіг 31,04", "Готівка 30,00", "Безготівкова 1,04", "Картка ", "Кількість чеків 2", "", "ПДВ В 7% ", "Сума податку 2,03", "Обіг без податку 26,98", "Обіг за податком 29,01", "", "Акцизний податок Д 5% ", "Сума податку 1,47", "Обіг без податку 28,10", "Обіг за податком 29,57", "", " Готівкові кошти в касі ", "----------------------------------------", "Початковий залишок 0,00", "Службове внесення 0,00", "Службове вилучення 0,00", "Кінцевий залишок 1990,80", "", "----------------------------------------", " 27.05.2024 20:22:06 ", " ОНЛАЙН ", " ФН ПРРО 4000244601 ", " СЛУЖБОВИЙ ДОКУМЕНТ ", " Poster POS ", ].join("\n"); expect( generateXZReport({ ...xReportDataMock, receiptConfig: defaultReceiptConfig, }), ).toEqual(expectedReceipt); }); it("generateZReport should have this structure", () => { const expectedReceipt = [ " ТОВ ТЕСТ ПРРО ", ' "Кафе "Мʼята"" ', " Дніпропетровська область, м. Дніпро, ", " Амур-Нижньодніпровський район, вул. ", " Шолом-Алейхема, 4, кв. (Офіс) 31 ", " ІД 12345678 ", " Касир Шевченко Т.Г. ", " Z-звіт №1 ", "----------------------------------------", "Зміна відкрита 24.05.2024 16:20:05", "Останній фіскальний 27.05.2024 20:22:06", "чек ", "Фіскальний номер 2469255615", "останього чеку ", "Валюта звіту грн", "", " Продаж ", "----------------------------------------", "Загальний обіг 2681,80", "Готівка 2020,80", "Безготівкова 661,00", "Картка ", "Кількість чеків 31", "", "ПДВ В 7% ", "Сума податку 24,60", "Обіг без податку 326,84", "Обіг за податком 351,44", "", "ПДВ Г 20% ", "Сума податку 184,26", "Обіг без податку 737,04", "Обіг за податком 921,30", "", "Акцизний податок Д 5% ", "Сума податку 127,70", "Обіг без податку 2426,20", "Обіг за податком 2553,90", "", " Повернення ", "----------------------------------------", "Загальний обіг 31,04", "Готівка 30,00", "Безготівкова 1,04", "Картка ", "Кількість чеків 2", "", "ПДВ В 7% ", "Сума податку 2,03", "Обіг без податку 26,98", "Обіг за податком 29,01", "", "Акцизний податок Д 5% ", "Сума податку 1,47", "Обіг без податку 28,10", "Обіг за податком 29,57", "", " Готівкові кошти в касі ", "----------------------------------------", "Початковий залишок 0,00", "Службове внесення 100,00", "Службове вилучення 200,00", "Кінцевий залишок 1890,80", "", "----------------------------------------", " 27.05.2024 20:22:06 ", " ОНЛАЙН ", " ФН ПРРО 4000244601 ", " ФІСКАЛЬНИЙ ДОКУМЕНТ ", " Poster POS ", ].join("\n"); expect( generateXZReport({ ...zReportDataMock, receiptConfig: defaultReceiptConfig, }), ).toEqual(expectedReceipt); }); });