Compare commits

...

85 Commits

Author SHA1 Message Date
sShemet
1885f6ec5f vault backup: 2026-03-20 14:11:27 2026-03-20 14:11:28 +05:00
sShemet
a5651c5e2b vault backup: 2026-03-20 14:01:23 2026-03-20 14:01:23 +05:00
sShemet
25cacdfbbc vault backup: 2026-03-19 18:01:47 2026-03-19 18:01:47 +05:00
sShemet
53e8eb039b vault backup: 2026-03-18 19:26:55 2026-03-18 19:26:55 +05:00
sShemet
428de2d72f vault backup: 2026-03-18 19:16:49 2026-03-18 19:16:49 +05:00
sShemet
334fb7984d vault backup: 2026-03-17 15:21:19 2026-03-17 15:21:19 +05:00
sShemet
74100ffd5b vault backup: 2026-03-13 19:37:42 2026-03-13 19:37:42 +05:00
sShemet
5b5ede3a07 vault backup: 2026-03-13 17:46:55 2026-03-13 17:46:55 +05:00
sShemet
9b11c9351d vault backup: 2026-03-13 17:36:48 2026-03-13 17:36:48 +05:00
sShemet
a3095fb735 vault backup: 2026-03-13 17:06:33 2026-03-13 17:06:33 +05:00
sShemet
ea63de4a52 vault backup: 2026-03-13 16:26:16 2026-03-13 16:26:16 +05:00
sShemet
cf5ad2305c vault backup: 2026-03-13 16:16:11 2026-03-13 16:16:11 +05:00
sShemet
350f70dae0 vault backup: 2026-03-13 15:56:02 2026-03-13 15:56:02 +05:00
sShemet
8654360715 vault backup: 2026-03-13 15:45:55 2026-03-13 15:45:55 +05:00
sShemet
2298bee312 vault backup: 2026-03-13 15:05:33 2026-03-13 15:05:33 +05:00
sShemet
3e4afe5f50 vault backup: 2026-03-13 14:45:22 2026-03-13 14:45:22 +05:00
sShemet
ec24cc679c vault backup: 2026-03-13 14:15:08 2026-03-13 14:15:08 +05:00
sShemet
ef5cf0ab0a vault backup: 2026-03-13 13:54:55 2026-03-13 13:54:55 +05:00
sShemet
83903449aa vault backup: 2026-03-11 23:43:29 2026-03-11 23:43:29 +05:00
sShemet
710588da6c vault backup: 2026-03-11 17:30:53 2026-03-11 17:30:53 +05:00
sShemet
8d11fc9614 vault backup: 2026-03-10 13:44:31 2026-03-10 13:44:32 +05:00
sShemet
09e3808118 vault backup: 2026-03-07 13:22:03 2026-03-07 13:22:03 +05:00
sShemet
e1c868624a vault backup: 2026-03-06 14:35:23 2026-03-06 14:35:24 +05:00
sShemet
4c28571c98 vault backup: 2026-03-04 10:26:46 2026-03-04 10:26:46 +05:00
sShemet
1d74143db4 vault backup: 2026-03-03 11:17:11 2026-03-03 11:17:11 +05:00
sShemet
da4571f6b5 vault backup: 2026-03-03 10:36:50 2026-03-03 10:36:50 +05:00
sShemet
771403b523 vault backup: 2026-03-02 10:47:17 2026-03-02 10:47:17 +05:00
sShemet
2e2ee8e2ac vault backup: 2026-03-02 10:47:14 2026-03-02 10:47:14 +05:00
sShemet
23f6e5c3d6 vault backup: 2026-03-02 10:45:34 2026-03-02 10:45:34 +05:00
sShemet
5828fdf2a2 vault backup: 2026-03-02 10:35:28 2026-03-02 10:35:28 +05:00
sShemet
c909bba8cc vault backup: 2026-02-28 21:51:50 2026-02-28 21:51:50 +05:00
sShemet
4378bc6532 vault backup: 2026-02-28 21:41:46 2026-02-28 21:41:46 +05:00
sShemet
b4b2e2fc8a vault backup: 2026-02-27 14:29:58 2026-02-27 14:29:58 +05:00
sShemet
d182cfc9fd vault backup: 2026-02-26 15:15:43 2026-02-26 15:15:43 +05:00
sShemet
dd457ac92a vault backup: 2026-02-25 16:09:49 2026-02-25 16:09:49 +05:00
sShemet
7d0dc42af3 vault backup: 2026-02-25 10:17:33 2026-02-25 10:17:33 +05:00
sShemet
ef9dc98cb2 vault backup: 2026-02-24 14:20:30 2026-02-24 14:20:30 +05:00
sShemet
fd715a5ec2 vault backup: 2026-02-23 14:47:49 2026-02-23 14:47:49 +05:00
sShemet
d485769fc5 vault backup: 2026-02-23 14:37:42 2026-02-23 14:37:43 +05:00
sShemet
6356e0aba7 vault backup: 2026-02-20 21:57:19 2026-02-20 21:57:19 +05:00
sShemet
5a6da54d26 vault backup: 2026-02-20 21:47:14 2026-02-20 21:47:14 +05:00
sShemet
94c023deab vault backup: 2026-02-20 16:55:05 2026-02-20 16:55:05 +05:00
sShemet
25cb8b93fe vault backup: 2026-02-18 16:25:45 2026-02-18 16:25:45 +05:00
sShemet
3197e35e76 vault backup: 2026-02-18 15:15:13 2026-02-18 15:15:13 +05:00
sShemet
c6730ad45d vault backup: 2026-02-18 14:44:58 2026-02-18 14:44:58 +05:00
sShemet
fb348b0fbf vault backup: 2026-02-17 21:40:59 2026-02-17 21:40:59 +05:00
sShemet
42dc7d8134 vault backup: 2026-02-17 21:10:43 2026-02-17 21:10:43 +05:00
sShemet
c99e12d3ff vault backup: 2026-02-17 21:00:37 2026-02-17 21:00:37 +05:00
sShemet
0c114560b0 vault backup: 2026-02-17 20:50:30 2026-02-17 20:50:30 +05:00
sShemet
a6c71cbbcc vault backup: 2026-02-13 14:19:54 2026-02-13 14:19:54 +05:00
sShemet
7057019807 vault backup: 2026-02-13 14:09:47 2026-02-13 14:09:47 +05:00
sShemet
5cf84d302c vault backup: 2026-02-13 13:08:51 2026-02-13 13:08:51 +05:00
sShemet
0ff4b2fa9a vault backup: 2026-02-13 12:58:44 2026-02-13 12:58:44 +05:00
sShemet
23577e8a76 vault backup: 2026-02-13 12:48:39 2026-02-13 12:48:39 +05:00
sShemet
cbbfc126ef vault backup: 2026-02-12 14:38:44 2026-02-12 14:38:44 +05:00
sShemet
b982cf5439 vault backup: 2026-02-12 14:28:37 2026-02-12 14:28:37 +05:00
sShemet
0a5b785f87 vault backup: 2026-02-12 12:07:35 2026-02-12 12:07:35 +05:00
sShemet
d42e8ad066 vault backup: 2026-02-12 11:57:29 2026-02-12 11:57:29 +05:00
sShemet
049d8d4b60 vault backup: 2026-02-09 12:59:09 2026-02-09 12:59:09 +05:00
sShemet
342cc08ac5 vault backup: 2026-02-09 12:28:51 2026-02-09 12:28:51 +05:00
sShemet
9a7b22c194 vault backup: 2026-02-06 15:29:15 2026-02-06 15:29:15 +05:00
sShemet
72434a90d5 vault backup: 2026-02-06 13:17:07 2026-02-06 13:17:07 +05:00
sShemet
e6cf63d700 vault backup: 2026-02-05 20:18:01 2026-02-05 20:18:01 +05:00
sShemet
08411b122f vault backup: 2026-02-05 20:07:56 2026-02-05 20:07:56 +05:00
sShemet
3af3f337ab vault backup: 2026-02-05 19:57:48 2026-02-05 19:57:48 +05:00
sShemet
362f1caa7a vault backup: 2026-02-05 19:38:05 2026-02-05 19:38:06 +05:00
sShemet
73d9b52cd4 vault backup: 2026-02-05 19:37:39 2026-02-05 19:37:39 +05:00
sShemet
96eba40f57 vault backup: 2026-02-05 19:27:34 2026-02-05 19:27:34 +05:00
sShemet
0febea824f vault backup: 2026-02-05 19:17:29 2026-02-05 19:17:29 +05:00
sShemet
1d482afd62 vault backup: 2026-02-05 19:07:21 2026-02-05 19:07:21 +05:00
sShemet
df446242d0 vault backup: 2026-02-05 18:57:14 2026-02-05 18:57:14 +05:00
sShemet
51d405f181 vault backup: 2026-02-05 18:37:02 2026-02-05 18:37:02 +05:00
sShemet
3b32360909 vault backup: 2026-02-05 18:16:20 2026-02-05 18:16:20 +05:00
sShemet
9aa8192c3c vault backup: 2026-02-05 17:46:05 2026-02-05 17:46:05 +05:00
sShemet
12de185284 vault backup: 2026-02-05 17:35:59 2026-02-05 17:35:59 +05:00
sShemet
0cbb944827 vault backup: 2026-02-05 17:25:55 2026-02-05 17:25:55 +05:00
sShemet
1f5763af8e vault backup: 2026-02-05 17:15:48 2026-02-05 17:15:48 +05:00
sShemet
b06fc66e12 vault backup: 2026-02-05 17:05:43 2026-02-05 17:05:43 +05:00
sShemet
36c6138974 vault backup: 2026-02-05 15:45:09 2026-02-05 15:45:09 +05:00
sShemet
343e38cbb9 vault backup: 2026-02-05 15:24:54 2026-02-05 15:24:55 +05:00
sShemet
1457675b85 vault backup: 2026-02-05 14:54:37 2026-02-05 14:54:37 +05:00
sShemet
1eae42a9c4 vault backup: 2026-02-03 13:36:29 2026-02-03 13:36:29 +05:00
sShemet
fadb88d719 vault backup: 2026-02-03 11:55:43 2026-02-03 11:55:43 +05:00
sShemet
967abbf747 vault backup: 2026-02-03 11:35:30 2026-02-03 11:35:30 +05:00
sShemet
61cc4b5e5e vault backup: 2026-02-02 15:00:26 2026-02-02 15:00:26 +05:00
39 changed files with 3316 additions and 185 deletions

View File

@@ -2,5 +2,6 @@
"obsidian-full-calendar",
"obsidian-icon-folder",
"obsidian-git",
"obsidian-smart-typography"
"obsidian-smart-typography",
"mermaid-tools"
]

2633
.obsidian/plugins/mermaid-tools/main.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
{
"id": "mermaid-tools",
"name": "Mermaid Tools",
"version": "1.3.0",
"minAppVersion": "1.4.0",
"description": "Improved Mermaid.js experience for Obsidian: visual toolbar with common elements & more",
"author": "dartungar",
"authorUrl": "https://dartungar.com",
"fundingUrl": "https://www.paypal.com/paypalme/dartungar",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,149 @@
.mermaid-toolbar-container, .mermaid-toolbar-container * {
max-width: 100%;
max-height: 100%;
}
.mermaid-toolbar-top-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: 8px;
}
.mermaid-toolbar-elements-container {
padding-top: 1rem;
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.mermaid-toolbar-element {
font-size: var(--font-ui-small);
cursor: pointer;
padding: 2px 2px 2px 5px;
border-radius: 3px;
flex: 1 0 auto;
}
.mermaid-toolbar-element:hover {
background-color: var(--interactive-hover);
}
.mermaid-tools-element-category-header::before {
content: "▼ ";
font-size: 70%;
padding-bottom: 2px;
}
.mermaid-tools-element-category-header.collapsed::before {
content: "▶ ";
font-size: 70%;
padding-bottom: 2px;
}
.mermaid-tools-element-container {
padding-top: 6px;
border-bottom: var(--border-width) solid var(--color-base-35);
}
.mermaid-tools-edit-element-modal > div {
margin-bottom: 0.5rem;
}
.mermaid-tools-edit-element-modal label {
margin-right: 1rem;
}
/* Custom Category Management Styles */
.mermaid-tools-category-management {
margin-bottom: 2rem;
padding: 1rem;
border: 1px solid var(--color-base-25);
border-radius: 8px;
background-color: var(--color-base-00);
}
.mermaid-tools-category-management h3 {
margin-top: 1rem;
margin-bottom: 0.5rem;
color: var(--text-accent);
}
.mermaid-tools-category-management button.mod-cta {
margin-bottom: 1rem;
}
/* Edit Category Modal Styles */
.mermaid-tools-edit-category-modal {
min-width: 500px;
}
.mermaid-tools-edit-category-modal .setting-item {
padding: 8px 0;
border: none;
}
.mermaid-tools-edit-category-modal .setting-item-info {
flex-grow: 1;
margin-right: 12px;
}
.mermaid-tools-edit-category-modal .setting-item-name {
font-weight: 600;
color: var(--text-normal);
}
.mermaid-tools-edit-category-modal .setting-item-description {
color: var(--text-muted);
font-size: var(--font-ui-smaller);
}
.mermaid-tools-edit-category-modal input,
.mermaid-tools-edit-category-modal textarea {
width: 100%;
padding: 4px 8px;
border: 1px solid var(--color-base-30);
border-radius: 4px;
background-color: var(--color-base-00);
color: var(--text-normal);
}
.mermaid-tools-edit-category-modal input:focus,
.mermaid-tools-edit-category-modal textarea:focus {
border-color: var(--color-accent);
outline: none;
box-shadow: 0 0 0 2px var(--color-accent-2);
}
.modal-button-container {
display: flex;
justify-content: flex-end;
gap: 10px;
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid var(--color-base-25);
}
.modal-button-container button {
padding: 6px 16px;
border: 1px solid var(--color-base-30);
border-radius: 4px;
background-color: var(--color-base-10);
color: var(--text-normal);
cursor: pointer;
font-size: var(--font-ui-small);
}
.modal-button-container button:hover {
background-color: var(--color-base-20);
}
.modal-button-container button.mod-cta {
background-color: var(--color-accent);
color: var(--text-on-accent);
border-color: var(--color-accent);
}
.modal-button-container button.mod-cta:hover {
background-color: var(--color-accent-hover);
}

View File

@@ -4,124 +4,39 @@
"type": "split",
"children": [
{
"id": "b1afd552ee0aa86f",
"id": "6ce0f4672b59a07b",
"type": "tabs",
"children": [
{
"id": "78448225d8fe26c6",
"id": "b5daf62d6db275c6",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 08_2025.md",
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/status_entities.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Разработка - 08_2025"
"title": "status_entities"
}
},
{
"id": "7775a29d77b887ee",
"id": "5c58359e6dbf08fd",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Untitled.md",
"file": "WORK & PROJECTS/UAS/Servers access.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Untitled"
}
},
{
"id": "4f0b55f30aba545b",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/Mol/Deepseek API-key.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Deepseek API-key"
}
},
{
"id": "132e3f17d9c47079",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/test logic.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "test logic"
}
},
{
"id": "6b6ae15e40ca713f",
"type": "leaf",
"state": {
"type": "canvas",
"state": {
"file": "WORK & PROJECTS/UAS/IP-TEL.canvas",
"viewState": {
"x": 356.6478527607362,
"y": -446.65950920245405,
"zoom": -0.872375571136798
}
},
"icon": "lucide-layout-dashboard",
"title": "IP-TEL"
}
},
{
"id": "de53b1cb0148b07a",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/UAS/Plan.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Plan"
}
},
{
"id": "0b07a6ef5dc888ad",
"type": "leaf",
"state": {
"type": "pdf",
"state": {
"file": "WORK & PROJECTS/UAS/Счета оплаты серверов/01_2026_UAS_FIRSTVDS.pdf"
},
"icon": "lucide-file-text",
"title": "01_2026_UAS_FIRSTVDS"
}
},
{
"id": "08b9c8d0b05e0c9b",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Все идеи для Моли"
"title": "Servers access"
}
}
],
"currentTab": 5
"currentTab": 1
}
],
"direction": "vertical"
@@ -144,7 +59,7 @@
"autoReveal": false
},
"icon": "lucide-folder-closed",
"title": "Files"
"title": "Файловый менеджер"
}
},
{
@@ -178,7 +93,7 @@
}
],
"direction": "horizontal",
"width": 411.5
"width": 314.5
},
"right": {
"id": "5a12b65cf742d665",
@@ -194,7 +109,7 @@
"state": {
"type": "backlink",
"state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 06_2025.md",
"file": "WORK & PROJECTS/Ulab/Доступы к точкам.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
@@ -204,7 +119,7 @@
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "Backlinks for Разработка - 06_2025"
"title": "Обратные ссылки для Доступы к точкам"
}
},
{
@@ -213,12 +128,12 @@
"state": {
"type": "outgoing-link",
"state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 06_2025.md",
"file": "WORK & PROJECTS/Ulab/Доступы к точкам.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "Outgoing links from Разработка - 06_2025"
"title": "Исходящие ссылки из Доступы к точкам"
}
},
{
@@ -228,12 +143,10 @@
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true,
"showSearch": false,
"searchQuery": ""
"useHierarchy": true
},
"icon": "lucide-tags",
"title": "Tags"
"title": "Теги"
}
},
{
@@ -242,13 +155,13 @@
"state": {
"type": "outline",
"state": {
"file": "WORK & PROJECTS/UAS/Plan.md",
"file": "WORK & PROJECTS/UAS/Servers access.md",
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "Outline of Plan"
"title": "Структура Servers access"
}
}
],
@@ -256,69 +169,71 @@
}
],
"direction": "horizontal",
"width": 311.5
"width": 300
},
"left-ribbon": {
"hiddenItems": {
"bases:Create new base": false,
"switcher:Open quick switcher": false,
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"daily-notes:Open today's daily note": false,
"templates:Insert template": false,
"command-palette:Open command palette": false,
"mermaid-tools:Open Mermaid Toolbar": false,
"switcher:Меню быстрого перехода": false,
"graph:Граф": false,
"canvas:Создать новый холст": false,
"daily-notes:Сегодняшняя заметка": false,
"templates:Вставить шаблон": false,
"command-palette:Открыть палитру команд": false,
"bases:Создать новую базу": false,
"obsidian-full-calendar:Open Full Calendar": false,
"obsidian-git:Open Git source control": false
}
},
"active": "de53b1cb0148b07a",
"active": "5c58359e6dbf08fd",
"lastOpenFiles": [
"WORK & PROJECTS/UAS/Счета оплаты серверов/01_2026_UAS_FIRSTVDS.pdf",
"WORK & PROJECTS/UAS/Plan.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/План СИЛА.md",
"Без названия.md",
"WORK & PROJECTS/UAS/MAIL TRANSFER.md",
"PERSONAL PROJECTS/VPS.md",
"PERSONAL PROJECTS/STREAMS/TEXT TEMPLATE.md",
"PERSONAL PROJECTS/STREAMS/P2EP GOLD ZODIAC AOBA TV.md",
"PERSONAL PROJECTS/STREAMS",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/Шаблон договора 2024-2025.doc",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/Оборудование.xlsx",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/ОА ЛИМС.xlsx",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/для ЛИМС.7z",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/_Сотрудники.xlsx",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/_Помещения.xlsx",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/f92754ca-70d3-4753-ae10-3a29e541da4f.pdf",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/Act.xlsx",
"WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/GRB/Account.xlsx",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/entities flow.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/Структура статусов.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Система тарификации/Расчёт тарифов и списаний.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/1.0/1.0.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/00001_Редакторорм/Таблицы нумератора и документов.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/00001_Редакторорм/Архитектура редактора и генератора (Alfa + Mol).canvas",
"JRPG.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Websockets scheme.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Alfa cloud prod.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/notifies.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/СМК.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/00001_Редакторорм/Описание первой версии.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Схема связей юрлиц и адресов.canvas",
"WORK & PROJECTS/UAS/Untitled.canvas",
"WORK & PROJECTS/UAS/Счета оплаты серверов",
"WORK & PROJECTS/UAS/Новая папка",
"WORK & PROJECTS/UAS/IP-TEL.canvas",
"WORK & PROJECTS/UAS/Servers access.md",
"WORK & PROJECTS/UAS/Plan.md",
"WORK & PROJECTS/UAS/IP-TEL.png",
"WORK & PROJECTS/UAS/Access.md",
"PERSONAL PROJECTS/cloudflare temp mail.md",
"WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.md",
"WORK & PROJECTS/Untitled",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/beget_2026_01.pdf",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/beget_2026_01.pdf.crdownload",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/firstvds_2026_01.pdf",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/Operation_Check_PJSC_Sberbank_08012026.pdf",
"PERSONAL PROJECTS/P2EP/logo.canvas",
"WORK & PROJECTS/UAS",
"PERSONAL PROJECTS/P2EP/cdRead.canvas",
"PERSONAL PROJECTS/P2EP/Новый текстовый документ.txt",
"PERSONAL PROJECTS/P2EP/pseudoCode/fade calculation.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Структура таблиц. Основа + заказы.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля заявки v2.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/Динамические поля Заявок (декомпозиция) 2026.02.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/pgo_to_groups.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/modules_to_dyn_controls.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/dynamic_controls_table.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/test logic.md",
"Untitled 1.md",
"WORK & PROJECTS/Mol/Серверы/Supervisor/job_worker.md",
"WORK & PROJECTS/Mol/Серверы/moldev.ru.md",
"WORK & PROJECTS/Mol/Серверы/Mol Public Prod.md",
"WORK & PROJECTS/Mol/Серверы/VPN-FIREWALL-GATE (Cerberus).md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 08_2025.md",
"2025-07-18.md",
"JRPG.md",
"WORK & PROJECTS/Mol/Deepseek API-key.md",
"PERSONAL PROJECTS/cloudflare temp mail.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/samplings table.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/pgo_to_groups.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/modules_to_dyn_controls.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/dynamic_controls_table.md",
"Untitled.md",
"WORK & PROJECTS/Mol/Серверы/Jira - Service - Confluence - Crm.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 07_2025.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 06_2025.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 04_2025.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/Структура статусов.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/status_stage_logs.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/status_stages.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/status_entities_types.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/status_entities_logs.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/status_entities.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/entities flow.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Статусы/Структура статусов.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/ТЗ динамических полей и ФИЗов.canvas",
"WORK & PROJECTS/Mol/Серверы/1С Бухгалтерия.md",
"Структура объектов испытаний.png",
"Схема связей юрлиц и адресов.png",
"WORK & PROJECTS/img/Pasted image 20241212175419.png",

View File

@@ -0,0 +1,127 @@
Отлично, у меня теперь достаточно информации. Вот подробный гайд по интересующим тебя частям игры.
---
## После Sky Museum и битвы с Tatsuya Sudou
После победы над Sudou тебе нужно посетить несколько мест: сначала загляни в Kismet Pub в Aoba (сцена), затем в Police Dept в Konan (ещё сцена). Потом поговори с дамой в Shiraishi (Hirasaka), чтобы узнать, где находится бывший парень Улалы, — и иди к нему в Parabellum (Aoba).
После этого открываются два данжа подряд — **GOLD** и **Club Zodiac**.
**GOLD (Gym):** Иди на север к двери Boxing Gym, затем на запад, потом на юго-восток к лестнице на 2F → на юг, восток, север к лестнице на 3F → на север, немного на запад к Women's Locker Room. Поговори с сотрудницей и получи Gym Key. Вернись к Boxing Gym и войди. Тебя ждёт босс**Joker Ulala**. Она на уровне 20, даёт 2000 exp и 8000 yen. Тактика простая: атакуй и лечись. Важный совет из FAQ: когда Joker применяет заклинание Old Maid, оно случайно заставляет одного из твоих персонажей атаковать союзников. Единственный способ защититься — выбрать команду "Defend" для всех персонажей в тот ход.
**Club Zodiac:** Иди на запад, север, восток. Войдя внутрь, пройди через дверь у бара. Путь: север → восток → север → северо-запад → север до лестницы на 2F. Далее: восток, юг, восток, юг, восток, юг, восток к лестнице на 3F. Поднявшись, иди на запад, потом на север к двери Secret Casino. Пароль — **"Panther"** (можно узнать у мафиози в Staff Room, если сначала попробовать войти с неверным паролем). Босс — **Joker Noriko + 2 Ryuman**. Фокусируйся на слабостях каждого противника по очереди, не забывай защищаться от Old Maid.
---
## Aoba Park (первый визит)
Данж делится на 3 зоны: Южная сторона (вход), Центральная зона (цель первого визита — Rest Area) и Северная сторона (цель второго визита — Concert Hall).
Перед входом поговори со стариком у парка — он расскажет слух о говорящих цветах. Распространи этот слух, чтобы открыть сайд-квест. Далее двигайся на восток, подбери White Bandana из ящика, поговори с синим цветком. Затем зигзагом на северо-запад, потом на восток. Говори с жёлто-зелёным цветком возле ворот, восточнее найдёшь сундук с Miracle Soda. Пройди через ворота в центральную часть. Иди на север, поговори с жёлтым цветком, затем снова через ворота.
Ищи Rest Area — она в западном углу второй зоны. Третью зону посещать необязательно, хотя там есть Trish's Fountain у северного края.
**Сайд-квест Idol's Ghost (Линда):** Если начал квест в Shiraishi Ramen, в парке встретишь именного врага Linda. После победы она дропает Linda's Bra. Важно: не жди конца данжа — сдай предмет сразу, иначе NPC в Shiraishi исчезнет.
**Редкий враг Nata:** В парке может появиться демон-персона Nata на уровне 39 (при средней партии ~24). Он сразу кастует Taru Kaja на себя, удваивая физатаку, и бьёт почти на 300 урона. Слаб только к Молнии (Lightning). Главная тактика — чередовать воскрешение союзников и атаки самыми мощными заклинаниями. За победу получишь его карточку Paopei.
**После парка — развилка:** Иди в Kuzunoha в Aoba и распространи слух о человеке в Parabellum. Если выберешь женщину — к тебе присоединится Ellen (Eriko/Ellie). Если мужчину — Nate (Nanjo). Затем иди в Parabellum (Aoba).
---
## Бомбоубежище в Kasugayama (опциональный данж)
Bomb Shelter — опциональный данж, доступный через подземный склад школы Kasugayama High. По слуху, тот, кто войдёт, никогда не найдёт выход — но есть и другой слух о человеке, которому удалось выбраться с помощью зеркала. Данж разделён на 9 зон; каждая новая зона открывается после прохождения соответствующего основного данжа игры. Внутри карту можно использовать только после нахождения её в этой зоне.
Уже через несколько минут в зоне 2 найдёшь карту — она очень пригодится, так как зоны становятся всё более лабиринтными. Рядом с картой есть доска объявлений.
Слух для открытия зоны 2: услышать от Robin Goodfellow, распространить только через Minotaur. Прогресс в убежище напрямую завязан на прохождение основных данжей — после каждого нового данжа открывается следующая зона.
---
## Sumaru TV (маршрут Ellie/Ellen)
Это основной данж, уникальный для маршрута Ellie в отличие от маршрута Nanjo. Данж необычный — цель не просто «дойти до конца».
**Завязка:** Партия идёт в Sumaru TV, чтобы найти fortune-teller Wang Long Chizuru, связанную с New World Order. При входе встретишь чёрного кота. После первой встречи с ним атмосфера меняется — всё вокруг становится чёрно-белым и музыка меняется. Ellen с её знаниями оккультизма понимает: Chizuru наложила проклятие, и единственный выход — пройти через 8 «врат» (студий с отметками Ba Gua) в правильном порядке.
**Сайд-квест Reiko Kashima:** Поговори с охранником в вестибюле — он расскажет слух о Reiko. Распространи слух в агентстве, и Reiko Kashima будет случайно появляться в данже. После победы над ней получишь её зонтик. Отдать его охраннику можно только после победы над боссом Joker Junko.
**Подготовка:** Перед заходом рекомендуется обеспечить Ellen персону Shaka (Hierophant). Он «силён против всего» (Strong Against All), включая иммунитет к Light и Dark — это очень ценно.
**Разгадка босс-раша:** Ближе к концу встретишь "Boy with Earring" — оказывается, это не тот, за кого себя выдаёт. Это чёрный кот в disguise, который трансформируется в демоническую форму — с ним нужно сразиться.
**Финальный босс (Joker Junko):** После восстановления нормальной атмосферы партия добирается до Wang Long Chizuru, которая ведёт своё шоу. Во время встречи Chizuru превращает Junko Kurosu (мать Jun) в Joker и уходит. Тебе придётся сражаться с Joker Junko.
**Тактика против Chizuru (если она появляется как промежуточный босс):** Chizuru использует дубликатов себя. Чтобы избавиться от клонов, нужно атаковать настоящую Chizuru одиночной физической атакой оружием — тогда все копии исчезнут. Обычные атаки по клонам не работают. Можно также использовать «Honeycomb» fusion (Shot + Shot + Shot) — физические атаки не встречают сопротивления Shikigami.
**Для Joker Junko** — используй Fusion Spells, держи Maya на лечении, и обязательно **защищайся всей партией** когда видишь заклинание Old Maid.
----
## Полная шпаргалка по персонам и Fusion Spells (GOLD → Sumaru TV)
---
### Как призвать ключевые персоны
**Jack Frost** — аркан **Lovers (VI)**, нужно **72 карты Lovers**. Уникальность: единственная персона в игре, способная читать Atomic Bufula и запускать Fusion King Frost.
**Gandharva** — аркан **Star (XVII)**, нужно **92 карты Star**.
**Shaka** — аркан **Hierophant (V)**, нужно **87 карт Hierophant + материальная карта "Yuiga Dokuson"**. Карту Yuiga Dokuson выбиваешь из демона-персоны Shaka в бомбоубежище Kasugayama.
**Byakko** — аркан **Hermit (IX)**, нужно **132 карты Hermit**.
---
### Стоковые персоны Katsuya и Baofu
**Helios** (Katsuya, Justice XI, уровень 1) — Fire affinity, иммунитет к огню. Спеллы: Agi → Maha Agi (mutation). Важно: Maha Agi — обязательный финальный компонент Fusion **L'Oiseau d'Feu**. Уникален, повторно не призвать.
**Odysseus** (Baofu, Hanged Man XII, уровень 6) — Wind/Lightning immunity, уязвим к земле. Спеллы: Garu → Maha Garu (rank 8). Soothing Melody — mutation. Уникален, повторно не призвать.
Вывод: **оба стоковых персонажа уже несут нужные Fire и Wind спеллы для Fusion**, так что их менять необязательно — главное не сдавать в Velvet Room.
---
### Апгрейд для Katsuya (~уровень 25)
**Mars** (Justice XI, уровень 25, 75 карт) — Fire affinity, резист к огню. Спеллы: Agilao, Straight Slash, Hama, **Media** (групповое лечение!), Twin Slash, Fire Storm (mutation). Лучшая совместимость: Katsuya и Tatsuya. Mars — прямой апгрейд Helios: даёт более сильный Fire + **Media**, что закрывает вопрос лечения для Katsuya.
### Апгрейд для Baofu (~уровень 24)
**Kabandha** (Hanged Man XII, уровень 24, 96 карт) — Water affinity, иммунитет к воде, уязвим к огню. Спеллы: Aques, Wall of Water, **Maha Aques**, Acid Rain (mutation). Return item — карта Maha Aques. Kabandha закрывает Water-часть Fusion цепочек (Vain Splash, Tidal Wave) вместо Odysseus, у которого воды нет вообще.
---
### Итоговая шпаргалка Fusion Spells
| Fusion Spell | Эффект | Компоненты по порядку | Кто несёт |
| ------------------------------------- | --------------------------------------- | ------------------------------------- | ----------------------------------------------- |
| **L'Oiseau d'Feu** | Большой Fire урон по всем | Fire → Earth → **Maha Agi** | Helios/Mars (Fire) + любой Earth |
| **Cyclone Slash** | Большой Wind урон по всем | Wind → Water → **Maha Garu** | Nike/Odysseus (Wind) + Kabandha (Water) |
| **Maximum Tempest** | Большой Wind урон по всем | Wind → Water → **Maha Garula** | Nike rank 8 (Maha Garula) + Kabandha |
| **Ice Blast** | AoE Ice + 40% заморозка | Ice → Ice | Jack Frost (Bufula) + Jack Frost или другой Ice |
| **King Frost** ⭐ | Огромный Ice урон по всем (level-based) | **Atomic Bufula****Summon Spirit** | Jack Frost (уникально!) |
| **Fire Burst** | Fire + Sword по одному врагу | Fire → **Straight Slash** | Gandharva/Helios (Fire) + Mars (Straight Slash) |
| **Muzzle Shoot** | Огромный урон одному + заглушка | **Mafui** → Shot | Nike/Shaka (Mafui) + любой Shot |
| **Honeycomb** | Огромный урон по всем (физ.) | Shot → Shot → Shot | Трое с Shot-атаками |
| **Pantheon** | Большой Holy урон по всем | Holy → Almighty → **Hieros Glupaine** | Shaka (Holy Light/Nirvana) |
| **Status Fusions** (Sleep/Panic/etc.) | Высокий шанс статуса по всем | Status → Status → **Soothing Melody** | Odysseus или Gandharva (Soothing Melody) |
---
### Распределение по персонажам
|Персонаж|Персона|Аркан|Уровень|Роль в Fusion|
|---|---|---|---|---|
|**Katsuya**|Helios (старт) → **Mars**|Justice XI|1 → 25|Fire для L'Oiseau d'Feu и Fire Burst|
|**Baofu**|Odysseus (старт) → **Kabandha**|Hanged Man XII|6 → 24|Wind (Odysseus) или Water (Kabandha)|
|**Ellen**|Nike (старт)|Judgement XX|23|Wind AoE + Diarama + Mafui для Muzzle Shoot|
|**Ellen**|**Shaka**|Hierophant V|29|Holy + Lightning + Recarm (к Sumaru TV)|
|**Ulala/Ellen**|**Jack Frost**|Lovers VI|18|Ice Blast, King Frost, Atomic Bufula|
|**Maya**|**Gandharva**|Star XVII|23|Fire + Soothing Melody для Status Fusions|
|**Maya**|**Byakko**|Hermit IX|33|Ice/Water для цепочек + Do or Die|

View File

@@ -0,0 +1,20 @@
- слушаем музыку
- приветствуем всех, кто подключился к стриму, передаём привет всем, кто не с нами
- обезумевший провайдер прямо перед НГ и неясность с ютубом
- говорим спасибо всем, кто поддерживает перевод, включаем донаты ДА и БУСТИ
- разговариваем про статус перевода, титаническая работа, что мы долшли до точки, когда не стыдно показать. Говорим про редактуру (то, что практически весь сюжет, город и данжи вычитаны). Показываем, над чем работаем прямо сейчас и что осталась боёвка и общение с демонами, графика и казино. Ситуация с тестерами. Смотрим табличку перевода
- вспоминаем былые деньки, когда на стриме начинали переводить сюжет, я ещё не подозревал, что буду много раз всё переписывать. В тесте это выглядит как одно, а в игре по-другому.
- разбор ресурсов IS и EP. Импорт и экспорт сцен ивентов. Разбор данжей. Бесперпективность реверса исходников
- разговоры о ремейке PSP, статус разбора
- мысли о ремейке обеих частей и скриптовая ВМ, подход к разработке.
- начинаем играть (запуск MGS)
- запуск игры. Комментрируем каждую сцену.
- играем до 01:00, минимально отвечаем на чат, максимально отвечаем на донаты. цель - дойти до сцены с баофу и улалой
- максимальные комментарии о переводе
- перерыв 15 минут, включаем SA
- 5 после прихода развлекаемся в SA
- включаемся, даём комментарии о чате и плохом поведении.
- продолжаем играть и кайфовать до 4:00, отвечая на чат
- в конце благодарим всех ещё раз
- прощаемся
- слушаем музыку 10 минут

15
PERSONAL PROJECTS/VPS.md Normal file
View File

@@ -0,0 +1,15 @@
95.81.100.45
root
shemet
ljuJdjh5ljuJdjh5
proto
ee7ad4edc55facbf89916f064ed56774c86b6f6e636f6e2e6e6c
```
tg://proxy?server=95.81.100.45&port=8443&secret=ee7ad4edc55facbf89916f064ed56774c86b6f6e636f6e2e6e6c
```

View File

View File

@@ -1,2 +0,0 @@
nas_admin
aA1234567890

View File

@@ -11,6 +11,11 @@ if [ "$#" -ne 2 ]; then
exit 1
fi
sudo apt install fail2ban
sudo systemctl enable fail2ban
apt install sudo
hostnamectl set-hostname $1
adduser moluser
usermod -aG sudo moluser

View File

@@ -1,22 +0,0 @@
{
"nodes":[
{"id":"63bc932b6e788337","x":-751,"y":-349,"width":431,"height":1549,"type":"group","label":"Типы и хранение данных"},
{"id":"90e63a87b404a8ea","x":-220,"y":-349,"width":520,"height":1089,"color":"4","type":"group","label":"Ориентировочный workflow для MVP"},
{"id":"82c92d6f3a02a4a6","x":360,"y":-349,"width":520,"height":1089,"color":"6","type":"group","label":"workflow пользовательских полей"},
{"id":"65173e51537acb80","x":-731,"y":-329,"width":391,"height":309,"color":"1","type":"text","text":"**Массив обязательных полей.**\nСюда попадают поля, которые не прописаны в БД, не имеют свойств и работают как сейчас.\n\n- Показываются всегда\n- Валидируются в обычном режиме\n- Сохраняются в обычном режиме в поля таблицы заявки/основания\n- Возможен перенос в массивы данных для удобства хранения/добавления"},
{"id":"815f80b062c9109e","x":-731,"y":0,"width":391,"height":620,"color":"4","type":"text","text":"**Массив опциональных полей**\nМногие поля из текущей конфигурации должны перейти в категорию “опциональных”.\n- Поля созданы нами\n- Свойства каждого поля хранятся в БД -\n\t- наименование поля\n\t- внутреннее наименование для синхронизации с фронтедом\n\t- родительская сущность\n\t- привязка к тарифам\n\t- привязка к типу ОИ\n\t- привязка к типу исследований\n\t- привязка к ПГО / ФИЗ\n\t- свойства валидации Laravel Request\n\t\t- при сохранении\n\t\t- при отправке на согласование\n\t\t- текст ошибки для пользователя\n\t- доступность в документах\n\t\t- макрос/код в документах\n\t\t\t- внутренний код / наименование\n\t"},
{"id":"bb17e362d8091d58","x":-731,"y":640,"width":391,"height":540,"color":"6","type":"text","text":"**Массив пользовательских полей**\nНе входят в MVP.\nПоля, которые могут создавать и пользователи.\nВключают в себя всё вышеперечисленное, но хранятся ОТДЕЛЬНО и рендерятся на фронте отдельным модулем, потому имеют дополнительные свойства:\n- тип поля (текст, мульти/селект, число, файл, массив)\n- некий движок-конструктор получения данных для селектов\n- индекс отображения/положения в интерфейсе\n- связанное/зависимое поле для валидации\n- привязка к конкретной вкладке на фронте\n- упрощённая валидация (тип поступивших данных/обязательность)\n- данные хранятся в json родительской сущности."},
{"id":"40b4c7cf09561259","x":-200,"y":-329,"width":480,"height":309,"type":"text","text":"**Инициализация фронтенда**\n\nНа фронтенде прописаны ВСЕ поля - и обязательные и необязательные. Так же прописано их положение в интерфейсе.\nСо связями и всем прочим. Таким образом мы сильно разгружаемся и ускоряемся.\nПо-умолчанию **все** опциональные поля скрыты."},
{"id":"367f62a87583684f","type":"text","text":"**При сохранении черновика**\n\n- на бэкенд летят все данные и все ОПЦИОНАЛЬНЫЕ поля фильтруются сохраняются в отдельные json-ы (в зависимости от родительской сущности)\n- Проходит мягкая валидация (для сохранения)\n\n**При отправке на согласование**\n\n- Происходит сохранение, но со сменой статуса и с другой валидацией каждого поля.","x":-200,"y":400,"width":480,"height":300},
{"id":"62eb2ec107a95275","x":-200,"y":20,"width":480,"height":340,"type":"text","text":"**Для новой заявки**\n- при выборе всех нужных опций с сервера запрашивается **список доступных опциональных полей** для данной конфигурации. Просто перечисление того, что включать.\n\n**Для существующей заявки**\n- сразу при загрузке теми же модулями определяются настройки и прилетает уже готовый массив с разрешёнными полями (отдельно от данных). Поля включаются на фронте и в них заносятся данные."},
{"id":"4bddbcfea022b3d9","type":"text","text":"**Инициализация фронтенда**\n\nЗдесь нам нужно внедрить **движок рендеринга динамических полей**.\nГрузим фронтенд + запрашиваем массив динамических полей для рендеринга.\nРендерим все обязятельные поля + скрытые опциональные + динамические","x":380,"y":-329,"width":480,"height":309},
{"id":"17c527dd91cc0731","type":"text","text":"**При сохранении черновика**\n\n- Работаем так же, как и в MVP, но сохраняем динамические поля в отдельный массив сущности с простейшей валидацией (чтобы не накидали мусора)\n\n**При отправке на согласование**\n\n- Работаем так же, как и в MVP, но сохраняем динамические поля в отдельный массив сущности с защитой от мусора + с нормальной валидацией (тип/обязательность).","x":380,"y":400,"width":480,"height":300},
{"id":"dfbf582f578a1414","type":"text","text":"**Для новой заявки**\n- Работаем так же, как и в MVP, но отображаем пользовательские пустые поля.\n\n**Для существующей заявки**\n- Работаем так же, как и в MVP, отображаем пользовательские пустые поля и загружаем в них данные из отдельного массива json сущности.","x":380,"y":20,"width":480,"height":340}
],
"edges":[
{"id":"4fc76ce9d4e61348","fromNode":"40b4c7cf09561259","fromSide":"bottom","toNode":"62eb2ec107a95275","toSide":"top"},
{"id":"a3b32f54a016fdba","fromNode":"62eb2ec107a95275","fromSide":"bottom","toNode":"367f62a87583684f","toSide":"top"},
{"id":"bf3b6cbb4d2b7d51","fromNode":"4bddbcfea022b3d9","fromSide":"bottom","toNode":"dfbf582f578a1414","toSide":"top"},
{"id":"88cf47bf897d2ba9","fromNode":"dfbf582f578a1414","fromSide":"bottom","toNode":"17c527dd91cc0731","toSide":"top"}
]
}

View File

@@ -0,0 +1,29 @@
- прописать в таблице “распределение данных” внутренние названия всех полей
- собрать миграцию данных опциональных полей для ПГО1 (таблица field_optionals)
- собрать миграцию данных ПГО1 для “пищевой продукции/биологических материалов”,
- доработать и протестировать API-запрос к бэку для возврата опциональных полей
- Фронтенд:
- сделать скрытыми все поля с лейблами кроме обязательных согласно таблице “распределение данных” (hidden). Возможно, придётся делать блоки поля с лейблом для удобства скрытия.
- сделать тег типа у каждого поля/лейбла “основное”, “опциональное”, “пользовательское”
- Функционал показа для новой заявки:
- запрос при каждом изменении селектов “Тип ОИ” и “Группа ОИ” к API fields/optional, передавая group_id и object_type
- *доработка под тариф в будущем*
- после ответа от API отображать полученный список полей (меняем статус видимости)
- Переписать миграции для генерации информации тестовой информации не в полях, а в “details” связанных сущностей
- Функционал показа существующей заявки:
- Массив опциональных полей сразу же запрашивается на этапе формирования данных для фронта для каждой заявки (так мы сможем просто включать поля в БД после доработок)
- Все данные опциональных полей перемещаются в поле details сущностей согласно таблице “распределение данных” (на данном этапе либо к request, либо к incoming_object). Это очень простой json массив \[поле => значение\]
- Поля включаются так же, как и в новой заявке
- Следовательно все данные должны затянуться автоматически из массивов details и показаться в полях
- Параллельная подготовка бэкенда для распределения и отдачи данных из массивов details + доработка миграций, чтобы переместить динамические данные в details
- Подготовка бэкенда к функционалу сохранения динамических полей БЕЗ ВАЛИДАЦИИ (прототип мягкого сохранения)
- Фронтенд+бэкенд — обеспечение мягкого сохранения без валидации всех данных в правильные распределённые таблицы и details
- Система валидации динамических полей.
- Поля из обязательной валидации выпиливаются в опциональную.
- Прописываются правила валидации в БД полей через миграции (правила/сообщения)
- Движок валидации (принимаем список динамических полей и валидируем)
- Здесь каким-то образом надо обеспечить обратную связь с фронтом для подсветки неверных полей + сообщений
- Тестирование в комплексе

View File

@@ -0,0 +1,29 @@
{
"nodes":[
{"id":"e22a16a2e6c53247","x":40,"y":-760,"width":360,"height":300,"type":"group"},
{"id":"7016561d48ff982b","type":"text","text":"Сервис OptionalFieldsService","x":95,"y":-652,"width":250,"height":60,"color":"3"},
{"id":"975525ee56508717","type":"text","text":"Сервис\nOrder / Request Service","x":-260,"y":-652,"width":250,"height":60},
{"id":"40c24af613dd3270","type":"text","text":"Frontend","x":95,"y":-940,"width":250,"height":60,"color":"5"},
{"id":"eaf8029d981c7fde","type":"text","text":"Динамические поля\n\\[\\[object types], \\[gpos\\]]","x":60,"y":-560,"width":320,"height":80},
{"id":"7fe6dcb37ae00f3a","type":"text","text":"Контроллер\nOptionalFieldsController","x":95,"y":-740,"width":250,"height":60},
{"id":"fdf86c47886dc7a7","type":"text","text":"Группы ОИ","x":380,"y":-270,"width":250,"height":60},
{"id":"346bf02d73932212","type":"text","text":"Классификатор продукции\n………..","x":130,"y":-70,"width":250,"height":60},
{"id":"a4a06647b44fa5ac","type":"text","text":"Окружающая среда\n……….\n","x":380,"y":-70,"width":250,"height":60},
{"id":"a440405c2d30e2c8","type":"text","text":"Производственная среда\n…….","x":630,"y":-70,"width":250,"height":60},
{"id":"9fcba45f24a17111","type":"text","text":"Типы ОИ (выбор с фронта)\n1. Продукция\n2. Биологические материалы\n3. Атмосферные\n…….","x":-120,"y":-330,"width":250,"height":180},
{"id":"311f4e1efdc5f6ae","type":"text","text":"Пакет Групп Испытаний\n(object group package)","x":380,"y":-420,"width":250,"height":60}
],
"edges":[
{"id":"0c924b9f022d82f3","fromNode":"fdf86c47886dc7a7","fromSide":"bottom","toNode":"346bf02d73932212","toSide":"top"},
{"id":"2cb09cda5fc0e2e2","fromNode":"fdf86c47886dc7a7","fromSide":"bottom","toNode":"a4a06647b44fa5ac","toSide":"top"},
{"id":"4e0c76341c80d465","fromNode":"fdf86c47886dc7a7","fromSide":"bottom","toNode":"a440405c2d30e2c8","toSide":"top"},
{"id":"96590a1f74f044b9","fromNode":"7016561d48ff982b","fromSide":"left","toNode":"975525ee56508717","toSide":"right"},
{"id":"375d4c396b3b4d13","fromNode":"975525ee56508717","fromSide":"top","toNode":"40c24af613dd3270","toSide":"left","label":"open"},
{"id":"abb0f5b93cbb514f","fromNode":"eaf8029d981c7fde","fromSide":"top","toNode":"7016561d48ff982b","toSide":"bottom"},
{"id":"15f10ef4cfa0bee3","fromNode":"9fcba45f24a17111","fromSide":"top","toNode":"eaf8029d981c7fde","toSide":"bottom"},
{"id":"8d095bac68164314","fromNode":"311f4e1efdc5f6ae","fromSide":"top","toNode":"eaf8029d981c7fde","toSide":"right"},
{"id":"69f142277df11fa4","fromNode":"fdf86c47886dc7a7","fromSide":"top","toNode":"311f4e1efdc5f6ae","toSide":"bottom","label":"m2m ogp to groups"},
{"id":"ee33053ddf3dc84e","fromNode":"7016561d48ff982b","fromSide":"top","toNode":"7fe6dcb37ae00f3a","toSide":"bottom"},
{"id":"ca97a1d860cb438f","fromNode":"7fe6dcb37ae00f3a","fromSide":"top","toNode":"40c24af613dd3270","toSide":"bottom","label":"ajax on change"}
]
}

View File

@@ -0,0 +1,22 @@
{
"nodes":[
{"id":"63bc932b6e788337","type":"group","x":-751,"y":-349,"width":431,"height":1549,"label":"Типы и хранение данных"},
{"id":"90e63a87b404a8ea","type":"group","x":-280,"y":-349,"width":520,"height":1089,"color":"4","label":"Ориентировочный workflow для MVP"},
{"id":"82c92d6f3a02a4a6","type":"group","x":280,"y":-349,"width":520,"height":1089,"color":"6","label":"workflow пользовательских полей"},
{"id":"65173e51537acb80","type":"text","text":"**Массив обязательных полей.**\nСюда попадают поля, которые не прописаны в БД, не имеют свойств и работают как сейчас.\n\n- Показываются всегда\n- Валидируются в обычном режиме\n- Сохраняются в обычном режиме в поля таблицы заявки/основания\n- Возможен перенос в массивы данных для удобства хранения/добавления","x":-731,"y":-329,"width":391,"height":309,"color":"1"},
{"id":"815f80b062c9109e","type":"text","text":"**Массив опциональных полей**\nМногие поля из текущей конфигурации должны перейти в категорию “опциональных”.\n- Поля созданы нами\n- Свойства каждого поля хранятся в БД -\n\t- наименование поля\n\t- внутреннее наименование для синхронизации с фронтедом\n\t- родительская сущность\n\t- привязка к тарифам\n\t- привязка к типу ОИ\n\t- привязка к типу исследований\n\t- привязка к ПГО / ФИЗ\n\t- свойства валидации Laravel Request\n\t\t- при сохранении\n\t\t- при отправке на согласование\n\t\t- текст ошибки для пользователя\n\t- доступность в документах\n\t\t- макрос/код в документах\n\t\t\t- внутренний код / наименование\n\t","x":-731,"y":0,"width":391,"height":620,"color":"4"},
{"id":"bb17e362d8091d58","type":"text","text":"**Массив пользовательских полей**\nНе входят в MVP.\nПоля, которые могут создавать и пользователи.\nВключают в себя всё вышеперечисленное, но хранятся ОТДЕЛЬНО и рендерятся на фронте отдельным модулем, потому имеют дополнительные свойства:\n- тип поля (текст, мульти/селект, число, файл, массив)\n- некий движок-конструктор получения данных для селектов\n- индекс отображения/положения в интерфейсе\n- связанное/зависимое поле для валидации\n- привязка к конкретной вкладке на фронте\n- упрощённая валидация (тип поступивших данных/обязательность)\n- данные хранятся в json родительской сущности.","x":-731,"y":640,"width":391,"height":540,"color":"6"},
{"id":"40b4c7cf09561259","type":"text","text":"**Инициализация фронтенда**\n\nНа фронтенде прописаны ВСЕ поля - и обязательные и необязательные. Так же прописано их положение в интерфейсе.\nСо связями и всем прочим. Таким образом мы сильно разгружаемся и ускоряемся.\nПо-умолчанию **все** опциональные поля скрыты.","x":-260,"y":-329,"width":480,"height":309},
{"id":"62eb2ec107a95275","type":"text","text":"**Для новой заявки**\n- при выборе всех нужных опций с сервера запрашивается **список доступных опциональных полей** для данной конфигурации. Просто перечисление того, что включать.\n\n**Для существующей заявки**\n- сразу при загрузке теми же модулями определяются настройки и прилетает уже готовый массив с разрешёнными полями (отдельно от данных). Поля включаются на фронте и в них заносятся данные.","x":-260,"y":20,"width":480,"height":340},
{"id":"367f62a87583684f","type":"text","text":"**При сохранении черновика**\n\n- на бэкенд летят все данные и все ОПЦИОНАЛЬНЫЕ поля фильтруются сохраняются в отдельные json-ы (в зависимости от родительской сущности)\n- Проходит мягкая валидация (для сохранения)\n\n**При отправке на согласование**\n\n- Происходит сохранение, но со сменой статуса и с другой валидацией каждого поля.","x":-260,"y":400,"width":480,"height":300},
{"id":"4bddbcfea022b3d9","type":"text","text":"**Инициализация фронтенда**\n\nЗдесь нам нужно внедрить **движок рендеринга динамических полей**.\nГрузим фронтенд + запрашиваем массив динамических полей для рендеринга.\nРендерим все обязятельные поля + скрытые опциональные + динамические","x":300,"y":-329,"width":480,"height":309},
{"id":"17c527dd91cc0731","type":"text","text":"**При сохранении черновика**\n\n- Работаем так же, как и в MVP, но сохраняем динамические поля в отдельный массив сущности с простейшей валидацией (чтобы не накидали мусора)\n\n**При отправке на согласование**\n\n- Работаем так же, как и в MVP, но сохраняем динамические поля в отдельный массив сущности с защитой от мусора + с нормальной валидацией (тип/обязательность).","x":300,"y":400,"width":480,"height":300},
{"id":"dfbf582f578a1414","type":"text","text":"**Для новой заявки**\n- Работаем так же, как и в MVP, но отображаем пользовательские пустые поля.\n\n**Для существующей заявки**\n- Работаем так же, как и в MVP, отображаем пользовательские пустые поля и загружаем в них данные из отдельного массива json сущности.","x":300,"y":20,"width":480,"height":340}
],
"edges":[
{"id":"4fc76ce9d4e61348","fromNode":"40b4c7cf09561259","fromSide":"bottom","toNode":"62eb2ec107a95275","toSide":"top"},
{"id":"a3b32f54a016fdba","fromNode":"62eb2ec107a95275","fromSide":"bottom","toNode":"367f62a87583684f","toSide":"top"},
{"id":"bf3b6cbb4d2b7d51","fromNode":"4bddbcfea022b3d9","fromSide":"bottom","toNode":"dfbf582f578a1414","toSide":"top"},
{"id":"88cf47bf897d2ba9","fromNode":"dfbf582f578a1414","fromSide":"bottom","toNode":"17c527dd91cc0731","toSide":"top"}
]
}

View File

@@ -10,8 +10,8 @@
{"id":"4c9e712b802ea35e","type":"text","text":"### Подгрузка сохранённых данных\n\nЭту процедуру можно выполнять в предыдущем цикле обработки каждого поля\nСобираются все уникальные значения destination_table у текущих выбранных полей\nДелается выборка по таблицам destination_table по id открытого документа или destination_table.incoming_object.id\nУ выбранных объектов получаются json-массивы сохранённых данных из поля dynamic_data\nКаждое динамическое поле проверяется на соответствие и присутствие в сохранённых данных.\nЕсли данные присутствуют - динамическому полю добавляется поле “value” со значением из документа.\nТаким образом можно собирать данные, присвоенные в совершенно разных динамических полях заявки/документов. Пример сохранённых данных показан ниже","x":600,"y":-260,"width":600,"height":463},
{"id":"d3bed003864f4b06","type":"text","text":"### Форматирование динамических полей\n\nКаждый элемент поля проходит проверку и подготавливается для отправки на фронтэнд.\nПроверяется каждое поле renderData и если есть ключ table, то делается выборка из соответствующей таблицы с параметрами и поле трансформируется в options с готовыми данными.\n\nКаждому полю на фронте присваивается свойство dynamic_control_id, чтобы обработать его данные при сохранении","x":-80,"y":-260,"width":600,"height":463},
{"id":"36f032eaa8b89a57","type":"text","text":"### Содержание поля dynamic_data у таблиц с данными динамических полей.\n\n```json\n[\n\t{\n\t\t\"id\": \"3\",\n\t\t\"name: \"tn_ved\",\n\t\t\"value\" : \"3022 4433\"\n\t},\n\t{\n\t\t\"id\": \"7\",\n\t\t\"name: \"storage_conditions\",\n\t\t\"value\" : \"Пакет целлофановый\"\n\t},\n\t{\n\t\t\"id\": \"9\",\n\t\t\"name: \"trials_in_OA_range\",\n\t\t\"value\" : true\n\t},\n]\n```","x":-400,"y":283,"width":535,"height":517},
{"id":"4aefb6d2d59c1c9a","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/modules_to_dyn_controls.md","x":-960,"y":-1309,"width":760,"height":669},
{"id":"330a5e6e96216ba6","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/pgo_to_groups.md","x":-1500,"y":-1206,"width":400,"height":464},
{"id":"4aefb6d2d59c1c9a","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/modules_to_dyn_controls.md","x":-960,"y":-1309,"width":760,"height":669},
{"id":"330a5e6e96216ba6","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/pgo_to_groups.md","x":-1500,"y":-1206,"width":400,"height":464},
{"id":"68b998893332eba2","type":"text","text":"trials_type\n1 - Лабораторные\n2 - Выездные","x":-560,"y":-1440,"width":250,"height":103},
{"id":"3c06fbe8ba52b772","type":"text","text":"### Отправка данных на backend\n\nС фронтенда прилетают данные полей со свойством dynamic_control_id и value","x":-1120,"y":940,"width":600,"height":380},
{"id":"2f8ebcf398e207de","type":"text","text":"### Формирование и сохранение массива данных\n\nДелается выборка полей id, name, destination_table из таблицы dynamic_control_id из массива всех полученных dynamic_control_id\n\nСобирается несколько массивов dynamic_data с группировкой по destination_table\nПроходя по каждой записи destination_table выбирается объект для записи из таблицы по текущему incoming_object_id (прилетает с фронтенда или создаётся при первичном сохранении).\nТекущий массив данных сохраняется в поле dynamic_data в таблицу destination_table","x":340,"y":940,"width":600,"height":380},
@@ -20,7 +20,7 @@
{"id":"2ec086ec8e32925e","type":"text","text":"Сформировать первичные данные таблиц pgo_to_groups, dynamic_controls_table и modules_to_dyn_controls, необходимые для отображения/сохранения данных по текущим данным. Для начала вручную. Можно задуматься о ТЗ редактора :)","x":-782,"y":1510,"width":1342,"height":70},
{"id":"ddb16308453a51d9","type":"text","text":"Продумать поддержку зависимости от объектов, глубже incoming_object (Испытания/протоколы)","x":-779,"y":1580,"width":1339,"height":60},
{"id":"e968c77fea8190c3","type":"text","text":"Валидация полей","x":-779,"y":1640,"width":1339,"height":60},
{"id":"b630f9de672de8d5","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/dynamic_controls_table.md","x":-40,"y":-1349,"width":1360,"height":749}
{"id":"b630f9de672de8d5","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/dynamic_controls_table.md","x":-40,"y":-1349,"width":1360,"height":749}
],
"edges":[
{"id":"15a75fcef9b6166b","fromNode":"4aefb6d2d59c1c9a","fromSide":"right","toNode":"b630f9de672de8d5","toSide":"left"},

View File

@@ -33,7 +33,7 @@ a.dianova z2JeiSHVTP0sTlt6 Анна Дианова
a.popov Js5hBS4LFogvztmb Александр Попов
a.milekhin kbn9VN5NsY8R2md2 Алексей Милехин
e.fastov sgwhd1x4WZFsllMt Евгений Фастов
e.fastov f8npfh4g6FmCSgt Евгений Фастов
a.belov dSfI95ynDhu2MdIj Алексей Белов
Технические ящики:

View File

@@ -0,0 +1,108 @@
Входящие gmail
```bash
./imapsync \
--host1 imap.gmail.com \
--port1 993 \
--ssl1 \
--user1 uralavtostroymiass@gmail.com \
--password1 'impj rmyc ecwl cqeq' \
--host2 localhost \
--user2 sales@1-agent.ru \
--password2 'sinkhrotsiklOtron6107' \
--ssl2 \
--gmail1 \
--folder "INBOX" \
--syncinternaldates \
--useuid \
--maxage 120
```
Входящие mail
```bash
./imapsync \
--host1 imap.mail.ru \
--user1 bid.group@mail.ru \
--password1 'YvabfX1ZfXeZfcmeKhPT' \
--ssl1 \
--host2 localhost \
--user2 info@bid-group74.ru \
--password2 'xp7h2vWGkM6Cny2' \
--ssl2 \
--exclude "&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-" \
--exclude "&BCEEPwQwBDw-" \
--exclude "Infected Items" \
--exclude "&BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &BD8EPgRHBEIEMA-" \
--exclude "&BCcENQRABD0EPgQyBDgEOgQ4-" \
--exclude "Archive" \
--exclude "Junk" \
--syncinternaldates \
--useuid \
--search "ALL"
```
тест папок через ssl
```bash
openssl s_client -connect imap.mail.com:993 -crlf -quiet
a LOGIN trest_zhanna@mail.ru 0SLrC2Re6DbRxNgELzeI
b LIST "" "*"
c LOGOUT
```
Отправленные gmail
```bash
./imapsync \
--host1 imap.gmail.com \
--port1 993 \
--ssl1 \
--user1 uralavtostroymiass@gmail.com \
--password1 'impj rmyc ecwl cqeq' \
--host2 localhost \
--user2 sales@1-agent.ru \
--password2 'sinkhrotsiklOtron6107' \
--ssl2 \
--gmail1 \
--folder "[Gmail]/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-" \
--regextrans2 "s/\[Gmail\]\/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/" \
--syncinternaldates \
--useuid
```
Отправленные mail
```bash
./imapsync \
--host1 imap.mail.ru \
--user1 bid.group@mail.ru \
--password1 'YvabfX1ZfXeZfcmeKhPT' \
--ssl1 \
--host2 localhost \
--user2 info@bid-group74.ru \
--password2 'xp7h2vWGkM6Cny2' \
--ssl2 \
--folder "&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-" \
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/" \
--syncinternaldates \
--useuid
```
```
uas-chel@mail.ru
ZCgyiYVlMRPYRDfaZj31
info@uralav.ru
```
```
bid.group@mail.ru
info@bid-group74.ru
YvabfX1ZfXeZfcmeKhPT
```

View File

@@ -13,5 +13,6 @@
- БП работы с претензиями в Аспро
- почтовый сервер
- Узнать про корпоративные телефоны
- добавить камеру ezviz в приложение
- Сформировать ТЗ для сайтов на основе брифа Мадины
-
- Детальные брифы по сайтам для Саши

View File

@@ -0,0 +1,61 @@
# **62.109.11.45**
#### root
HQZr7Lr7ebS8YV00HyQv+
#### uasadmin
f,hfrflf,hf8
### **mysql**
#### root
Vw5hQ330KxObJBW
#### ncuser
7WQUJHV9kBr7kUO
nextcloud_db
#### mailuser
eVtwV69blrVXcho
### postgres
onlyoffice
MTV8LgdnUtZ1B79
### NextCloud
admin
LPNCM3SEdwnVj8c
### postfixadmin
#### setup password
9q8Vteep4DKLk9MloDZsiUndEuGg4yJ
https://mailadmin.1-agent.ru/
`admin@1-agent.ru`
aH8thcQ5gOJ99bzNGN3h
notify@1-agent.ru
neVospolnimost9901
YWRtaW5AMS1hZ2VudC5ydQ==
YUg4dGhjUTVnT0o5OWJ6TkdOM2g=
RCPT TO: <s0nic000@yandex.ru>
`AUTH PLAIN XDBhZG1pbkAxLWFnZW50LnJ1XDBhSDh0aGNRNWdPSjk5YnpOR04zaA==`
aH8thcQ5gOJ99bzNGN3h
swaks --to test-fsp4ilqyd@srv1.mail-tester.com \
--from admin@1-agent.ru \
--server mail.1-agent.ru \
--port 587 \
--tls \
--auth LOGIN \
--auth-user admin@1-agent.ru \
--auth-password "aH8thcQ5gOJ99bzNGN3h"
v.vedernikova@1-agent.ru
hCM6CVqSV0D1xVr7vDXY

View File

@@ -0,0 +1,29 @@
```mermaid
sequenceDiagram
participant Encoder
participant File as "RLE File"
participant Decoder
Encoder->>File: write header (Type, Mode, ID, Size)
Encoder->>File: emit literal packet (count-1 + literals)
Encoder->>File: emit run packet (0x7D + N, byte or offset)
Encoder->>File: emit backref packet (0x7E + len, distance-1)
File->>Decoder: provide packet stream
Decoder->>Decoder: if control < 0x80 → copy (control+1) literals
Decoder->>Decoder: else → read param; if run → repeat byte; if backref → copy from output buffer
Decoder-->>File: produce decompressed bytes (output)
```
```mermaid
sequenceDiagram
participant Encoder
participant File as "RLE File"
participant Decoder
Encoder->>File: write header (Type, Mode, ID, Size)
Encoder->>File: emit literal packet (count-1 + literals)
Encoder->>File: emit run packet (0x7D + N, byte or offset)
Encoder->>File: emit backref packet (0x7E + len, distance-1)
File->>Decoder: provide packet stream
Decoder->>Decoder: if control < 0x80 → copy (control+1) literals
Decoder->>Decoder: else → read param; if run → repeat byte; if backref → copy from output buffer
Decoder-->>File: produce decompressed bytes (output)
```