Browse Source

Merge branch 'unstable' of blezz-tech/sharix-open-backend into unstable

+ 14 - 0
docs/database/__init__.py

@@ -0,0 +1,14 @@
+from .client import Client
+from .company import Company
+from .documents import Documents, DocumentFile
+from .orders import Orders
+from .permissions import Permissions
+from .provider import Provider
+from .rating_neg import RatingNeg
+from .rating_ok import RatingOk
+from .rating_pos import RatingPos
+from .relationship import Relationship
+from .resource import Resource
+from .service import Service
+from .servicetype import ServiceType
+from .template import Template

+ 27 - 0
docs/database/client.py

@@ -0,0 +1,27 @@
+from .template import Template
+
+
+class Client():
+    description = (
+        "Client - это таблица с клиентами. Клиент/пользователь/аккаунт "
+        "в системе, который по логике получает услугу."
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    requirements = "требования для того, чтобы можно было получать услуги как клиент"
+    status = "активность на основе системы заявок"
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    ticket_status = (
+        "id последнего актуального тикета, касающийся статуса. Если он "
+        "меняет статус на закрытый - вызывается проверка, которая смотрит, "
+        "нет ли другого открытого по пользователю."
+    )
+    user = "пользователь, которому соответствует роль клиента"

+ 39 - 0
docs/database/company.py

@@ -0,0 +1,39 @@
+from .template import Template
+
+
+class Company():
+    description = (
+        "Company - это таблица с партнерами сервисов. Партнер сервиса -"
+        "юридическое лицо или ИП, которое непосредственно организует работу с"
+        "исполнителями и отвечает перед клиентами и перед сервисом за качество"
+        "оказанных услуг. Юридически это лица, фактически оказывающие услуги"
+        "по договору."
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    requirements = "Код необходимый для того, чтобы ресурс мог стать активным"
+    status = "Cтатус обработки заявки"
+    legal_name = "Настоящее имя юридического лица"
+    address = "Юридический адрес"
+    inn = "ИНН компании"
+    kpp = "КПП компании"
+    ogrn = "ОГРН компании"
+    bank_name = "Название банка с расчетным счетом"
+    bik = "БИК компании"
+    rs = "Расчетный счет"
+    ks = (
+        "Корреспондентский счет (счет, открываемый банковской организацией "
+        "в подразделении самого банка)"
+    )
+    tax_method = "Система налогооблажения"
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    repr = "Уникальный идентификатор представителя компании"
+    ticket_status = "ID заявки, привязанной к текущей записи"

+ 55 - 0
docs/database/documents.py

@@ -0,0 +1,55 @@
+from .template import Template
+
+
+class Documents():
+    description = (
+        "Documents - это одна таблица со всеми документами. "
+        "Вообще в концепции предполагалось, что таких таблиц должно быть "
+        "много под каждый тип для удобства поиска. То есть отдельно таблица "
+        "с паспортами, отдельно с правами, отдельно "
+        "с какими-нибудь разрешениями и так далее. "
+        "Что пока непонятно - документов может быть много разных."
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    check_date = "timestamp проверки"
+    check_level = (
+        "информация об уровне проверки. Документ может быть проверен как "
+        "платформой, так и мета-сервисом, так и партнером мета-сервиса, а "
+        "может быть и никем (просто загружен). Указывается, так как "
+        "достоверность проверки разная. Документ, проверенный только на низком "
+        "уровне, не принимается во внимание как имеющийся до прохождения более "
+        "высокоуровневой проверки. Информацию об уровнях проверки можно "
+        "посмотреть по словарю Requirements. В данной таблице хранится "
+        "информация о наиболее высоком уровне проверки."
+    )
+    expire_date = "срок окончания действия документа."
+    status = "активность на основе системы заявок"
+    data_path = "Путь к документу"
+    doc_type = (
+        "тип документа (паспорт/паспорт 1 страница и т д) в соответствии с "
+        "классификатором типов документов (см описание в Requirements)"
+    )
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    company_id = (
+        "идентификатор компании, к которой относится документ, если "
+        "таковая есть (может не быть)"
+    )
+    user_id = (
+        "уникальный идентификатор пользователя (конкретного клиентского "
+        "аккаунта) являющегося владельцем данного документа"
+    )
+    ticket_status = (
+        "id последнего актуального тикета, касающийся статуса. Если он "
+        "меняет статус на закрытый - вызывается проверка, которая смотрит, "
+        "нет ли другого открытого по пользователю."
+    )
+    checked_by = "userid проверившего"

+ 52 - 0
docs/database/orders.py

@@ -0,0 +1,52 @@
+from .template import Template
+
+
+class Orders():
+    description = (
+        "Orders - таблица с заказами"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    status = "текущий статус заказа из возможных на платформе"
+    title = "заголовок заказа"
+    note = "задание к заказу"
+    time_created = "время создания заказа"
+    time_placed = "время размещения заказа"
+    time_start = "время начала оказания услуги"
+    time_start_real = ""
+    time_start_predicted = ""
+    time_finish_real = "фактическое время окончания (точное установленное время)"
+    time_finish_predicted = "предварительное/расчетное время до окончания оказания услуги"
+    real_price = "цена с учетом тарифа поставщика услуг по факту оказания услуги"
+    predicted_price = "расчетная цена с учетом тарифа поставщика услуг"
+    asap = "Срочный ли заказ"
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    ticket = ""
+    service = (
+        "спецификатор услуги провайдера, нужен для установления цены "
+        "(id_service - уникальный идентификатор шаблона услуги, необходим "
+        "для установления цены и исполнителей."
+    )
+    service_type = "тип заказа по классификатору услу"
+    client = "клиент/аккаунт, который оплачивает все оказанные услуги"
+    provider = (
+        "уникальный идентификатор поставщика услуги/аккаунта, который "
+        "оказывает услугу. Если несколько провайдеров собираются мета-сервисом "
+        "в цепочку, где на уровне связи с клиентом нельзя установить одно "
+        "ответственное лицо, то указывается вспомогательный мета-провайдер "
+        "сервиса, и это означает, что мета-сервис несет ответственность перед "
+        "пользователем за сборку услуги воедино."
+    )
+    receiver = "пользователь/аккаунт, который принимает оказываемые услуги"
+    company = (
+        "Идентификатор компании, к которой относится документ, если таковая "
+        "есть (может не быть)"
+    )

+ 50 - 0
docs/database/permissions.py

@@ -0,0 +1,50 @@
+from .template import Template
+
+
+class Permissions():
+    description = (
+        "Разрешения - (проверки/экзамены). "
+        "По смыслу это что-то вроде “документа на право что-то делать” - на "
+        "данном этапе это ограничено метасервисом/платформой, "
+        "при этом он может быть полностью цифровым (выданным "
+        "платформой/сервисом)."
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    permission_type = (
+        "уникальный идентификатор определяющий наличие разрешения из множества "
+        "в словаре - выданных пользователю/клиенту/аккаунту"
+    )
+    check_level = (
+        "(check-level из классификатора платформы) - информация об уровне "
+        "проверки. Проверка может быть проведена как платформой, так и "
+        "мета-сервисом, так и партнером мета-сервиса, а может быть и никем "
+        "(просто загружен). Указывается, так как достоверность проверки "
+        "разная. Экзамен, проверенный только на низком уровне, не принимается "
+        "во внимание как имеющийся до прохождения более "
+        "высокоуровневой проверки."
+    )
+    status = "статус обработки заявки в системе заявок"
+
+    check_date = "timestamp проверки"
+    expire_date = "Срок окончания действия разрешения"
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    ticket_status = (
+        "id заявки, по которой происходит проверка статуса relationship. "
+        "State меняется только в результате изменений в заявке."
+    )
+    user_id = (
+        "уникальный идентификатор пользователя/клиента/аккаунта, которым была "
+        "пройдена проверка и получено разрешение"
+    )
+    checked_by = (
+        "userid проверившего"
+    )

+ 72 - 0
docs/database/provider.py

@@ -0,0 +1,72 @@
+from .template import Template
+
+
+class Provider():
+    description = (
+        "Provider – единица описания поставщика услуг/ответственного лица "
+        "за определенный ресурс (например, машину). "
+        "По сути - это надстройка к клиентскому аккаунту, иллюстрирующая, "
+        "что данный пользователь может выступать не только в роли потребителя. "
+        "То есть, по тому, какие “провайдеры” находятся по идентификатору "
+        "пользователя - можно установить конкретный список услуг "
+        "данного пользователя."
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    type = (
+        "тип поставщика (партнер/ответственное лицо/поставщик услуг). Смысл "
+        "такой - провайдер это статус пользователя, который, в зависимости от "
+        "применения, может нести разный смысл и подразумевает под собой "
+        "какой-то тип действия. Обычные исполнители - это провайдеры услуг "
+        "(код 3). Ответственные за какое-то имущество, которые сдают его в "
+        "аренду - это тоже провайдеры (код 2). Ответственные за набор услуг "
+        "перед метасервисом (фактически - назначенные админы) - это "
+        "провайдеры-партнеры (код 1)"
+    )
+    requirements = (
+        "требования для того, чтобы можно было предоставлять услуги любые в "
+        "этом метасервисе в целом (самые строгие)"
+    )
+    status = (
+        "статус пользователя в системе относительно прохождения проверок "
+        "(activity_status) (может быть active только в том случае, если "
+        "ticket, влияющий на статус - закрыт."
+    )
+    location_type = (
+        "статическая или динамическая локация оказания услуги. Если "
+        "статическая, а исполнитель находится существенно за пределами "
+        "локации - то тогда статус автоматом оффлайн для приема новых заявок."
+    )
+    default_location = (
+        "локация по умолчанию для объекта."
+    )
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    user_id = (
+        "уникальный идентификатор конкретного пользователя системы "
+        "(meta-user), который будет оказывать услугу. Один пользователь может "
+        "быть провайдером нескольких услуг. Статус провайдера означает, что с "
+        "данным пользователем может быть установлена связь, как с исполнителем."
+    )
+    company_id = (
+        "уникальный идентификатор компании, от лица которой выступает "
+        "провайдер. Смысл такой - ответственны могут быть только одушевленные "
+        "лица, компании - не одушевленные. Все услуги предоставляются через "
+        "компании-партнеры, самозанятые или ИП являются единицами "
+        "таких компаний."
+    )
+    ticket_status = (
+        "id последнего актуального тикета, касающийся статуса. Если он меняет "
+        "статус на закрытый - вызывается проверка, которая смотрит, нет ли "
+        "другого открытого по пользователю."
+    )
+    service = (
+        "id услуги, которую предостовляют"
+    )

+ 22 - 0
docs/database/rating_neg.py

@@ -0,0 +1,22 @@
+from .template import Template
+
+
+class RatingNeg():
+    description = (
+        "RatingNeg - это... FIXME: написать описание таблицы"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    count = ""  # Написать описание поля
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    user_who = "уникальный идентификатор инициатора договорных отношений"
+    user_whom = " уникальный идентификатор того с кем связываются"
+    servicetype = "тип оказываемой услуги по классификатору услуг сервиса"

+ 23 - 0
docs/database/rating_ok.py

@@ -0,0 +1,23 @@
+from .template import Template
+
+
+class RatingOk():
+    description = (
+        "RatingOk - это... FIXME: написать описание таблицы"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    count = ""  # Написать описание поля
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    user_who = "уникальный идентификатор инициатора договорных отношений"
+    user_whom = " уникальный идентификатор того с кем связываются"
+    servicetype = "тип оказываемой услуги по классификатору услуг сервиса"
+    

+ 21 - 0
docs/database/rating_pos.py

@@ -0,0 +1,21 @@
+from .template import Template
+
+class RatingPos():
+    description = (
+        "RatingPos - это... FIXME: написать описание таблицы"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    count = ""  # Написать описание поля
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    user_who = "уникальный идентификатор инициатора договорных отношений"
+    user_whom = " уникальный идентификатор того с кем связываются"
+    servicetype = "тип оказываемой услуги по классификатору услуг сервиса"

+ 35 - 0
docs/database/relationship.py

@@ -0,0 +1,35 @@
+from .template import Template
+
+
+class Relationship():
+    description = (
+        "Relationship - описание связей "
+        "(желательных - как имеющиеся договорные отношения, "
+        "и нежелательных - как пожелание любой из сторон)"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    neg_type = "тип договорных отношений по его уникальному идентификатору"
+    requirements = (
+        "код необходимого (самый строгий) для того, чтобы ресурс мог стать "
+        "активным. Оно вставляется автоматом, в соответствии с профилем "
+        "метасервиса. Далее, если кому-то из партнеров или пользователей "
+        "надо строже - применяется более строгий вариант на данную связь."
+    )
+    status = "(статус обработки заявки в системе заявок)"
+    
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    user_id_who = "уникальный идентификатор инициатора договорных отношений"
+    user_id_whom = "уникальный идентификатор того с кем связываются"
+    ticket_status = (
+        "id заявки, по которой происходит проверка статуса relationship. "
+        "State меняется только в результате изменений в заявке."
+    )

+ 42 - 0
docs/database/resource.py

@@ -0,0 +1,42 @@
+from .template import Template
+
+
+class Resource():
+    description = (
+        "Resource/Список ресурсов – автомобили/дома/объекты сервиса"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    resoure_type = (
+        "определение типа ресурса по его уникальному идентификатору "
+        "в соответствии с классификатором"
+    )
+    requirements = (
+        "код необходимого (самый строгий) для того, чтобы ресурс "
+        "мог стать активным"
+    )
+    status = (
+        "статус ресурса в системе относительно прохождения проверок "
+        "(activity_status) (может быть active только в том случае, если "
+        "ticket, влияющий на статус - закрыт."
+    )
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    ticket_status = (
+        "id последнего актуального тикета, касающийся статуса. Если он меняет "
+        "статус на закрытый - вызывается проверка, которая смотрит, нет ли "
+        "другого открытого по пользователю."
+    )
+    user_id = (
+        "уникальный идентификатор ответственного (за состояние, доступность и "
+        "так далее - то есть для договора) пользователя - идентификатор "
+        "провайдера, по которому восстанавливается конкретный "
+        "пользовательский аккаунт"
+    )

+ 73 - 0
docs/database/service.py

@@ -0,0 +1,73 @@
+from .template import Template
+
+
+class Service():
+    description = (
+    "service - спецификация услуги каждого конкретного поставщика "
+    "(например, в рамках сервиса многие могут предоставлять услуги перевозки, "
+    "но конкретный шаблон с конкретным тарифом относится к отдельному перевозчику)"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    price_alg = (
+        "шаблон алгоритма расчета цены для оказываемой услуги (по этой "
+        "переменной определяется, какую функцию для расчета цены вызывать)"
+    )
+    price_km = (
+        "значение параметра стоимости 1км данного поставщика для "
+        "данного шаблона услуги"
+    )
+    price_min = (
+        "значение параметра стоимости 1мин данного поставщика для "
+        "данного шаблона услуги"
+    )
+    price_amount = (
+        "значение параметра стоимости 1 услуги данного поставщика для "
+        "данного шаблона услуги"
+    )
+    company_comission = "Коммисия сервиса"
+    requirements = (
+        "код необходимого (самый строгий) для того, чтобы ресурс мог стать "
+        "активным. Оно вставляется автоматом, в соответствии с профилем "
+        "метасервиса. Далее, если кому-то из партнеров или пользователей "
+        "надо строже - применяется более строгий вариант на данную связь."
+    )
+    service_status = (
+        "статус спецификации типа услуги, принимает значения Online, Offline, "
+        "Preorder with Gap. Online/offline выставляются по проверке параметров "
+        "и желанию пользователя (например, если пользователь переключает себя "
+        "online, но по какой-то причине ему такую услугу оказывать запрещено - "
+        "оно не переключится, то есть надо перед сменой значения этого поля "
+        "всегда запускать проверку)"
+    )
+    status = (
+        "статус обработки заявки в системе заявок. активность на "
+        "основе системы заяво"
+    )
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    ticket_status = (
+        "id последнего актуального тикета, касающийся статуса. Если "
+        "он меняет статус на закрытый - вызывается проверка, которая смотрит, "
+        "нет ли другого открытого по пользователю."
+    )
+    resource_id = (
+        "ответственный за ресурс(не всегда). так как ресурсы сами "
+        "услугу оказать не могут, а также один ресурс может быть представлен "
+        "в виде разных услуг, то фактически с точки зрения смысла системы "
+        "ресурс - это как неодушевленный пользователь. Без провайдера, "
+        "который с его помощью оказывает услугу - никуда. Поле остается "
+        "пустым, если сервис не предусматривает использование услуг. Стоит "
+        "обратить внимание, что это не обязательно ответственный за ресурс. "
+        "Например, за состояние автомобиля может быть ответственен "
+        "пользователь (он и указывается в таблице со свойствами ресурса), "
+        "а услугу доступа или перевозки может оказывать иное лицо."
+    )
+    servicetype_id = "тип оказываемой услуги по классификатору услуг сервиса"

+ 50 - 0
docs/database/servicetype.py

@@ -0,0 +1,50 @@
+from .template import Template
+
+
+class ServiceType():
+    description = (
+        "Перечень типов услуг"
+    )
+
+    # ID METASERVICE
+    id_metaservice = Template.id_metaservice
+
+    # DATA
+    codename = (
+        "латинское наименование услуги в системе"
+    )
+    requirements = (
+        "код требований на основе вспомогательных таблиц-справочников"
+    )
+    status = (
+        "активность на основе системы заявок"
+    )
+    caption = (
+        "наименование услуги для отображения пользователю"
+    )
+    description = (
+        "текстовое описание услуги"
+    )
+    link_agreement = (
+        "ссылка на договор в вики об оказании услуги данного типа "
+        "(аренда, перевозка и тп)"
+    )
+    price_type = (
+        "ценообразование - код допустимых вариантов или код параметров, "
+        "принимаемых во внимание и способ их учета (по сути хорошо "
+        "закодировать формулу)"
+    )
+    company_comission = (
+        "Коммисия сервиса"
+    )
+
+    # OTHER
+    is_global = Template.is_global
+    is_visible = Template.is_visible
+
+    # FK
+    ticket_status = (
+        "id последнего актуального тикета, касающийся статуса. Если он меняет "
+        "статус на закрытый - вызывается проверка, которая смотрит, нет ли "
+        "другого открытого по пользователю."
+    )

+ 16 - 0
docs/database/template.py

@@ -0,0 +1,16 @@
+
+class Template():
+    is_global = (
+        "доступно ли для хранения в глобальном "
+        "сервисе/необходима синхронизация"
+    )
+    is_visible = (
+        "доступно ли для планирования в цепочке "
+        "с другими услугами в глобальном сервисе"
+    )
+    id_metaservice = (
+        "уникальный идентификатор мета-сервиса, необходимый для "
+        "синхронизации данных. Если при синхронизации возникает конфликт "
+        "(несовместимость) с другим сервисом, предлагается или форсировать "
+        "изменения везде (если возможно), либо is_global выставляется как false."
+    )