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

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

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

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

Уже построеноРаботу можно проверить извне прямо сейчас: публичные данные районного стоматологического центра, которым мы управляем, выдаются как структурированный файл — 89 услуг, каждая с категорией, подкатегорией, наименованием, ценой, единицей измерения и индикатором права на обязательное страхование, из них 27 помечены как подходящие; 7 категорий и 10 подкатегорий, проверенные нами 06.09.2026. Вторая часть доказательства — защита, с diff в истории: при приёме пароль администратора сравнивался в браузере и попадал в публичный JavaScript-пакет, а записи в интерфейс программирования могли делать любые пользователи из интернета. Корректная оговорка, чтобы не приписывать себе больше, чем наше: первая версия сайта не наша. Вклад, который можно показать через diff, — приём, защита, типы, непрерывная интеграция и гигиена зависимостей.

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

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

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

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

Что входит

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Traseul

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

01

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

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

02

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

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

03

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

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

04

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

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

1Веб-сервер на входе2pachet static construit3интерфейс программирования только по локальному адресу4структурированные файлы с услугами и командойCitirile 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”, а категория данных со строгим режимом — и порядок ее обработки прописывается в опубликованной политике клиники.

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

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

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

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

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