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.mdv0.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.mdv0.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.mdv0.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.mdv0.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.mdv0.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; SQLiteschema_version—0.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 та унікальний індекс дедуплікації; SQLiteschema_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; SQLiteschema_version—0.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 перед SQLiteintegrity_check. Старі backup без hash залишаються підтриманими. - Відновлення спочатку готує й flush-ить вхідний SQLite у каталозі бази, повторно перевіряє його та використовує атомарний
File.Replaceна підтримуваних файлових системах Windows із rollback-safe fallback. Startup може відновити перервану заміну з перевірених staging-артефактів, якщоretailpos.dbтимчасово відсутня. - Щойно скопійовані мережеві mirror-файли перевіряються після копіювання; невдалі копії у призначенні видаляються, а локальні backup лишаються цілими.
- Backup
integrity_checkтепер читає кілька діагностичних рядків замість одного ExecuteScalar; невдала матеріалізація ZIP очищає тимчасову БД. - Нових таблиць/колонок немає;
schema_version—0.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_version—0.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_version—0.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_version—0.15.1. Розширення протоколу MINI‑T400ME немає. - Версії Product/Informational —
0.19.0; Assembly/File —0.19.0.0.
Серія
OutPOSt v0.18.x
1 записів у наданому CHANGELOG.mdv0.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_version—0.15.1. - Версії Product/Informational —
0.18.0; Assembly/File —0.18.0.0.
Серія
OutPOSt v0.17.x
1 записів у наданому CHANGELOG.mdv0.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.mdv0.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.mdv0.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_version—0.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.mdv0.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/File0.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/File0.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/File0.14.0.0;schema_version = 0.14.0.
Серія
OutPOSt v0.13.x
14 записів у наданому CHANGELOG.mdv0.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/File0.13.13.0;schema_version = 0.13.8— схема БД не змінювалася.
v0.13.12.1Виправлення літер меню та коректне завершення роботи7 змін
- Виправлено реальну причину темних підписів навігації: глобальний
TextBlockstyle перекривав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/File0.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_, але legacyRetailPOS_продовжують знаходитися локально та в 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 UDFnormalized_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/File0.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_REPAIRbackup та окремим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_RESETbackup. - 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. Якщо певної версії немає в цьому файлі, вона навмисно не додається на сайт із припущень.