OutPOSt · офіційний changelog

Історія версій OutPOSt

Повний журнал змін OutPOSt українською мовою, сформований з актуального CHANGELOG.md проєкту. Технічні назви, коди, API та ідентифікатори залишені в оригінальному вигляді, щоб не втратити точність.

Поточний реліз0.23.1

v0.23.1 — Безпечна синхронізація директора, вебкабінет і MINI‑T400

Актуальна версія в наданому журналі. Нижче наведено повний список змін цього релізу.

14 пунктів змін релізуWindowsMINI‑T400MEDirector / Cloudflare
  • Додано прямий сценарій OutPOSt → MINI‑T400 для роботи з товарами без залежності від goods.xls або нестабільної програми виробника: у наявних картках зберігаються фіскальні атрибути й оновлюється лише ціна, а відсутні картки створюються окремо після підтвердження.
  • Для нових карток MINI‑T400 встановлено Tax 1 за замовчуванням для профілю магазину без алкоголю; на екрані синхронізації показуються фактичні Tax, відділ і політика перевірки запису, а також додано розгортаний безпечний двоетапний чекліст.
  • Додано окрему вбудовану статтю довідки про стани товарів, зіставлення, спільні штрихкоди, оновлення цін наявних карток, створення відсутніх товарів, перевірку запису та небезпечний зворотний напрямок РРО → OutPOSt.
  • На екран продажу додано чотири налаштовувані кнопки швидких товарів: одне натискання додає вибраний товар до поточного чека, не займаючи місця в таблиці чека.
  • Опціональний модуль «Директор / Мережа» підключено до local-first сервісу агрегованих знімків. За замовчуванням модуль вимкнений і не виконує фонової роботи, доки його явно не активують.
  • Додано одноразову реєстрацію робочого місця, можливість відкликати доступ окремого пристрою, HMAC-хешування серверних облікових даних і захист локального токена пристрою через Windows DPAPI.
  • Синхронізація передає лише денні агрегати та попередження про ризики запасів; клієнти, сирі чеки, паролі/PIN, фіскальні облікові дані та повна база SQLite ніколи не завантажуються в хмару.
  • Розгорнуто вебкабінет директора лише для читання на Cloudflare Workers + D1 за Cloudflare Access, а також окремий вузький шлюз синхронізації, який відкриває тільки маршрути реєстрації пристрою та завантаження агрегованого знімка.
  • Додано керування пристроями кабінету, генерацію кодів, відкликання доступу й події аудиту. Готівкові продажі та фіскальна робота залишаються незалежними від Інтернету й доступності хмари.
  • Публічний елемент клієнтського кабінету залишено вимкненим як заготовку, а для власника додано приватний маршрут /admin через Cloudflare Access; опубліковано перевірений інсталятор v0.23.1 і його SHA‑256.
  • Розширено українську довідку: безпечне підключення, приватність, відкликання доступу та повна інструкція MINI‑T400ME. Інструкції MINI‑T400 навмисно залишаються лише українською.
  • Посилено автоматизований QA: сценарії закупівель можуть обходити обмеження деморежиму лише у перевіреній системній тимчасовій базі; робоча база магазину залишається захищеною ліцензією.
  • Фінальні автоматизовані перевірки: Self‑Test 15/15, Total QA 13/13, RC-перевірка релізного пакета 7/7 та побудова WPF-вікон 21/21 українською, англійською й російською. Фізичний зв’язок із MINI‑T400ME залишається апаратним тестом на цільовому ПК.
  • Версії Product/Informational/Assembly/File — 0.23.1; схема SQLite залишається 0.21.3; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
Перейти до офіційного завантаження →
Архів релізів

Повний журнал із CHANGELOG.md

Кожен запис нижче відповідає окремому розділу у наданому CHANGELOG.md. Натисніть на версію, щоб розгорнути повний перелік змін українською.

Серія

OutPOSt v0.23.x

1 записів у наданому CHANGELOG.md
v0.23.0Багатомовний інтерфейс і персональна навігація7 змін
  • Додано Налаштування → Мова з українською, англійською та російською. Українська залишається мовою за замовчуванням і безпечним резервним варіантом для нового тексту, який ще не має перекладу.
  • Додано централізовані вбудовані пакети перекладів і локалізацію під час роботи для XAML-підписів, заголовків вікон, колонок таблиць, підказок, стилізованих діалогів, динамічних статусів і вбудованої довідки.
  • До чисел і дат, які бачить користувач, застосовано культури uk-UA, en-GB і ru-RU без перекладу або переписування назв товарів, постачальників, клієнтів чи документів.
  • Додано персональні Налаштування головного меню: кожен авторизований користувач може приховати непотрібні розділи, відновити всі розділи й одразу побачити зміни. «Налаштування» завжди лишаються доступними, а права й вимкнені модулі мають вищий пріоритет.
  • Список категорій налаштувань зроблено прокручуваним, щоб нові сторінки залишалися зручними на мінімально підтримуваному розмірі вікна.
  • Додано довідку щодо вибору мови й персонального меню, а також регресійні перевірки локалізації, культури та збереження параметрів окремо для кожного користувача.
  • Версії Product/Informational/Assembly/File — 0.23.0; схема SQLite залишається 0.21.3; формат ліцензії, Cloud Protocol v1 і протокол MINI‑T400ME не змінено.
Серія

OutPOSt v0.22.x

2 записів у наданому CHANGELOG.md
v0.22.1Єдина повна безстрокова ліцензія7 змін
  • Редакції, пакети модулів і окремі права на оновлення замінено одним комерційним правилом: один платіж активує всі поточні й майбутні функції OutPOSt та опціональні модулі на ліцензованому комп’ютері — без підписки й платних вікон оновлень.
  • Нові ліцензії завжди випускаються як Full, all, безстрокові та без дати завершення оновлень; генератор більше не пропонує Standard/Pro/Network, пакети модулів чи дату оновлень.
  • Збережено підписаний контейнер формату 1 та основний публічний ключ, тому чинні ліцензії v0.22.0 продовжують прийматися й тепер отримують такий самий повний доступ до продукту.
  • Додано незалежно згенерований аварійний ключ видавця RSA‑3072. У клієнтський застосунок вбудовується лише його публічна частина; приватна частина, захищена DPAPI, залишається поза репозиторієм та інсталятором.
  • До генератора власника додано вибір основного/аварійного ключа, зашифроване резервне копіювання й відновлення з урахуванням ідентичності та журнал видачі v2.
  • Розширено QA ліцензування: повний контракт продукту, сумісність із v0.22.0, підписи обох видавців, прив’язка до Computer ID, відхилення підробки та резервні копії обох ключів авторизації.
  • Версії Product/Informational/Assembly/File — 0.22.1; схема SQLite — 0.21.3; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
v0.22.0Офлайн-ліцензування без строку дії та повноцінний деморежим9 змін
  • Додано окрему сторінку Налаштування → Ліцензія з генерацією й копіюванням Computer ID без розкриття приватних даних, вставкою ключа активації, імпортом .outpost-license, статусом та даними власника.
  • Додано версіоновані офлайн-ліцензії з підписом RSA‑3072/SHA‑256. OutPOSt містить лише публічні матеріали для перевірки; приватний ключ видавця ніколи не потрапляє до клієнтської збірки.
  • Додано стабільні ідентифікатори версій ключа та payload, щоб майбутні релізи могли зберігати старі публічні ключі й приймати раніше видані безстрокові ліцензії.
  • Неактивована інсталяція лишається корисним деморежимом: продажі, пошук товарів, звіти та перегляд історії працюють; блокуються лише створення/редагування/проведення/розпроведення закупівель та імпорт історичних закупівель.
  • Обмеження закупівель закріплено в PurchaseRepository та імпорті Client-Shop, а не лише у вимкнених кнопках UI; помилки ліцензії ніколи не видаляють і не переписують дані магазину.
  • Додано службову утиліту OutPOSt.LicenseGenerator лише для власника, автоматичні файли виданих ліцензій та журнал видачі з табуляцією. Утиліта збирається окремо й не входить у клієнтський Setup.
  • Приватний ключ видавця захищено Windows DPAPI; додано зашифровані паролем пакети відновлення з PBKDF2 (250 000 ітерацій), AES‑256‑CBC і HMAC‑SHA256 з відхиленням неправильного пароля та підробки.
  • Додано окремі регресійні набори для ліцензії, підпису, неправильного комп’ютера, демообмежень і резервної копії ключа, а також повну українську тему довідки.
  • Версії Product/Informational/Assembly/File — 0.22.0; схема SQLite — 0.21.3; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
Серія

OutPOSt v0.21.x

4 записів у наданому CHANGELOG.md
v0.21.3Транзакційний контроль продажу нижче залишку9 змін
  • Додано чотири політики магазину для продажів, які створюють або поглиблюють від’ємний залишок: моніторинг (безпечний варіант за замовчуванням), попередження продавця, жорстке блокування та одноразове підтвердження PIN уповноваженого адміністратора.
  • Авторитетна перевірка залишку тепер виконується всередині тієї самої SQLite IMMEDIATE-транзакції, що й продаж; інша каса або альтернативний виклик не може обійти актуальний баланс.
  • Додано живий прогноз кошика поточний залишок → після чека та візуальне виділення позицій, які підуть у мінус.
  • Додано аудитовані винятки для товарів і категорій із причиною та життєвим циклом активний/неактивний; винятки не переписують залишки або історичні рухи.
  • Додано окремі права для налаштування політик/винятків і PIN-підтвердження; PIN адміністратора перевіряється без збереження та без зміни часу останнього входу акаунта.
  • Для продажів, дозволених через моніторинг, підтвердження продавця, адміністратора або виняток, атомарно пишеться подія аудиту SALE_NEGATIVE_STOCK_ALLOWED.
  • На дашборд додано 7-денний індикатор і детальний журнал інцидентів за 7/30/90/365 днів.
  • Розширено українську довідку та регресійні перевірки: усі чотири політики, rollback транзакції, винятки товарів/категорій, збереження аудиту та три нові WPF-вікна.
  • Версії Product/Informational/Assembly/File — 0.21.3; схема SQLite — 0.21.3; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
v0.21.2Аудит від’ємних залишків і контрольована інвентаризаційна корекція8 змін
  • Небезпечне довільне обмеження залишку −999…999 у «Обслуговуванні» замінено аудитом від’ємних залишків лише для читання.
  • Додано трасування причин по товару й складу через хронологію рухів: знімки Client-Shop, продажі понад обліковий залишок, списання, інвентаризаційні корекції, корекції закупівель і переміщення.
  • Додано фільтрацію, вибір видимих рядків, деталізацію рухів і локальний табличний звіт аудиту; аналіз ніколи не змінює залишки або історичні документи.
  • Додано цільові чернетки інвентаризації лише з вибраними товарами, що зараз мають від’ємний залишок, атомарно згрупованими за складом; фактична кількість навмисно лишається порожньою, нуль не підставляється.
  • Додано явну інструкцію фізичного перерахунку, підтвердження проведення з відповіддю «Ні» за замовчуванням і перевірений backup PRE_NEGATIVE_STOCK_AUDIT перед проведенням чернетки.
  • Проведення інвентаризації не змінює початкові продажі, закупівлі, імпорти та рухи й додає трасовані рухи InventoryCorrection лише для фактично перерахованих рядків.
  • Розширено українську довідку та додано ізольовані й повні регресійні тести на копії магазину. Відомий клон магазину аудіює 1 173 від’ємні позиції й створює чернетку на 1 173 рядки без зміни жодного балансу.
  • Версії Product/Informational/Assembly/File — 0.21.2; схема SQLite — 0.21.0; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
v0.21.1Безпечне виправлення аномальної собівартості8 змін
  • Додано SuperAdmin-only сценарій попереднього перегляду й ремонту Налаштування → Обслуговування → Виправлення аномальної собівартості.
  • Ремонт змінює лише явно неможливі поточні та історичні технічні знімки собівартості й вимагає наявності коректної проведеної закупівлі того самого товару; значення на основі націнки не вигадуються.
  • Додано обов’язковий перевірений backup PRE_REPAIR, одну атомарну SQLite-транзакцію запису, аудит по товарах і в агрегаті, локальний звіт ремонту та перевірку зовнішніх ключів після запису.
  • Додано інваріанти продажів до/після: кількість чеків, кількості, роздрібні ціни/суми, оплати й повернення мають бути ідентичними, інакше вся транзакція відкочується.
  • Оцінка запасів для кабінету директора тепер враховує лише додатні фактичні залишки; мінусовий запас залишається окремим ризиком і не віднімається непомітно від активів.
  • Посилено повторний імпорт Client-Shop: неможлива вихідна собівартість відхиляється й замінюється лише з коректної проведеної закупівлі або підтвердженої поточної собівартості, щоб не повертати квадрильйонні значення.
  • Розширено українську довідку та ізольований Self‑Test; набір із 13 перевірок тепер штучно створює й ремонтує квадрильйонні собівартості, доводячи незмінність сум продажів, оплат і залишків.
  • Версії Product/Informational/Assembly/File — 0.21.1; схема SQLite — 0.21.0; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
v0.21.0Опціональні бізнес-модулі8 змін
  • Додано SuperAdmin-only сторінку Налаштування → Модулі; усі вісім модулів за замовчуванням вимкнені, зникають з UI під час виконання та не створюють таймерів, фонової роботи або бізнес-запитів.
  • Додано замовлення постачальникам зі стійкими статусами, очікуваними надходженнями, звичайним прийманням через сесію закупівлі та інтеграцією з боргами постачальників.
  • Додано рекомендації поповнення запасів на вимогу з урахуванням залишку, відкритих очікуваних надходжень, продажів за 30 днів, округлення до упаковки та правил Min/Max, точки замовлення або запасу в днях.
  • Додано переміщення між складами з транзакційною перевіркою залишку, рухами відправлення й приймання; UI переміщень приховується, якщо активних складів менше двох.
  • Додано автоматичні акції на касі, групи клієнтів, аудитовані коригування лояльності та збережені зв’язки продажу з акціями.
  • Додано етикетки Code 39 для сканера, реєстр партій зі строками придатності, ABC/stock-risk аналітику та локальний дашборд директора.
  • Розширено вбудовану українську довідку щодо ввімкнення/вимкнення модулів і кожного нового робочого сценарію.
  • Версії Product/Informational/Assembly/File — 0.21.0; схема SQLite піднята до 0.21.0; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
Серія

OutPOSt v0.20.x

1 записів у наданому CHANGELOG.md
v0.20.0Безпечне масове редагування товарів9 змін
  • Додано Товари / Склад → Масові зміни з фільтрацією, вибором видимих рядків, інверсією вибору та пакетами до 10 000 товарів.
  • Додано масову зміну категорії, одиниці, активності та операції з назвою: префікс, суфікс і пошук/заміна.
  • Додано встановлення, відсоткове збільшення/зменшення та додавання/віднімання суми для закупівельної, роздрібної, мінімальної ціни й мінімального залишку; також додано роздрібну націнку від закупівельної ціни, мінімальну ціну як відсоток від роздрібної та сім режимів округлення роздрібної ціни.
  • Додано складські операції обнулити/встановити/додати/відняти для конкретного складу з окремим правом інвентаризації та додатковим попередженням перед обнуленням.
  • Додано обов’язковий перегляд «до/після» для кожного товару, відхилення паралельних змін, safety-backup PRE_BULK_PRODUCTS і транзакцію SQLite «усе або нічого».
  • Корекції залишків створюють трасований проведений документ інвентаризації та складські рухи замість тихого переписування балансу; пакетні та інвентаризаційні дії пишуться в аудит.
  • Додано Total QA для формул, корекції залишку, відмови в правах, від’ємних розрахунків і атомарного відхилення застарілого preview; перевірка побудови UI охоплює обидва вікна масових змін.
  • До Центру довідки додано повну українську тему для нового сценарію.
  • Версії Product/Informational/Assembly/File — 0.20.0; схема SQLite — 0.19.8.4; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
Серія

OutPOSt v0.19.x

19 записів у наданому CHANGELOG.md
v0.19.10.2Підсумки постачальників і робота з неактивними постачальниками7 змін
  • Виправлено розбір агрегатів постачальників SQLite в українській локалі, через який грошові значення з копійками могли відображатися у 100 разів більшими; збережені дані закупівель та оплат не змінювалися.
  • Додано примусовий Total QA під uk-UA для підсумків постачальників, оплат, історії закупівель і боргу з десятковими копійками.
  • На головний дашборд для користувачів із правом керування постачальниками додано зведення боргів постачальникам і оплату по конкретному постачальнику.
  • Додано налаштування Активний постачальник. Неактивні постачальники зникають з вибору нової закупівлі та стандартного списку закупівель; Показати неактивних постачальників повертає їх історичні закупівлі без зміни сесій, товарів, залишків або цін.
  • Неактивні постачальники з непогашеним балансом залишаються у списку боргів на дашборді, щоб зобов’язання не можна було випадково приховати.
  • Перед потенційно довгим коректним завершенням програми додано підтвердження з відповіддю «Ні» за замовчуванням, щоб захистити від випадкового натискання кнопки закриття вікна.
  • Версії Product/Informational/Assembly/File — 0.19.10.2; схема SQLite — 0.19.8.4; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
v0.19.10Вбудований центр довідки та оновлення RC7 змін
  • Додано пошукову довідку Налаштування → Обслуговування → Довідка з понад 20 покроковими українськими темами для щоденної роботи продавця й адміністратора.
  • Довідка доступна лише для читання кожному авторизованому користувачу; F1 відкриває її з головного вікна, тоді як привілейовані картки «Обслуговування» залишаються лише для SuperAdmin.
  • Додано інструкції для першого запуску, щоденного відкриття/закриття, погашення боргу проти списання, сесій закупівель, складу, фіскалізації, резервних копій та реагування на інциденти.
  • Виправлено два старі блокери компіляції RC: Self‑Test тепер перевіряє AvailableToReturn, а помилки RC gate використовують DiagnosticsService.WriteOperationalLog.
  • Виправлено тестовий товар Self‑Test: його внутрішній код тепер відповідає правилу п’ятизначного числового коду, що запобігає пізнішому NullReferenceException у сценарії Cloud/Outbox.
  • Додано зрозумілу помилку передумови, якщо товар Self‑Test не завантажився; синтетичний Device ID винесено за межі реального RetailPOS_Data, а для ізольованого smoke-run на 12 перевірок додано scripts/test-selftest.ps1.
  • Версії Product/Informational — 0.19.10; Assembly/File — 0.19.10.0; схема SQLite — 0.19.8.4; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
v0.19.10.1Посилення Total QA8 змін
  • Додано ізольований інтеграційний набір Total QA з 11 сценаріїв: користувачі/права, пошук товарів, спільні штрихкоди, закупівлі й розрахунки з постачальниками, готівкові/карткові/змішані/боргові продажі, повернення, погашення/списання боргу, списання товару, інвентаризація, локальні фіскальні черги, звіти, Excel, закриття каси, backup і фінальний аудит бізнес-логіки.
  • Додано smoke-перевірку побудови 14 WPF-вікон і headless запуск RC gate; обидва сценарії працюють лише з одноразовими QA-даними й ніколи не відкривають робочу базу магазину.
  • Додано OUTPOST_QA_DATA_DIRECTORY для явних ізольованих QA-запусків і заборонено legacy-міграцію RetailPOS у цей каталог.
  • Збережено потрібний сценарій спільних штрихкодів: товари з різними внутрішніми кодами можуть мати один штрихкод, а касовий пошук навмисно вважає такий збіг неоднозначним і відкриває вибір товару.
  • Виправлено цикл Excel export/preview/import для каталогів із валідними спільними штрихкодами та явними внутрішніми кодами товарів; неоднозначний імпорт без коду й надалі блокується.
  • Safety-backup PRE_IMPORT ізольовано, коли тест репозиторію перевизначає шлях до бази.
  • Виправлено валідацію/діагностику fixture Self‑Test, а RC runtime-перевірки тепер визначають фактичний каталог збірки OutPOSt під тестовим host-процесом.
  • Версії Product/Informational/Assembly/File — 0.19.10.1; схема SQLite — 0.19.8.4; Cloud Protocol — v1; протокол MINI‑T400ME не змінено.
v0.19.9Реліз-кандидат6 змін
  • Feature freeze: нові бізнес-модулі не додаються; лише готовність до релізу й регресійні виправлення.
  • Додано Release Candidate gate лише для SuperAdmin: перевірка версії/runtime/x86/native SQLite, розділення Data та каталогу інсталяції, опціональна SHA‑256-перевірка встановленого payload, свіжий ізольований Self‑Test, повна System Diagnostics і read-only знімок фіскальних черг.
  • Додано scripts/verify-version-consistency.ps1; збірка, інсталятор і формування релізного payload завершуються помилкою при розходженні версій.
  • RC gate записує release-candidate-readiness-*.txt і ніколи не звертається до MINI‑T400ME, CheckBox API, Google Drive або Cloud transport.
  • Версії Product/Informational — 0.19.9; Assembly/File — 0.19.9.0; схема SQLite — 0.19.8.4; Cloud Protocol — v1.
  • Файли MINI‑T400ME не змінені відносно v0.19.8.5.
v0.19.8.5Фінальний прохід діагностики6 змін
  • Додано агреговану System Diagnostics лише для SuperAdmin з перевірками PASS/WARN/FAIL для програми/runtime, вільного місця, повного стану SQLite, свіжості перевіреного локального backup, лічильників аудиту бізнес-логіки, прав/безпеки, цілісності Cloud foundation/Outbox, recovery/crash metadata та останнього регресійного Self‑Test.
  • system-diagnostics-*.txt обмежено з міркувань приватності: без PIN/паролів/токенів/секретів і без рядків товарів/клієнтів; бізнес-аудит додає лише лічильники та коди.
  • Support ZIP тепер містить агрегований system-health.txt і, якщо доступний, останній синтетичний звіт Self‑Test.
  • Перед повідомленням про успіх Support ZIP повторно відкривається й відхиляється, якщо містить робочу DB/WAL/SHM, Secrets, login-settings, токени або облікові дані.
  • Версії Product/Informational/Assembly/File — 0.19.8.5; SQLite schema_version0.19.8.4; Cloud Protocol — v1.
  • Файли протоколу MINI‑T400ME не змінені відносно v0.19.8.4.
v0.19.8.4Хмарний фундамент — етап 29 змін
  • Додано атомарне захоплення SQLite Outbox для 20 типів синхронізованих кореневих сутностей; оновлення revision/tombstone і стійка подія комітяться або відкочуються разом із тією самою локальною бізнес-транзакцією.
  • Додано контракт Protocol v1 outpost.entity-change, конкретний EventType, Store/Device identity, SHA‑256 payload і детермінований ключ дедуплікації.
  • sync_outbox отримав поля envelope для event/contract/store/hash/dedupe та унікальний індекс дедуплікації; SQLite schema_version піднято до 0.19.8.4.
  • Database.Initialize() пригнічує захоплення подій для міграцій/seed/backfill; API пригнічення execution context підготовлено для майбутнього застосування Inbox.
  • SyncRepository тепер надає pending batch, останні події, статистику та локальну перевірку черги для майбутнього транспорту.
  • Self‑Test перевіряє відсутність подій під час міграції, атомарний rollback, Outbox-події ProductUpdated/CustomerDeleted і хеші payload.
  • Готовність Settings/Network тепер показує Protocol v1 і фактичні лічильники Outbox; звіт готовності містить лише метадані останніх подій.
  • Cloud HTTP/API/polling не ввімкнено; DisabledSyncService лишається єдиним транспортом. MINI‑T400ME без змін.
  • Версії Product/Informational/Assembly/File — 0.19.8.4.
v0.19.8.3QA робочих сценаріїв і полірування UX7 змін
  • Вибір клієнта для продажу в борг тепер відкривається з усіма активними клієнтами, яким дозволено кредит; «Тільки з поточним боргом» є опціональним фільтром, тому клієнти з першим борговим продажем більше не приховуються.
  • Вибір клієнта, оплата, погашення боргу, запит при недоплаті, списання й завершення інвентаризації використовують одноразове завершення діалогу, щоб повторні WPF input events не могли двічі присвоїти DialogResult.
  • Read-only режим інвентаризації більше випадково не вмикає пошук товару, не дозволяє записувати коментар/стан чернетки, завжди має доступну кнопку «Закрити» і не фокусує вимкнений ввід сканера.
  • Посилено межі прав у сесіях закупівель: без PurchasesEdit елементи редагування лише для читання; подвійний клік не обходить вимкнені кнопки; закриття read-only чернетки не запускає autosave. Після Unpost користувач без PurchasesEdit бачить деталі замість редактора, який не може закрити/зберегти.
  • Валідація оплати повертає фокус у конкретне помилкове поле суми готівки/змішаної оплати.
  • Змін схеми немає; SQLite schema_version залишається 0.19.8. Файли протоколу MINI‑T400ME без змін.
  • Версії Product/Informational/Assembly/File — 0.19.8.3.
v0.19.8.2Автоматизований Self-Test і набір регресійних перевірок5 змін
  • Додано ізольований SelfTestService із 12 регресійними сценаріями на новій тимчасовій базі SQLite.
  • Database.UseDatabasePathForCurrentContext() через AsyncLocal дозволяє запускати реальні репозиторії без доступу до робочої retailpos.db.
  • Перевіряються міграція схеми, integrity/FK/WAL, права доступу, проведення закупівлі, готівковий продаж, повернення, борг клієнта, rollback, Excel export/preview, Cloud GUID/revision/tombstone, повний цикл SQLite backup та аудит бізнес-логіки.
  • У Налаштування → Обслуговування додано кнопку Self‑Test лише для SuperAdmin і текстовий звіт у Exports.
  • Версії Product/Informational/Assembly/File — 0.19.8.2; SQLite schema_version залишається 0.19.8; MINI‑T400ME без змін.
v0.19.8.1Підготовка релізу та посилення інсталятора7 змін
  • Інсталятор тепер збирається лише з чистого перевіреного artifacts\release-payload, а не безпосередньо з довільного вмісту bin.
  • Додано prepare-release.ps1 і verify-release-payload.ps1: перевірки PE32/x86/версії, правило одного EXE, заборона PDB/DB/секретів/shell scripts/reparse points, а також SHA‑256 і розмір для кожного файла у manifest.
  • build-installer.ps1 виконує чисту Release-збірку, повторну перевірку manifest, компіляцію Inno, SHA‑256/звіт Setup і перевірку Authenticode; -RequireSignedRelease може заборонити випуск непідписаного production-артефакту.
  • Нова x86-інсталяція за замовчуванням використовує Program Files (x86); оновлення зберігає попередній шлях і tasks. Setup блокує downgrade версії та будь-який перетин каталогу інсталяції з %USERPROFILE%\RetailPOS_Data.
  • Setup залишається стандартним Inno Setup і не містить PowerShell/cmd/bat/vbs/js payload. Робоча база, резервні копії та секрети лишаються поза Program Files і ніколи не пакуються.
  • Версії Product/Informational/Assembly/File — 0.19.8.1; SQLite schema_version0.19.8.
  • Файли протоколу MINI‑T400ME не змінені відносно v0.19.8.
v0.19.8Готовність до мережі та хмари9 змін
  • Додано незалежний від транспорту sync_entity_identity для стабільних GUID/revision/tombstone метаданих у 20 типах кореневих сутностей.
  • Додано стійкі таблиці sync_outbox, sync_inbox, sync_state і sync_log та індекси.
  • Тригери identity автоматично призначають GUID новим рядкам, збільшують revision при оновленні та зберігають tombstone після фізичного видалення.
  • Додано локальний для машини DeviceId (network-device.ini), щоб перенесення бази магазину не клонувало ідентичність POS-пристрою.
  • Додано ISyncService + DisabledSyncService; v0.19.8 не виконує Cloud HTTP/network traffic і не ставить бізнес-події в чергу автоматично.
  • Додано read-only панель Settings → Network / Cloud для SuperAdmin та звіт готовності мережі.
  • Діагностика містить несекретні ID/лічильники мережевого фундаменту; README transfer package явно описує відмінність Store/Company identity від DeviceId.
  • SQLite schema_version піднято до 0.19.8. Файли протоколу MINI‑T400ME без змін.
  • Версії Product/Informational — 0.19.8; Assembly/File — 0.19.8.0.
v0.19.7Другий етап оптимізації продуктивності9 змін
  • Історія продажів і повернень завантажує дані SQLite поза WPF dispatcher із об’єднанням повторних запитів і захистом від застарілих результатів.
  • SQL історії продажів спочатку обмежує запитане вікно, а вже потім агрегує оплати/повернення; унікальні fiscal/MINI state rows приєднуються замість багатьох корельованих підзапитів на кожен чек.
  • Історія повернень використовує такий самий підхід із обмеженим вікном та set-based агрегацією оплат.
  • Пошук залишків спочатку обмежує кандидатів-товарів, а потім агрегує складські рухи; StockView отримав debounce 220 мс і фонове завантаження.
  • Зведення звіту виконується одним snapshot-запитом SQLite; вкладки звітів завантажуються ліниво у фоні й кешуються для вибраного періоду до Refresh/F5.
  • COGS продажів користувача, звіти закупівель, борги постачальникам, підсумки сесій/оплат у списку закупівель і підсумки оплат сесії переведено на set-based агрегацію.
  • Фонове автозакриття касової зміни MainWindow винесено з WPF dispatcher і захищено single-flight, що прибирає періодичне 30-секундне підвисання БД.
  • Розширення бізнес-правил або схеми немає; SQLite schema_version лишається 0.15.1. Файли протоколу MINI‑T400ME побайтно ідентичні v0.19.6.
  • Версії Product/Informational — 0.19.7; Assembly/File — 0.19.7.0.
v0.19.6Посилення Excel та міграції9 змін
  • Експорт Excel: set-based запит каталогу та потоковий worksheet XML для нижчого споживання пам’яті x86 на великих каталогах.
  • XLSX-reader посилено проти надвеликих/zip-bomb пакетів, DTD/зовнішніх XML-сутностей, VBA payload, формул, merged cells, дубльованих заголовків і пошкоджених посилань shared-string.
  • Обов’язкові числові/одиничні/active поля більше не перетворюються мовчки на 0/default, якщо порожні; перед записом перевіряються довжина/діапазон, scientific barcode і конфлікти code↔barcode.
  • Ідентичність імпорту аналізується з одного snapshot каталогу; дубльоване представлення того самого наявного товару відхиляється. Preview показує кількість створених/оновлених/незмінених товарів і нових категорій.
  • Excel-імпорт товарів тепер виконується однією IMMEDIATE SQLite-транзакцією через ProductRepository.SaveInTransaction; будь-яка помилка відкочує всю книгу. PRE_IMPORT backup лишається страховкою.
  • Незмінені рядки при повторному імпорті пропускаються замість повторного запису.
  • Transfer Package формату v2 зберігає DatabaseSize, DatabaseSha256, AppVersion і SchemaVersion; створений ZIP повторно відкривається й перевіряється перед повідомленням про успіх.
  • Відновлення transfer package перевіряє allow-list вмісту ZIP, розміри, path traversal, hash payload, SQLite integrity та сумісність app/schema джерела; legacy пакети формату v1 залишаються читабельними.
  • Версії Product/Informational — 0.19.6; Assembly/File — 0.19.6.0; schema_version — 0.15.1; протокол MINI‑T400ME не змінено.
v0.19.4.2Виправлення закупівель і регресій9 змін
  • Закріплено очікуваний цикл сесії закупівлі: Posted → безпечне розпроведення → редагування Draft → повторне проведення; після успішного розпроведення сесія знову доступна для редагування.
  • Повний preflight розпроведення повторюється всередині IMMEDIATE write-транзакції після backup PRE_UNPOST, закриваючи TOCTOU race з новішими операціями по залишках, цінах і касі.
  • Додано commit-time інваріант EnsurePurchaseSessionReturnedToDraft: рядки Draft мають відновитися повністю, а проведені позиції закупівлі, складські рухи сесії та оплати постачальнику мають зникнути до Commit.
  • Оновлення Posted → Draft тепер захищене умовою status='Posted' і вимагає рівно один змінений рядок.
  • PurchaseSessionEditWindow і PurchaseSessionItemWindow отримали одноразовий guard завершення діалогу; повторна WPF-подія вводу не може вдруге встановити DialogResult.
  • SaleReturnWindow також отримав single-flight проведення та одноразове завершення діалогу; кнопка скасування блокується під час асинхронної фіскалізації, тому закрите вікно не може пізніше отримати DialogResult.
  • Під час редагування рядка заборонено перетворювати його на товар, який уже присутній в іншому рядку тієї самої сесії.
  • Нових таблиць/колонок немає; schema_version лишається 0.15.1; протокол MINI‑T400ME не змінювався.
  • Версії Product/Informational — 0.19.4.2; Assembly/File — 0.19.4.2.0.
v0.19.4.1Виправлення аварії вибору товару5 змін
  • Виправлено InvalidOperationException: DialogResult can be set only after Window is created and shown as dialog у пошуку товару.
  • ProductPickerWindow.FilterBox_OnKeyDown тепер встановлює e.Handled = true до першого await, тому WPF не запускає кнопку IsDefault паралельно з асинхронним обробником.
  • Додано одноразовий guard завершення ProductPicker: повторний Enter або подвійна подія не може вдруге встановити DialogResult.
  • Такий самий порядок Handled-before-await застосовано до асинхронних гарячих клавіш у SettingsView.
  • Протокол MINI‑T400ME не змінювався.
v0.19.4Аудит бізнес-логіки9 змін
  • Додано read-only BusinessLogicAuditService і дію в «Обслуговуванні», яка звіряє проведені продажі/повернення, оплати, борги клієнтів, розрахунки з постачальниками, підсумки закупівель, складські рухи та відкриті касові зміни; результати експортуються у текстовий звіт і ніколи не виправляються автоматично.
  • Репозиторії продажу/повернення тепер відхиляють відсутні, нульові/непозитивні та непідтримувані рядки оплати перед проведенням і канонізують підтримувані типи оплат.
  • Додано централізовані SupplierPaymentRules: належність постачальника/сесії, стан Posted, залишок по сесії та загальний борг постачальнику повторно перевіряються всередині IMMEDIATE-транзакції; аванси постачальнику навмисно не моделюються.
  • Ручний CashOut постачальнику тепер має взаємне посилання SupplierPayment; редагування/відв’язування синхронізує касу й оплату постачальнику. Готівкові розрахунки, прив’язані до сесії закупівлі, не можна редагувати як звичайні ручні рухи.
  • TransactionIntegrity.EnsureCashMovement тепер перевіряє суму/метод/постачальника та взаємні reference ID оплати постачальнику, а не лише кількість рядків.
  • Розпроведення закупівлі блокується після пізнішого складського руху будь-якого товару з цієї сесії, захищаючи історичну хронологію COGS/залишків.
  • AverageReceipt тепер використовує GrossSales / ReceiptCount, щоб повернення за той самий звітний період не спотворювали середній чек продажу.
  • Нових таблиць/колонок немає; schema_version лишається 0.15.1. Файли протоколу MINI‑T400ME навмисно не змінювалися.
  • Версії Product/Informational — 0.19.4; Assembly/File — 0.19.4.0.
v0.19.3Здоров’я бази даних і відновлення9 змін
  • Додано read-only DatabaseHealthService: повний/ручний integrity_check, foreign_key_check, статистика schema/journal/WAL/page в «Обслуговуванні»; пакет діагностики тепер містить ті самі несекретні health-метадані.
  • Коректне локальне завершення тепер повторює wal_checkpoint(TRUNCATE) перед видаленням маркера чистої сесії; startup recovery записує аномальні помилки/busy WAL checkpoint до перевірки integrity.
  • Наявні AUTO/ROLLING/EOD backup перевіряються перед повторним використанням. Пошкоджений наявний файл більше не заважає створити нову здорову копію. Приховані застарілі build-архіви старші 24 годин очищуються.
  • Нові ZIP-backup зберігають DatabaseSha256 у backup-info.txt; Verify/Restore перевіряє hash payload перед SQLite integrity_check. Старі backup без hash залишаються підтриманими.
  • Відновлення спочатку готує й flush-ить вхідний SQLite у каталозі бази, повторно перевіряє його та використовує атомарний File.Replace на підтримуваних файлових системах Windows із rollback-safe fallback. Startup може відновити перервану заміну з перевірених staging-артефактів, якщо retailpos.db тимчасово відсутня.
  • Щойно скопійовані мережеві mirror-файли перевіряються після копіювання; невдалі копії у призначенні видаляються, а локальні backup лишаються цілими.
  • Backup integrity_check тепер читає кілька діагностичних рядків замість одного ExecuteScalar; невдала матеріалізація ZIP очищає тимчасову БД.
  • Нових таблиць/колонок немає; schema_version0.15.1. Файли протоколу MINI‑T400ME навмисно не змінювалися.
  • Версії Product/Informational — 0.19.3; Assembly/File — 0.19.3.0.
v0.19.2Узгодженість UX7 змін
  • Додано глобальну клавіатурну поведінку модальних діалогів: Ctrl+Enter викликає видиму активну дію за замовчуванням, не перехоплюючи звичайний Enter у сканерів/пошуку.
  • Уніфіковано семантику основної дії/скасування у типових діалогах редагування, оплати й вибору через IsDefault / IsCancel, щоб робота лише клавіатурою була передбачуваною.
  • Підтвердження відкидання змін через Escape тепер за замовчуванням має відповідь Ні замість «Так»; підтвердження корекції Готівка↔Картка також за замовчуванням «Ні».
  • Вибір клієнта: Down переводить фокус із пошуку до результатів; Enter вибирає підсвічений рядок; Ctrl+Enter спрацьовує через дію за замовчуванням. Вибір товару має таку саму семантику.
  • Додано детермінований початковий фокус для редагування товару, створення закупівлі та оплати повернення; некоректний числовий ввід повертає фокус і виділяє конкретне помилкове поле в основних касових діалогах.
  • Змін схеми БД немає; schema_version0.15.1. Файли протоколу MINI‑T400ME навмисно не змінювалися.
  • Версії Product/Informational — 0.19.2; Assembly/File — 0.19.2.0.
v0.19.1Безпека даних і транзакції7 змін
  • Критичні бухгалтерські записи тепер використовують non-deferred/IMMEDIATE SQLite-транзакції через Database.BeginWriteTransaction, отримуючи резервування writer до перевірки бізнес-стану.
  • Додано commit-time інваріанти TransactionIntegrity для продажу, повернення, сесії закупівлі, списання, інвентаризації, зменшення боргу клієнта, ручного руху каси та оплати постачальнику. Будь-яка невідповідність кидає помилку до commit і відкочує всю операцію.
  • Переходи сесії закупівлі й інвентаризації Draft → Posted тепер вимагають рівно один змінений рядок; корекція типу оплати також вимагає рівно одне оновлення.
  • Корекція Готівка↔Картка повторно виконує guard фіскального запису CheckBox/MINI‑T400 всередині write-транзакції, закриваючи race між перевіркою та чергою.
  • Додано одноразові UI-guard для проведення закупівлі, проведення інвентаризації, проведення/редагування списання, корекції боргу та ручного приходу/видатку каси.
  • Нових таблиць/колонок немає; schema_version0.15.1. Файли протоколу MINI‑T400ME навмисно не змінювалися.
  • Версії Product/Informational — 0.19.1; Assembly/File — 0.19.1.0.
v0.19.0Стабілізація та полірування перед 1.08 змін
  • Додано single-flight gate проведення POS: один видимий кошик не може бути проведений двічі, поки асинхронна фіскалізація ще завершується.
  • Додано зовнішній safety-path для неочікуваної помилки під час завершення продажу. Якщо SQLite commit уже відбувся, видимий кошик очищається, касир отримує попередження не повторювати чек, а інцидент записується в application.log.
  • Закриття OutPOSt або зміна користувача тепер попереджає про незавершені паралельні чеки; відповідь за замовчуванням — «Ні». Logout/exit блокується, поки продаж активно проводиться.
  • Додано DiagnosticsService і Налаштування → Обслуговування → Пакет діагностики: support ZIP містить стан app/OS/SQLite, несекретні налаштування й обмежені хвости логів, але виключає DB/бізнес-дані/login settings/Secrets.
  • Фатальні винятки тепер пишуть crash-логи з timestamp і зберігають 10 останніх файлів. Неспостережені винятки фонових Task логуються та позначаються observed.
  • Раніше мовчазні помилки автозакриття каси й фонового обслуговування backup записуються в Logs\application.log; application log автоматично обрізається.
  • Змін схеми БД немає; schema_version0.15.1. Розширення протоколу MINI‑T400ME немає.
  • Версії Product/Informational — 0.19.0; Assembly/File — 0.19.0.0.
Серія

OutPOSt v0.18.x

1 записів у наданому CHANGELOG.md
v0.18.0Оптимізація продуктивності для слабких ПК10 змін
  • Пошук товарів відкладає агрегацію штрихкодів і підсумків залишку до визначення вікна результатів; фільтрація штрихкоду використовує індексований EXISTS замість побудови списків штрихкодів для всього каталогу.
  • Точний пошук зі сканера пропускає SQL по внутрішньому коду для не п’ятизначних EAN/UPC-подібних значень і завантажує знайдений товар, залишок і штрихкоди в одному SQLite-з’єднанні.
  • ProductsView, CustomersView і ProductPickerWindow виконують потенційно повільний пошук поза WPF dispatcher із об’єднаним single-flight reload та захистом від застарілих результатів.
  • Важкі агрегати дашборду будуються у фоні й застосовуються одним UI snapshot; звичайний 20-секундний таймер більше не запускає повторно повний dashboard SQL, якщо календарний день не змінився.
  • Локальні startup, rolling та EOD backup винесено з UI-потоку; BackupService тепер серіалізує backup-операції на рівні всього процесу.
  • Для великих списків глобально ввімкнено virtualization/recycling/deferred scrolling DataGrid.
  • Запит списку клієнтів агрегує борг після текстового фільтра й рахує історію покупок лише для обмеженого видимого набору.
  • Додано performance-індекси лише для пошуку по товарах, продажах клієнтів, оплатах, касових змінах та історії боргу клієнтів.
  • Змін протоколу MINI‑T400ME немає. schema_version0.15.1.
  • Версії Product/Informational — 0.18.0; Assembly/File — 0.18.0.0.
Серія

OutPOSt v0.17.x

1 записів у наданому CHANGELOG.md
v0.17.0Перенесення даних, Excel і безпечна міграція8 змін
  • Додано нативний .xlsx експорт/імпорт каталогу товарів без залежності від установленого Excel.
  • Експорт містить коди, назви, SKU, усі штрихкоди, категорії, одиниці, ціни, мінімальні залишки, стан активності та довідковий фактичний залишок.
  • Excel-імпорт не змінює складські залишки; зіставляє спочатку за внутрішнім кодом, далі лише за однозначним штрихкодом; нові категорії створюються автоматично.
  • Перед масовим імпортом створюється backup PRE_IMPORT і виконується автоматична спроба rollback при помилці під час роботи.
  • Додано перевірки дубльованих внутрішніх кодів/штрихкодів у книзі, від’ємних цін і неоднозначних збігів; усі 11 колонок, доступних для запису, є обов’язковими, щоб випадково видалена колонка не очистила дані масово.
  • Додано перевірений transfer package для перенесення бази на інший ПК: snapshot SQLite + налаштування вигляду; імпорт виконує integrity_check і PRE_RESTORE.
  • Секрети/токени DPAPI та апаратні COM-налаштування не включаються до transfer package.
  • Версії Product/Informational — 0.17.0; Assembly/File — 0.17.0.0; schema_version лишається 0.15.1.
Серія

OutPOSt v0.16.x

1 записів у наданому CHANGELOG.md
v0.16.0Щоденний UX і робота з клавіатури9 змін
  • Клавіатурний сценарій POS: F2/F3/F4/F5/F6/F7/F8/F9 для оплати, отриманої суми, пошуку товару, клієнта та знижки.
  • Паралельні чеки: Ctrl+N, Ctrl+Tab / Ctrl+Shift+Tab, Ctrl+1..9.
  • Редагування кошика: Ctrl+Up/Down змінює кількість вибраного товару, Delete видаляє рядок, Ctrl+Delete очищає поточний чек із підтвердженням.
  • Esc скасовує ввід сканера/пошуку й повертає фокус на штрихкод; повторне відкриття «Продажу» також відновлює основний фокус вводу.
  • PaymentWindow підтримує F2/F3/F4; у змішаній оплаті Enter автоматично заповнює залишок суми по картці з урахуванням готівкової частини.
  • ProductPicker повертає не більше 300 активних рядків на широкий запит; ProductPicker/ProductsView використовують debounce 250 мс; F2/F3/F4 фокусують код/назву/штрихкод у виборі товару.
  • ProductRepository застосовує ліміт результатів до дорогої агрегації залишку, якщо не задано фільтр за діапазоном залишку; пошук із діапазоном зберігає повну семантику фільтрації.
  • Протокол MINI‑T400ME не змінено відносно v0.15.2.1. Змін схеми БД немає; schema_version — 0.15.1.
  • Версії Product/Informational — 0.16.0; Assembly/File — 0.16.0.0.
Серія

OutPOSt v0.15.x

3 записів у наданому CHANGELOG.md
v0.15.2.1Виправлення протоколу MINI‑T400ME5 змін
  • CRC16 замінено на точний побайтовий алгоритм із Додатка 6 UniSystem Rev 0.20.02 з початковим CRC 0.
  • Автопошук COM тепер перевіряє parity None/Even/Odd і 1/2 stop bits, а не лише швидкість.
  • Timeout автопошуку тепер масштабується за параметром T0 протоколу для низьких baud rate.
  • Успішна перевірка підставляє port/baud/parity/stop-bit у форму налаштувань, але збереження все одно потребує явного натискання Зберегти.
  • Змін схеми БД немає; schema_version0.15.1.
v0.15.2Стабілізація та полірування MINI‑T400ME8 змін
  • Додано автоматичний пошук і діагностику COM на типових швидкостях без автоматичного збереження знайденої конфігурації.
  • У статусі підключення показується час відповіді.
  • Preflight-перевірки monitor/shift/receipt: відновлюваний стан обладнання не переводить Pending у NeedsReview до фактичного старту чека.
  • Безпечна перевірка cancel+counter: якщо чек не закритий і LastClosedReceiptNumber не змінився, документ повертається в Pending.
  • Ручна звірка NeedsReview в історії апаратних чеків: безпечний повтор дозволений лише при незміненому лічильнику та відсутності відкритого чека.
  • Після команди 30 за замовчуванням виконується повторне читання й перевірка запису товару за кодом і ціною.
  • Z-звіт захищено від запуску при Pending/NeedsReview; після Z виконується повторна перевірка стану.
  • Версія програми 0.15.2 / 0.15.2.0; schema_version без змін — 0.15.1.
v0.15.1Повернення MINI‑T400ME та стійке відновлення апаратної черги10 змін
  • Додано повні й часткові фіскальні повернення MINI‑T400ME: апаратний RETURN-чек відкривається лише для початкового апаратного продажу зі станом Done; підтримуються Cash/Card/Mixed, а Debt не підміняється фіктивним типом оплати.
  • sale_return і mini_t400_return_receipts ставляться в чергу в одній SQLite-транзакції; звернення до COM-порту починається лише після локального commit.
  • Стійке enqueue продажу MINI‑T400 також перенесено в транзакцію SaleRepository.PostSale, щоб збій між локальним commit і зверненням до обладнання не залишав продаж без локального фіскального стану.
  • Додано state machine Pending → Sending → Done/NeedsReview: після перезапуску процесу перерваний Sending стає NeedsReview і ніколи не повторюється автоматично; незайманий Pending лишається безпечним для явного запуску.
  • Додано MiniT400StartupRecoveryService без звернення до COM під час запуску, зведення черги та «Завершити очікуючі» у Центрі керування MINI‑T400. Пакетна обробка працює з Pending продажами/поверненнями й зупиняється після першого неоднозначного результату.
  • «Історія продажів» / «Історія повернень» показують статус MINI‑T400, номер чека й помилку; користувачі апаратного РРО можуть бачити фіскальний статус без права CheckBox. Для NeedsReview немає сліпого повтору.
  • Додано окреме вікно «Історія чеків» зі зміною розміру в Центрі керування MINI‑T400: єдиний журнал продажів/повернень, номер до/після та остання помилка.
  • Деталі продажу показують статус MINI‑T400 і приховують корекцію Готівка↔Картка, якщо апаратний фіскальний запис уже існує.
  • Збережено можливості v0.15.0: прямий serial protocol, читання/запис товарної бази, mapping кодів, синхронізація цін, X/Z, секрети DPAPI, серіалізація доступу до пристрою на рівні процесу та коректне quiesce при завершенні.
  • Додано mini_t400_return_receipts; schema_version = 0.15.1. Версії Product/Informational — 0.15.1, Assembly/File — 0.15.1.0.
Серія

OutPOSt v0.14.x

6 записів у наданому CHANGELOG.md
v0.14.5Стабілізація ПРРО та готовність до робочого використання7 змін
  • Відновлення під час запуску повертає перервані Sending у Retry зі старим request_id, активує Created, ізолює orphan/invalid UUID у NeedsReview і не звертається до CheckBox до входу користувача.
  • Пакетний процесор припиняє поточну обробку після першої тимчасової мережевої помилки, щоб offline-стан не множив HTTP timeout на всю чергу.
  • Неочікувана локальна помилка конкретного фіскального рядка більше не блокує обробку решти черги.
  • Під час коректного завершення глобальний фіскальний pipeline зупиняється перед SQLite WAL checkpoint/backup; нові фіскальні jobs не стартують.
  • ShutdownProgressWindow показує етапи завершення; safety timeout залишає OutPOSt відкритим замість ризикового примусового закриття.
  • Діагностика запуску фіксує невідповідність зв’язаних змін у Logs\checkbox.log.
  • Версії Product/Informational — 0.14.5, Assembly/File — 0.14.5.0; схема лишається 0.14.3.
v0.14.4Центр керування ПРРО3 змін
  • Додано окремий Центр керування для касира в головному меню: health/status, локальна/віддалена зміна, черга, останні чеки, F5, Центр відновлення та безпечне зв’язане відкриття/закриття.
  • Центр керування не переприв’язує віддалену зміну автоматично; стійка прив’язка належить лише coordinator.
  • Версії Product/Informational — 0.14.4, Assembly/File — 0.14.4.0; схема — 0.14.3.
v0.14.3Зв’язані касові та фіскальні зміни8 змін
  • Додано opt-in LinkCashAndFiscalShifts: відкриття/закриття з «Фінансів» координує OutPOSt + CheckBox.
  • Послідовність відкриття: віддалена зміна OPENED → локальна Open; закриття: чиста фіскальна черга → віддалена CLOSED → локальна Closed.
  • Закриття блокується за наявності будь-яких незавершених фіскальних чеків поточної локальної зміни; Error/NeedsReview спрямовуються до Центру відновлення.
  • Додано стійкий зв’язок fiscal_receipts.local_cash_shift_id, backfill старих рядків за register/time та унікальний зв’язок однієї локальної зміни з однією зміною провайдера.
  • Ручне відкриття/закриття ПРРО та зміна конфігурації ПРРО захищені, поки відкрита зв’язана локальна зміна; локальне автозакриття о 23:00 вимкнено в linked mode.
  • Linked mode примусово означає автофіскалізацію; карткові фіскальні продажі/повернення також потребують відкритої спільної зміни.
  • Додано recovery для часткового збою remote already OPENED/CLOSED; повторне закриття не повинно створювати другий Z-звіт.
  • Версії Product/Informational — 0.14.3, Assembly/File — 0.14.3.0, schema_version = 0.14.3.
v0.14.2Фіскальні повернення та Центр відновлення10 змін
  • Фіскальні повні й часткові повернення для продажів зі станом ПРРО Done.
  • Повернення і його fiscal_receipts-рядок створюються в одній SQLite-транзакції; HTTP до CheckBox починається лише після локального commit.
  • Кожне повернення отримує стабільний UUID request_id; перед повторним POST OutPOSt спочатку перевіряє цей UUID у CheckBox.
  • Позиції повернення передаються з is_return=true, документ зв’язується з початковим фіскальним чеком через related_receipt_id, technical_return=false.
  • Cash/Card/Mixed повернення підтримані; Debt не підміняється фіктивною оплатою й переходить у NeedsReview.
  • Додано ПРРО Recovery Center: продажі й повернення зі станами Pending/Retry/Created/Error/NeedsReview, остання помилка, кількість спроб, request_id та ручна дозвірка без зміни UUID.
  • Історія повернень показує ПРРО-стан/фіскальний код і дозволяє повторити перевірку вибраного повернення.
  • Фонова черга тепер обробляє і SELL, і RETURN.
  • schema_version = 0.14.2; фізична таблиця fiscal_receipts сумісна з v0.14.1.
  • Версії Product/Informational — 0.14.2, Assembly/File 0.14.2.0.
v0.14.1Автоматична фіскалізація продажів CheckBox10 змін
  • Додано opt-in Автоматично фіскалізувати нові продажі; після upgrade воно вимкнене за замовчуванням.
  • Продаж і рядок fiscal_receipts записуються однією SQLite-транзакцією; remote HTTP починається тільки після локального commit.
  • Для кожного продажу використовується стабільний UUID request_id; перед retry OutPOSt робить GET цього UUID і лише за відсутності документа виконує POST /receipts/sell. GET-відновлення виконується до вимоги відкритої зміни, тому вже створений документ можна дозвірити після закриття зміни.
  • Підтримані Cash/Card/Mixed; ціни/оплати переводяться у копійки, кількості — у тисячні, а локальне округлення/знижка відображаються line-level VALUE discount/extra-charge.
  • Тимчасові network/408/429/5xx помилки переходять у durable Retry із backoff 30/60/120/300/600 секунд; MainWindow обробляє до 5 ready документів приблизно раз на хвилину.
  • Історія продажів показує статус ПРРО/fiscal code та має ручний повтор; Налаштування → ПРРО показує статистику черги й ручну обробку ready retry.
  • Після створення fiscal_receipts для продажу блокується зміна Cash↔Card у проведеному чеку — ще до першої remote-спроби.
  • Debt не маскується під фіскальний тип оплати — документ переходить у NeedsReview. Повернення фіскальних чеків навмисно заблоковане до v0.14.2.
  • fiscal_receipts розширено fiscal_date і next_attempt_at; schema_version = 0.14.1.
  • Версії Product/Informational — 0.14.1, Assembly/File 0.14.1.0.
v0.14.0Основа інтеграції ПРРО / CheckBox9 змін
  • Додано окремий розділ ПРРО / CheckBox у структурованих Налаштуваннях.
  • Додано test/production середовище та PIN / login-password авторизацію.
  • X-License-Key, X-Access-Key, PIN та пароль зберігаються окремо від SQLite через Windows DPAPI; access token не персиститься.
  • Додано CheckBoxApiService: перевірка підключення, активна зміна, ручне open/close, polling стану.
  • Додано FiscalRepository і локальні таблиці fiscal_shifts, fiscal_receipts для наступної ідемпотентної черги фіскалізації.
  • Додано права prro.view / prro.manage; view-only не отримує секрети у UI.
  • Бойові операції мають явне попередження перед збереженням/відкриттям/закриттям.
  • Автоматичне відправлення продажів до CheckBox у v0.14.0 навмисно не ввімкнено.
  • Версії Product/Informational — 0.14.0, Assembly/File 0.14.0.0; schema_version = 0.14.0.
Серія

OutPOSt v0.13.x

14 записів у наданому CHANGELOG.md
v0.13.13Стабілізація: вікна та збереження робочого простору7 змін
  • Усі звичайні вікна OutPOSt тепер можна змінювати за розміром; старі ResizeMode=NoResize переведено на CanResize, а глобальний WindowPlacementBehavior додатково гарантує resize для нових вікон у майбутньому.
  • Для кожного типу вікна запам’ятовуються останні нормальні Left/Top/Width/Height та стан Maximized. Після наступного запуску те саме вікно відновлюється у попередньому розмірі й позиції.
  • Геометрія зберігається окремо від бізнес-даних у %USERPROFILE%\RetailPOS_Data\window-layout.ini; файл не містить товарів, чеків, PIN чи інших даних магазину.
  • Додано захист від «загублених» вікон після відключення другого монітора/зміни роздільної здатності: якщо збережена позиція більше не перетинається з поточним віртуальним робочим столом, OutPOSt зберігає розмір, але дозволяє Windows вибрати видиму позицію.
  • Стандартне вікно повідомлень OutPOSt також стало resizeable; довгий текст має внутрішню прокрутку замість жорсткого обмеження висоти.
  • Збережені виправлення v0.13.12.1: світлі/налаштовувані «Літери меню» та окреме progress-вікно коректного завершення роботи.
  • Версії Product/Informational — 0.13.13, Assembly/File 0.13.13.0; schema_version = 0.13.8 — схема БД не змінювалася.
v0.13.12.1Виправлення літер меню та коректне завершення роботи7 змін
  • Виправлено реальну причину темних підписів навігації: глобальний TextBlock style перекривав Button.Foreground. Навігаційні підписи тепер мають окремий content template і напряму використовують MenuTextBrush.
  • «Тема → Детальна палітра → Літери меню» тепер реально змінює колір пунктів лівого меню одразу після «Застосувати», без перезапуску.
  • У базових Light/Dark/Contrast палітрах MenuTextColor за замовчуванням світлий.
  • При натисканні X перед checkpoint/backup показується окреме вікно «OutPOSt завершує роботу» з текстом «Програма закривається коректно. Будь ласка, зачекайте…» та анімованим індикатором.
  • Вікно завершення не можна випадково закрити; після WAL checkpoint, backup-maintenance, очищення SQLite pools і clean-session marker воно закривається автоматично разом з OutPOSt.
  • Якщо graceful shutdown завершується помилкою, програма не закривається, progress-вікно прибирається й користувач отримує повідомлення про причину.
  • Версії Product/Informational — 0.13.12.1, Assembly/File 0.13.12.1; schema_version = 0.13.8.
v0.13.11OutPOSt, повна палітра тем і UX чернеток9 змін
  • Ребрендинг RetailPOS → OutPOSt у UI, solution/project, CLR namespace, метаданих EXE/Setup, ярликах і документації; стабільний installer AppId збережено для оновлення поверх наявної інсталяції.
  • Додано іконку Assets/OutPOSt.ico та PNG-ресурс.
  • Налаштування структуровано за категоріями: Тема, Користувачі, Експорт / Імпорт, Бекапи, Обслуговування, Про програму.
  • AppearanceSettings розширено до детальної семантичної палітри з довільним Windows Color Dialog для кожної ролі; Light/Dark/Contrast залишаються швидкими пресетами.
  • Глобальні WPF-стилі переведено на DynamicResource, включно з текстом, ComboBox, вибором у DataGrid, вкладками та контекстними меню.
  • Delete у таблиці сесій видаляє лише Draft після Yes/No; PurchaseRepository.DeleteDraftSession працює транзакційно, перевіряє відсутність проведених залежностей і пише аудит.
  • PurchaseSessionItemWindow відкривається з фокусом на «Назва».
  • Нові резервні копії мають префікс OutPOSt_, але legacy RetailPOS_ продовжують знаходитися локально та в Google Drive.
  • Версії Product/Informational — 0.13.11, Assembly/File — 0.13.11.0; schema_version = 0.13.8.
v0.13.10UX, теми, нечіткий пошук та історія продажів10 змін
  • Додано глобальні налаштування вигляду: Light / Dark / Contrast, акцент Blue / Green / Purple / Orange, розмір шрифту 11–18 та жирний текст.
  • Налаштування вигляду зберігаються окремо від бізнес-даних у appearance-settings.ini та застосовуються до нових і вже відкритих вікон.
  • Основні WPF-ресурси переведено на DynamicResource; DataGrid отримав рядки, заголовки та межі з урахуванням теми.
  • У закупівлях: Space → нова сесія, Enter → відкрити вибрану сесію.
  • Додано SearchTextMatcher, SQLite UDF normalized_contains_ci і fuzzy_score_ci: пошук не залежить від дефісів/пробілів/пунктуації та допускає типові помилки.
  • ProductRepository.SearchAdvanced ранжує результати за релевантністю та обчислює залишки після текстового відбору; живий пошук має debounce 180 мс.
  • Перероблено PurchaseSessionItemWindow: компактний вертикальний layout, назва першою, три цінові поля в одному рядку, однорядковий перегляд штрихкодів зі стрілками, ↑/↓ між полями.
  • ProductPickerWindow: Enter/Return через PreviewKeyDown вибирає поточний товар.
  • SalesHistoryWindow: сьогодні за замовчуванням, календарний період Від/До, підсумок за вибраний період; SaleRepository.GetSalesByPeriod.
  • Версії Product/Informational — 0.13.10, Assembly/File — 0.13.10.0; schema_version = 0.13.8.
v0.13.9Дистрибуція та стабілізація8 змін
  • Додано проєкт інсталятора Inno Setup 6 для випуску одного OutPOSt-Setup-v0.13.9.exe.
  • Setup встановлює OutPOSt у Program Files, створює ярлик у меню «Пуск» і опціональний ярлик на робочому столі та реєструє стандартне видалення програми.
  • Стабільний AppId дозволяє наступним Setup-файлам оновлювати наявну інсталяцію.
  • %USERPROFILE%\RetailPOS_Data навмисно розташований поза каталогом програми й не видаляється під час оновлення або деінсталяції.
  • Setup перевіряє .NET Framework 4.8 і не запускає непрацездатну інсталяцію без необхідної передумови.
  • Додано scripts/build-installer.ps1 та INSTALLER-WINDOWS.md.
  • Відомості про продукт: Автор — Сапожніков Роман; Email — [email protected]. Дані показуються на інформаційній сторінці Setup, у метаданих Windows та Налаштування → Про OutPOSt.
  • Версії Product/Informational — 0.13.9; Assembly/File — 0.13.9.0; schema_version = 0.13.8.
v0.13.8Швидкий вибір клієнтів для продажу в борг8 змін
  • У CustomerPickerWindow, коли він відкритий для продажу або часткової оплати в борг, додано постійний прапорець «Тільки з боргом».
  • Прапорець увімкнений за замовчуванням при кожному відкритті вибору клієнта для боргового сценарію.
  • Поки прапорець активний, SQL повертає лише активних, не видалених клієнтів із дозволеним кредитом і поточним боргом > 0.004 грн.
  • Після зняття прапорця завантажується повний активний список клієнтів, яким дозволено кредит.
  • Замість важкого CustomerRepository.Search() використовується новий SearchForPicker(), який не рахує TotalPurchases, LastPurchaseAt та OverdueDebt.
  • Додано індекс ix_customers_picker для типового фільтра вікна вибору.
  • Звичайне «Обрати клієнта» у POS не змінено: прапорець там прихований, щоб не ламати неборговий сценарій.
  • Версії Product/Informational — 0.13.8, Assembly/File — 0.13.8.0, schema_version = 0.13.8.
v0.13.7Видалення клієнтів і масове списання боргу8 змін
  • У «Повернення боргу» можна вибрати одного або кількох клієнтів і натиснути «Видалити» або Delete.
  • Якщо серед вибраних є клієнти з боргом, OutPOSt запитує «Списати борг?» / «Списати борги?» і показує загальну суму.
  • Після підтвердження борг проводиться як DebtWriteOff, а клієнти приховуються з усіх робочих списків.
  • Історичні чеки, повернення та аудит не стираються: використовується безпечне логічне видалення customers.is_deleted.
  • Для видалення потрібне customers.edit; якщо є борг, додатково потрібне debt.adjust.
  • Операція масового видалення виконується атомарно в одній SQLite-транзакції.
  • Повторна синхронізація Client-Shop не відновлює борг для клієнта, якого вручну видалили в OutPOSt.
  • Версії Product/Informational — 0.13.7, Assembly/File 0.13.7.0, schema_version = 0.13.7.
v0.13.6Виправлення збірки та OAuth scope Google Drive7 змін
  • Виправлено реальну помилку компіляції CS0136 у SalesView.xaml.cs: локальну змінну payments у швидкому готівковому сценарії перейменовано на partialPayments, щоб вона не конфліктувала з пізнішою змінною того самого методу.
  • Google Drive: OutPOSt тепер розпізнає HTTP 403 ACCESS_TOKEN_SCOPE_INSUFFICIENT / insufficientPermissions і показує зрозумілу інструкцію замість сирого JSON Google.
  • Недостатній OAuth-токен автоматично видаляється локально, щоб програма не повторювала той самий невдалий запит нескінченно.
  • Після оновлення Google OAuth зберігається попередній scope, якщо Google не повернув поле scope у відповіді refresh.
  • Якщо збережений токен явно не містить https://www.googleapis.com/auth/drive.file або ширший drive, OutPOSt вимагає чисте повторне підключення.
  • GOOGLE-DRIVE-SETUP.md доповнено обов’язковим кроком Google Auth Platform → Data Access → Add or remove scopes → drive.file.
  • Версії Product/Informational — 0.13.6; Assembly/File — 0.13.6.0; schema_version не змінюється (0.13.0).
v0.13.5Часткова оплата та автоматичний залишок у борг12 змін
  • Вікно Оплата збільшено до 570×570, ResizeMode=CanResize; блок способу оплати загорнуто у вертикальний ScrollViewer.
  • Головне поле Отримано передається в PaymentWindow для готівки, картки й комбінованої оплати.
  • Порожнє Отримано лишається синонімом повної оплати — попередні сценарії не змінюються.
  • Готівка: сума менша за чек більше не блокується всередині PaymentWindow; формується фактична готівкова частина та OutstandingAmount.
  • Картка: якщо Отримано явно менше за чек, фіксується лише ця карткова частина, решта повертається як OutstandingAmount.
  • Комбіновано: при явно введеному Отримано сума готівки + картки повинна дорівнювати саме Отримано; неоплачена різниця до чека може перейти в борг. При порожньому Отримано старе правило повного розподілу чека збережено.
  • Для будь-якого звичайного способу оплати при нестачі показується окреме вікно Недостатньо коштів для оплати. Записати в борг? з кнопками Так / Відмінити.
  • Після Так обов’язково відкривається CustomerPickerWindow у credit-only режимі, потім — друге підтвердження Записати борг на [ім’я]?.
  • До проведення перевіряються дозвіл SalesDebt, активність/credit_allowed і credit_limit.
  • Скасування на будь-якому кроці не змінює товари чека і не створює продаж/борг.
  • Швидкий Enter у головному Отримано для готівки також підтримує часткову оплату + залишок у борг.
  • Версії Product/Informational — 0.13.5; Assembly/File — 0.13.5.0; schema_version не змінюється (0.13.0).
v0.13.4Готівкове підтвердження, розумний пошук і UI5 змін
  • Кнопка «Готівка» у POS знову відкриває вікно «Оплата» для підтвердження, як «Картка»; уже введена на головному екрані сума переноситься у вікно.
  • Enter у головному полі «Отримано» лишається швидким способом одразу провести готівковий продаж.
  • Поле «Штрих-код / код» тепер розпізнає текст: якщо точного коду/штрихкоду немає і введено слово, Enter відкриває «Пошук товару» з цим словом у полі «Назва товару».
  • «Додаткова інформація» збільшена до 900×650, має MinHeight 540 і вертикальний ScrollViewer як страховку для масштабування Windows/малих екранів.
  • Версії Product/Informational — 0.13.4; Assembly/File — 0.13.4.0; schema_version не змінюється (0.13.0).
v0.13.3POS, борги, розпроведення закупівлі та виправлення даних11 змін
  • На екрані Продаж додано Отримано і живий розрахунок Здача; Enter у полі проводить готівковий продаж.
  • Додано редагування Ціна безпосередньо в рядку поточного чека з перевіркою мінімальної ціни.
  • Повернення боргу: фільтр боржників за датою; початковий період — останні 6 місяців.
  • Пошук боржників оптимізовано: агрегат боргу рахується один раз, прострочення — лише для показаних клієнтів.
  • Повторна Client-Shop синхронізація зберігає для LegacyOpeningDebt дату останньої відкритої кредитної покупки, а не дату синхронізації.
  • У Налаштування для Головного Адміна додано корекцію поточних аномальних складських залишків до ±999 із PRE_REPAIR backup та окремим DataRepairCap рухом.
  • Скоро закінчиться: нижню межу відображення змінено з -50 на -10.
  • Проведені закупівельні сесії отримали контекстну дію Зробити не проведеним; створюється PRE_UNPOST, прибираються рухи/пов'язані платежі сесії, відновлюються попередні ціни та чернетка.
  • Розпроведення блокується для Client-Shop історії, при новішій зміні ціни товару або коли пов'язаний готівковий платіж уже у закритій зміні.
  • Вікно операції з боргом збільшено до 580×590, дозволено resize, коментар має мінімальну висоту 95 px.
  • Версія Product — 0.13.3; Assembly/File — 0.13.3.0; schema_version = 0.13.0.
v0.13.2Швидкий PIN-вхід і повна очистка БД13 змін
  • LoginWindow тепер показує список тільки активних користувачів.
  • Останній успішний користувач запам’ятовується поза SQLite; PIN не зберігається.
  • На старті останній користувач автоматично вибраний, фокус одразу в PIN; типовий сценарій — 4 цифри + Enter.
  • Після неправильного PIN поле очищається й зберігає фокус.
  • Ctrl+L автоматично отримує той самий швидкий сценарій зміни користувача.
  • Поруч із Client-Shop імпортером додано Повна очистка БД для Головного Адміна.
  • Перед reset створюється перевірений PRE_RESET backup.
  • Reset виконує WAL checkpoint, SQLite pool clear, створює чисту поточну схему та перевіряє integrity_check.
  • Якщо reset падає після початку заміни, стара робоча БД автоматично повертається.
  • Після reset створюється чистий Адмін / 0000, OutPOSt завершує роботу та потребує нового запуску.
  • Додано Logs\database-reset.log.
  • Версії Product/Assembly/File: 0.13.2 / 0.13.2.0.
  • schema_version лишається 0.13.0: структура бізнес-таблиць не змінювалася.
v0.13.1Портативний Firebird для імпорту6 змін
  • Імпорт GBK більше не залежить від установленого gbak.exe.
  • Пошук Firebird розширено на PATH, FIREBIRD, Registry, Program Files x86/x64 і типові папки Client-Shop.
  • Якщо Firebird не знайдено, OutPOSt автоматично завантажує офіційні Win32-пакети Firebird 2.5.9 із GitHub FirebirdSQL.
  • Службове середовище виконання зберігається в %USERPROFILE%\RetailPOS_Data\Tools\Firebird25.
  • Відновлена Client-Shop FDB відкривається через вбудований Firebird, тому окремий сервер Firebird не потрібен.
  • Ручний вибір gbak.exe залишається резервним варіантом.
v0.13.0Міграція з Client-Shop17 змін
  • Додано майстер Налаштування → Перенесення з Client-Shop.
  • Підтримано .gbk, .fbk, .zup, .fdb.
  • Додано автоматичний пошук gbak.exe та ручний вибір утиліти Firebird.
  • Додано аналіз джерела перед імпортом: товари, групи, контрагенти, сесії, чеки, залишки, борги, останні дати.
  • Додано повторювану синхронізацію за оригінальними ID Client-Shop через legacy_entity_map.
  • Повторний свіжий backup оновлює вже імпортовані товари/контрагентів і додає нові без дублювання тих самих source ID.
  • Поточний склад синхронізується окремими коригуваннями ClientShopSync до фактичного стану свіжого Client-Shop.
  • Поточний клієнтський борг синхронізується через один керований запис LegacyOpeningDebt на клієнта.
  • Історичні закупівлі/сесії імпортуються без повторного руху складу.
  • Історичні закупівлі нейтралізуються оплатою LegacyPaid, яка не впливає на касу й має історичну дату сесії.
  • Історія роздрібних цін імпортується без дублювання при повторному запуску.
  • Повна історія продажів — опційна; не впливає на поточний склад/касу.
  • Перед кожним запуском створюється backup PRE_IMPORT.
  • Додано журнал запусків legacy_import_runs.
  • Додано окремий дозвіл Імпортувати / синхронізувати базу Client-Shop для ролі Кастом.
  • Додано NuGet FirebirdSql.Data.FirebirdClient 8.5.4, сумісний із .NET Framework 4.8.
  • Схема БД: 0.13.0.
Джерело історії

Ця сторінка сформована з CHANGELOG.md проєкту OutPOSt. Якщо певної версії немає в цьому файлі, вона навмисно не додається на сайт із припущень.