Compare commits

..

101 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
sShemet
42c024bb8b vault backup: 2026-02-02 14:50:18 2026-02-02 14:50:18 +05:00
sShemet
bdb6af99a7 vault backup: 2026-02-02 14:40:13 2026-02-02 14:40:13 +05:00
sShemet
5e5ee5c1dd vault backup: 2026-02-02 14:30:00 2026-02-02 14:30:00 +05:00
sShemet
1d0d9bed26 vault backup: 2026-01-30 15:10:07 2026-01-30 15:10:07 +05:00
sShemet
bdd354e643 vault backup: 2026-01-30 14:59:59 2026-01-30 14:59:59 +05:00
sShemet
f532c94d0f vault backup: 2026-01-30 14:49:54 2026-01-30 14:49:54 +05:00
sShemet
1c513ed925 vault backup: 2026-01-30 11:27:36 2026-01-30 11:27:36 +05:00
sShemet
be1b4ba94f vault backup: 2026-01-30 11:07:24 2026-01-30 11:07:24 +05:00
sShemet
8a2e14ef7b vault backup: 2026-01-30 10:57:19 2026-01-30 10:57:19 +05:00
sShemet
9a402b4764 vault backup: 2026-01-30 10:47:13 2026-01-30 10:47:13 +05:00
sShemet
4c51531c1d vault backup: 2026-01-30 10:06:44 2026-01-30 10:06:45 +05:00
sShemet
548f8a616d vault backup: 2026-01-30 09:56:39 2026-01-30 09:56:39 +05:00
sShemet
fd4811ce21 vault backup: 2026-01-26 14:14:32 2026-01-26 14:14:32 +05:00
sShemet
d28c331e99 vault backup: 2026-01-23 14:31:39 2026-01-23 14:31:39 +05:00
sShemet
44dd3e53c9 vault backup: 2026-01-23 14:21:32 2026-01-23 14:21:32 +05:00
sShemet
d538dce32b vault backup: 2026-01-23 14:11:27 2026-01-23 14:11:27 +05:00
43 changed files with 3393 additions and 170 deletions

View File

@@ -2,5 +2,6 @@
"obsidian-full-calendar", "obsidian-full-calendar",
"obsidian-icon-folder", "obsidian-icon-folder",
"obsidian-git", "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,109 +4,39 @@
"type": "split", "type": "split",
"children": [ "children": [
{ {
"id": "b1afd552ee0aa86f", "id": "6ce0f4672b59a07b",
"type": "tabs", "type": "tabs",
"children": [ "children": [
{ {
"id": "78448225d8fe26c6", "id": "b5daf62d6db275c6",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 08_2025.md", "file": "WORK & PROJECTS/Mol/Планы и диаграммы/Согласования и статусы/status_entities.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "Разработка - 08_2025" "title": "status_entities"
} }
}, },
{ {
"id": "7775a29d77b887ee", "id": "5c58359e6dbf08fd",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "Untitled.md", "file": "WORK & PROJECTS/UAS/Servers access.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "Untitled" "title": "Servers access"
}
},
{
"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": "3f6af89cf23c2361",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "PERSONAL PROJECTS/cloudflare temp mail.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "cloudflare temp mail"
}
},
{
"id": "6b6ae15e40ca713f",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "mail.mol-soft.ru"
}
},
{
"id": "08b9c8d0b05e0c9b",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Все идеи для Моли"
} }
} }
], ],
"currentTab": 4 "currentTab": 1
} }
], ],
"direction": "vertical" "direction": "vertical"
@@ -129,7 +59,7 @@
"autoReveal": false "autoReveal": false
}, },
"icon": "lucide-folder-closed", "icon": "lucide-folder-closed",
"title": "Files" "title": "Файловый менеджер"
} }
}, },
{ {
@@ -163,7 +93,7 @@
} }
], ],
"direction": "horizontal", "direction": "horizontal",
"width": 411.5 "width": 314.5
}, },
"right": { "right": {
"id": "5a12b65cf742d665", "id": "5a12b65cf742d665",
@@ -179,7 +109,7 @@
"state": { "state": {
"type": "backlink", "type": "backlink",
"state": { "state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 06_2025.md", "file": "WORK & PROJECTS/Ulab/Доступы к точкам.md",
"collapseAll": false, "collapseAll": false,
"extraContext": false, "extraContext": false,
"sortOrder": "alphabetical", "sortOrder": "alphabetical",
@@ -189,7 +119,7 @@
"unlinkedCollapsed": true "unlinkedCollapsed": true
}, },
"icon": "links-coming-in", "icon": "links-coming-in",
"title": "Backlinks for Разработка - 06_2025" "title": "Обратные ссылки для Доступы к точкам"
} }
}, },
{ {
@@ -198,12 +128,12 @@
"state": { "state": {
"type": "outgoing-link", "type": "outgoing-link",
"state": { "state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 06_2025.md", "file": "WORK & PROJECTS/Ulab/Доступы к точкам.md",
"linksCollapsed": false, "linksCollapsed": false,
"unlinkedCollapsed": true "unlinkedCollapsed": true
}, },
"icon": "links-going-out", "icon": "links-going-out",
"title": "Outgoing links from Разработка - 06_2025" "title": "Исходящие ссылки из Доступы к точкам"
} }
}, },
{ {
@@ -213,12 +143,10 @@
"type": "tag", "type": "tag",
"state": { "state": {
"sortOrder": "frequency", "sortOrder": "frequency",
"useHierarchy": true, "useHierarchy": true
"showSearch": false,
"searchQuery": ""
}, },
"icon": "lucide-tags", "icon": "lucide-tags",
"title": "Tags" "title": "Теги"
} }
}, },
{ {
@@ -227,13 +155,13 @@
"state": { "state": {
"type": "outline", "type": "outline",
"state": { "state": {
"file": "PERSONAL PROJECTS/cloudflare temp mail.md", "file": "WORK & PROJECTS/UAS/Servers access.md",
"followCursor": false, "followCursor": false,
"showSearch": false, "showSearch": false,
"searchQuery": "" "searchQuery": ""
}, },
"icon": "lucide-list", "icon": "lucide-list",
"title": "Outline of cloudflare temp mail" "title": "Структура Servers access"
} }
} }
], ],
@@ -241,69 +169,71 @@
} }
], ],
"direction": "horizontal", "direction": "horizontal",
"width": 311.5 "width": 300
}, },
"left-ribbon": { "left-ribbon": {
"hiddenItems": { "hiddenItems": {
"bases:Create new base": false, "mermaid-tools:Open Mermaid Toolbar": false,
"switcher:Open quick switcher": false, "switcher:Меню быстрого перехода": false,
"graph:Open graph view": false, "graph:Граф": false,
"canvas:Create new canvas": false, "canvas:Создать новый холст": false,
"daily-notes:Open today's daily note": false, "daily-notes:Сегодняшняя заметка": false,
"templates:Insert template": false, "templates:Вставить шаблон": false,
"command-palette:Open command palette": false, "command-palette:Открыть палитру команд": false,
"bases:Создать новую базу": false,
"obsidian-full-calendar:Open Full Calendar": false, "obsidian-full-calendar:Open Full Calendar": false,
"obsidian-git:Open Git source control": false "obsidian-git:Open Git source control": false
} }
}, },
"active": "221c41e61c302338", "active": "5c58359e6dbf08fd",
"lastOpenFiles": [ "lastOpenFiles": [
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/beget_2026_01.pdf", "WORK & PROJECTS/Mol/Планы и диаграммы/План СИЛА.md",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/beget_2026_01.pdf.crdownload", "Без названия.md",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/firstvds_2026_01.pdf", "WORK & PROJECTS/UAS/MAIL TRANSFER.md",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/Operation_Check_PJSC_Sberbank_08012026.pdf", "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/Servers access.md",
"WORK & PROJECTS/UAS/Plan.md",
"WORK & PROJECTS/UAS/IP-TEL.png",
"WORK & PROJECTS/UAS/Access.md", "WORK & PROJECTS/UAS/Access.md",
"PERSONAL PROJECTS/cloudflare temp mail.md", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/Динамические поля Заявок (декомпозиция) 2026.02.md",
"PERSONAL PROJECTS/P2EP/logo.canvas", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/pgo_to_groups.md",
"WORK & PROJECTS/UAS", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/modules_to_dyn_controls.md",
"PERSONAL PROJECTS/P2EP/cdRead.canvas", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля/dynamic_controls_table.md",
"PERSONAL PROJECTS/P2EP/Новый текстовый документ.txt",
"WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.md",
"PERSONAL PROJECTS/P2EP/pseudoCode/fade calculation.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Структура таблиц. Основа + заказы.canvas",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/Operation_Check_PJSC_Sberbank_01122025.pdf",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/beget_2025_12.pdf",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/beget_2025_12.pdf.crdownload",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/firstvds_2025_12.pdf",
"WORK & PROJECTS/Mol/Документы ООО Моль-софт/Счета оплаты серверов/firstvds_2025_12.pdf.crdownload",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Динамические поля заявки v2.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/test logic.md", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/test logic.md",
"Untitled 1.md", "Untitled 1.md",
"WORK & PROJECTS/Mol/Серверы/Supervisor/job_worker.md", "PERSONAL PROJECTS/cloudflare temp mail.md",
"WORK & PROJECTS/Mol/Серверы/moldev.ru.md", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/samplings table.md",
"WORK & PROJECTS/Mol/Серверы/Mol Public Prod.md", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/pgo_to_groups.md",
"WORK & PROJECTS/Mol/Серверы/VPN-FIREWALL-GATE (Cerberus).md", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/modules_to_dyn_controls.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Разработка - 08_2025.md", "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/dynamic_controls_table.md",
"2025-07-18.md",
"JRPG.md",
"WORK & PROJECTS/Mol/Deepseek API-key.md",
"Untitled.md", "Untitled.md",
"WORK & PROJECTS/Mol/Серверы/Jira - Service - Confluence - Crm.md", "WORK & PROJECTS/Mol/Серверы/1С Бухгалтерия.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/Ideas/Все идеи для Моли.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Статусы/Структура статусов.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/ТЗ динамических полей и ФИЗов.canvas",
"WORK & PROJECTS/Mol/Серверы/Схема инфраструктуры.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Нумератор/Нумератор_общая_схема.canvas",
"Структура объектов испытаний.png", "Структура объектов испытаний.png",
"Схема связей юрлиц и адресов.png", "Схема связей юрлиц и адресов.png",
"WORK & PROJECTS/img/Pasted image 20241212175419.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 exit 1
fi fi
sudo apt install fail2ban
sudo systemctl enable fail2ban
apt install sudo
hostnamectl set-hostname $1 hostnamectl set-hostname $1
adduser moluser adduser moluser
usermod -aG sudo 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":"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":"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":"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":"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":"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":"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":"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}, {"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":"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":"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":"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":[ "edges":[
{"id":"15a75fcef9b6166b","fromNode":"4aefb6d2d59c1c9a","fromSide":"right","toNode":"b630f9de672de8d5","toSide":"left"}, {"id":"15a75fcef9b6166b","fromNode":"4aefb6d2d59c1c9a","fromSide":"right","toNode":"b630f9de672de8d5","toSide":"left"},

View File

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

View File

@@ -0,0 +1,42 @@
{
"nodes":[
{"id":"f689991edad4e65a","type":"group","x":-804,"y":-976,"width":1620,"height":840,"label":"Текущая реализация"},
{"id":"2c1ff1ebf7420c21","type":"group","x":1000,"y":-977,"width":1180,"height":840,"label":"Идеальная реализация"},
{"id":"5024f64a6ba16db7","type":"group","x":1840,"y":-680,"width":290,"height":223,"label":"Звонок клиенту"},
{"id":"238d605a8b2074b7","type":"group","x":1020,"y":-460,"width":290,"height":160,"label":"Звонок менеджеру"},
{"id":"6e675abef23a0340","type":"text","text":"Звонок на рабочий номер","x":-784,"y":-626,"width":250,"height":60},
{"id":"32e333e12b3bfde3","type":"text","text":"Менеджер (рабочий номер)","x":-514,"y":-956,"width":1010,"height":60},
{"id":"f985b4d29d61dfaa","type":"text","text":"Прямой звонок (перезвон клиенту без регистрации звонка)","x":476,"y":-596,"width":310,"height":59},
{"id":"51a98e4ebde07d7d","type":"text","text":"Менеджер (рабочий номер)","x":1245,"y":-957,"width":895,"height":57},
{"id":"563d3fc69bd1c6e9","type":"text","text":"Клиент","x":1245,"y":-217,"width":895,"height":50},
{"id":"23f5f2e623ab48f0","type":"text","text":"Звонок на рабочий номер","x":1040,"y":-440,"width":250,"height":60},
{"id":"27b59d7694d37fa8","type":"text","text":"звонок на городской номер","x":1040,"y":-380,"width":250,"height":60},
{"id":"910e026f4a0105db","type":"text","text":"SIP Rostelecom и запись (регистрация звонка в Amo)","x":1290,"y":-597,"width":415,"height":60},
{"id":"4e0f7ce27d4fbe95","type":"text","text":"Переадресация на рабочий номер и запись разг","x":1363,"y":-720,"width":270,"height":60},
{"id":"6f9381c1c2bca3cc","type":"text","text":"Исходящий звонок через Amo. Регистрация и запись","x":1860,"y":-537,"width":250,"height":60},
{"id":"806091c01daa1386","type":"text","text":"Прямой звонок (перезвон клиенту с рабочего номера)","x":1860,"y":-660,"width":250,"height":124},
{"id":"4a3d47301b019cc2","type":"text","text":"Переадресация на клиента","x":1568,"y":-300,"width":250,"height":60},
{"id":"5b9108063adf014b","type":"text","text":"Переадресация на рабочий номер и запись разг","x":-144,"y":-776,"width":270,"height":60},
{"id":"8ca3559c19c010ed","type":"text","text":"SIP Rostelecom и запись (регистрация звонка в Amo)","x":-216,"y":-596,"width":415,"height":60},
{"id":"fbe98880b989d9e4","type":"text","text":"Клиент","x":-483,"y":-216,"width":950,"height":50},
{"id":"4e9ff77f34077797","type":"text","text":"звонок на городской номер","x":-133,"y":-380,"width":250,"height":60}
],
"edges":[
{"id":"288e5470d1b556d2","fromNode":"fbe98880b989d9e4","fromSide":"left","toNode":"6e675abef23a0340","toSide":"bottom"},
{"id":"b495e47f561dde59","fromNode":"8ca3559c19c010ed","fromSide":"top","toNode":"5b9108063adf014b","toSide":"bottom"},
{"id":"b3c2560576ac04a6","fromNode":"5b9108063adf014b","fromSide":"top","toNode":"32e333e12b3bfde3","toSide":"bottom"},
{"id":"eddfa5fa36a80e83","fromNode":"32e333e12b3bfde3","fromSide":"right","toNode":"f985b4d29d61dfaa","toSide":"top"},
{"id":"b4c140cff1b2b9cb","fromNode":"f985b4d29d61dfaa","fromSide":"bottom","toNode":"fbe98880b989d9e4","toSide":"right"},
{"id":"539dd5bb701134f8","fromNode":"4e9ff77f34077797","fromSide":"top","toNode":"8ca3559c19c010ed","toSide":"bottom"},
{"id":"7cbd9a626fe5b96c","fromNode":"6e675abef23a0340","fromSide":"top","toNode":"32e333e12b3bfde3","toSide":"left"},
{"id":"67abe8500a220828","fromNode":"238d605a8b2074b7","fromSide":"top","toNode":"910e026f4a0105db","toSide":"left"},
{"id":"c87e6b38cf1bbbb2","fromNode":"563d3fc69bd1c6e9","fromSide":"left","toNode":"238d605a8b2074b7","toSide":"bottom"},
{"id":"daa277272b399000","fromNode":"4e0f7ce27d4fbe95","fromSide":"top","toNode":"51a98e4ebde07d7d","toSide":"bottom"},
{"id":"34128d87af54d7ee","fromNode":"4a3d47301b019cc2","fromSide":"bottom","toNode":"563d3fc69bd1c6e9","toSide":"top"},
{"id":"f1659e542a65b6e9","fromNode":"910e026f4a0105db","fromSide":"top","toNode":"4e0f7ce27d4fbe95","toSide":"bottom"},
{"id":"12bdbd3186049ed1","fromNode":"5024f64a6ba16db7","fromSide":"bottom","toNode":"4a3d47301b019cc2","toSide":"top"},
{"id":"998540e8da17b537","fromNode":"51a98e4ebde07d7d","fromSide":"bottom","toNode":"5024f64a6ba16db7","toSide":"top"},
{"id":"4c2ed6c08c4e4341","fromNode":"5024f64a6ba16db7","fromSide":"left","toNode":"910e026f4a0105db","toSide":"right"},
{"id":"81556705161be8c8","fromNode":"fbe98880b989d9e4","fromSide":"top","toNode":"4e9ff77f34077797","toSide":"bottom"}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

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

@@ -0,0 +1,18 @@
- mail server
- счёт
- полная настройка
- почистить хостинг
- определить возможность интеграции файлового хранилища и документов в АСПРО + нужность ухода от гугл-таблиц
- перенос номеров ВАТС Ростелекома на другого провайдера и интеграция с АСПРО
- управление контентом передаём Саше
- разобраться с доменами и полностью с контентом (ждём бриф)
- интеграция с profitbase
- протестировать nextcloud
02.02 — 06.02
- БП работы с претензиями в Аспро
- почтовый сервер
- Узнать про корпоративные телефоны
- добавить камеру 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,18 @@
{
"nodes":[
{"id":"720a8218c07a3e1d","type":"group","x":-640,"y":-760,"width":280,"height":190,"label":"Свободные домены"},
{"id":"b8bdf8a176ef28af","type":"text","text":"BID GROUP (Строит в Миассе) + перенаправление на сайт агентства и виджет\nbid-group74.ru","x":200,"y":-940,"width":400,"height":94,"color":"4"},
{"id":"904d9482cef0e037","type":"text","text":"Агентство (Уралавтострой и БИД) + виджет выбора квартир\nuralav.ru\n","x":-250,"y":-940,"width":380,"height":94,"color":"3"},
{"id":"de65ae8c19a7114f","type":"text","text":"Уралавтострой + перенаправление на сайт агентства и виджет\n????.ru","x":-680,"y":-940,"width":360,"height":94,"color":"1"},
{"id":"7a754acef3d80d6c","x":-185,"y":-760,"width":250,"height":60,"type":"text","text":"виджет выбора квартир ProfitBase"},
{"id":"99bc662973f79d25","type":"text","text":"трестуас.рф","x":-620,"y":-740,"width":240,"height":50,"color":"5"},
{"id":"401c41c7a7279d55","type":"text","text":"uralavtostroy.ru","x":-620,"y":-690,"width":240,"height":50,"color":"5"},
{"id":"5234020b450df41f","type":"text","text":"uas-chel74.ru","x":-620,"y":-640,"width":240,"height":50,"color":"5"}
],
"edges":[
{"id":"8494f027b21789c9","fromNode":"de65ae8c19a7114f","fromSide":"right","toNode":"904d9482cef0e037","toSide":"left"},
{"id":"0d25895daa32324c","fromNode":"b8bdf8a176ef28af","fromSide":"left","toNode":"904d9482cef0e037","toSide":"right"},
{"id":"2851fdbb7c7d4f06","fromNode":"904d9482cef0e037","fromSide":"bottom","toNode":"7a754acef3d80d6c","toSide":"top"},
{"id":"9022b3f46d9e264a","fromNode":"720a8218c07a3e1d","fromSide":"top","toNode":"de65ae8c19a7114f","toSide":"bottom"}
]
}

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)
```