Перейти к основному содержимому
megapromotingДавайте обсудим

Решения · Стоматологические клиники

Список услуг с отметкой покрытия обязательной страховкой, редактируемый ресепшеном — не PDF с ценами, отправленный по электронной почте.

Сайт стоматологической клиники оценивается по одному критерию: находит ли человек нужную ему услугу, с ценой и единицей измерения — за зуб, за челюсть, за сеанс — и понимает ли он, входит это в страховку или нет. Остальное — декор. Мы строим структуру, которая это удерживает, и панель, через которую персонал меняет всё сам.

Уже построеноLucrarea se poate verifica din exterior chiar acum: datele publice ale unui centru stomatologic raional pe care îl administrăm sunt servite ca fișier structurat — 89 de servicii, fiecare cu categorie, subcategorie, denumire, preț, unitate de măsură și un indicator de eligibilitate pentru asigurarea obligatorie, dintre care 27 marcate ca eligibile; 7 categorii și 10 subcategorii, verificate de noi pe 06.09.2026. A doua parte a dovezii e securizarea, cu diff în istoric: la preluare, parola de administrator era comparată în browser și ajungea în pachetul JavaScript public, iar scrierile pe interfața de programare se puteau face de oricine de pe internet. Precizarea corectă, ca să nu ne atribuim mai mult decât e al nostru: prima variantă a site-ului nu e a noastră. Contribuția care se poate arăta cu diff e preluarea, securizarea, tipurile, integrarea continuă și igiena dependințelor.

Стоматологическая клиника не продает «услуги». Она продает очень длинный список тарифных позиций с единицами, которые не похожи ни на что в другой сфере: за зуб, за челюсть, за удаление, за пролеченный случай, за сеанс, за визит, за вмешательство. Человек, который ищет в интернете, ищет не клинику, а свою позицию: сколько стоит удаление, оплачивается ли за зуб или за визит, покрывается ли страховкой. Сайт, который отвечает на это, полезен; а тот, у которого есть страница «Цены» с прикрепленным PDF, — нет.

Второе, чего требует реальность клиники, — чтобы список можно было менять без программиста. Тарифы меняются, врачи меняются, график неотложной помощи зимой объявляют иначе. Если каждое изменение проходит через разработчика, список остается старым и через несколько месяцев пациенты приходят с прошлогодней ценой. Структура, которую мы строим, хранит публичные данные — услуги и команду — в структурированных файлах, читаемых и интерфейсом программирования, и непосредственно видимой частью сайта, а персонал редактирует их из панели.

Третье, чего никто не просит в brief и что важнее всего, — кто может писать в этот список. При передаче проекта, о котором мы пишем здесь, любой из интернета мог отправить запись в интерфейс программирования, а пароль панели попадал в пакет JavaScript, выдаваемый браузеру, — потому что его проверка выполнялась в браузере. Мы перенесли проверку на сервер: пароль больше не покидает сервер, обратно возвращается подписанный жетон, действительный двенадцать часов, с лимитом восемь попыток за пятнадцать минут на IP-адрес и сравнениями в постоянное время; интерфейс слушает только на локальном адресе, значит, веб-сервер — единственный публичный путь.

Маркировка покрытия по обязательному страхованию заслуживает отдельного предложения, потому что это поле с наибольшей ценностью для пациента и наибольшим риском для клиники: это утверждение с последствиями. Поэтому оно живет как дата, редактируемая учреждением, а не как текст, написанный нами на странице; мы строим поле, отображение и возможность исправить его за минуту.

Что входит

Что конкретно меняется в стоматологических клиниках

Каждая услуга — это позиция со своей единицей, а не строка в прайс-листе

Структура данных каждой услуги содержит категорию, подкатегорию, наименование, цену, единицу измерения и индикатор права на обязательное страхование. Единицы — реальные для этой сферы: зуб, челюсть, удаление, пролеченный случай, сеанс, визит, консультация, анестезия, процедура, исследование, вмешательство — потому что цена без единицы порождает именно тот разговор, которого регистратура хочет избежать.

Таксономия в два уровня, чтобы длинный список оставался просматриваемым

Категория и подкатегория, а не плоский список. В работе, о которой мы пишем: 7 категорий и 10 подкатегорий поверх 89 услуг. Порядок величины имеет значение — при менее чем сотне позиций таксономии в два уровня достаточно; при нескольких сотнях структура становится уже другой темой, и мы говорим это заранее, а не потом.

Маркировка покрытия по страховке как дата учреждения

Индикатор права на услугу находится у каждой услуги, в публичных данных, и может редактироваться клиникой. В цитируемой работе 27 из 89 услуг помечены как доступные. Мы не пишем сами, что входит в страховку, и не выводим это: это утверждение учреждения, с последствиями для пациента, и оно должно в любой момент поддаваться исправлению самим учреждением.

Отдельные экраны для неотложной помощи, ортодонтии, имплантов, педодонтии

Не одна страница «Услуги». Сайт имеет 22 экрана, от услуг и цен до неотложной помощи, ортодонтии, имплантов, педодонтии, прозрачности и обратной связи. Причина практическая: тот, кто ищет «стоматологическая неотложная помощь» в воскресенье вечером, не хочет общую страницу, а страница раздела может рассказать и о графике, и о том, что в нем делается.

Персонал редактирует, разработчик не в цепочке

Услуги и команда редактируются из панели, а записи требуют действительного токена; чтение остается публичным, чтобы сайт работал без аутентификации. Последствие для клиники: изменение тарифа вступает в силу в тот же день, а не в следующую итерацию разработки.

Пароль не покидает сервер, а попытки ограничены

Аутентификация выполняется на сервере и возвращает токен, подписанный HMAC-SHA256, действительный 12 часов, с максимумом 8 попыток за 15 минут на IP-адрес и сравнениями в постоянное время. Секрет подписи генерируется автоматически, в файле с ограниченными правами, хранящемся вне репозитория. Это цифры из кода, а не общие принципы — их можно прочитать и оспорить.

Интерфейс программирования не открыт напрямую в интернет

Он слушает только на локальном адресе, значит публичным путем является только веб-сервер спереди; список разрешенных доменов явный, а тело запросов ограничено 1 МБ. Записи требуют токен, чтения — нет. Это обычная конфигурация — проблема в том, что, когда ее нет, этого не видно снаружи до того дня, когда кто-то ее обнаружит.

Непрерывная интеграция отклоняет пакет, если находит в нем секрет

Проверка, которая компилирует и проверяет типы, делает и еще одну вещь, которую делают немногие проекты: ищет секреты в собранном пакете и падает, если их находит. Это напрямую связано с исправленным дефектом при приеме — пароль попал в публичный пакет именно потому, что это никто не проверял. Сверху — еженедельные обновления зависимостей.

Что не делает сайт стоматологической клиники

Он не подтверждает запись самостоятельно: он собирает заявку, а подтверждение требует либо человека, либо подключения к системе записи клиники — отдельная работа, со своими условиями. Он не публикует клиническую информацию, написанную нами: содержание о лечении — ответственность специалистов. И он не решает, что входит в страховку.

Traseul

Как запрос проходит через систему.

01

Инвентаризируем номенклатуру до дизайна

Первая поставка — это список тарифных позиций с единицей каждой и с отметкой покрытия, в той форме, в которой его ведёт клиника. Если списка нет в структурированном виде — а обычно он есть как файл расчёта или как документ — мы структурируем его сами, а клиника подтверждает его. Дизайн идёт после, потому что он зависит от количества позиций.

02

Строим публичную структуру и панель в одном этапе

Публичные экраны и панель, из которой редактируют, не делаются отдельно, иначе появляются отображаемые поля, которые нельзя редактировать. Мы сдаём сайт с загруженными реальными данными, а не с заполнителем — сайт клиники, заполненный временным текстом, никто не может оценить.

03

Закрываем записи и проверяем снаружи

Аутентификация на сервере, подписанный токен, лимит попыток, интерфейс записи только по локальному адресу, список разрешённых доменов, ограничение на тело запросов. Мы сдаём результат проверки, выполненной извне: что можно прочитать без аутентификации и что нельзя записать.

04

Передаём с инструкцией для того, кто редактирует, а не только с паролями

Мы передаём доступы, документ по вводу в эксплуатацию и короткое обучение для человека, который будет менять тарифы и команду. Передача не считается завершённой, пока кто-то из клиники не сделал сам изменение, которое отображается на сайте.

1Server web în față2pachet static construit3interfață de programare doar pe adresa locală4fișiere structurate cu serviciile și echipaCitirile trec public; scrierile cer un jeton semnat, valabil 12 ore.
4 straturi

Данные

К чему прикасаемся, где оно лежит и сколько остаётся

Правила различаются от одной отрасли к другой. Это те, что применяются в стоматологических клиниках.

Что публично, а что нет, на сайте клиники
Публично: список услуг с единицей и отметкой покрытия, команда, график, контакты учреждения. Непублично: всё, что приходит из формы. Различие кажется очевидным, пока кто-то не разместит на странице обратной связи сообщение со своим именем и проблемой — поэтому формы и публичное отображение никогда не разделяют один и тот же источник.
Заявка на запись содержит данные о здоровье
«У меня болит нижний левый зуб мудрости» — это информация о здоровье идентифицируемого человека, из категории с более строгим режимом. Практические последствия определяются при внедрении: кто имеет доступ к полученным сообщениям, как долго они хранятся, по какому каналу поступают и что никогда не запрашивается в форме.
Цены и отметка покрытия принадлежат учреждению
Мы строим их как структуру и как панель; их содержание принадлежит клинике и меняется по её решению. Мы не публикуем ни одной цифры тарифа как пример в наших материалах, даже в иллюстративных целях — тариф, вырванный из контекста, становится заявлением о клинике.
Кто может писать в публичные данные
Только тот, у кого есть действительный токен, полученный через аутентификацию на сервере, с лимитом попыток. Чтение публично, потому что так и должно быть. Разница между этими двумя предложениями — это как раз дефект, который мы исправили при приёмке упомянутого проекта.
Что остаётся в истории репозитория
История проекта почти всегда содержит данные, которые туда никто не добавлял намеренно: номер телефона, адрес электронной почты, имя администратора контента. Мы относимся к ним именно так — они не попадают в публичные материалы и удаляются из контента по запросу клиента.

Случай

Пароль администратора, который попадал в пакет, отдаваемый браузеру

Ситуация

При приёмке сайта стоматологического центра в панели администрирования было две проблемы, видимые только изнутри. Первая: пароль проверялся в браузере, значит, попадал в публичный JavaScript-пакет. Вторая: запросы на запись к интерфейсу программирования мог делать любой из интернета, а порт был открыт напрямую.

Что мы построили

Мы перенесли проверку на сервер: аутентификация возвращает токен, подписанный HMAC-SHA256, действительный 12 часов, с лимитом 8 попыток за 15 минут на IP-адрес и сравнением в постоянное время; ключ подписи генерируется автоматически, с ограниченными правами, вне репозитория. Интерфейс программирования остался слушать только на локальном адресе, перед ним веб-сервер, список разрешённых доменов и ограничение тела запроса до 1 MB. Записи в сервисы и команду требуют токен; чтение осталось публичным. Поверх всего — непрерывная интеграция, которая компилирует, проверяет типы и отклоняет пакет, если находит в нём секрет.

Что получилось

Публичные данные клиники и сегодня можно проверить извне: 89 услуг, каждая с категорией, подкатегорией, ценой, единицей измерения и признаком покрытия страховкой, из них 27 отмечены как подходящие. Изменилось то, кто может вносить в них записи.

Чего этот случай не говорит

Первую версию сайта строили не мы. В истории репозитория часть коммитов принадлежит внешним разработчикам. То, что мы можем показать через diff, — это приёмка: безопасность, непрерывная интеграция, типы, зависимости.

Вопросы

Что спрашивает кто-то из стоматологических клиник

Можем ли мы сами менять цены, не звоня вам?

Да — это половина работы. Услуги и команду редактируют из панели; записи требуют аутентификации, чтение остаётся публичным. Наша рекомендация: при сдаче проекта человек, который будет этим заниматься, вносит изменение при нас, чтобы мы знали, что это работает с его руки, а не с нашей.

Как показать, что входит в обязательную страховку?

Как признак у каждой услуги, в тех же данных, которые вы редактируете. В работе, которую мы цитируем, 27 из 89 услуг отмечены как подходящие. Мы строим поле и отображение; что именно подходит — это утверждение учреждения, потому что оно имеет последствия для пациента и для клиники.

Почему единица измерения важна у цены?

Потому что в стоматологии цена не за визит. Она за зуб, за челюсть, за удаление, за леченный случай, за сеанс. Цена без единицы вызывает ровно тот разговор, который регистратура ведёт десять раз в день, и, что хуже, ощущение у пациента, что ему по телефону сказали другое.

Сайт может делать записи на приём?

Он может собирать запрос. Подтверждение времени требует либо человека, который смотрит в расписание, либо подключения к системе записи клиники — это отдельная работа, с проверкой совместимости заранее. Мы не называем «онлайн-записью» форму, которая отправляет e-mail.

Кто пишет тексты о лечении?

Специалисты клиники. Мы не пишем клиническую информацию и не „оптимизируем” ее для поиска, потому что это означало бы формулировать медицинские утверждения от имени медицинского учреждения. Мы структурируем, задаем вопросы, на которые текст должен отвечать, и публикуем его после подтверждения.

У меня уже есть сайт, сделанный кем-то другим. Вы можете его взять на себя?

Да, и работа, о которой мы пишем здесь, — именно это. Что мы делаем сначала при передаче: смотрим, что можно писать извне, где находятся пароли и что попадает в пакет, обслуживаемый браузеру. В указанном случае пароль администратора попадал в публичный пакет, а записи мог делать любой. Мы перенесли проверку на сервер и закрыли записи.

Как быстро видно изменение тарифа?

Сразу после сохранения, потому что публичные данные читаются из того же источника, который вы редактируете. То, что мы не обещаем, — это скорость обновления результатов в поисковых системах: это от нас не зависит, и мы не можем этого гарантировать.

Что происходит с данными из контактной формы?

Это определяется при внедрении: куда они попадают, кто их видит, как долго хранятся и что никогда не запрашивается в форме. В клинике сообщение часто содержит описание проблемы со здоровьем, поэтому это не „lead”, а категория данных со строгим режимом — и порядок ее обработки прописывается в опубликованной политике клиники.

Сайт будет говорить, что он сделан вами?

Только если вы хотите. Некоторые из наших работ имеют атрибуцию в подвале, другие — нет; это зависит от клиента. Мы упоминаем это, потому что это вопрос, который задают клиники, и потому что, когда сайт не содержит никакой атрибуции, мы тоже не представляемся авторами без их согласия.

Что вы хотели бы наладить?

Расскажите о своём процессе. Вместе определим, что стоит построить, что можно подключить и как проверим результат.

Давайте обсудим