График работы приложение
Привет, друзья!
Прошу сразу простить: статью старался писать для «самых маленьких» и очень понятным языком.
Однажды, в далёком 2007 году, когда я лишь немного знал о кластеризации, нейронных сетях и «жадных» алгоритмах, передо мной стала задача о создании программы для автоматического составления расписаний.
Предыстория такова: я служил по контракту, и среди сотрудников нашего отдела было организовано дежурство. Ежедневно (и даже в выходные) кто-то назначался дежурным, и на этого несчастного возлагались ответственные и тяжёлые задачи по работе; дежурство было занятием не из простых. Мой командир заранее составлял и подписывал у командования график дежурства отдела на месяц. И эта задача, надо отметить, занимала у него вовсе не пять минут. Так как командир был добрый человек и всегда старался идти навстречу своим людям, он мог составлять график и неделю, потому что нужно было учесть все пожелания сотрудников: кто-то уходил в отпуск, кто-то из него возвращался, у кого-то были командировки, а кому-то просто нужно было забирать пораньше детей из садика по понедельникам и четвергам. Бывало и так, что командир составлял «несправедливые» графики дежурств, в которых одним людям явно доставалось побольше работы, чем другим. В работе отдела также были и «трудные дни» недели (когда в пинципе и работы было чуть больше, и она была чуть напряжённее), и если дежурство выпадало одному и тому же человеку целый месяц подряд на такие дни, то график также считался несправедливым. Такие несправедливые графики коллектив отклонял, и командиру приходилось заново с нуля составлять новый график, иногда по невнимательности кого-то «ущемляя». А что вы хотели: человеческий фактор!
Так как я был программистом, я не мог позволить продолжаться этому «обезьяннему» труду дальше. Я поискал существующие варианты софта для автоматического построения графиков дежурств, но всем необходимым критериям работы и дежуства отдела они не удовлетворяли: не хватало функционала и точности настройки. Тогда у меня возникла идея самому создать программу, которая бы автоматически составляла подобный график, пусть это занимало бы и час работы компьютера (но всё же не неделю работы человека). Я обговорил идею с командиром и отделом, и она была принята на ура. Были учтены все ньюансы и пожелания, которые мы обсудили. Так и родился проект «CoolPlanBro».
CoolPlanBro изначально создавался как бесплатное программное обеспечение с закрытым исходным кодом: если бы его «вынесли» из отдела и распространили, то ничего страшного в этом бы не было. Забегая вперёд скажу, что проект всё-таки получил дальнейшее распространение, инициатором которого был я сам. Уж очень нужна была такая программа моим друзьям, друзьям друзей и так далее. Так и пошло, ведь аналогов не было. Кроме того, люди видели, что программа работает довольно сносно и выдаёт хороший, справедливый результат, а это было заложено в её архитектуру при создании как один из основополагающих базовых принципов.
Итак, как же я создавал эту программу и что легло в её основные принципы работы? Для начала я просто сел и написал на бумажке то, что обязательно должен делать CoolPlanBro:
Задачи детские, и я приступил. Вопросов по интерфейсу и фичам не было, самое сложное было придумать алгоритм поиска идеального графика дежурств. Я рассуждал так: допустим, у нас есть на руках все возможные графики дежурств на следующий месяц (их триллионы, о-о-очень много). Как среди них найти лучший? В результате я пришёл вот к чему: придумал и ввёл систему штрафов. Каждый график имеет штраф. Какой бы вы график дежурств из того триллиона не рассмотрели, у него есть некий конкретный штраф — это просто целое положительное число, например, 27, которое выражает насколько «плох» этот график дежурств. Чем меньше штраф, тем лучше график. Надеюсь, я понятно рассказываю 😉 То есть, если у нас есть три графика дежурств: со штрафом 15, со штрафом 22 и со штрафом 6, то самый лучший график — третий, так как у него самый маленький штраф. Самый несправедливый же — второй. Итак, задача нашего алгоритма — пройти по всем графикам дежурств, для каждого из них подсчитать штрафные баллы и найти лучший график с минимальныйм штрафом.
Как же считается штраф для конкретного графика? Очень просто: по всему графику подсчитывается и суммируется общее количество косяков. За каждый косяк на график налагается определённый штраф в баллах. Косяки бывают разные: подежурил на графике какой-то бедолага два дня подряд — штраф +30 баллов, вышел на дежурство некто несчастный из отпуска — штраф +500 баллов… и так далее. Специальный парсер анализирует график и находит все его косяки. Вот так вот после анализа для каждого графика получаем штраф. Ну а, собственно, систему штрафов придумывли и согласовывали всем отделом. Во что у нас получилось:
Штраф за дежурство два дня подряд | 70 | Два дня подряд дежурить чертовски сложно и неприятно, но одолимо. |
Штраф за дежурство через 1 день | 30 | |
Штраф за дежурство через 2 дня | 10 | |
Штраф за дежурство через 3 дня | 5 | |
Штраф за дежурство через 4 дня | 3 | Идеально. |
Штраф за дежурство через 5 дней | 1 | Ещё идеальнее! |
Штраф за дежурство через 6 дней | 0 | Наиидеальнейше!! |
Штраф за дежурство в одноименный день | 25 | Дежурить две пятницы или два вторника подряд — плохо. |
Штраф за дежурство в нежелательный день | 30 | Это когда кто-то ну никак не может подежурить в определённый день, а по графику — должен. |
Штраф за недежурство в желательный день | 30 | Это когда кто-то просится подежурить в определённый день (связано со спецификой работы), но по графику дежурит другой. |
Штраф за недобор/перебор дежурств | 100 | Все сотрудники должны отдежурить за месяц равное и справедливое количество раз (учитывается также отпуск и отгулы). |
Штраф за дежурство в день отпуска | 500 | Это просто чудовищно, но бывало и такое. Служба… |
Отлично, научили программу считать штраф для каждого графика. Теперь вопрос: как рассмотреть все графики? Допустим, у нас 20 человек, а в месяце 30 дней, тогда общее число графиков, которые необходимо рассмотреть компьютеру равно (в первый день мы можем назначить одного из 20 человек — уже 20 вариантов, для каждого из них во второй день мы также можем назначить одного из 20 человек — уже 400 вариантов) 2030 = 1 073 741 824 000 000 000 000 000 000 000 000 000 000, то есть чуть более одного дуодециллиона! Даже если бы компьютер строил и обрабатывал и считал штраф для одного графика дежурств в один такт одного ядра своего процессора, то четырёхъядерный процессор с тактовой частотой 4GHz на каждое ядро выполнял бы эту работу 6 710 886 400 000 000 000 000 000 0000 секунд, или 2.128·1021 лет, что составляет 150 миллиардов Возрастов Вселенной. Столько ждать мы не сможем: у кого-то через неделю уже командировки, а мы должны ориентироваться на дежурных.
Вновь повторюсь: на момент создания CoolPlanBro я очень смутно представлял себе «жадные» алгоритмы, однако, ко мне в голову пришло весьма схожее с ними решение. Важное замечнание, которое я хотел бы упомянуть перед началом рассказа о придуманном алгоритме: парсер может подсчитать штраф и для не до конца заполненого графика. А алгоритм я запрограммировал так: вначале программа насильно перебирает все возможные графики для некоторого «вменяемого» количества первых дней месяца, так, чтобы рассчёт не превысил в сумме 65535 вариантов графиков (это количество графиков даже слабый компьютер переберёт весьма быстро). То есть для P сотрудников надо найти такое количество дней D, чтобы PD было меньше 65535. Например, для P = 12 сотрудников количество дней D = 4. Это так называемая «база» для дальнейшего построения графика. Из 124 = 20736 просмотренных графиков (не до конца заполненных) программа находит лучший по минимальному штрафу, который, как я уже говорил в своей ремарке, она может подсчитать и для не до конца заполненного графика. Если лучших графиков получилось много (например, 100 — и у всех одинаково маленькой штраф), то программа для всех этих 100 графиков далее пытается найти лучший, расширяя просмотр вперёд на 1 день. В конце концов, база (лучший, но не до конца заполненный график) найдена.
Далее, отталкиваясь от базы, алгоритм перебирает все возможные графики на один день вперёд. Их число будет равно числу сотрудников. Если P = 12, то различных вариантов «база плюс один день» будет всего 12. Из 12 вариантов выбирается лучший и запоминается как текущая база. И так далее до конца месяца, алгоритм срабатывает быстро. Если на любом этапе было найдено несколько оптимальных баз, то алгоритм рассматривает их все, последовательно, и для всего множества находит лучшую следующую базу.
Так как «жадный» алгоритм не просматривает весь дуодециллион возможных графиков и может оказаться несправедливым, пропустив действительно оптимальнейший график, то для увеличения вероятности нахождения наилучшего графика я добавил в конец рассчёта этап оптимизации. На нём происходит следующее: для всех возможных пар дней (то есть 1-е число и 2-е число, 1-е число и 3-е число, и так далее, потом 2-е число и 3-е число, 2-е число и 4-е число, и так далее, в конце — 30-е число и 31-е число) сотрудники, дежурящие в эти пары дней «виртуально» меняются дежурствами, и, если такой график случайно оказывается лучше самого оптимального, то запоминается именно он.
В конце концов получам оптимальный (по моему алгоритму) график дежурств с минимальным штрафом. Ура! Теперь можем экспортировать и напечатать его из Word’а.
На этом моя работа над CoolPlanBro была завершена. Программа сразу стала пользоваться успехом в отделе, потом — в других, быстро перекочевала по флешкам из рук в руки, и, увидя это, я сам впоследствии выложил её в интернет.
Как пользоваться программой (пощёлкайте):
Все совпадения фамилий являются лишь совпадениями
Видеоурок тоже имеется:
Друзья, если вы хотите воспользоваться этой программой, то скачайте и пользуйтесь на здоровье! Надеюсь, она послужит вам верой и правдой и построит немало приятных и, главное, справедливых графиков для вас!
Ура-а-а-а!
По многочисленным просьбам трудящихся я выпустил новую версию: CoolPlanBro2. К уже существующему функционалу первой версии CoolPlanBro я добавил наиболее востребованные на ваш взгляд фишки:
- работает прямо в браузере!
- позволяет более гибко настраивать штрафы!
- для любого дня можно задать любое количество смен!
- для любой смены любого дня можно задать требуемое количесто дежурных!
- открытый исходный говнокод!
Этот универсальный инструмент позволяет настраивать графики смен и в соответствии с ними выставлять будильники. Достаточно лишь выбрать последовательность ваших рабочих дней, и приложение автоматически заполнит календарь, указав также и все выходные.
Простыми чередованиями вроде «сутки на сутки» или «сутки через двое» программа не ограничивается. Тут множество различных шаблонов, учитывающих также вечерние, утренние и ночные смены. Всем им соответствует свой цвет в календаре. При необходимости вы можете создать график с нуля.
Своим графиком можно поделиться с коллегами по работе и друзьями. Это позволит быстро проверить, кто работает в ближайшие праздники и чьи смены пересекаются. Также один пользователь приложения вполне может вести рабочие графики всех членов семьи, чтобы всегда знать, когда ожидаются совместные выходные.
Будильники на все рабочие смены можно выставлять одновременно, единожды указав время. Так же легко, одним действием, их можно отключить на период отпуска. При необходимости на любой день можно добавить неограниченное количество дополнительных будильников и напоминаний.
На производствах и предприятиях с большим количеством посменных бригад графики для всех работников можно вести параллельно. Это позволит быстро узнать, в какой день, во сколько и какая бригада должна заступить. Все они со своими графиками будут отображаться в общем календаре.
Режим статистики в приложении позволит оценить количество отработанных дней и выходных. Всё это также переводится в часы, что по итогам месяца и недели позволит быстро выявить переработку.
В настройках можно изменить интерфейс календаря, выбрать мелодию для будильника и, к примеру, активировать выключение сигала встряхиванием смартфона. На случай каких-то сложностей предусмотрена система подсказок, которая познакомит с основными функциями — достаточно лишь нажать на иконку лампочки.
Загрузить QR-Code Разработчик: Vladimir Kondratenko Цена: Бесплатно
- Android-приложение «График смен» от Lili Petrik, версия: 2.8.10, цена: Бесплатно (отключение рекламы — 99 руб.)
Здрасте ☺. А можно я вставлю «Helpix.ru» прямо сюда? Спасибо ☺.
Я лично обожаю свой график день/ночь. Работаю я с 07:00 до 19:00 и с 20:00 до 07:00. Потом отсыпной и выходной. Но есть две проблемы. Вернее, были.
Будильник. Элементарная вещь доставляла столько много проблем. Его нужно было всегда включать и отключать. В общем, постоянно регулировать вручную. Иначе он либо звонил не перед началом смены, либо не звонил перед началом смены. Например, как это выглядело со стандартным андроидовским будильником?
1. Можно было ухитриться и на целую неделю заполнить будильник правильными сигналами. Допустим, на этой неделе будильник срабатывает в среду и воскресенье перед утренними сменами. А в четверг — перед вечерней. На следующей неделе придется снова перенастраивать. И так — каждую неделю. А ведь легко можно запутаться и ошибиться. Или забыть. Не солнечный какой-то вариант.
2. Можно было поставить утренний и вечерний будильник на каждый день. И в выходные отключать его, судорожно вспоминая: а не на работу ли мне? Кстати, один раз, я так проспал на работу. Отключил спросонья ежедневный будильник, думая, что сегодня выходной. Еще утренний будильник срабатывал за час до окончания ночной смены, а вечерний — когда у меня была в разгаре дневная смена. Опять не солнечный вариант.
3. Можно было каждый день ставить одноразовый будильник. То есть включать эти гребаные галочки перед каждой сменой. Но забыть включить будильник — очень легко, на самом деле.
И это в 2018 году мне нужно было постоянно напрягать мозг, чтобы не забыть правильно настроить будильник? Нет, вы серьезно? Я должен заботиться о том, чтобы будильник меня разбудил или чтобы он не зазвонил не вовремя? Будильник должен служить мне, а не я ему ☺.
Вторая проблема заключалась в том, что всегда было сложно ответить на вопрос: «А работаю ли я через 2 недели, например? Или через полтора месяца?». График-то стабильный. Но пойди посчитай, что там будет через 45 дней. Пробовал считать в Гугл календаре. Пробовал вносить туда смены.
Но, во-первых, сам по себе, гугловский календарь очень ущербный. Он некрасивый, не приятный глазу и не удобный на ощупь. Каждую смену нужно было вносить отдельно, устанавливать отдельно напоминание на каждую смену. Жутко много ненужных пунктов, которые необязательны к заполнению, но отвлекают и тратят время. Заполненные смены отображаются тоже не удобно и не явно. Меня хватило на заполнение одного месяца.
Во-вторых, не такая уж это и легкая задача, например, 15 января, просчитать через Гугл календарь, работаю ли я 8 марта. А ведь мне это было нужно. Всё белое, однотонное. Постоянно сбиваешься.
Гугл календарь предлагает синхронизацию. Предлагает поминутное расписание дел, оповещение о праздниках, но элементарные вещи, которые важны были мне, они не сделали.
А мне всего-то нужно было, чтобы мой график автоматически расставился в календаре, и чтобы автоматически срабатывал будильник на дневную и ночную смену. А в выходной день будильник должен был молчать. И чтобы я это один настроил и больше не лез. Неужели гугловцы считают, что я многое потребовал от стандартного будильника и стандартного календаря в 2018 году?
В итоге, пришлось заняться поиском решения своей проблемы, без Гугла. Пролопатив десяток приложений подобного типа, остановился именно на этом: «График смен» от Lili Petrik. Просто с таким названием есть куча приложений. Берите именно этого производителя, если что. Между прочим, средняя 4,5 из живых оценок и желание автору долгих лет жизни — говорит о многом. Я скажу, что это приложение просто потрясающее. Приложение абсолютно бесплатное и без ограничений. Маленькая полоска рекламы внизу — не мешает нисколько. Хотя ее можно убрать за 99 руб.
Графики автоматически проставляются на 1000 лет вперед. Поэтому если график стабильный, то нет необходимости каждый месяц его менять. Но, при необходимости, в два нажатия, можно поменять выходной на рабочий. То есть проставить себе замену на любой день.
Процесс создания графиков ужасно прост. Ну вот проще некуда.
Если график цикличен, то есть есть четкое и постоянное повторение рабочих и выходных дней, то достаточно ввести один цикл. Например, 2 рабочих, 2 выходных. Остальные циклы программа поставит автоматически, на основании первого цикла. Соответственно, проставляем себе количество рабочих (оплачиваемых) часов и оплату, если нам это важно.
Расчет зарплаты, кстати, не такой гибкий, как расчет рабочего времени. И многие в отзывах к приложению просят добавить северные надбавки и прочие виды премирования. Надо сказать, что разработчик прислушивается к таким просьбам. Правда, некоторые вещи, видимо, просто не знает, как осуществить технически. Поэтому если у Вас не банальный оклад + фиксированные 20% премии, то зарплату программа может посчитать не совсем верно. Хотя отклонение от истины будет не фанатичным.
К слову, программа умеет выставлять и учитывать больничные и отпуска. Соответственно, умеет уменьшать уровень зарплаты и количество отработанных дней, исходя из срока больничного или отпуска. А вот считать оплату за больничный и за отпуск программа не умеет. Ага, покажите мне человека, который сумеет точно посчитать свои выплаты за эти законные возможности отдохнуть от работы. ☺
Если график не цикличен, например, 2/3/1/1/3/4/2/2 и так далее, то есть без какого-либо повторения рабочих и выходных, то все рабочие и выходные нужно проставить вручную. Но, повторюсь. Даже при таком раскладе, проставление смен будет в 100500 раз проще, чем в Гугл календаре.
После составления графика, его можно посмотреть в самом приложении (там еще будет показано отработанное время, с разделением дневных и ночных часов, и заработанные деньги), либо вывести виджетом. Я вывел виджетом. Виджет я использую еще и в качестве календаря. С проставленными сменами он выглядит более дружелюбно и понятно, чем гугловский.
Графиков можно создавать до 5 штук. Понятно, в каких случаях это может быть удобно. Но есть еще одно потрясающее удобство, которое понимаешь не сразу. Графики можно сопоставлять. Вот это просто офигенно удобно. Я сейчас знаю, что на день рождения сына, я работаю в ночь, а жена — выходная. А на мой день рождения в августе, я — в день, а жена — опять выходная. Блин… Тут, конечно, ей повезло ☺. Такая возможность сразу избавляет от проблемы напрягать мозг, подсчитывая, пересчитывая, сверяя и перепроверяя свои и не свои рабочие дни. Уверен, что владельцу малого предприятия с небольшим количеством работников, эта возможность тоже бы пригодилась. Кстати, я сейчас подумал: а почему бы мне не составить график посещения бассейна моим сыном? Составлю, пожалуй. Но позже.
Пока вернемся к моим потребностям. И вот, самое главное. За что я мистера или миссис Lili Petrik на руках готов носить. Это будильник. Который срабатывает только в те дни, когда я работаю. И именно перед началом смены. Он не сработает утром, если я в ночь. Но не прозвенит вечером, если я в день. А в выходные — будет молчать весь день. Даже если я потом поставлю себе замену, то будильник это поймет и сразу подстроится. На будильник можно ставить стандартные или свои мелодии. Он сработает даже при беззвучном профиле.
Есть только один момент. Будильник не умеет одновременно устанавливаться на несколько графиков. Если включить будильник для второго графика, то для первого графика будильник выключится. Это нужно запомнить. Видимо, надо озвучить для Lili Petrik такую идею.
Вот, как бы и все. Маленькая программа, про которую долго не расскажешь. Но удобств она приносит просто вагон. Это называется, «и как я только раньше жил без нее». Честь и хвала таким разработчикам. Попробуйте тоже. Вам понравится ☺. 10/10!
И предлагаю небольшое видео, с примерами создания графиков и установкой будильника.
Гепард Малиновый
Используемое автором устройство: Lenovo P1ma40
– ПОПРОБУЙТЕ БЕСПЛАТНО SHIFTLIFE В РАБОТЕ –
Организатор ShiftLife – это приложение-календарь, разработанное специально для людей, работающих посменно.
— Упорядочьте график своих смен.
— Ведите учет своих рабочих часов.
— Вычисляйте зарплату.
ShiftLife просто и ясно отображает предстоящие смены, дни учебной подготовки, праздники, дни дежурства и другие важные события.
ShiftLife поможет планировать график рабочих и выходных дней, а также с легкостью фиксировать отработанные смены, сверхурочные часы, места работы, почасовые ставки, общую оплату, больничные дни и другие подробности.
ShiftLife обладает простым интерфейсом, обеспечивающим быструю интуитивную работу и легко доступные функции. Это приложение быстро станет для вас незаменимым.
ФУНКЦИИ:
* Apple Watch
* Уведомление центр Виджет
* iPhone, iPad Pro, iPad, iPad mini.
* iCloud, Google, Outlook, Yahoo, iCal Sync.
* Быстрый ввод смены. Информацию о сменах за целый год можно получить за считанные секунды.
* Добавление, удаление и редактирование календарей.
* Гибкость обработки любого рабочего графика.
* Синхронизация календарей и графиков смен через Bluetooth с коллегами и друзьями.
* Картинки для отображения календарных месяцев.
* Импортирование личных изображений из фото.
* Настраиваемые события, больничные, праздники, дни учебной подготовки.
* Несколько ежедневных событий и смен.
* Представление в виде списка, дня, недели и месяца.
* Понятный пользовательский сенсорный интерфейс с интуитивными жестами.
* Календари праздников.
* Экспорт и импорт ваших событий и смен с использованием .ics файлов.
* Создание изображения «месяц» в качестве фонового рисунка для ваших телефонов.
* Возможность отправки друзьям изображения календаря.
_________________
— ЭТО ПРИЛОЖЕНИЕ – ПЛАТНОЕ. ПРЕЖДЕ ЧЕМ ПОКУПАТЬ ЕГО, ЗАГРУЗИТЕ ДЛЯ ПРЕДВАРИТЕЛЬНОЙ ОЦЕНКИ ОБЛЕГЧЕННУЮ ВЕРСИЮ. ОБЛЕГЧЕННАЯ ВЕРСИЯ ПОЛНОСТЬЮ ФУНКЦИОНАЛЬНА, НО СОДЕРЖИТ РЕКЛАМУ И ОГРАНИЧЕНА В КОЛИЧЕСТВЕ СОБЫТИЙ, КОТОРОЕ МОЖНО ДОБАВЛЯТЬ В КАЛЕНДАРЬ. ДЛЯ УДАЛЕНИЯ ОГРАНИЧЕНИЙ И РЕКЛАМЫ МОЖНО ВОСПОЛЬЗОВАТЬСЯ НЕДОРОГОЙ ВСТРОЕННОЙ ПОКУПКОЙ ИЗ ПРИЛОЖЕНИЯ. В РЕЗУЛЬТАТЕ ПЕРВОНАЧАЛЬНОЙ ПОКУПКИ ПОЛНОЙ ВЕРСИИ ДОБАВЛЯЮТСЯ КАЛЕНДАРИ НА ТЕКУЩИЙ И СЛЕДУЮЩИЙ ГОД. КАЛЕНДАРИ НА ПОСЛЕДУЮЩИЕ ГОДЫ ПРЕДЛАГАЮТСЯ ЗА НЕБОЛЬШУЮ ПЛАТУ В ВИДЕ ВСТРОЕННОЙ ПОКУПКИ. ПРИ ПРЕДЛОЖЕНИИ ПОДТВЕРДИТЬ ВСТРОЕННУЮ ПОКУПКУ ВСЕГДА ОТОБРАЖАЕТСЯ ЕЕ ЦЕНА В МЕСТНОЙ ВАЛЮТЕ.
Отдельное дополнение под названием «Магазин календарей», предлагаемое SchedJoules, обеспечивает пользователям дополнительные возможности настройки в соответствии с их потребностями и предпочтениями. Дополнение содержит множество календарей праздников, спортивных событий, погоды и здорового образа жизни. Эти календари можно настроить так, чтобы они отображались вместе с вашими персональными календарями. Можно приобрести доступ к дополнению «Магазин календарей» на 1 год с возможностью автоматического обновления подписки. При этом вы получите полный и постоянный доступ к «Магазину календарей», в том числе обновлениям в режиме реального времени. Годовая подписка на дополнение «Магазин календарей» составляет 1,99 $ (цена может изменяться в зависимости от местоположения) и начинается с одномесячной пробной версии, позволяющей оценить приложение перед его покупкой. По истечение одного месяца с вашей учетной записи iTunes будет снята соответствующая плата после подтверждения покупки. Подписка на дополнение автоматически продлевается. Для ее прекращения следует отключить функцию автоматического продления минимум за 24 часа до окончания срока текущей подписки. Отмена текущей подписки не предусмотрена. Управлять подпиской или отменить автоматическое продление подписки на дополнение «Магазин календарей» в любое время можно в настройках учетной записи iTunes. С полным содержанием Условий обслуживания и Политикой конфиденциальности можно ознакомиться на странице www.ovalkey.com/terms-of-service и www.ovalkey.com/privacy-policy соответственно.