Как я сделал программу для стоматологии, которая работает без интернета — с одной флешки
Ко мне обратилась государственная стоматологическая клиника (не та, где работает мама, о чем я писал ранее).
Задача звучала достаточно просто, а по факту оказалась с занятным набором ограничений: инвентаризацию кабинетов и табель рабочего времени вели вручную в Excel и Word, и это всё хотелось автоматизировать.
Условия сразу отсекали большинство обычных решений. Сеть в клинике закрытая — ничего стороннего ставить нельзя, никаких мессенджеров, никаких облачных сервисов.
Нужна была программа, которая просто работает — воткнул флешку в любой компьютер, запустил, всё функционирует, без интернета и без установки чего-либо.
Мне конечно потребовалось время, чтобы сообразить как такое "сокровище" создать))
Архитектура: одна программа, ноль интернета
В итоге получилось локальное веб-приложение, упакованное в один exe-файл. Логика такая: запускаешь — поднимается локальный сервер, автоматически открывается браузер с интерфейсом.
Сервер слушает только 127.0.0.1 — то есть даже теоретически недоступен из остальной сети клиники. Это было не для галочки, а прямое требование безопасности для закрытого контура.
Все данные — в одном файле, обычная SQLite-база рядом с программой:
Бэкап — это буквально скопировать один файл clinic.db на другую флешку раз в месяц. Ничего умнее для клиники, где основной пользователь не особо дружит с компьютером, придумывать не стал — чем проще процедура бэкапа, тем больше шанс, что её реально будут делать.
Импорт из чего угодно
Кабинеты годами вели данные в разных форматах — где-то xlsx, где-то старый xls, где-то вообще Word-таблицы. Переучивать всех вносить данные по-новому было не вариантом, так что программа сама определяет формат и пытается угадать колонки по заголовкам:
Не идеально — иногда угадывает неправильно, и тогда нужно поправить руками. Но для реальных файлов, которые копились годами с разными названиями колонок, это оказалось рабочим компромиссом между "полностью автоматически" и "заново всё вбивать вручную".
Табель — не ИИ, а обычная детерминированная логика
Тут специально хочу быть честным: табель не "придумывает" никакой алгоритм машинного обучения. Это просто программа, которая знает календарь, знает сотрудников (один раз запоминает их из образца заполненного табеля) и раскладывает коды по правилам — рабочий день, выходной, а дальше корректировки вручную:
Вписал "10-24" — коды и итоговые часы в этом диапазоне пересчитываются автоматически. Никакой магии, просто нормально спроектированная логика вместо ручного пересчёта в экселе.
Что было не гладко по пути
Список для честности, а не для красоты: сломался pip, чинил через ensurepip. PyInstaller не хотел находиться в PATH — пришлось гонять через python -m PyInstaller. Парсинг docx и html без сторонних тяжёлых библиотек — отдельное упражнение на терпение. И отдельно пришлось повозиться, чтобы exe нормально запускался не только на моей машине, а на любом чужом компьютере, куда воткнут флешку — там вылезают свои сюрпризы с путями и правами доступа.
Почему не готовый сервис
Готовых сервисов учёта полно, но почти все — облачные и требуют либо интернет, либо установку. Тут условие было прямо обратное. Проще было написать своё под эти конкретные ограничения, чем городить костыли вокруг продукта, который на такое вообще не рассчитан.
Комплект передачи
Флешка с exe-файлом и pdf-инструкцией на простом языке, с подсказками и шпаргалкой в конце. Ничего лишнего — ровно то, что нужно человеку, который просто хочет, чтобы это работало, не разбираясь, что там внутри.