Initial commit
This commit is contained in:
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.obsidian/workspace.json
|
||||
.obsidian/workspace-mobile.json
|
||||
.trash/
|
||||
11
.obsidian/app.json
vendored
Normal file
11
.obsidian/app.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"pdfExportSettings": {
|
||||
"includeName": true,
|
||||
"pageSize": "Letter",
|
||||
"landscape": false,
|
||||
"margin": "0",
|
||||
"downscalePercent": 100
|
||||
},
|
||||
"readableLineLength": false,
|
||||
"promptDelete": false
|
||||
}
|
||||
6
.obsidian/appearance.json
vendored
Normal file
6
.obsidian/appearance.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"showViewHeader": true,
|
||||
"enabledCssSnippets": [
|
||||
"wide-editor"
|
||||
]
|
||||
}
|
||||
6
.obsidian/community-plugins.json
vendored
Normal file
6
.obsidian/community-plugins.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
[
|
||||
"obsidian-excalidraw-plugin",
|
||||
"calendar",
|
||||
"obsidian-kanban",
|
||||
"obsidian-icon-folder"
|
||||
]
|
||||
33
.obsidian/core-plugins.json
vendored
Normal file
33
.obsidian/core-plugins.json
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"footnotes": false,
|
||||
"properties": false,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": true,
|
||||
"bases": true,
|
||||
"webviewer": false
|
||||
}
|
||||
22
.obsidian/graph.json
vendored
Normal file
22
.obsidian/graph.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"collapse-filter": true,
|
||||
"search": "",
|
||||
"showTags": false,
|
||||
"showAttachments": false,
|
||||
"hideUnresolved": false,
|
||||
"showOrphans": true,
|
||||
"collapse-color-groups": true,
|
||||
"colorGroups": [],
|
||||
"collapse-display": true,
|
||||
"showArrow": false,
|
||||
"textFadeMultiplier": 0,
|
||||
"nodeSizeMultiplier": 1,
|
||||
"lineSizeMultiplier": 1,
|
||||
"collapse-forces": true,
|
||||
"centerStrength": 0.518713248970312,
|
||||
"repelStrength": 10,
|
||||
"linkStrength": 1,
|
||||
"linkDistance": 250,
|
||||
"scale": 1,
|
||||
"close": true
|
||||
}
|
||||
10
.obsidian/hotkeys.json
vendored
Normal file
10
.obsidian/hotkeys.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"editor:toggle-source": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
],
|
||||
"key": "["
|
||||
}
|
||||
]
|
||||
}
|
||||
1
.obsidian/page-preview.json
vendored
Normal file
1
.obsidian/page-preview.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
10
.obsidian/plugins/calendar/data.json
vendored
Normal file
10
.obsidian/plugins/calendar/data.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"shouldConfirmBeforeCreate": true,
|
||||
"weekStart": "locale",
|
||||
"wordsPerDot": 250,
|
||||
"showWeeklyNote": false,
|
||||
"weeklyNoteFormat": "",
|
||||
"weeklyNoteTemplate": "",
|
||||
"weeklyNoteFolder": "",
|
||||
"localeOverride": "system-default"
|
||||
}
|
||||
4459
.obsidian/plugins/calendar/main.js
vendored
Normal file
4459
.obsidian/plugins/calendar/main.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
.obsidian/plugins/calendar/manifest.json
vendored
Normal file
10
.obsidian/plugins/calendar/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "calendar",
|
||||
"name": "Calendar",
|
||||
"description": "Calendar view of your daily notes",
|
||||
"version": "1.5.10",
|
||||
"author": "Liam Cain",
|
||||
"authorUrl": "https://github.com/liamcain/",
|
||||
"isDesktopOnly": false,
|
||||
"minAppVersion": "0.9.11"
|
||||
}
|
||||
819
.obsidian/plugins/obsidian-excalidraw-plugin/data.json
vendored
Normal file
819
.obsidian/plugins/obsidian-excalidraw-plugin/data.json
vendored
Normal file
@@ -0,0 +1,819 @@
|
||||
{
|
||||
"copyLinkToElemenetAnchorTo100": false,
|
||||
"copyFrameLinkByName": false,
|
||||
"disableDoubleClickTextEditing": false,
|
||||
"folder": "Excalidraw",
|
||||
"cropFolder": "",
|
||||
"annotateFolder": "",
|
||||
"embedUseExcalidrawFolder": false,
|
||||
"templateFilePath": "Excalidraw/Template.excalidraw",
|
||||
"scriptFolderPath": "Excalidraw/Scripts",
|
||||
"fontAssetsPath": "Excalidraw/CJK Fonts",
|
||||
"loadChineseFonts": false,
|
||||
"loadJapaneseFonts": false,
|
||||
"loadKoreanFonts": false,
|
||||
"compress": true,
|
||||
"decompressForMDView": false,
|
||||
"onceOffCompressFlagReset": true,
|
||||
"onceOffGPTVersionReset": true,
|
||||
"autosave": true,
|
||||
"autosaveIntervalDesktop": 60000,
|
||||
"autosaveIntervalMobile": 30000,
|
||||
"drawingFilenamePrefix": "Drawing ",
|
||||
"drawingEmbedPrefixWithFilename": true,
|
||||
"drawingFilnameEmbedPostfix": " ",
|
||||
"drawingFilenameDateTime": "YYYY-MM-DD HH.mm.ss",
|
||||
"useExcalidrawExtension": true,
|
||||
"cropSuffix": "",
|
||||
"cropPrefix": "cropped_",
|
||||
"annotateSuffix": "",
|
||||
"annotatePrefix": "annotated_",
|
||||
"annotatePreserveSize": false,
|
||||
"previewImageType": "SVGIMG",
|
||||
"renderingConcurrency": 3,
|
||||
"allowImageCache": true,
|
||||
"allowImageCacheInScene": true,
|
||||
"displayExportedImageIfAvailable": false,
|
||||
"previewMatchObsidianTheme": false,
|
||||
"width": "400",
|
||||
"height": "",
|
||||
"overrideObsidianFontSize": false,
|
||||
"dynamicStyling": "colorful",
|
||||
"isLeftHanded": false,
|
||||
"desktopUIMode": "tray",
|
||||
"tabletUIMode": "compact",
|
||||
"iframeMatchExcalidrawTheme": true,
|
||||
"matchTheme": false,
|
||||
"matchThemeAlways": false,
|
||||
"matchThemeTrigger": false,
|
||||
"defaultMode": "normal",
|
||||
"defaultPenMode": "never",
|
||||
"penModeDoubleTapEraser": true,
|
||||
"penModeSingleFingerPanning": true,
|
||||
"penModeCrosshairVisible": true,
|
||||
"panWithRightMouseButton": false,
|
||||
"renderImageInMarkdownReadingMode": false,
|
||||
"renderImageInHoverPreviewForMDNotes": false,
|
||||
"renderImageInMarkdownToPDF": false,
|
||||
"allowPinchZoom": false,
|
||||
"allowWheelZoom": false,
|
||||
"zoomToFitOnOpen": true,
|
||||
"zoomToFitOnResize": false,
|
||||
"zoomToFitMaxLevel": 2,
|
||||
"zoomStep": 0.05,
|
||||
"zoomMin": 0.1,
|
||||
"zoomMax": 30,
|
||||
"linkPrefix": "📍",
|
||||
"urlPrefix": "🌐",
|
||||
"parseTODO": false,
|
||||
"todo": "☐",
|
||||
"done": "🗹",
|
||||
"hoverPreviewWithoutCTRL": false,
|
||||
"linkOpacity": 1,
|
||||
"openInAdjacentPane": true,
|
||||
"showSecondOrderLinks": true,
|
||||
"focusOnFileTab": true,
|
||||
"openInMainWorkspace": true,
|
||||
"showLinkBrackets": false,
|
||||
"syncElementLinkWithText": false,
|
||||
"allowCtrlClick": true,
|
||||
"forceWrap": false,
|
||||
"pageTransclusionCharLimit": 200,
|
||||
"wordWrappingDefault": 0,
|
||||
"removeTransclusionQuoteSigns": true,
|
||||
"iframelyAllowed": true,
|
||||
"pngExportScale": 1,
|
||||
"exportWithTheme": true,
|
||||
"exportWithBackground": true,
|
||||
"exportPaddingSVG": 10,
|
||||
"exportEmbedScene": false,
|
||||
"keepInSync": false,
|
||||
"autoexportSVG": false,
|
||||
"autoexportPNG": false,
|
||||
"autoExportLightAndDark": false,
|
||||
"autoexportExcalidraw": false,
|
||||
"embedType": "excalidraw",
|
||||
"embedMarkdownCommentLinks": true,
|
||||
"embedWikiLink": true,
|
||||
"syncExcalidraw": false,
|
||||
"experimentalFileType": false,
|
||||
"experimentalFileTag": "✏️",
|
||||
"experimentalLivePreview": true,
|
||||
"fadeOutExcalidrawMarkup": false,
|
||||
"loadPropertySuggestions": false,
|
||||
"experimentalEnableFourthFont": false,
|
||||
"experimantalFourthFont": "Virgil",
|
||||
"addDummyTextElement": false,
|
||||
"zoteroCompatibility": false,
|
||||
"fieldSuggester": true,
|
||||
"compatibilityMode": false,
|
||||
"drawingOpenCount": 0,
|
||||
"library": "deprecated",
|
||||
"library2": {
|
||||
"type": "excalidrawlib",
|
||||
"version": 2,
|
||||
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.19.2",
|
||||
"libraryItems": []
|
||||
},
|
||||
"imageElementNotice": true,
|
||||
"mdSVGwidth": 500,
|
||||
"mdSVGmaxHeight": 800,
|
||||
"mdFont": "Virgil",
|
||||
"mdFontColor": "Black",
|
||||
"mdBorderColor": "Black",
|
||||
"mdCSS": "",
|
||||
"scriptEngineSettings": {},
|
||||
"previousRelease": "2.19.2",
|
||||
"showReleaseNotes": true,
|
||||
"compareManifestToPluginVersion": true,
|
||||
"showNewVersionNotification": true,
|
||||
"latexBoilerplate": "\\color{blue}",
|
||||
"latexPreambleLocation": "preamble.sty",
|
||||
"taskboneEnabled": false,
|
||||
"taskboneAPIkey": "",
|
||||
"pinnedScripts": [],
|
||||
"sidepanelTabs": [],
|
||||
"customPens": [
|
||||
{
|
||||
"type": "default",
|
||||
"freedrawOnly": false,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 0,
|
||||
"roughness": 0,
|
||||
"penOptions": {
|
||||
"highlighter": false,
|
||||
"constantPressure": false,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"options": {
|
||||
"thinning": 0.6,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "easeOutSine",
|
||||
"start": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "highlighter",
|
||||
"freedrawOnly": true,
|
||||
"strokeColor": "#FFC47C",
|
||||
"backgroundColor": "#FFC47C",
|
||||
"fillStyle": "solid",
|
||||
"strokeWidth": 2,
|
||||
"roughness": null,
|
||||
"penOptions": {
|
||||
"highlighter": true,
|
||||
"constantPressure": true,
|
||||
"hasOutline": true,
|
||||
"outlineWidth": 4,
|
||||
"options": {
|
||||
"thinning": 1,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "linear",
|
||||
"start": {
|
||||
"taper": 0,
|
||||
"cap": true,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"taper": 0,
|
||||
"cap": true,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "finetip",
|
||||
"freedrawOnly": false,
|
||||
"strokeColor": "#3E6F8D",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 0.5,
|
||||
"roughness": 0,
|
||||
"penOptions": {
|
||||
"highlighter": false,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"constantPressure": true,
|
||||
"options": {
|
||||
"smoothing": 0.4,
|
||||
"thinning": -0.5,
|
||||
"streamline": 0.4,
|
||||
"easing": "linear",
|
||||
"start": {
|
||||
"taper": 5,
|
||||
"cap": false,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"taper": 5,
|
||||
"cap": false,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "fountain",
|
||||
"freedrawOnly": false,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"roughness": 0,
|
||||
"penOptions": {
|
||||
"highlighter": false,
|
||||
"constantPressure": false,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"options": {
|
||||
"smoothing": 0.2,
|
||||
"thinning": 0.6,
|
||||
"streamline": 0.2,
|
||||
"easing": "easeInOutSine",
|
||||
"start": {
|
||||
"taper": 150,
|
||||
"cap": true,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"taper": 1,
|
||||
"cap": true,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "marker",
|
||||
"freedrawOnly": true,
|
||||
"strokeColor": "#B83E3E",
|
||||
"backgroundColor": "#FF7C7C",
|
||||
"fillStyle": "dashed",
|
||||
"strokeWidth": 2,
|
||||
"roughness": 3,
|
||||
"penOptions": {
|
||||
"highlighter": false,
|
||||
"constantPressure": true,
|
||||
"hasOutline": true,
|
||||
"outlineWidth": 4,
|
||||
"options": {
|
||||
"thinning": 1,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "linear",
|
||||
"start": {
|
||||
"taper": 0,
|
||||
"cap": true,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"taper": 0,
|
||||
"cap": true,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "thick-thin",
|
||||
"freedrawOnly": true,
|
||||
"strokeColor": "#CECDCC",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 0,
|
||||
"roughness": null,
|
||||
"penOptions": {
|
||||
"highlighter": true,
|
||||
"constantPressure": true,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"options": {
|
||||
"thinning": 1,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "linear",
|
||||
"start": {
|
||||
"taper": 0,
|
||||
"cap": true,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"cap": true,
|
||||
"taper": true,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "thin-thick-thin",
|
||||
"freedrawOnly": true,
|
||||
"strokeColor": "#CECDCC",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 0,
|
||||
"roughness": null,
|
||||
"penOptions": {
|
||||
"highlighter": true,
|
||||
"constantPressure": true,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"options": {
|
||||
"thinning": 1,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "linear",
|
||||
"start": {
|
||||
"cap": true,
|
||||
"taper": true,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"cap": true,
|
||||
"taper": true,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "default",
|
||||
"freedrawOnly": false,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 0,
|
||||
"roughness": 0,
|
||||
"penOptions": {
|
||||
"highlighter": false,
|
||||
"constantPressure": false,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"options": {
|
||||
"thinning": 0.6,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "easeOutSine",
|
||||
"start": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "default",
|
||||
"freedrawOnly": false,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 0,
|
||||
"roughness": 0,
|
||||
"penOptions": {
|
||||
"highlighter": false,
|
||||
"constantPressure": false,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"options": {
|
||||
"thinning": 0.6,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "easeOutSine",
|
||||
"start": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "default",
|
||||
"freedrawOnly": false,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 0,
|
||||
"roughness": 0,
|
||||
"penOptions": {
|
||||
"highlighter": false,
|
||||
"constantPressure": false,
|
||||
"hasOutline": false,
|
||||
"outlineWidth": 1,
|
||||
"options": {
|
||||
"thinning": 0.6,
|
||||
"smoothing": 0.5,
|
||||
"streamline": 0.5,
|
||||
"easing": "easeOutSine",
|
||||
"start": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
},
|
||||
"end": {
|
||||
"cap": true,
|
||||
"taper": 0,
|
||||
"easing": "linear"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"numberOfCustomPens": 0,
|
||||
"pdfScale": 4,
|
||||
"pdfBorderBox": true,
|
||||
"pdfFrame": false,
|
||||
"pdfGapSize": 20,
|
||||
"pdfGroupPages": false,
|
||||
"pdfLockAfterImport": true,
|
||||
"pdfNumColumns": 1,
|
||||
"pdfNumRows": 1,
|
||||
"pdfDirection": "right",
|
||||
"pdfImportScale": 0.3,
|
||||
"gridSettings": {
|
||||
"DYNAMIC_COLOR": true,
|
||||
"COLOR": "#000000",
|
||||
"OPACITY": 50,
|
||||
"GRID_DIRECTION": {
|
||||
"horizontal": true,
|
||||
"vertical": true
|
||||
}
|
||||
},
|
||||
"laserSettings": {
|
||||
"DECAY_LENGTH": 50,
|
||||
"DECAY_TIME": 1000,
|
||||
"COLOR": "#ff0000"
|
||||
},
|
||||
"embeddableMarkdownDefaults": {
|
||||
"useObsidianDefaults": false,
|
||||
"backgroundMatchCanvas": false,
|
||||
"backgroundMatchElement": true,
|
||||
"backgroundColor": "#fff",
|
||||
"backgroundOpacity": 60,
|
||||
"borderMatchElement": true,
|
||||
"borderColor": "#fff",
|
||||
"borderOpacity": 0,
|
||||
"filenameVisible": false
|
||||
},
|
||||
"markdownNodeOneClickEditing": false,
|
||||
"canvasImmersiveEmbed": true,
|
||||
"startupScriptPath": "",
|
||||
"aiEnabled": true,
|
||||
"openAIAPIToken": "",
|
||||
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
|
||||
"openAIDefaultTextModelMaxTokens": 4096,
|
||||
"openAIDefaultVisionModel": "gpt-4o",
|
||||
"openAIDefaultImageGenerationModel": "dall-e-3",
|
||||
"openAIURL": "https://api.openai.com/v1/chat/completions",
|
||||
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations",
|
||||
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits",
|
||||
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations",
|
||||
"modifierKeyConfig": {
|
||||
"Mac": {
|
||||
"LocalFileDragAction": {
|
||||
"defaultAction": "image-import",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-import"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "link"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-url"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "embeddable"
|
||||
}
|
||||
]
|
||||
},
|
||||
"WebBrowserDragAction": {
|
||||
"defaultAction": "image-url",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-url"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "link"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "embeddable"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-import"
|
||||
}
|
||||
]
|
||||
},
|
||||
"InternalDragAction": {
|
||||
"defaultAction": "link",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "link"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": true,
|
||||
"result": "embeddable"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": true,
|
||||
"result": "image-fullsize"
|
||||
}
|
||||
]
|
||||
},
|
||||
"LinkClickAction": {
|
||||
"defaultAction": "new-tab",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "active-pane"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "new-tab"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "new-pane"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "popout-window"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": true,
|
||||
"result": "md-properties"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Win": {
|
||||
"LocalFileDragAction": {
|
||||
"defaultAction": "image-import",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-import"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "link"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-url"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "embeddable"
|
||||
}
|
||||
]
|
||||
},
|
||||
"WebBrowserDragAction": {
|
||||
"defaultAction": "image-url",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-url"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "link"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "embeddable"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-import"
|
||||
}
|
||||
]
|
||||
},
|
||||
"InternalDragAction": {
|
||||
"defaultAction": "link",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "link"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "embeddable"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "image"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "image-fullsize"
|
||||
}
|
||||
]
|
||||
},
|
||||
"LinkClickAction": {
|
||||
"defaultAction": "new-tab",
|
||||
"rules": [
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": false,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "active-pane"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": false,
|
||||
"result": "new-tab"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "new-pane"
|
||||
},
|
||||
{
|
||||
"shift": true,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": true,
|
||||
"meta_ctrl": false,
|
||||
"result": "popout-window"
|
||||
},
|
||||
{
|
||||
"shift": false,
|
||||
"ctrl_cmd": true,
|
||||
"alt_opt": false,
|
||||
"meta_ctrl": true,
|
||||
"result": "md-properties"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"slidingPanesSupport": false,
|
||||
"areaZoomLimit": 1,
|
||||
"longPressDesktop": 500,
|
||||
"longPressMobile": 500,
|
||||
"doubleClickLinkOpenViewMode": true,
|
||||
"isDebugMode": false,
|
||||
"rank": "Bronze",
|
||||
"modifierKeyOverrides": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
],
|
||||
"key": "Enter"
|
||||
},
|
||||
{
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
],
|
||||
"key": "k"
|
||||
},
|
||||
{
|
||||
"modifiers": [
|
||||
"Mod"
|
||||
],
|
||||
"key": "G"
|
||||
}
|
||||
],
|
||||
"showSplashscreen": true,
|
||||
"pdfSettings": {
|
||||
"pageSize": "A4",
|
||||
"pageOrientation": "portrait",
|
||||
"fitToPage": 1,
|
||||
"paperColor": "white",
|
||||
"customPaperColor": "#ffffff",
|
||||
"alignment": "center",
|
||||
"margin": "normal"
|
||||
},
|
||||
"disableContextMenu": false
|
||||
}
|
||||
10
.obsidian/plugins/obsidian-excalidraw-plugin/main.js
vendored
Normal file
10
.obsidian/plugins/obsidian-excalidraw-plugin/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
12
.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json
vendored
Normal file
12
.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "obsidian-excalidraw-plugin",
|
||||
"name": "Excalidraw",
|
||||
"version": "2.19.2",
|
||||
"minAppVersion": "1.5.7",
|
||||
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
|
||||
"author": "Zsolt Viczian",
|
||||
"authorUrl": "https://excalidraw-obsidian.online",
|
||||
"fundingUrl": "https://ko-fi.com/zsolt",
|
||||
"helpUrl": "https://github.com/zsviczian/obsidian-excalidraw-plugin#readme",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
1
.obsidian/plugins/obsidian-excalidraw-plugin/styles.css
vendored
Normal file
1
.obsidian/plugins/obsidian-excalidraw-plugin/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
31
.obsidian/plugins/obsidian-icon-folder/data.json
vendored
Normal file
31
.obsidian/plugins/obsidian-icon-folder/data.json
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"settings": {
|
||||
"migrated": 6,
|
||||
"iconPacksPath": ".obsidian/icons",
|
||||
"fontSize": 16,
|
||||
"emojiStyle": "native",
|
||||
"iconColor": null,
|
||||
"recentlyUsedIcons": [],
|
||||
"recentlyUsedIconsSize": 5,
|
||||
"rules": [],
|
||||
"extraMargin": {
|
||||
"top": 0,
|
||||
"right": 4,
|
||||
"bottom": 0,
|
||||
"left": 0
|
||||
},
|
||||
"iconInTabsEnabled": false,
|
||||
"iconInTitleEnabled": false,
|
||||
"iconInTitlePosition": "above",
|
||||
"iconInFrontmatterEnabled": false,
|
||||
"iconInFrontmatterFieldName": "icon",
|
||||
"iconColorInFrontmatterFieldName": "iconColor",
|
||||
"iconsBackgroundCheckEnabled": false,
|
||||
"iconsInNotesEnabled": true,
|
||||
"iconsInLinksEnabled": true,
|
||||
"iconIdentifier": ":",
|
||||
"lucideIconPackType": "native",
|
||||
"debugMode": false,
|
||||
"useInternalPlugins": false
|
||||
}
|
||||
}
|
||||
7158
.obsidian/plugins/obsidian-icon-folder/main.js
vendored
Normal file
7158
.obsidian/plugins/obsidian-icon-folder/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/obsidian-icon-folder/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-icon-folder/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "obsidian-icon-folder",
|
||||
"name": "Iconize",
|
||||
"version": "2.14.7",
|
||||
"minAppVersion": "0.9.12",
|
||||
"description": "Add icons to anything you desire in Obsidian, including files, folders, and text.",
|
||||
"author": "Florian Woelki",
|
||||
"authorUrl": "https://florianwoelki.com/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
120
.obsidian/plugins/obsidian-icon-folder/styles.css
vendored
Normal file
120
.obsidian/plugins/obsidian-icon-folder/styles.css
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
.iconize-inline-title-wrapper {
|
||||
width: var(--line-width);
|
||||
max-width: var(--max-width);
|
||||
margin-inline: var(--content-margin);
|
||||
}
|
||||
|
||||
.iconize-title-icon {
|
||||
max-width: var(--max-width);
|
||||
margin-right: var(--size-4-2);
|
||||
}
|
||||
|
||||
.iconize-icon-in-link {
|
||||
transform: translateY(20%);
|
||||
margin-right: var(--size-2-2);
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.iconize-icon {
|
||||
border: 1px solid transparent;
|
||||
margin: 0px 4px 0px 0px;
|
||||
display: flex;
|
||||
align-self: center;
|
||||
margin: auto 0;
|
||||
}
|
||||
|
||||
.nav-folder-title,
|
||||
.nav-file-title {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.iconize-setting input[type='color'] {
|
||||
margin: 0 6px;
|
||||
}
|
||||
|
||||
.iconize-modal.prompt-results {
|
||||
margin: 0;
|
||||
overflow-y: auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.prompt .iconize-subheadline {
|
||||
margin-top: 12px;
|
||||
font-size: 12px;
|
||||
color: gray;
|
||||
grid-column-start: 1;
|
||||
grid-column-end: 6;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.iconize-modal.prompt-results {
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
}
|
||||
.prompt .iconize-subheadline {
|
||||
grid-column-end: 4;
|
||||
}
|
||||
}
|
||||
|
||||
.iconize-modal.prompt-results .suggestion-item {
|
||||
cursor: pointer;
|
||||
white-space: pre-wrap;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
flex-direction: column-reverse;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
color: var(--text-muted);
|
||||
padding: 16px 8px;
|
||||
line-break: auto;
|
||||
word-break: break-word;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.iconize-modal.prompt-results .suggestion-item.suggestion-item__center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.iconize-icon-preview {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.iconize-icon-preview img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.iconize-icon-preview svg {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
color: currentColor;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.iconize-dragover {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.iconize-dragover-el {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: var(--text-normal);
|
||||
background-color: var(--background-secondary-alt);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* Custom rule modal. */
|
||||
.iconize-custom-modal .modal-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.iconize-custom-modal .modal-content input {
|
||||
width: 100%;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
153
.obsidian/plugins/obsidian-kanban/main.js
vendored
Normal file
153
.obsidian/plugins/obsidian-kanban/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/obsidian-kanban/manifest.json
vendored
Normal file
11
.obsidian/plugins/obsidian-kanban/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "obsidian-kanban",
|
||||
"name": "Kanban",
|
||||
"version": "2.0.51",
|
||||
"minAppVersion": "1.0.0",
|
||||
"description": "Create markdown-backed Kanban boards in Obsidian.",
|
||||
"author": "mgmeyers",
|
||||
"authorUrl": "https://github.com/mgmeyers/obsidian-kanban",
|
||||
"helpUrl": "https://publish.obsidian.md/kanban/Obsidian+Kanban+Plugin",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
1
.obsidian/plugins/obsidian-kanban/styles.css
vendored
Normal file
1
.obsidian/plugins/obsidian-kanban/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
16
.obsidian/snippets/wide-editor.css
vendored
Normal file
16
.obsidian/snippets/wide-editor.css
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
/* Убираем ограничение ширины */
|
||||
.workspace-leaf-content {
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
/* Расширяем область редактирования */
|
||||
.markdown-source-view .cm-editor,
|
||||
.markdown-preview-view {
|
||||
max-width: none;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Убираем ограничение читаемой длины строки */
|
||||
.cm-content {
|
||||
max-width: none;
|
||||
}
|
||||
51
BPMSoft - ELMA/Интеграция CRM и ELMA.md
Normal file
51
BPMSoft - ELMA/Интеграция CRM и ELMA.md
Normal file
@@ -0,0 +1,51 @@
|
||||
## Внутренние вопросы
|
||||
|
||||
### Отправка комментария - в рамках MVP не будет
|
||||
|
||||
- К чему относится комментарий (какой объект)
|
||||
- Нужно ли будет что-то делать после получения комментария (отправлять Email, создавать напоминание, задачу или что-то другое)
|
||||
- Логирование происходит на стороне ELMA или BPMSoft
|
||||
- Данные в поле `approver` (я так понимаю это Контакт в CRM) в каком формате будут
|
||||
Это будет Id контакта из CRM?
|
||||
|
||||
### Отправка данных по сделке
|
||||
|
||||
- Какой триггер у срабатывания данного метода со стороны BPMSoft - переработать логику кнопки "Отправить на согласование"
|
||||
- Нужно ли как-то сохранять информацию об отправке данных в ELMA
|
||||
- Если мы получаем не успешный ответ (!= 200 код), то какие сообщения на каждый код ответа показываем пользователю
|
||||
|
||||
### Итоговая цепочка согласований
|
||||
|
||||
- Это будет новый объект в системе CRM или будет просто текстовое поле в объекте Сделка
|
||||
- Формат поля `chain_of_approval` в данном методе
|
||||
|
||||
### Отправка комментария из BPMSoft - в рамках MVP не будет
|
||||
|
||||
- Какой триггер у срабатывания данного метода со стороны BPMSoft
|
||||
- В каком объекте будут происходить изменения
|
||||
- Формат данных в поле `initiator` (это просто Id контакта из CRM)
|
||||
|
||||
### Отправка результата согласования
|
||||
|
||||
- Формат данных в поле `resolution`
|
||||
Если это справочное поле, то нужно будет синхронизировать справочники, чтобы я мог по Id искать значение в справочнике
|
||||
|
||||
### Отмена сделки
|
||||
|
||||
- Какой триггер у данного события
|
||||
На данный момент не существует отмены сделки, есть только `Lost` статус
|
||||
|
||||
## Вопросы к ELMA
|
||||
|
||||
### Отправка данных по сделке
|
||||
|
||||
- Хотелось бы увидеть полный пример формата данных в JSON
|
||||
(Набор полей, их параметры и типы)
|
||||
- Какие бывают коды ответов (200, 500, 401 и т. д.)
|
||||
- Формат ответа после получения данных от CRM в формате JSON
|
||||
```json
|
||||
{
|
||||
"status": 200,
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
200
BPMSoft - ELMA/Интеграция со стороны ELMA в BPMSoft.md
Normal file
200
BPMSoft - ELMA/Интеграция со стороны ELMA в BPMSoft.md
Normal file
@@ -0,0 +1,200 @@
|
||||
## Отправка цепочки согласований
|
||||
|
||||
### Основные моменты
|
||||
|
||||
1. URI для запроса
|
||||
1. Dev `https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval`
|
||||
2. Prod `https://crm.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval`
|
||||
2. Header для запроса `X-Elma-Service`
|
||||
3. Значение Header должно храниться в системе ELMA и быть зашифрованным (для dev и prod стендов разные значения). Будут переданы позднее
|
||||
4. Перед выполнением запроса необходимо расшифровать значение Header и добавить его в запрос
|
||||
5. В поле `chain_of_approval` отправляются `email` по порядку, исходя из цепочки согласований
|
||||
### Примеры
|
||||
|
||||
```
|
||||
curl --location 'https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval' \
|
||||
--header 'X-Elma-Service: 123' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"id_crm": "123-123",
|
||||
"chain_of_approval": "test1@mail.com"
|
||||
}'
|
||||
```
|
||||
|
||||
### Специальные условия
|
||||
|
||||
1. По матрице согласования нет подходящих условий
|
||||
- Согласование происходит автоматически в системе ELMA
|
||||
- ELMA отправляет запрос в формате
|
||||
```json
|
||||
{
|
||||
"id_crm": "035e0f7b-18d2-4f24-87d8-59f107110a01",
|
||||
"chain_of_approval": "Согласовано"
|
||||
}
|
||||
```
|
||||
- BPMSoft при получении такого ответа автоматически согласовывает условие
|
||||
|
||||
### Примеры ответов
|
||||
|
||||
Успешный ответ
|
||||
```json
|
||||
{
|
||||
"status": 200,
|
||||
"error_message": ""
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует заголовок авторизации или он неверный
|
||||
```json
|
||||
{
|
||||
"status": 403,
|
||||
"error_message": "Выполнение запрещено. Проверьте все необходимые данные"
|
||||
}
|
||||
```
|
||||
|
||||
Пустое тело
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `id_crm` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `chain_of_approval` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля chain_of_approval не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Согласование с Id из поля `id_crm` не найдено в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Согласование с Id {0} не найдено в системе BPMSoft. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Контакт с email из поля `chain_of_approval` не найден в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Контакт с email {0} не найден в системе. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Внутренняя ошибка BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
"error_message": "Ошибка в процессе обработки"
|
||||
}
|
||||
```
|
||||
## Отправка результата согласования
|
||||
|
||||
### Основные моменты
|
||||
|
||||
1. URI для запроса
|
||||
1. Dev `https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution`
|
||||
2. Prod `https://crm.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution`
|
||||
2. Header для запроса `X-Elma-Service`
|
||||
3. Значение Header должно храниться в системе ELMA и быть зашифрованным (для dev и prod стендов разные значения). Будут переданы позднее
|
||||
4. Перед выполнением запроса необходимо расшифровать значение Header и добавить его в запрос
|
||||
5. В поле `approver` отправляется `email` согласующего
|
||||
6. В поле `resolution` отправляется строка, один из вариантов ("Согласовано" или "Отклонено")
|
||||
### Примеры
|
||||
|
||||
```
|
||||
curl --location 'https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution' \
|
||||
--header 'X-Elma-Service: 123' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
"id_crm": "123-123",
|
||||
"approver": "test@mail.com",
|
||||
"resolution": "Согласовано"
|
||||
}'
|
||||
```
|
||||
|
||||
###
|
||||
### Примеры ответов
|
||||
|
||||
Успешный ответ
|
||||
```json
|
||||
{
|
||||
"status": 200,
|
||||
"error_message": ""
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует заголовок авторизации или он неверный
|
||||
```json
|
||||
{
|
||||
"status": 403,
|
||||
"error_message": "Выполнение запрещено. Проверьте все необходимые данные"
|
||||
}
|
||||
```
|
||||
|
||||
Пустое тело
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `id_crm` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `approver` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля approver не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `resolution` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля resolution не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Согласование с Id из поля `id_crm` не найдено в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Согласование с Id {0} не найдено в системе BPMSoft. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Контакт с email из поля `approver` не найден в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Контакт с email {0} не найден в системе. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Внутренняя ошибка BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
"error_message": "Ошибка в процессе обработки"
|
||||
}
|
||||
```
|
||||
36
BPMSoft - ELMA/Методы для общения с CRM от ELMA.md
Normal file
36
BPMSoft - ELMA/Методы для общения с CRM от ELMA.md
Normal file
@@ -0,0 +1,36 @@
|
||||
|
||||
1. Добавить в `appsettings.json`
|
||||
1. ```json
|
||||
"BPMSoft.Configuration.ElmaService.ElmaService": [
|
||||
"/ServiceModel/ElmaService.svc"
|
||||
],
|
||||
```
|
||||
2. Добавить в `BPMSoft.WebHost.dll.config`
|
||||
1. `<add key="AllowedLocations" value="ServiceModel/ElmaService.svc;...`
|
||||
3. Добавить логи
|
||||
|
||||
```json
|
||||
<logger name="ElmaSyncHelper" writeTo="ElmaSyncHelperAppender" minlevel="Debug" final="true" />
|
||||
<logger name="ElmaService" writeTo="ElmaServiceAppender" minlevel="Debug" final="true" />
|
||||
```
|
||||
|
||||
```js
|
||||
callElmaService: function () {
|
||||
const request = {
|
||||
Id_crm: this.get("Id"),
|
||||
chain_of_approval: "test1, test2"
|
||||
};
|
||||
|
||||
const config = {
|
||||
serviceName: "ElmaService",
|
||||
methodName: "CreateOrderApproval",
|
||||
data: {
|
||||
request: request
|
||||
}
|
||||
};
|
||||
|
||||
this.callService(config, function(response) {
|
||||
debugger;
|
||||
}, this)
|
||||
},
|
||||
```
|
||||
57
BPMSoft - ELMA/Новые объекты и поля.md
Normal file
57
BPMSoft - ELMA/Новые объекты и поля.md
Normal file
@@ -0,0 +1,57 @@
|
||||
## Получение данных о сделке из BPMSoft
|
||||
|
||||
- Отправляем один большой запрос со всеми необходимыми данными после срабатывания триггера на стороне BPMSoft
|
||||
- По полям из объекта `test` в запросе необходимо будет создавать новую запись в приложении `Продукты спецификации ()`
|
||||
-
|
||||
|
||||
| Объект CRM | Поле CRM | Код поля CRM | Тип поля | Объект ELMA | Код ELMA | Тип поля | Новое в CRM | Новое в ELMA |
|
||||
| ------------------ | ------------------------------ | ---------------------- | ----------------------- | ----------------- | ----------------------------------- | -------- | :---------: | :----------: |
|
||||
| NrbApproval | | | | transaction_terms | | | | |
|
||||
| | Id согласования | Id | uuid | | | | - | |
|
||||
| | Id сделки | NrbOrderId | uuid | | | | - | |
|
||||
| | Номер сделки | NrbNumber | string | | number | string | | - |
|
||||
| | Создал | CreatedById | uuid | | | | - | |
|
||||
| | Статус | NrbStateDeal | uuid | | state_deal | | - | |
|
||||
| | Клиент | NrbClient | uuid | | | | - | |
|
||||
| | Партнер Арены | NrbPartner | uuid | | | | - | |
|
||||
| | Дистрибьютор | NrbDistributor | uuid | | | | - | |
|
||||
| | Сумма сделки | NrbAmountDeal | decimal | | amount_deal | money | - | - |
|
||||
| | Общая скидка | NrbAverageDiscount | decimal | | discount | decimal | - | - |
|
||||
| | Отсрочка | | integer | | deadment | integer | + | - |
|
||||
| | Рассрочка | NrbInstallment | uuid | | | | + | |
|
||||
| | Стоимость поддержки | | decimal | | the_cost_of_support | decimal | + | - |
|
||||
| | Лицензии без поддержки | | bool | | license_without_support | bool | + | - |
|
||||
| | Отложенная поддержка | NrbDeferredSupport | uuid | | | | + | |
|
||||
| | Гарантийная поддержка | NrbWarrantySupport | uuid | | | | + | |
|
||||
| | Поддержка в виде | | uuid | | | | + | |
|
||||
| | PriceHold Лицензий | NrbLicensePriceHold | uuid | | | | + | |
|
||||
| | PriceHold Поддержка | NrbSupportPriceHold | uuid | | | | + | |
|
||||
| | PriceHold Консалтинг | NrbConsultingPriceHold | uuid | | | | + | |
|
||||
| | Другие значимые условия сделки | | string | | other_significant_transaction_terms | string | + | - |
|
||||
| | | | | | | | | |
|
||||
| NrbApprovalProduct | | | | product_approval | | | | |
|
||||
| | Продукт | NrbProductId | uuid | | | | | |
|
||||
| | Количество | Quantity | int | | | | | |
|
||||
| | Стоимость с учетом скидки | TotalAmount | decimal | | | | | |
|
||||
| | Цена за период | Price | decimal | | | | | |
|
||||
| | Форма контрактования | NrbContractForm | uuid (NrbContractForm) | | | | | |
|
||||
| | Дата старта | NrbStartDate | date | | | | | |
|
||||
| | Дата завершения | NrbEndDate | date | | | | | |
|
||||
| | Период | NrbPeriod | uuid (NrbProductPeriod) | | | | | |
|
||||
| | | | | | | | | |
|
||||
|
||||
Пример запроса от BPMSoft в ELMA
|
||||
|
||||
```json
|
||||
|
||||
```
|
||||
|
||||
## Доработки на стороне ELMA
|
||||
|
||||
id_approval - удалить
|
||||
|
||||
| Что нужно сделать | Ответственный | | | |
|
||||
| ----------------- | ------------- | --- | --- | --- |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
9
Commands Claude.md
Normal file
9
Commands Claude.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Получить статистику по дням
|
||||
```bash
|
||||
npx ccusage@latest
|
||||
```
|
||||
|
||||
Получить статистику в режиме реального времени
|
||||
```bash
|
||||
npx ccusage@latest blocks --live
|
||||
```
|
||||
20
Commands.md
Normal file
20
Commands.md
Normal file
@@ -0,0 +1,20 @@
|
||||
Найти процессы по порту
|
||||
```bash
|
||||
netstat -ano | findstr :9090 | findstr LISTENING
|
||||
```
|
||||
|
||||
Убить процесс
|
||||
```bash
|
||||
taskkill /PID 8768 /F
|
||||
|
||||
powershell.exe -Command "Stop-Process -Id 8768 -Force"
|
||||
```
|
||||
|
||||
Запустить npx приложение на порту
|
||||
```bash
|
||||
cd D:/Pet_projects/savings/react-app/savings-mobile && npx serve dist -p 3000
|
||||
```
|
||||
|
||||
```
|
||||
46U8w7EdHd6CBdrd3TyA
|
||||
```
|
||||
35
Hysteria2.md
Normal file
35
Hysteria2.md
Normal file
@@ -0,0 +1,35 @@
|
||||
https://blitz.digital-home.site:443/eb4643570d60cb40ef62b5bc7c7b92c4/
|
||||
|
||||
|
||||
```js
|
||||
callTemporalService: function () {
|
||||
const serviceOptions = {
|
||||
// ClientData: {
|
||||
// Name: this.get("Name"), // AccountId: this.get("Id") // }, OrderData: {
|
||||
OrderName: this.get("Number"),
|
||||
OrderDate: this.get("NrbStartDate"),
|
||||
ClientId: "123-123",
|
||||
ManagerProjectId: "00123036",
|
||||
HeadProjectId: "00123037",
|
||||
DirectorProjectId: "00123038",
|
||||
OrderAmount: this.get("NrbAmountDeal"),
|
||||
ProductAttribute: 1,
|
||||
ProjectId: "",
|
||||
OrderId: this.get("Id")
|
||||
} };
|
||||
|
||||
ServiceHelper.callService("PresaleProjectService", "CreatePresaleProject", function (response) {
|
||||
}, serviceOptions, this);
|
||||
},
|
||||
```
|
||||
|
||||
19 - 100000 (ap +)
|
||||
20 - 150000 (изменение + - согласование идет) - 1 заявка
|
||||
21 - 120000 () - 1 заявка (нужно перевыпуск)
|
||||
22 - ... (успешный ответ) - 1 заявка успех, 2 заявку отправляем
|
||||
|
||||
Нужно перевыпустить (логическое - не изменяемое) - Да
|
||||
|
||||
Новая
|
||||
Зарегистрирована
|
||||
На изменении (изменение данных + согласование)
|
||||
13
Projects/Умный дом своими руками.md
Normal file
13
Projects/Умный дом своими руками.md
Normal file
@@ -0,0 +1,13 @@
|
||||
Есть идея продавать готовые комплекты умного дома для людей
|
||||
Есть ключевая потребность, что Алиса и остальные моменты очень дорогие, так как для устройств Zigbee нужно покупать более дорогую колонку, хочется сделать более дешевый проект, чтобы люди могли купить коробочку, в которой уже все будет настроено и им пришлось бы просто подключить ее к Алисе минимальными затратами и управлять своим умным домом через колонку, приложение или настройку автоматизаций через приложение.
|
||||
Главная идея купить Raspberry Pi, корпус и установить туда необходимый софт для работы
|
||||
1. Нужно понять какую версию и с какими характеристиками нужно покупать Raspberry Pi для различных задач
|
||||
1. Минимальный набор умного дома - Home Assistant с установленными интеграциями
|
||||
2. Набор умного дома + облако - Home Assistant и Nextcloud
|
||||
3. Умный дом и медиаплеер - Home Assistant + Plex + QbitTorrent
|
||||
2. Нужно сделать так, чтобы люди просто покупали коробочку, делали минимальную настройку и минимальные трудозатраты и могли подключаться к своим серверам в независимости от того, где они находятся (нужно продумать как делать красивый URL для их дома, они могут сами придумывать домен для доступа к сервисами)
|
||||
3. Нужно посчитать сколько примерно денег будет стоить каждый проект, который я описал в пункте 1
|
||||
4. Нужно подумать возможная ли такая реализация и какие шаги должны будет выполнить пользователь для подключения коробочки и начала работы с ней, трудозатраты пользователя должны быть минимальны
|
||||
5. Подключение новых устройств умного дома должно быть быстрым и не особо сложным
|
||||
|
||||
-----------------
|
||||
454
Smart home.md
Normal file
454
Smart home.md
Normal file
@@ -0,0 +1,454 @@
|
||||
## Этап 1: Подготовка железа и Proxmox
|
||||
|
||||
**1.1 Установка Proxmox**
|
||||
|
||||
- Скачайте Proxmox VE ISO с официального сайта
|
||||
- Создайте загрузочную флешку (Rufus/Etcher)
|
||||
- Установите Proxmox на мини-ПК
|
||||
- После установки заходите в веб-интерфейс: `https://IP-адрес:8006`
|
||||
|
||||
**1.2 Базовая настройка Proxmox**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# Подключитесь по SSH к Proxmox
|
||||
# Отключите enterprise репозиторий (если нет подписки)
|
||||
nano /etc/apt/sources.list.d/pve-enterprise.list
|
||||
# Закомментируйте строку (#)
|
||||
|
||||
# Добавьте community репозиторий
|
||||
nano /etc/apt/sources.list
|
||||
# Добавьте: deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
|
||||
|
||||
# Обновите систему
|
||||
apt update && apt upgrade -y
|
||||
```
|
||||
|
||||
## Этап 2: Регистрация домена и настройка Cloudflare
|
||||
|
||||
**2.1 Регистрация домена на reg.ru**
|
||||
|
||||
- Зарегистрируйте домен (например, `mysmarthome.ru`)
|
||||
- Не настраивайте пока ничего на reg.ru
|
||||
|
||||
**2.2 Перенос DNS на Cloudflare**
|
||||
|
||||
- Создайте бесплатный аккаунт на cloudflare.com
|
||||
- Добавьте ваш домен ("Add site")
|
||||
- Cloudflare покажет nameservers (типа `ns1.cloudflare.com`)
|
||||
- Зайдите в личный кабинет reg.ru → Управление доменом → DNS-серверы
|
||||
- Замените DNS-серверы reg.ru на серверы Cloudflare
|
||||
- Ждите 24 часа (обычно происходит быстрее)
|
||||
|
||||
**2.3 Базовая настройка Cloudflare**
|
||||
|
||||
- В Cloudflare: SSL/TLS → выберите **"Full (strict)"**
|
||||
- Включите: "Always Use HTTPS"
|
||||
|
||||
## Этап 3: Создание LXC контейнера для Home Assistant
|
||||
|
||||
**3.1 Создание LXC через Proxmox**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# В веб-интерфейсе Proxmox:
|
||||
# Create CT → выберите:
|
||||
# - Template: Debian 12
|
||||
# - RAM: 3072 MB
|
||||
# - CPU: 2 cores
|
||||
# - Disk: 32 GB
|
||||
# - Network: DHCP (запомните IP)
|
||||
# - Unprivileged: снимите галочку (для Home Assistant нужен privileged)
|
||||
```
|
||||
|
||||
**3.2 Установка Home Assistant в LXC**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# Подключитесь к LXC через консоль Proxmox
|
||||
apt update && apt upgrade -y
|
||||
|
||||
# Установите зависимости
|
||||
apt install -y curl wget network-manager apparmor
|
||||
|
||||
# Установите Home Assistant через скрипт
|
||||
curl -Lo installer.sh https://get.hass.io
|
||||
bash installer.sh
|
||||
```
|
||||
|
||||
Через 10-15 минут Home Assistant будет доступен: `http://IP-LXC:8123`
|
||||
|
||||
## Этап 4: Создание VM с Docker
|
||||
|
||||
**4.1 Создание Ubuntu VM**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# В Proxmox веб-интерфейсе:
|
||||
# Скачайте Ubuntu Server 24.04 ISO
|
||||
# Create VM:
|
||||
# - RAM: 10240 MB (10 ГБ)
|
||||
# - CPU: 4 cores
|
||||
# - Disk: 200 GB
|
||||
# - Network: DHCP
|
||||
```
|
||||
|
||||
**4.2 Установка Docker и Portainer**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# Подключитесь к VM по SSH
|
||||
# Обновите систему
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
# Установите Docker
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
|
||||
# Добавьте текущего пользователя в группу docker
|
||||
sudo usermod -aG docker $USER
|
||||
# Перелогиньтесь
|
||||
|
||||
# Установите Docker Compose
|
||||
sudo apt install docker-compose-plugin -y
|
||||
|
||||
# Установите Portainer
|
||||
docker volume create portainer_data
|
||||
docker run -d \
|
||||
-p 9000:9000 \
|
||||
-p 9443:9443 \
|
||||
--name=portainer \
|
||||
--restart=always \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-v portainer_data:/data \
|
||||
portainer/portainer-ce:latest
|
||||
```
|
||||
|
||||
Portainer доступен: `https://IP-VM:9443`
|
||||
|
||||
## Этап 5: Установка сервисов через Docker Compose
|
||||
|
||||
**5.1 Создайте структуру папок**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
mkdir -p ~/docker/{gitea,nextcloud,adguard,vaultwarden,cloudflared}
|
||||
cd ~/docker
|
||||
```
|
||||
|
||||
**5.2 Gitea**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
cd ~/docker/gitea
|
||||
nano docker-compose.yml
|
||||
```
|
||||
|
||||
yaml
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
container_name: gitea
|
||||
restart: always
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- GITEA__database__DB_TYPE=postgres
|
||||
- GITEA__database__HOST=db:5432
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=gitea_password
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "222:22"
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
restart: always
|
||||
environment:
|
||||
- POSTGRES_USER=gitea
|
||||
- POSTGRES_PASSWORD=gitea_password
|
||||
- POSTGRES_DB=gitea
|
||||
volumes:
|
||||
- ./postgres:/var/lib/postgresql/data
|
||||
```
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
**5.3 Nextcloud**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
cd ~/docker/nextcloud
|
||||
nano docker-compose.yml
|
||||
```
|
||||
|
||||
yaml
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
services:
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
restart: always
|
||||
volumes:
|
||||
- ./db:/var/lib/postgresql/data
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=nextcloud_password
|
||||
- POSTGRES_DB=nextcloud
|
||||
- POSTGRES_USER=nextcloud
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
restart: always
|
||||
|
||||
app:
|
||||
image: nextcloud:latest
|
||||
restart: always
|
||||
ports:
|
||||
- 8080:80
|
||||
volumes:
|
||||
- ./data:/var/www/html
|
||||
environment:
|
||||
- POSTGRES_HOST=db
|
||||
- POSTGRES_PASSWORD=nextcloud_password
|
||||
- POSTGRES_DB=nextcloud
|
||||
- POSTGRES_USER=nextcloud
|
||||
- REDIS_HOST=redis
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
```
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
**5.4 AdGuard Home**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
cd ~/docker/adguard
|
||||
nano docker-compose.yml
|
||||
```
|
||||
|
||||
yaml
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
services:
|
||||
adguard:
|
||||
image: adguard/adguardhome:latest
|
||||
container_name: adguardhome
|
||||
restart: always
|
||||
ports:
|
||||
- "53:53/tcp"
|
||||
- "53:53/udp"
|
||||
- "3001:3000/tcp"
|
||||
volumes:
|
||||
- ./work:/opt/adguardhome/work
|
||||
- ./conf:/opt/adguardhome/conf
|
||||
```
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
**5.5 Vaultwarden**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
cd ~/docker/vaultwarden
|
||||
nano docker-compose.yml
|
||||
```
|
||||
|
||||
yaml
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
services:
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: vaultwarden
|
||||
restart: always
|
||||
ports:
|
||||
- "8081:80"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
environment:
|
||||
- DOMAIN=https://vault.yourdomain.ru
|
||||
```
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Этап 6: Настройка Cloudflare Tunnel
|
||||
|
||||
**6.1 Создание туннеля**
|
||||
|
||||
- Зайдите в Cloudflare Dashboard
|
||||
- Zero Trust → Networks → Tunnels → Create a tunnel
|
||||
- Выберите "Cloudflared" → дайте имя (например, "home-server")
|
||||
- Cloudflare покажет команду для установки
|
||||
|
||||
**6.2 Установка cloudflared на Docker VM**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# На вашей Ubuntu VM выполните команду из Cloudflare
|
||||
# Она будет примерно такой:
|
||||
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
|
||||
sudo dpkg -i cloudflared.deb
|
||||
|
||||
# Авторизуйте туннель (скопируйте команду из Cloudflare)
|
||||
sudo cloudflared service install <ваш-токен>
|
||||
```
|
||||
|
||||
**6.3 Настройка маршрутов в Cloudflare**
|
||||
|
||||
В Cloudflare Dashboard → Tunnels → ваш туннель → Public Hostname:
|
||||
|
||||
Добавьте маршруты:
|
||||
|
||||
1. **Home Assistant**
|
||||
- Subdomain: `ha`
|
||||
- Domain: `yourdomain.ru`
|
||||
- Service: `http://IP-вашего-LXC:8123`
|
||||
2. **Nextcloud**
|
||||
- Subdomain: `cloud`
|
||||
- Domain: `yourdomain.ru`
|
||||
- Service: `http://IP-вашей-VM:8080`
|
||||
3. **Gitea**
|
||||
- Subdomain: `git`
|
||||
- Domain: `yourdomain.ru`
|
||||
- Service: `http://IP-вашей-VM:3000`
|
||||
4. **Vaultwarden**
|
||||
- Subdomain: `vault`
|
||||
- Domain: `yourdomain.ru`
|
||||
- Service: `http://IP-вашей-VM:8081`
|
||||
5. **AdGuard Home**
|
||||
- Subdomain: `adguard`
|
||||
- Domain: `yourdomain.ru`
|
||||
- Service: `http://IP-вашей-VM:3001`
|
||||
6. **Portainer**
|
||||
- Subdomain: `portainer`
|
||||
- Domain: `yourdomain.ru`
|
||||
- Service: `https://IP-вашей-VM:9443`
|
||||
- ⚠️ Включите "No TLS Verify"
|
||||
|
||||
## Этап 7: Финальные настройки
|
||||
|
||||
**7.1 Настройка Nextcloud для работы через домен**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# Подключитесь к контейнеру Nextcloud
|
||||
docker exec -it nextcloud-app-1 bash
|
||||
|
||||
# Добавьте trusted domain
|
||||
nano /var/www/html/config/config.php
|
||||
|
||||
# Добавьте в массив trusted_domains:
|
||||
'trusted_domains' =>
|
||||
array (
|
||||
0 => 'localhost',
|
||||
1 => 'cloud.yourdomain.ru',
|
||||
),
|
||||
|
||||
# Выйдите и перезапустите
|
||||
exit
|
||||
docker restart nextcloud-app-1
|
||||
```
|
||||
|
||||
**7.2 Обновите Vaultwarden с правильным доменом**
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
cd ~/docker/vaultwarden
|
||||
nano docker-compose.yml
|
||||
|
||||
# Измените DOMAIN на:
|
||||
- DOMAIN=https://vault.yourdomain.ru
|
||||
|
||||
docker compose down && docker compose up -d
|
||||
```
|
||||
|
||||
## Этап 8: Проверка и тестирование
|
||||
|
||||
**8.1 Проверьте доступность сервисов**
|
||||
|
||||
- `https://ha.yourdomain.ru` - Home Assistant
|
||||
- `https://cloud.yourdomain.ru` - Nextcloud
|
||||
- `https://git.yourdomain.ru` - Gitea
|
||||
- `https://vault.yourdomain.ru` - Vaultwarden
|
||||
- `https://adguard.yourdomain.ru` - AdGuard Home
|
||||
- `https://portainer.yourdomain.ru` - Portainer
|
||||
|
||||
**8.2 Проверьте SSL сертификаты** Все должны показывать зеленый замочек (Cloudflare автоматически выдает сертификаты)
|
||||
|
||||
## Этап 9: Безопасность
|
||||
|
||||
**9.1 Настройте Cloudflare Access (опционально)** Для дополнительной защиты можете добавить авторизацию перед доступом к сервисам
|
||||
|
||||
**9.2 Настройте бэкапы в Proxmox**
|
||||
|
||||
- Datacenter → Backup → Add
|
||||
- Настройте автоматические бэкапы VM и LXC
|
||||
|
||||
**9.3 Обновите пароли** Замените все пароли в docker-compose файлах на надежные
|
||||
|
||||
## Полезные команды для управления
|
||||
|
||||
bash
|
||||
|
||||
```bash
|
||||
# Просмотр логов
|
||||
docker logs -f имя-контейнера
|
||||
|
||||
# Перезапуск контейнера
|
||||
docker restart имя-контейнера
|
||||
|
||||
# Обновление образа
|
||||
cd ~/docker/сервис
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
|
||||
# Просмотр всех контейнеров
|
||||
docker ps -a
|
||||
|
||||
# Использование ресурсов
|
||||
docker stats
|
||||
```
|
||||
578
Безопасный маршрут проблемы.md
Normal file
578
Безопасный маршрут проблемы.md
Normal file
@@ -0,0 +1,578 @@
|
||||
## 🐦 ВАРИАНТЫ ДЕТСКИХ ПРОБЛЕМ
|
||||
|
||||
### **ВАРИАНТ 1: "Я хочу помочь, но не знаю как"** ⭐ (РЕКОМЕНДУЮ)
|
||||
|
||||
**Ситуация от ребенка:** "На прогулке я вижу птичек, они мерзнут и ищут еду под снегом. Мне их жалко! Я хочу покормить их, но мама говорит, что хлебом нельзя. А чем тогда можно? Я не знаю!"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как правильно помочь птицам зимой?
|
||||
- Что они любят есть?
|
||||
- Что им можно давать, а что нельзя?
|
||||
|
||||
**Что решается:** Ребенок узнает, как конкретно может помочь птицам, и получает инструмент реальной помощи природе.
|
||||
|
||||
**Мотивация:** Желание заботиться, быть полезным, помогать слабым.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 2: "Птицы не едят то, что я им даю!"**
|
||||
|
||||
**Ситуация от ребенка:** "Я насыпал птичкам крошки хлеба, а они не едят! Или едят чуть-чуть и улетают. Почему? Может, они не голодные? Или им не нравится? Что им дать, чтобы они съели?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему птицы не едят то, что я им даю?
|
||||
- Что они любят больше всего?
|
||||
- Как сделать так, чтобы птицы прилетали к моей кормушке?
|
||||
|
||||
**Что решается:** Ребенок понимает, что у птиц есть свои предпочтения, и учится их учитывать.
|
||||
|
||||
**Мотивация:** Любопытство, желание понять причину, успешность действия (чтобы птицы прилетали и ели).
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 3: "Я не могу узнать, какая это птица!"**
|
||||
|
||||
**Ситуация от ребенка:** "На прогулке я вижу разных птиц, но не знаю, как их зовут. Одна серенькая прыгает, другая желтая на ветке висит. Воспитатель говорит: 'Это воробей, а это синица'. Но я их путаю! И еще не знаю, что они любят есть."
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как отличить одну птицу от другой?
|
||||
- Что любит воробей, а что — синица?
|
||||
- Можно ли всем птицам давать одинаковую еду?
|
||||
|
||||
**Что решается:** Ребенок учится наблюдать, различать виды птиц и связывает внешний вид с поведением и питанием.
|
||||
|
||||
**Мотивация:** Познавательный интерес, желание разбираться в природе.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 4: "Почему птицы зимой не улетают на юг, если им холодно?"**
|
||||
|
||||
**Ситуация от ребенка:** "Мама говорит, что многие птицы осенью улетают в теплые края. Но я зимой все равно вижу птиц! Почему они остались? Им же холодно и голодно! Может, они заблудились? Как им помочь?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему некоторые птицы остаются зимовать?
|
||||
- Как они выживают в морозы?
|
||||
- Чем мы можем им помочь?
|
||||
|
||||
**Что решается:** Ребенок понимает разницу между перелетными и зимующими птицами, осознает важность помощи человека.
|
||||
|
||||
**Мотивация:** Эмпатия, желание понять и защитить.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 5: "Я насыпал корм, а птицы не прилетают!"**
|
||||
|
||||
**Ситуация от ребенка:** "Я повесил кормушку и насыпал туда еды. Целый день ждал, а птицы не прилетели! Почему? Может, они меня боятся? Или еда им не нравится? Что я сделал не так?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему птицы не прилетают к кормушке?
|
||||
- Какой корм их привлечет?
|
||||
- Где лучше повесить кормушку?
|
||||
- Нужно ли делать что-то особенное?
|
||||
|
||||
**Что решается:** Ребенок учится терпению, правильному выбору места и корма, пониманию поведения птиц.
|
||||
|
||||
**Мотивация:** Желание добиться результата, любопытство.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 6: "Мне скучно наблюдать — птицы все одинаковые!"**
|
||||
|
||||
**Ситуация от ребенка:** "Воспитатель говорит: 'Давайте понаблюдаем за птицами'. Но мне скучно просто смотреть! Я не знаю, что наблюдать. Они просто летают и клюют. Что в них интересного?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Что интересного можно увидеть, наблюдая за птицами?
|
||||
- Чем отличается поведение разных птиц?
|
||||
- Что они любят есть?
|
||||
- Как они общаются друг с другом?
|
||||
|
||||
**Что решается:** Ребенок учится замечать детали, сравнивать, анализировать — развивается наблюдательность.
|
||||
|
||||
**Мотивация:** Превратить скучное наблюдение в увлекательное исследование.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 7: "Я боюсь, что птицы умрут от голода!"** (эмоциональный)
|
||||
|
||||
**Ситуация от ребенка:** "Зимой так холодно, и снега много! Птичкам нечего есть, они такие маленькие и худенькие. Мне страшно, что они умрут от голода или замерзнут. Я очень хочу им помочь!"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как спасти птиц от голода зимой?
|
||||
- Что им нужно, чтобы пережить зиму?
|
||||
- Могу ли я, маленький ребенок, реально помочь?
|
||||
|
||||
**Что решается:** Ребенок получает реальный инструмент помощи, чувствует свою значимость, справляется с тревогой через действие.
|
||||
|
||||
**Мотивация:** Эмпатия, забота, желание защитить.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 8: "Почему к моей кормушке прилетают только воробьи?"**
|
||||
|
||||
**Ситуация от ребенка:** "Я повесил кормушку, насыпал крошек. Прилетают только воробьи, каждый день одни и те же. А где синички? Где снегири? Я хочу увидеть разных птиц! Что нужно сделать?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему прилетают только воробьи?
|
||||
- Что нужно положить, чтобы прилетели синицы?
|
||||
- Как привлечь редких птиц?
|
||||
|
||||
**Что решается:** Ребенок узнает о пищевых предпочтениях разных видов и учится создавать условия для разнообразия.
|
||||
|
||||
**Мотивация:** Желание увидеть что-то новое, интерес к разнообразию природы.
|
||||
|
||||
---
|
||||
|
||||
## 📊 СРАВНИТЕЛЬНАЯ ТАБЛИЦА
|
||||
|
||||
|Вариант|Эмоция ребенка|Сложность понимания|Практичность|Возраст|
|
||||
|---|---|---|---|---|
|
||||
|1. "Хочу помочь, но не знаю как"|Забота, беспомощность|Простая|⭐⭐⭐⭐⭐|5-7 лет|
|
||||
|2. "Птицы не едят"|Недоумение, разочарование|Простая|⭐⭐⭐⭐|5-7 лет|
|
||||
|3. "Не могу узнать птицу"|Любопытство, путаница|Средняя|⭐⭐⭐⭐|5-7 лет|
|
||||
|4. "Почему не улетают"|Удивление, сочувствие|Средняя|⭐⭐⭐|6-7 лет|
|
||||
|5. "Не прилетают"|Нетерпение, разочарование|Простая|⭐⭐⭐⭐⭐|5-7 лет|
|
||||
|6. "Скучно наблюдать"|Скука, незаинтересованность|Простая|⭐⭐⭐⭐|5-6 лет|
|
||||
|7. "Боюсь, что умрут"|Тревога, сострадание|Простая|⭐⭐⭐⭐⭐|5-7 лет|
|
||||
|8. "Только воробьи"|Разочарование, любопытство|Средняя|⭐⭐⭐⭐|6-7 лет|
|
||||
|
||||
---
|
||||
|
||||
## ⭐ МОИ ТОП-3 РЕКОМЕНДАЦИИ:
|
||||
|
||||
### **1 МЕСТО: "Я хочу помочь, но не знаю как"**
|
||||
|
||||
**Почему лучший:**
|
||||
|
||||
- ✅ Понятен детям любого возраста (5-7 лет)
|
||||
- ✅ Высокая эмоциональная вовлеченность
|
||||
- ✅ Четкий практический результат
|
||||
- ✅ Ребенок чувствует себя значимым
|
||||
- ✅ Мотивирует на действие
|
||||
- ✅ Легко презентовать родителям
|
||||
|
||||
**Формулировка для проекта:** "Дети видят на прогулках, что зимой птицам холодно и голодно. У них возникает естественное желание помочь, но они не знают, как это сделать правильно. Возникает проблема: чем можно кормить птиц, а чем нельзя?"
|
||||
|
||||
---
|
||||
|
||||
### **2 МЕСТО: "Я боюсь, что птицы умрут от голода"**
|
||||
|
||||
**Почему хорош:**
|
||||
|
||||
- ✅ Сильная эмоциональная составляющая
|
||||
- ✅ Проект дает ребенку инструмент справиться с тревогой
|
||||
- ✅ Формирует активную жизненную позицию
|
||||
- ✅ Ребенок видит результат своей помощи
|
||||
|
||||
**Формулировка для проекта:** "С наступлением холодов дети наблюдают, как птицам трудно найти корм под снегом. У детей возникает тревога за птиц и сильное желание помочь. Но как именно помочь? Что нужно птицам, чтобы пережить зиму?"
|
||||
|
||||
---
|
||||
|
||||
### **3 МЕСТО: "Я насыпал корм, а птицы не прилетают"**
|
||||
|
||||
**Почему хорош:**
|
||||
|
||||
- ✅ Конкретная, измеримая проблема
|
||||
- ✅ Мотивирует к исследованию
|
||||
- ✅ Есть практический опыт до проекта
|
||||
- ✅ Ребенок ищет причину неудачи
|
||||
|
||||
**Формулировка для проекта:** "Дети пытаются покормить птиц, но сталкиваются с тем, что птицы не всегда прилетают к кормушке или едят корм неохотно. Возникает вопрос: что любят разные птицы? Какой корм привлечет их к кормушке?"
|
||||
|
||||
---
|
||||
|
||||
## 💡 КАК ИСПОЛЬЗОВАТЬ В ПРОЕКТЕ:
|
||||
|
||||
### Пример оформления с вариантом 1:
|
||||
|
||||
**ПРОБЛЕМА ПРОЕКТА (от детей):**
|
||||
|
||||
_На подготовительном этапе воспитатель создает проблемную ситуацию:_
|
||||
|
||||
**Воспитатель:** "Ребята, смотрите в окно. Видите птичек? Они прыгают по снегу, ищут еду. Им холодно и голодно."
|
||||
|
||||
**Дети:** "Давайте покормим их!"
|
||||
|
||||
**Воспитатель:** "Хорошая идея! А чем мы их покормим?"
|
||||
|
||||
**Дети:** "Хлебом! Крошками! У меня дома есть печенье!"
|
||||
|
||||
**Воспитатель:** "Стоп! А вы знаете, что хлеб вреден для птиц? Он может вызвать у них болезни."
|
||||
|
||||
**Дети:** "Правда? А чем тогда кормить?"
|
||||
|
||||
**Воспитатель:** "Вот это и есть наша проблема! Мы хотим помочь птицам, но не знаем, чем их правильно кормить. Что же делать?"
|
||||
|
||||
**Дети:** "Давайте узнаем! Давайте спросим! Давайте проверим!"
|
||||
|
||||
**ПРОБЛЕМА СФОРМУЛИРОВАНА:** "Как правильно помочь птицам зимой? Что они любят есть?"
|
||||
|
||||
---
|
||||
|
||||
Какой вариант вам больше нравится? Или хотите, чтобы я придумал еще варианты? 😊
|
||||
|
||||
D
|
||||
|
||||
Напиши проблемы от имени ребенка на тему «Безопасный маршрут» (второй проект, который мы с тобой обсуждали)
|
||||
|
||||
## 🚦 ПРОБЛЕМЫ ОТ ИМЕНИ РЕБЕНКА НА ТЕМУ "БЕЗОПАСНЫЙ МАРШРУТ"
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 1: "Я боюсь переходить дорогу!"** ⭐ (РЕКОМЕНДУЮ)
|
||||
|
||||
**Ситуация от ребенка:** "Когда мы идем в детский сад, нам нужно переходить дорогу. Там много машин, они быстро едут! Я боюсь, что меня собьет машина. Мама держит меня за руку, но я все равно боюсь. Как правильно переходить дорогу, чтобы было безопасно?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как безопасно перейти дорогу?
|
||||
- Когда можно переходить, а когда нельзя?
|
||||
- Что нужно делать, чтобы машины меня заметили?
|
||||
- Где самое безопасное место для перехода?
|
||||
|
||||
**Что решается:** Ребенок получает конкретные знания и навыки безопасного перехода дороги, страх трансформируется в уверенность через знания.
|
||||
|
||||
**Мотивация:** Страх, желание обезопасить себя, стремление к самостоятельности.
|
||||
|
||||
**Эмоция:** Тревога → Уверенность
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 2: "Я не понимаю, что означает светофор!"**
|
||||
|
||||
**Ситуация от ребенка:** "На перекрестке стоит светофор. Он мигает разными цветами: красный, желтый, зеленый. Мама говорит: 'Стой, красный!' или 'Можно идти, зеленый!'. Но я сам не понимаю, когда можно, а когда нельзя. А если мамы рядом нет? Я запутаюсь!"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Что означает каждый цвет светофора?
|
||||
- Когда точно можно переходить?
|
||||
- Что делать, если горит желтый?
|
||||
- Как запомнить все сигналы?
|
||||
|
||||
**Что решается:** Ребенок понимает логику работы светофора и может применять эти знания самостоятельно.
|
||||
|
||||
**Мотивация:** Желание понять систему, стремление к самостоятельности.
|
||||
|
||||
**Эмоция:** Непонимание → Ясность
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 3: "Я хочу сам ходить в детский сад, но мама не разрешает!"**
|
||||
|
||||
**Ситуация от ребенка:** "Мой друг Петя живет рядом, и он уже сам ходит в детский сад! А мне мама не разрешает, говорит, что я маленький и не знаю правил. Но я уже большой! Что мне нужно знать, чтобы мама мне разрешила?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Какие правила нужно знать, чтобы безопасно дойти до детского сада?
|
||||
- Какой маршрут самый безопасный?
|
||||
- Что может быть опасным по дороге?
|
||||
- Как доказать маме, что я готов?
|
||||
|
||||
**Что решается:** Ребенок осознает важность знания ПДД для своей самостоятельности, получает мотивацию к обучению.
|
||||
|
||||
**Мотивация:** Стремление к самостоятельности, желание быть "взрослым".
|
||||
|
||||
**Эмоция:** Обида/Желание → Ответственность
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 4: "Почему нельзя играть рядом с дорогой?"**
|
||||
|
||||
**Ситуация от ребенка:** "Рядом с нашим домом дорога, а за ней — площадка с качелями. Мой мяч укатился к дороге, я хотел его взять, но мама закричала: 'Стой! Нельзя!' Почему нельзя? Машин же нет! И почему нельзя играть возле дороги?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему дорога опасна, даже если машин не видно?
|
||||
- Что может случиться, если выбежать на дорогу?
|
||||
- Где можно играть безопасно?
|
||||
- Что делать, если мяч укатился на дорогу?
|
||||
|
||||
**Что решается:** Ребенок понимает скрытые опасности дороги и учится оценивать риски.
|
||||
|
||||
**Мотивация:** Любопытство, желание понять запреты взрослых.
|
||||
|
||||
**Эмоция:** Недоумение → Понимание опасности
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 5: "Я не знаю, где безопасно переходить!"**
|
||||
|
||||
**Ситуация от ребенка:** "Когда мы идем в детский сад, иногда переходим дорогу по зебре, а иногда мама ведет меня в другое место. Почему? Разве нельзя переходить где удобно? Где можно переходить, а где нельзя?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Что такое пешеходный переход?
|
||||
- Почему нужно переходить именно там?
|
||||
- Можно ли переходить в другом месте?
|
||||
- Как найти безопасное место для перехода?
|
||||
|
||||
**Что решается:** Ребенок учится находить безопасные места для перехода дороги.
|
||||
|
||||
**Мотивация:** Понимание правил, логики безопасности.
|
||||
|
||||
**Эмоция:** Непонимание → Осознанность
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 6: "Я видел, как взрослый перешел на красный свет!"**
|
||||
|
||||
**Ситуация от ребенка:** "Мама говорит, что нельзя переходить на красный свет. Но вчера я видел, как дядя перебежал дорогу на красный! И его не сбила машина! Значит, можно? Почему взрослым можно, а мне нельзя?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему некоторые взрослые нарушают правила?
|
||||
- Правда ли, что нельзя переходить на красный?
|
||||
- Что будет, если я нарушу правило?
|
||||
- Как правильно поступать, если взрослые показывают плохой пример?
|
||||
|
||||
**Что решается:** Ребенок учится критически оценивать поведение других и следовать правилам независимо от чужого примера.
|
||||
|
||||
**Мотивация:** Поиск справедливости, понимание правил.
|
||||
|
||||
**Эмоция:** Смущение/Противоречие → Уверенность в правилах
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 7: "Я путаю дорожные знаки!"**
|
||||
|
||||
**Ситуация от ребенка:** "На дороге стоят разные знаки: треугольные, круглые, квадратные. Мама говорит: 'Смотри, это значит пешеходный переход'. А я не запоминаю! Они все похожи! Как их различать?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Зачем нужны дорожные знаки?
|
||||
- Что означают разные знаки?
|
||||
- Как запомнить, какой знак что означает?
|
||||
- Какие знаки важны для пешеходов?
|
||||
|
||||
**Что решается:** Ребенок учится узнавать и понимать основные дорожные знаки.
|
||||
|
||||
**Мотивация:** Желание разобраться, навести порядок в знаниях.
|
||||
|
||||
**Эмоция:** Путаница → Ясность
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 8: "Машина едет быстро — я не успею перейти!"**
|
||||
|
||||
**Ситуация от ребенка:** "Мы стоим на зеленый свет, можно переходить. Но машины едут так быстро! Что если я не успею перейти, и загорится красный? Машина меня собьет! Как понять, успею я или нет?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как понять, успею ли я перейти дорогу?
|
||||
- Сколько времени горит зеленый свет?
|
||||
- Что делать, если начал переходить, а загорелся красный?
|
||||
- Как правильно рассчитать время?
|
||||
|
||||
**Что решается:** Ребенок учится оценивать время и расстояние, понимает, как работает светофор.
|
||||
|
||||
**Мотивация:** Страх, желание научиться рассчитывать время.
|
||||
|
||||
**Эмоция:** Страх не успеть → Уверенность в расчете
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 9: "Почему машина не останавливается на зебре?"** (сложный)
|
||||
|
||||
**Ситуация от ребенка:** "Воспитатель говорит, что на пешеходном переходе машины должны остановиться и пропустить пешехода. Но когда мы переходили с мамой, машина не остановилась! Почему водитель нарушил правило? Может, я что-то не так делаю?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Всегда ли машины останавливаются на зебре?
|
||||
- Что делать, если машина не останавливается?
|
||||
- Как быть уверенным, что меня пропустят?
|
||||
- Можно ли доверять водителям?
|
||||
|
||||
**Что решается:** Ребенок понимает, что даже на "зебре" нужно быть внимательным и убедиться, что машина остановилась.
|
||||
|
||||
**Мотивация:** Поиск справедливости, желание понять реальность.
|
||||
|
||||
**Эмоция:** Разочарование → Осторожность
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 10: "Я хочу, чтобы по дороге в садик было безопасно!"** ⭐
|
||||
|
||||
**Ситуация от ребенка:** "Каждый день я хожу в детский сад одной и той же дорогой. Там есть опасные места: большой перекресток, выезд из двора, место без светофора. Я хочу, чтобы было безопасно! Может, там нужен светофор? Или знак? Как сделать мой маршрут безопасным?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Где на моем маршруте опасные места?
|
||||
- Как их можно сделать безопаснее?
|
||||
- Что нужно изменить (знаки, светофоры)?
|
||||
- Как я могу помочь сделать дорогу безопаснее?
|
||||
|
||||
**Что решается:** Ребенок учится анализировать маршрут, выявлять опасности и думать о решениях. Проектная деятельность приобретает социальный смысл.
|
||||
|
||||
**Мотивация:** Желание улучшить свою среду, активная позиция.
|
||||
|
||||
**Эмоция:** Тревога → Проактивность
|
||||
|
||||
---
|
||||
|
||||
## 📊 СРАВНИТЕЛЬНАЯ ТАБЛИЦА
|
||||
|
||||
|Вариант|Эмоция ребенка|Сложность|Практичность|Социальная значимость|Возраст|
|
||||
|---|---|---|---|---|---|
|
||||
|1. "Боюсь переходить"|Страх → Уверенность|Простая|⭐⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|
||||
|2. "Не понимаю светофор"|Путаница → Ясность|Простая|⭐⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|
||||
|3. "Хочу сам ходить"|Обида → Ответственность|Средняя|⭐⭐⭐⭐|⭐⭐⭐⭐|6-7 лет|
|
||||
|4. "Почему нельзя играть"|Недоумение → Понимание|Простая|⭐⭐⭐⭐|⭐⭐⭐|5-6 лет|
|
||||
|5. "Где переходить"|Непонимание → Осознанность|Простая|⭐⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|
||||
|6. "Взрослый нарушил"|Противоречие → Уверенность|Средняя|⭐⭐⭐⭐|⭐⭐⭐⭐|6-7 лет|
|
||||
|7. "Путаю знаки"|Путаница → Ясность|Средняя|⭐⭐⭐⭐|⭐⭐⭐|5-7 лет|
|
||||
|8. "Не успею перейти"|Страх → Уверенность|Средняя|⭐⭐⭐⭐|⭐⭐⭐|6-7 лет|
|
||||
|9. "Машина не останавливается"|Разочарование → Осторожность|Сложная|⭐⭐⭐⭐⭐|⭐⭐⭐⭐|6-7 лет|
|
||||
|10. "Хочу безопасный маршрут"|Тревога → Проактивность|Средняя|⭐⭐⭐⭐⭐|⭐⭐⭐⭐⭐|6-7 лет|
|
||||
|
||||
---
|
||||
|
||||
## ⭐ МОИ ТОП-3 РЕКОМЕНДАЦИИ:
|
||||
|
||||
### **1 МЕСТО: "Я боюсь переходить дорогу!"**
|
||||
|
||||
**Почему лучший:**
|
||||
|
||||
- ✅ Универсален для любого возраста (5-7 лет)
|
||||
- ✅ Сильная эмоциональная составляющая (страх — базовая эмоция)
|
||||
- ✅ Реальная проблема каждого ребенка
|
||||
- ✅ Трансформация страха в уверенность через знания
|
||||
- ✅ Высокая мотивация к обучению
|
||||
- ✅ Родители сразу понимают актуальность
|
||||
- ✅ Четкий практический результат
|
||||
|
||||
**Как оформить в проекте:**
|
||||
|
||||
_Воспитатель создает ситуацию:_
|
||||
|
||||
**Воспитатель:** "Ребята, кто из вас ходит в детский сад пешком?"
|
||||
|
||||
_Дети поднимают руки._
|
||||
|
||||
**Воспитатель:** "А вам приходится переходить дорогу?"
|
||||
|
||||
**Дети:** "Да!"
|
||||
|
||||
**Воспитатель:** "Скажите честно, вам страшно, когда вы переходите дорогу?"
|
||||
|
||||
**Дети:** "Да, страшно! Машины быстро едут! Я боюсь, что меня собьет машина!"
|
||||
|
||||
**Воспитатель:** "Понимаю вас. Дорога действительно может быть опасной. Но знаете что? Если знать правила, то переходить дорогу совсем не страшно! Хотите научиться переходить дорогу правильно и безопасно?"
|
||||
|
||||
**Дети:** "Да, хотим!"
|
||||
|
||||
**ПРОБЛЕМА:** Дети боятся переходить дорогу, потому что не знают, как делать это безопасно.
|
||||
|
||||
**ЦЕЛЬ ПРОЕКТА:** Научиться безопасно переходить дорогу и создать модель безопасного маршрута в детский сад.
|
||||
|
||||
---
|
||||
|
||||
### **2 МЕСТО: "Я хочу, чтобы мой маршрут в садик был безопасным!"**
|
||||
|
||||
**Почему хорош:**
|
||||
|
||||
- ✅ Высокая социальная значимость
|
||||
- ✅ Ребенок не просто учит правила, а создает решение
|
||||
- ✅ Проактивная позиция (не "научите меня", а "давайте улучшим")
|
||||
- ✅ Отлично подходит для проектной деятельности
|
||||
- ✅ Можно создать реальный продукт (макет, карту маршрута)
|
||||
- ✅ Вовлечение родителей (анализ маршрутов)
|
||||
- ✅ Связь с жизнью
|
||||
|
||||
**Как оформить в проекте:**
|
||||
|
||||
**Воспитатель:** "Ребята, вы каждый день ходите в детский сад. Расскажите, встречаются ли вам опасные места по дороге?"
|
||||
|
||||
**Дети:** "Да! У меня большой перекресток без светофора! А у меня машины быстро едут! А у меня темный двор!"
|
||||
|
||||
**Воспитатель:** "Получается, что наши маршруты не всегда безопасны. Как вы думаете, что можно сделать, чтобы было безопаснее?"
|
||||
|
||||
**Дети:** "Поставить светофор! Нарисовать зебру! Повесить знаки!"
|
||||
|
||||
**Воспитатель:** "Отличные идеи! Давайте проведем исследование: изучим свои маршруты, найдем опасные места и придумаем, как их сделать безопаснее!"
|
||||
|
||||
**ПРОБЛЕМА:** Маршруты детей в детский сад содержат опасные участки, и дети хотят сделать их безопаснее.
|
||||
|
||||
**ЦЕЛЬ ПРОЕКТА:** Создать модель безопасного маршрута с использованием светофоров, знаков и других элементов дорожной инфраструктуры.
|
||||
|
||||
---
|
||||
|
||||
### **3 МЕСТО: "Я не понимаю, что означает светофор!"**
|
||||
|
||||
**Почему хорош:**
|
||||
|
||||
- ✅ Конкретная, понятная проблема
|
||||
- ✅ Светофор — центральный элемент проекта
|
||||
- ✅ Легко проверить понимание (построить светофор)
|
||||
- ✅ Визуальная наглядность
|
||||
- ✅ Простота для младшего возраста
|
||||
- ✅ Связь с LEGO WeDo (программируемый светофор)
|
||||
|
||||
**Как оформить в проекте:**
|
||||
|
||||
**Воспитатель показывает картинку светофора:**
|
||||
|
||||
**Воспитатель:** "Ребята, что это?"
|
||||
|
||||
**Дети:** "Светофор!"
|
||||
|
||||
**Воспитатель:** "Правильно. А кто может объяснить, что означают его сигналы?"
|
||||
|
||||
**Дети:** "Красный — стоять! Зеленый — идти!"
|
||||
|
||||
**Воспитатель:** "А желтый?"
|
||||
|
||||
**Дети:** (молчание, путаются) "Можно идти? Нельзя? Приготовиться?"
|
||||
|
||||
**Воспитатель:** "Видите, не все так просто! А ведь светофор — это наш главный помощник на дороге. Если мы не понимаем его сигналы, мы можем попасть в опасную ситуацию. Давайте разберемся, как работает светофор!"
|
||||
|
||||
**ПРОБЛЕМА:** Дети не до конца понимают значение сигналов светофора и путаются, когда можно переходить дорогу.
|
||||
|
||||
**ЦЕЛЬ ПРОЕКТА:** Изучить работу светофора, понять значение каждого сигнала и создать программируемую модель светофора.
|
||||
|
||||
---
|
||||
|
||||
## 💡 КАК ВЫБРАТЬ ПРОБЛЕМУ:
|
||||
|
||||
**Для старшей группы (5-6 лет):**
|
||||
|
||||
- Вариант 1 "Боюсь переходить дорогу"
|
||||
- Вариант 2 "Не понимаю светофор"
|
||||
- Вариант 5 "Где переходить"
|
||||
|
||||
**Для подготовительной группы (6-7 лет):**
|
||||
|
||||
- Вариант 10 "Хочу безопасный маршрут" (самый проектный)
|
||||
- Вариант 3 "Хочу сам ходить"
|
||||
- Вариант 6 "Взрослый нарушил"
|
||||
|
||||
**Если делаете упор на робототехнику:**
|
||||
|
||||
- Вариант 2 "Не понимаю светофор" (программируемый светофор)
|
||||
- Вариант 8 "Не успею перейти" (изучение времени работы светофора)
|
||||
|
||||
**Если делаете упор на картографию/макет:**
|
||||
|
||||
- Вариант 10 "Хочу безопасный маршрут"
|
||||
- Вариант 5 "Где переходить"
|
||||
|
||||
---
|
||||
|
||||
## 🎯 ФИНАЛЬНАЯ РЕКОМЕНДАЦИЯ:
|
||||
|
||||
**Для вашего проекта я рекомендую ВАРИАНТ 1: "Я боюсь переходить дорогу!"**
|
||||
|
||||
**Почему:**
|
||||
|
||||
1. Эмоционально близка каждому ребенку
|
||||
2. Универсальна для любого возраста
|
||||
3. Идеально сочетается с созданием светофора и машинки из LEGO
|
||||
4. Трансформирует страх в уверенность через конкретные знания
|
||||
5. Понятна родителям — они сразу видят ценность проекта
|
||||
6. Дает четкий измеримый результат (было страшно → стало понятно, как быть безопасным)
|
||||
11
Интеграция СУП/Вопросы по интеграции.md
Normal file
11
Интеграция СУП/Вопросы по интеграции.md
Normal file
@@ -0,0 +1,11 @@
|
||||
1. Интеграция на создание клиента
|
||||
1. Какой endpoint будет использоваться на стороне СУП (ссылка)
|
||||
2. Какой протокол будет использоваться при интеграции (REST или SOAP)
|
||||
3. По поводу авторизации ранее договаривались кастомный header в запросе (дополнительно обсудить его название и значение)
|
||||
4. Ответ по созданию клиента будет синхронным или асинхронным
|
||||
5. Если в п. 4 ответ асинхронный, то нужно будет договориться по поводу интеграции СУП -> СРМ (endpoint, протокол, авторизация)
|
||||
2. Интеграция на создание некоммерческого проекта
|
||||
1. Какой endpoint будет использоваться на стороне СУП (ссылка)
|
||||
2. Какой протокол будет использоваться при интеграции (REST или SOAP)
|
||||
3. По поводу авторизации ранее договаривались кастомный header в запросе (дополнительно обсудить его название и значение)
|
||||
4. Ответ по созданию некоммерческого проекта будет скорее всего асинхронным (иногда потребуется дополнительное согласование для проекта), поэтому нужно будет договориться по поводу интеграции СУП -> СРМ (endpoint, протокол, авторизация)
|
||||
26
Интеграция СУП/Встреча 10.12.md
Normal file
26
Интеграция СУП/Встреча 10.12.md
Normal file
@@ -0,0 +1,26 @@
|
||||
## Взаимодействие систем
|
||||
|
||||
### Rabbit
|
||||
|
||||
### Temporal
|
||||
|
||||
## Примеры запросов
|
||||
|
||||
### Создание клиента
|
||||
|
||||
### Создание presale-проекта
|
||||
|
||||
### Ответы
|
||||
|
||||
|
||||
У меня новые вводные, схема взаимодействия должна быть следующая:
|
||||
1. Я инициирую запрос в Temporal
|
||||
2. Создается активность CreatePresaleProject (Отправляется POST запрос в систему ERP)
|
||||
3. Эта активность должна будет периодически (раз в 10 минут, настраиваемый диапазон запрашивать данные у другой системы)
|
||||
4. Если я получаю ответ, то активность CreatePresaleProject завершается и запускается UpdateOrderInCRM
|
||||
5. Если получаю какую-то ошибку, то уже завершаю активность с ошибкой
|
||||
|
||||
Это делаем для StartOrderOnly Worker.
|
||||
Учти, что POST и GET запросы должны посылаться из Temporal
|
||||
|
||||
Скажи, что нужно сделать, какой план?
|
||||
74
Интеграция СУП/Интеграция полная.md
Normal file
74
Интеграция СУП/Интеграция полная.md
Normal file
@@ -0,0 +1,74 @@
|
||||
## Создание клиента
|
||||
|
||||
Используется endpoint с методом POST
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/createClient`
|
||||
### Запрос
|
||||
|
||||
```json
|
||||
{
|
||||
"companyId": "", // Компания
|
||||
"typeId": "", // Тип заявки
|
||||
"kindId": "", // Вид заявки
|
||||
"name": "Альфа-Пласт",
|
||||
"shortName": "Альфа-Пласт",
|
||||
"managerId": "123456", // Значение ИНС (залили данные в AD и храним их в CRM. Значение без нулей в начале)
|
||||
"accountId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c42"
|
||||
}
|
||||
```
|
||||
|
||||
### Ответ
|
||||
|
||||
Успешный
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Неуспешный
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"errorMessage": "Текст ошибки"
|
||||
}
|
||||
```
|
||||
## Проверка готовности создания клиента
|
||||
|
||||
Используется endpoint с методом GET
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/view?accountId={accountId}`
|
||||
|
||||
Главная суть метода, что мы по значению `accountId` из пункта `Создание клиента` получаем готовность создания клиента.
|
||||
Клиент считается созданным, если у него заполнено поле `ClientId` (уточнить как называется в базе данных поле `Код клиента из R3`)
|
||||
### Ответ
|
||||
|
||||
Клиент еще создается
|
||||
```json
|
||||
{
|
||||
"status": "Waiting",
|
||||
"clientId": "",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Создание клиента завершено
|
||||
```json
|
||||
{
|
||||
"status": "Done",
|
||||
"clientId": "123-123-123",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Ошибка при создании клиента
|
||||
```json
|
||||
{
|
||||
"status": "Error",
|
||||
"clientId": "",
|
||||
"errorMessage": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
85
Интеграция СУП/Некоммерческий проект.md
Normal file
85
Интеграция СУП/Некоммерческий проект.md
Normal file
@@ -0,0 +1,85 @@
|
||||
## Авторизация
|
||||
|
||||
Используется кастомный header `X-Erp-Integration`
|
||||
Значение хранится в конфигах у системы СУП.
|
||||
Для дев и прод разные значения.
|
||||
Данные передаются в формате base64, при получении значения необходимо его раскодировать и сравнить со значением хранящимся в конфиге.
|
||||
Если значения не соответствуют, то вернуть ошибку и код HTTP 403 - Unauthorized.
|
||||
## Создание некоммерческого проекта
|
||||
|
||||
Используется endpoint с методом POST
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/createPresaleProject` **Обсудить данный момент после реализации и предоставить команде CRM**
|
||||
### Запрос
|
||||
|
||||
```json
|
||||
{
|
||||
"orderName": "Альфа-Пласт ADC",
|
||||
"orderDate": "2025-12-31",
|
||||
"clientId": "123-123-123", // Значение `Код клиента из R3`
|
||||
"managerProjectId": "00123456", // Значение ИНС
|
||||
"headProjectId": "00123457", // Значение ИНС
|
||||
"directorProjectId": "00123458", // Значение ИНС
|
||||
"orderAmount": 12345.67,
|
||||
"productAttribute": 1, // (1 - ПО/ПО+ТП/ТП. 2 - Консалтинг. 3 - ПО+ТП+Консалтинг/ТП+Консалтинг/ПО+Консалтинг)
|
||||
"applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43",
|
||||
"projectId": "" // AP ID (Пустое - создание проекта. Заполненное - редактирование проекта)
|
||||
}
|
||||
```
|
||||
|
||||
### Ответ
|
||||
|
||||
Успешный
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Неуспешный
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"errorMessage": "Текст ошибки"
|
||||
}
|
||||
```
|
||||
|
||||
## Проверка готовности создания проекта
|
||||
|
||||
Используется endpoint с методом GET
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/view?applicationId={applicationId}` **Обсудить данный момент после реализации и предоставить команде CRM**
|
||||
|
||||
Главная суть метода, что мы по значению `applicationId` из пункта `Создание некоммерческого проекта` получаем готовность создания проекта.
|
||||
Проект считается созданным, если у него заполнено поле `ProjectId` (уточнить как называется в базе данных поле `AP ID`)
|
||||
### Ответ
|
||||
|
||||
Проект еще создается
|
||||
```json
|
||||
{
|
||||
"status": "Waiting",
|
||||
"projectId": "",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Создание проекта завершено
|
||||
```json
|
||||
{
|
||||
"status": "Success",
|
||||
"projectId": "123-123-124",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Ошибка при создании проекта
|
||||
```json
|
||||
{
|
||||
"status": "Error",
|
||||
"projectId": "",
|
||||
"errorMessage": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
155
Интеграция СУП/Статусы заявок и проектов - задание.md
Normal file
155
Интеграция СУП/Статусы заявок и проектов - задание.md
Normal file
@@ -0,0 +1,155 @@
|
||||
## Статусы объектов
|
||||
|
||||
Заявка
|
||||
- Черновик -
|
||||
- На утверждении -
|
||||
- На рассмотрении в ЦПРП -
|
||||
- Зарегистрирована (финальный) -
|
||||
- Отклонена -
|
||||
|
||||
Проект
|
||||
- Открыт - E0001
|
||||
- Закрыт (финальный) - E0002
|
||||
- Приостановлен - E0003
|
||||
- На закрытии в ЦПРП (финальный) - E0005
|
||||
- На закрытии в ФС (финальный) - E0006
|
||||
- Аннулирован (финальный) - E0009
|
||||
- Закрыт для списания TS - E0027
|
||||
|
||||
## Процесс
|
||||
|
||||
1. После получения AP ID (Id проекта из САП) в CRM могут происходить изменения данных по сделке (заявке).
|
||||
2. Все изменения фиксируются в системе CRM и отправляются в СУП в конце рабочего дня
|
||||
3. По всем измененным заявкам вначале отправляем запрос на получение текущих статусов заявок и проектов
|
||||
Пример запроса смотри в "Получение статусов заявок и проектов" (Пример запроса)
|
||||
4. После получения статусов заявок и проектов система CRM отбирает только те заявки, которые могут быть изменены
|
||||
1. Заявка "Зарегистрирована" и Проект "Проект открыт"
|
||||
2. Заявка "Зарегистрирована" и Проект "Проект закрыт для списания TS"
|
||||
5. По подходящим заявкам из п.4 система CRM формирует запросы для отправки в СУП с использованием Temporal
|
||||
Пример запроса смотри в "Изменение данных по заявке - проекту" (Примеры запроса)
|
||||
6. Периодически опрашиваем систему СУП о готовности изменения данных по заявке и после получения ответа изменяем статусы заявок в CRM
|
||||
|
||||
## Авторизация
|
||||
|
||||
Используется кастомный header `X-Erp-Integration`
|
||||
Значение хранится в конфигах у системы СУП.
|
||||
Для дев и прод разные значения.
|
||||
Данные передаются в формате base64, при получении значения необходимо его раскодировать и сравнить со значением хранящимся в конфиге.
|
||||
Если значения не соответствуют, то вернуть ошибку и код HTTP 403 - Unauthorized.
|
||||
## Получение статусов заявок и проектов
|
||||
|
||||
Используется endpoint с методом POST - синхронный процесс
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/getPresaleProjectsStatus` **Обсудить данный момент после реализации и предоставить команде CRM**
|
||||
|
||||
Пример запроса
|
||||
```json
|
||||
{
|
||||
"projects": [
|
||||
{
|
||||
"projectId": "AP001", // AP ID проекта
|
||||
},
|
||||
{
|
||||
"projectId": "AP002", // AP ID проекта
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Пример ответа
|
||||
```json
|
||||
{
|
||||
"projects": [
|
||||
{
|
||||
"projectId": "AP001", // AP ID проекта
|
||||
"applicationStatus": "...", // Id статуса заявки
|
||||
"projectStatus": "E0005" // Id статуса проекта
|
||||
},
|
||||
{
|
||||
"projectId": "AP002", // AP ID проекта
|
||||
"applicationStatus": "...", // Id статуса заявки
|
||||
"projectStatus": "E0001" // Id статуса проекта
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
## Изменение данных по проекту
|
||||
|
||||
### Заявка на перевыпуск
|
||||
|
||||
Используется endpoint с методом POST - асинхронный процесс
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/createPresaleProject` **Обсудить данный момент после реализации и предоставить команде CRM**
|
||||
|
||||
В данном процессе будет использоваться метод `createPresaleProject`, также как и для создания некоммерческого проекта, но с условием, что в параметр `projectId` будет заполнен, что даст сигнал о том, что это заявка на перевыпуск проекта.
|
||||
|
||||
Пример запроса
|
||||
```json
|
||||
{
|
||||
"orderName": "Сделка-1", // Название проекта
|
||||
"orderDate": "2025-12-31", // Дата сделки из CRM
|
||||
"clientId": "123-123", // Код клиента из R3
|
||||
"headProjectId": "00123123", // ИНС руководителя проекта
|
||||
"managerProjectId": "00123124", // ИНС менеджера по продажам
|
||||
"directorProjectId": "00123125", // ИНС директора проекта
|
||||
"orderAmount": 12345.67, // Сумма сделки
|
||||
"projectId": "AP001", // AP ID проекта
|
||||
"applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43" // Id заявки в CRM
|
||||
}
|
||||
```
|
||||
|
||||
Успешный ответ
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Неуспешный ответ
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"errorMessage": "Текст ошибки"
|
||||
}
|
||||
```
|
||||
|
||||
### Проверка готовности проекта с измененными данными
|
||||
|
||||
После изменения статуса заявки на Черновик, ожидаем согласования заявки и система CRM (Temporal) будет периодически опрашивать СУП о готовности перевыпуска и согласовании изменений по проекту.
|
||||
|
||||
Ответ считается окончательным, если статус != Waiting, то есть Error или Success.
|
||||
|
||||
Предлагаемый вариант
|
||||
`api/1.0/openRequest/view?applicationId={applicationId}` **Обсудить данный момент после реализации и предоставить команде CRM**
|
||||
|
||||
Примеры ответов
|
||||
|
||||
Идет согласование изменений
|
||||
```json
|
||||
{
|
||||
"status": "Waiting",
|
||||
"projectId": "",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Согласование изменений успешно
|
||||
```json
|
||||
{
|
||||
"status": "Success",
|
||||
"projectId": "123-123-124",
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
|
||||
Ошибка или отказ по изменениям в проекте
|
||||
```json
|
||||
{
|
||||
"status": "Error",
|
||||
"projectId": "",
|
||||
"errorMessage": "Описание ошибки"
|
||||
}
|
||||
```
|
||||
3
Локальная разработка.md
Normal file
3
Локальная разработка.md
Normal file
@@ -0,0 +1,3 @@
|
||||
```
|
||||
export CONFIG_FILE="configs/config.yaml
|
||||
```
|
||||
127
Проблемы проекта Что любят есть городские птицы.md
Normal file
127
Проблемы проекта Что любят есть городские птицы.md
Normal file
@@ -0,0 +1,127 @@
|
||||
### **ВАРИАНТ 1: "Я хочу помочь, но не знаю как"** ⭐ (РЕКОМЕНДУЮ)
|
||||
|
||||
**Ситуация от ребенка:** "На прогулке я вижу птичек, они мерзнут и ищут еду под снегом. Мне их жалко! Я хочу покормить их, но мама говорит, что хлебом нельзя. А чем тогда можно? Я не знаю!"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как правильно помочь птицам зимой?
|
||||
- Что они любят есть?
|
||||
- Что им можно давать, а что нельзя?
|
||||
|
||||
**Что решается:** Ребенок узнает, как конкретно может помочь птицам, и получает инструмент реальной помощи природе.
|
||||
|
||||
**Мотивация:** Желание заботиться, быть полезным, помогать слабым.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 2: "Птицы не едят то, что я им даю!"**
|
||||
|
||||
**Ситуация от ребенка:** "Я насыпал птичкам крошки хлеба, а они не едят! Или едят чуть-чуть и улетают. Почему? Может, они не голодные? Или им не нравится? Что им дать, чтобы они съели?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему птицы не едят то, что я им даю?
|
||||
- Что они любят больше всего?
|
||||
- Как сделать так, чтобы птицы прилетали к моей кормушке?
|
||||
|
||||
**Что решается:** Ребенок понимает, что у птиц есть свои предпочтения, и учится их учитывать.
|
||||
|
||||
**Мотивация:** Любопытство, желание понять причину, успешность действия (чтобы птицы прилетали и ели).
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 3: "Я не могу узнать, какая это птица!"**
|
||||
|
||||
**Ситуация от ребенка:** "На прогулке я вижу разных птиц, но не знаю, как их зовут. Одна серенькая прыгает, другая желтая на ветке висит. Воспитатель говорит: 'Это воробей, а это синица'. Но я их путаю! И еще не знаю, что они любят есть."
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как отличить одну птицу от другой?
|
||||
- Что любит воробей, а что — синица?
|
||||
- Можно ли всем птицам давать одинаковую еду?
|
||||
|
||||
**Что решается:** Ребенок учится наблюдать, различать виды птиц и связывает внешний вид с поведением и питанием.
|
||||
|
||||
**Мотивация:** Познавательный интерес, желание разбираться в природе.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 4: "Почему птицы зимой не улетают на юг, если им холодно?"**
|
||||
|
||||
**Ситуация от ребенка:** "Мама говорит, что многие птицы осенью улетают в теплые края. Но я зимой все равно вижу птиц! Почему они остались? Им же холодно и голодно! Может, они заблудились? Как им помочь?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему некоторые птицы остаются зимовать?
|
||||
- Как они выживают в морозы?
|
||||
- Чем мы можем им помочь?
|
||||
|
||||
**Что решается:** Ребенок понимает разницу между перелетными и зимующими птицами, осознает важность помощи человека.
|
||||
|
||||
**Мотивация:** Эмпатия, желание понять и защитить.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 5: "Я насыпал корм, а птицы не прилетают!"**
|
||||
|
||||
**Ситуация от ребенка:** "Я повесил кормушку и насыпал туда еды. Целый день ждал, а птицы не прилетели! Почему? Может, они меня боятся? Или еда им не нравится? Что я сделал не так?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему птицы не прилетают к кормушке?
|
||||
- Какой корм их привлечет?
|
||||
- Где лучше повесить кормушку?
|
||||
- Нужно ли делать что-то особенное?
|
||||
|
||||
**Что решается:** Ребенок учится терпению, правильному выбору места и корма, пониманию поведения птиц.
|
||||
|
||||
**Мотивация:** Желание добиться результата, любопытство.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 6: "Мне скучно наблюдать — птицы все одинаковые!"**
|
||||
|
||||
**Ситуация от ребенка:** "Воспитатель говорит: 'Давайте понаблюдаем за птицами'. Но мне скучно просто смотреть! Я не знаю, что наблюдать. Они просто летают и клюют. Что в них интересного?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Что интересного можно увидеть, наблюдая за птицами?
|
||||
- Чем отличается поведение разных птиц?
|
||||
- Что они любят есть?
|
||||
- Как они общаются друг с другом?
|
||||
|
||||
**Что решается:** Ребенок учится замечать детали, сравнивать, анализировать — развивается наблюдательность.
|
||||
|
||||
**Мотивация:** Превратить скучное наблюдение в увлекательное исследование.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 7: "Я боюсь, что птицы умрут от голода!"** (эмоциональный)
|
||||
|
||||
**Ситуация от ребенка:** "Зимой так холодно, и снега много! Птичкам нечего есть, они такие маленькие и худенькие. Мне страшно, что они умрут от голода или замерзнут. Я очень хочу им помочь!"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Как спасти птиц от голода зимой?
|
||||
- Что им нужно, чтобы пережить зиму?
|
||||
- Могу ли я, маленький ребенок, реально помочь?
|
||||
|
||||
**Что решается:** Ребенок получает реальный инструмент помощи, чувствует свою значимость, справляется с тревогой через действие.
|
||||
|
||||
**Мотивация:** Эмпатия, забота, желание защитить.
|
||||
|
||||
---
|
||||
|
||||
### **ВАРИАНТ 8: "Почему к моей кормушке прилетают только воробьи?"**
|
||||
|
||||
**Ситуация от ребенка:** "Я повесил кормушку, насыпал крошек. Прилетают только воробьи, каждый день одни и те же. А где синички? Где снегири? Я хочу увидеть разных птиц! Что нужно сделать?"
|
||||
|
||||
**Проблемный вопрос:**
|
||||
|
||||
- Почему прилетают только воробьи?
|
||||
- Что нужно положить, чтобы прилетели синицы?
|
||||
- Как привлечь редких птиц?
|
||||
|
||||
**Что решается:** Ребенок узнает о пищевых предпочтениях разных видов и учится создавать условия для разнообразия.
|
||||
|
||||
**Мотивация:** Желание увидеть что-то новое, интерес к разнообразию природы.
|
||||
3
Релизы/17 сентября.md
Normal file
3
Релизы/17 сентября.md
Normal file
@@ -0,0 +1,3 @@
|
||||
- Проставить в `NrbElmaSyncEndpoint` значение `https://elma.itdev.adsw.io/pub/v1/app/approvalDeal/{0}/{1}`
|
||||
- Проставить в `NrbElmaApiKey` значение токена из ELMA prod
|
||||
- Синхронизировать справочники `NrbSyncBPMSoftAndElmaLookupProcess`
|
||||
4
Релизы/3 сентября.md
Normal file
4
Релизы/3 сентября.md
Normal file
@@ -0,0 +1,4 @@
|
||||
1. Заполнить настройку "Email адрес для копии при добавлении продукта Prosperity"
|
||||
2. Изменить настройку "Добавлять копию для продукта Prosperity"
|
||||
3. NrbAddressEmailSender - проверить заполнение
|
||||
4. Удалить объект "IT Ландшафт" из Custom перед релизом NrbITLandscape
|
||||
2
Релизы/Релизы.md
Normal file
2
Релизы/Релизы.md
Normal file
@@ -0,0 +1,2 @@
|
||||
[3 сентября](obsidian://open?vault=local&file=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B%2F3%20%D1%81%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8F)
|
||||
[17 сентября](obsidian://open?vault=local&file=%D0%A0%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B%2F17%20%D1%81%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8F)
|
||||
12
Своя игра.md
Normal file
12
Своя игра.md
Normal file
@@ -0,0 +1,12 @@
|
||||
| | 100 | 200 | 300 | 400 | 500 |
|
||||
| --------------- | ------------------ | ------------------ | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
|
||||
| Песни наоборот | Агутин - Аэропорты | Дима Билан - Держи | Звери - Районы кварталы | Корни - Ты узнаешь ее | Максим - Знаешь ли ты |
|
||||
| Продолжи песню | Мы увидим сзади | Из ярких лампочек | Все твои слова | Силы не жалей | Что любят гламур |
|
||||
| Вопросы от Дани | Она забыла его имя | Настольный теннис | Винни-пух | Кошка | 25 |
|
||||
| Сумерки | Белла | Эдвард Каллен | Бейсбол | В балетную студию в Фениксе | Что она упала с лестницы и вылетела через окно |
|
||||
| Чей плейлист | Ксюша | Даша | Света | Юля Шубина | Юля Мосина |
|
||||
| Поездки | 25 тысяч шагов | Изразцы | Альберт | Княгиня Ольга | 922 |
|
||||
| Факты о нас | 2 месяца | Даша Неберова | 1 год и 7 месяцев | Животные | Аллергия на текилу |
|
||||
| Универ | 1832 | Норильск | Информационные технологии графического проектирования | Препод по философии (Гурьев Евгений Павлович) | Разумнова Елена Альбертовна |
|
||||
| Профессия | | Канальный | Б.Н. Ельцин | Комитет по государственному контролю, использованию и охране памятников истории и культуры Санкт-Петербурга | 4 |
|
||||
| Наши встречи | Уэнсдей | Август 2023 года | Учебник по металлическим конструкциям | Для смысла | Вынуть батарейки из Дашиных часов в гостиной |
|
||||
111
Собеседование .Net.md
Normal file
111
Собеседование .Net.md
Normal file
@@ -0,0 +1,111 @@
|
||||
|
||||
## Объектно-ориентирование программирование
|
||||
|
||||
### Абстракция
|
||||
|
||||
Абстрагирование — это способ выделить набор наиболее важных атрибутов и методов и исключить незначимые. Соответственно, абстракция — это использование всех таких характеристик для описания объекта. Важно представить объект минимальным набором полей и методов без ущерба для решаемой задачи.
|
||||
|
||||
Пример: объекту класса «программист» вряд ли понадобятся свойства «умение готовить еду» или «любимый цвет». Они не влияют на его особенности как программиста. А вот «основной язык программирования» и «рабочие навыки» — важные свойства, без которых программиста не опишешь.
|
||||
|
||||
Набор атрибутов и методов, доступный извне, работает как интерфейс для доступа к объекту. Через них к нему могут обращаться другие структуры данных, причем им не обязательно знать, как именно объект устроен внутри.
|
||||
|
||||
### Инкапсуляция
|
||||
|
||||
Каждый объект — независимая структура. Все, что ему нужно для работы, уже есть у него внутри. Если он пользуется какой-то переменной, она будет описана в теле объекта, а не снаружи в коде. Это делает объекты более гибкими. Даже если внешний код перепишут, логика работы не изменится.
|
||||
|
||||
Инкапсуляция помогает с легкостью управлять кодом. Выше мы сказали, что для обращения к объекту не нужно понимать, как работают его методы. Начальнику разработчика Ивана не обязательно знать, как именно он программирует: главное — чтобы выполнялись поставленные задачи.
|
||||
|
||||
Внутреннее устройство одного объекта закрыто от других: извне «видны» только значения атрибутов и результаты выполнения методов.
|
||||
|
||||
### Наследование
|
||||
|
||||
Можно создавать классы и объекты, которые похожи друг на друга, но немного отличаются — имеют дополнительные атрибуты и методы. Более общее понятие в таком случае становится «родителем», а более специфичное и подробное — «наследником».
|
||||
|
||||
Упомянутый программист Иван — это человек. Но «человек» — более общее определение, которое не описывает свойства, важные именно для программиста. Можно сказать, что класс «программист» унаследован от класса «человек»: программист тоже является человеком, но у него есть дополнительные свойства.
|
||||
|
||||
В таком случае разработчик Иван будет и человеком, и программистом одновременно. У него будут наборы свойств от обоих классов.
|
||||
|
||||
У одного «родителя» может быть несколько дочерних структур. Например, от «человека» можно наследовать не только «программиста», но и «директора».
|
||||
|
||||
Наследование позволяет реализовывать сложные схемы с четкой иерархией «от общего к частному». Это облегчает понимание и масштабирование кода. Не нужно много раз переписывать в разных объектах одни и те же свойства. Достаточно унаследовать эти объекты от одного «родителя», и «родительские» свойства применятся автоматически.
|
||||
|
||||
### Полиморфизм
|
||||
|
||||
Одинаковые методы разных объектов могут выполнять задачи разными способами. Например, у «человека» есть метод «работать». У «программиста» реализация этого метода будет означать написание кода, а у «директора» — рассмотрение управленческих вопросов. Но глобально и то, и другое будет работой.
|
||||
|
||||
Тут важны единый подход и договоренности между специалистами. Если метод называется delete, то он должен что-то удалять. Как именно — зависит от объекта, но заниматься такой метод должен именно удалением. Более того: если оговорено, что «удаляющий» метод называется delete, то не нужно для какого-то объекта называть его remove или иначе. Это вносит путаницу в код.
|
||||
## SOLID
|
||||
|
||||
### Single Responsibility Principle (Принцип единственной ответственности)
|
||||
|
||||
Это значит, что каждый класс должен выполнять только **одну** четко определенную функцию. Если он решает более одной задачи, это может привести к сложностям в поддержке и расширении кода.
|
||||
|
||||
**Как следовать принципу SRP**
|
||||
|
||||
Сначала общую задачу нужно декомпозировать на несколько подзадач. Затем каждую подзадачу реализовать в отдельном классе.
|
||||
|
||||
### Open/Closed Principle (Принцип открытости/закрытости)
|
||||
|
||||
**Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации.**
|
||||
|
||||
Это значит, что программные компоненты нужно спроектировать таким образом, чтобы их можно было расширять новым функционалом, не меняя исходный код. Изменения при добавлении нового кода могут сломать уже работающую логику.
|
||||
|
||||
**Как следовать принципу OCP**
|
||||
|
||||
В этом помогут абстракции, интерфейсы и наследование. Это позволит добавить новый функционал через расширение, а не модификацию существующего кода.
|
||||
|
||||
**Задача**
|
||||
|
||||
У ресторана есть система управления заказами. Нужно сделать так, чтобы она поддерживала различные виды платежей: наличные, кредитные карты и мобильные платежи.
|
||||
|
||||
### Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
|
||||
|
||||
**Производные классы должны заменять свои базовые классы.**
|
||||
|
||||
Это значит, что объекты базовых классов должны быть заменяемы объектами производных классов без изменения ожидаемого поведения программы.
|
||||
|
||||
**_Базовый класс_** — это класс, от которого производные классы наследуют свойства и методы.
|
||||
|
||||
**Как следовать принципу LSP**
|
||||
|
||||
Производный класс должен сохранять все свойства базового класса и не изменять их семантику. Нужно добиться того, чтобы объекты производных классов могли безопасно заменять друг друга и базовый класс.
|
||||
|
||||
**Задача**
|
||||
|
||||
Предположим, что есть система для работы с геометрическими фигурами, в которой есть базовый класс **Shape** и производные классы **Circle** и **Square**.
|
||||
|
||||
### Interface Segregation Principle (Принцип разделения интерфейса)
|
||||
|
||||
**Клиенты не должны зависеть от интерфейсов, которые они не используют.**
|
||||
|
||||
Это значит, что нужно создавать только небольшие и узконаправленные интерфейсы, не перегруженные ненужными методами.
|
||||
|
||||
**Как следовать принципу ISP**
|
||||
|
||||
Каждый интерфейс должен существовать для определенных задач и содержать только те методы, которые эти задачи решают.
|
||||
|
||||
**Задача**
|
||||
|
||||
Предположим, у нас есть система управления документами с интерфейсом **Document,** содержащим методы для работы с документами, такие как **open()**, **save()** и **close().** Однако одним клиентам требуется только возможность открывать и закрывать документы, а другим — только сохранять и закрывать их.
|
||||
|
||||
### Dependency Inversion Principle (Принцип инверсии зависимостей)
|
||||
|
||||
**Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей, но детали должны зависеть от абстракций.**
|
||||
|
||||
Это значит, что код должен быть организован таким образом, чтобы зависимости между компонентами программы были основаны на абстракциях, а не на конкретных реализациях. Таким образом, компоненты легко заменить или изменить без воздействия на другие части системы.
|
||||
|
||||
**Как следовать принципу DIP**
|
||||
|
||||
— Использовать интерфейсы или абстрактные классы для определения зависимостей между компонентами.
|
||||
|
||||
— Следовать остальным принципам SOLID, чтобы создавать хорошо структурированные и модульные системы.
|
||||
|
||||
— Применять шаблоны проектирования, такие как **Dependency Injection** (Внедрение зависимостей) или **Inversion of Control** (Инверсия управления), чтобы передавать зависимости извне вместо того, чтобы создавать их внутри компонентов.
|
||||
|
||||
**Внедрение зависимостей**: объект не создает свои зависимости самостоятельно, они предоставляются ему извне, например через конструктор, методы или свойства.
|
||||
|
||||
**Инверсия управления**: управление частью приложения переносится на внешний фреймворк или контейнер, управляющий жизненным циклом объектов.
|
||||
|
||||
**Задача**
|
||||
|
||||
Нужно разработать приложение для работы с базой данных студентов. Каждый студент имеет имя, возраст и список предметов, которые он изучает.
|
||||
80
Статусы заявок и проектов.md
Normal file
80
Статусы заявок и проектов.md
Normal file
@@ -0,0 +1,80 @@
|
||||
## Заявка
|
||||
|
||||
- Черновик
|
||||
- На утверждении
|
||||
- На рассмотрении в ЦПРП
|
||||
- Зарегистрирована (финальный)
|
||||
- Отклонена
|
||||
## Проект
|
||||
|
||||
- Открыт - 01
|
||||
- Закрыт (финальный) - 02
|
||||
- Приостановлен - 03
|
||||
- На закрытии в ЦПРП (финальный) - 04
|
||||
- На закрытии в ФС (финальный) - 05
|
||||
- Аннулирован (финальный) - 06
|
||||
- Закрыт для списания TS - 07
|
||||
|
||||
## Рассуждения
|
||||
|
||||
1. Когда мы получаем AP ID (Id проекта) по интеграции, то Заявка в статусе "Зарегистрирована", а проект в статусе "Открыт"
|
||||
2. Мы можем посылать изменения в статусах "Зарегистрирована и Открыт" или "Зарегистрирована и Закрыт для списания TS"
|
||||
3. Заявка в статусах "Черновик", "На утверждении", "На рассмотрении в ЦПРП" в CRM не хранятся, так как мы не можем получить по ним такие данные или нужно будет интегрировать статус заявки в ответ по готовности проекта.
|
||||
4. Каждый день отправляем запрос по измененным данным в заявках, у которых статус "Зарегистрирована" и проект в статусе "Открыт" или "Приостановлен" или "Закрыт для списания TS".
|
||||
5. Если получаем статус проекта "Закрыт" или "На закрытии в ФС" или "Аннулирован" или "На закрытии в ЦПРП", то по таким заявкам мы больше не будем отправлять данные, так как статусы проектов финальные.
|
||||
6. В конечном итоге получается, что отправляются измененные данные, у которых
|
||||
1. Заявка "Зарегистрирована" и Проект "Открыт"
|
||||
2. Заявка "Зарегистрирована" и Проект "Приостановлен"
|
||||
3. Заявка "Зарегистрирована" и Проект "Закрыт для списания TS"
|
||||
4. Все измененные данные будут отправляться каждый день, пока по ним не будет получен положительный ответ, то есть будет присутствовать накопительный эффект, но как только статус проекта перейдет в финальный, то данные больше не будут посылаться в систему
|
||||
## Пример запросов
|
||||
|
||||
```json
|
||||
{
|
||||
"projects": [
|
||||
{
|
||||
"orderName": "Сделка-1", // Название проекта
|
||||
"orderDate": "2025-12-31", // Дата сделки из CRM
|
||||
"clientId": "123-123", // Код клиента
|
||||
"headProjectId": "00123123", // ИНС руководителя проекта
|
||||
"managerProjectId": "00123124", // ИНС менеджера по продажам
|
||||
"directorProjectId": "00123125", // ИНС директора проекта
|
||||
"orderAmount": 12345.67, // Сумма сделки
|
||||
"projectId": "AP001", // AP ID проекта
|
||||
"applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c43" // Id заявки в CRM
|
||||
},
|
||||
{
|
||||
"orderName": "Сделка-2", // Название проекта
|
||||
"orderDate": "2026-01-31", // Дата сделки из CRM
|
||||
"clientId": "123-124", // Код клиента
|
||||
"headProjectId": "00123123", // ИНС руководителя проекта
|
||||
"managerProjectId": "00123124", // ИНС менеджера по продажам
|
||||
"directorProjectId": "00123125", // ИНС директора проекта
|
||||
"orderAmount": 12348.67, // Сумма сделки
|
||||
"projectId": "AP002", // AP ID проекта
|
||||
"applicationId": "57ef229c-d8e4-4da5-b87a-7205e7eb7c44" // Id заявки в CRM
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Пример ответов
|
||||
|
||||
```json
|
||||
{
|
||||
"projects": [
|
||||
{
|
||||
"success": true, // Статус обработки (true - Успешно, false - Ошибка)
|
||||
"projectId": "AP001", // AP ID проекта
|
||||
"errorMessage": "", // Текст ошибки, если не получилось изменить
|
||||
"projectStatus": "01" // Id статуса проекта
|
||||
},
|
||||
{
|
||||
"success": false, // Статус обработки (true - Успешно, false - Ошибка)
|
||||
"projectId": "AP002", // AP ID проекта
|
||||
"errorMessage": "Нельзя менять данные в рамках текущего статуса", // Текст ошибки, если не получилось изменить
|
||||
"projectStatus": "02" // Id статуса проекта
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
9
Токены.md
Normal file
9
Токены.md
Normal file
@@ -0,0 +1,9 @@
|
||||
tk_ed7b49b13a24516637fdcaf50a693cd13c315461
|
||||
|
||||
ptr_BlsQt8gitAdCORGf1393GM0kyIceijX0weA+BkIK8vk= Portainer
|
||||
|
||||
61db24d5de33418e85d87574433c1360 Prowlarr
|
||||
|
||||
7a018f8d09294257b26f80bb8b2658d2 Jellyfin
|
||||
|
||||
fb49609e3b7b49c5c9fba207fe0dcf28c3fc9305 gitea token
|
||||
556
Япония/Рекомендации по билетам.md
Normal file
556
Япония/Рекомендации по билетам.md
Normal file
@@ -0,0 +1,556 @@
|
||||
## ❗ ЗА 1 МЕСЯЦ (январь-февраль 2026)
|
||||
|
||||
### **4. UNIVERSAL STUDIOS JAPAN БИЛЕТЫ (КРИТИЧНО!)**
|
||||
|
||||
**Что:** Входные билеты + Express Pass **День:** 15 марта 2026 (суббота) **Количество:** 2 билета
|
||||
|
||||
**Где купить:**
|
||||
|
||||
- 🌐 Официальный сайт USJ: [https://www.usj.co.jp/web/en/us](https://www.usj.co.jp/web/en/us) (на английском)
|
||||
- 🌐 Klook.com (часто дешевле!)
|
||||
|
||||
**Что купить:**
|
||||
|
||||
**А) Входной билет (обязательно):**
|
||||
|
||||
- **1-Day Studio Pass**
|
||||
- Цена: ~¥8,600-10,400 (зависит от даты)
|
||||
- **ВАЖНО:** Выбирайте точную дату - 15 марта!
|
||||
|
||||
**Б) Express Pass (ОБЯЗАТЕЛЬНО!):**
|
||||
|
||||
- **Express Pass 7** (рекомендую): ¥10,800-24,800
|
||||
- Включает: Harry Potter, Super Nintendo World, 5+ других аттракционов
|
||||
- **Без очередей!**
|
||||
- Или **Express Pass 4**: ¥7,800-14,800
|
||||
- Включает: Harry Potter OR Nintendo, 3 других аттракциона
|
||||
|
||||
**ИТОГО на двоих:** ~¥38,000-70,000 ($250-470)
|
||||
|
||||
**⚠️ КРИТИЧНО:**
|
||||
|
||||
- **Суббота = ОЧЕНЬ много народу**, цены выше
|
||||
- Билеты **быстро раскупаются** за месяц!
|
||||
- Express Pass **ОБЯЗАТЕЛЕН** - без него очереди 1.5-2 часа
|
||||
- Покупайте **ЗА 1-2 МЕСЯЦА!**
|
||||
|
||||
**ЧТО ПОЛУЧИТЕ:**
|
||||
|
||||
- QR-коды на email
|
||||
- Распечатайте или сохраните на телефон
|
||||
- Показывайте на входе
|
||||
|
||||
---
|
||||
|
||||
## ❗ ЗА 2-4 НЕДЕЛИ (февраль 2026)
|
||||
|
||||
### **5. HAKONE FREE PASS (опционально - можно купить в Японии)**
|
||||
|
||||
**Что:** Проездной для Хаконэ (фуникулеры, канатные дороги, автобусы, корабль) **Срок:** 2 дня **Цена:** ~¥6,100 × 2 = ¥12,200
|
||||
|
||||
**Где купить:**
|
||||
|
||||
- **В России:** Japan Experience (доставка Exchange Order)
|
||||
- **В Японии:** На станции Odawara (рекомендую!)
|
||||
|
||||
**Рекомендация:** Покупайте в Одаваре 7 марта, проще!
|
||||
|
||||
---
|
||||
|
||||
# 📅 ЧАСТЬ 2: ПОКУПКИ В ЯПОНИИ
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 0: ПРИЛЕТ В ТОКИО (2 марта, вечер)
|
||||
|
||||
### **АЭРОПОРТ НАРИТА - СРАЗУ ПО ПРИЛЕТУ**
|
||||
|
||||
**Где:** После прохождения таможни, в зале прилета
|
||||
|
||||
---
|
||||
|
||||
### **1. IC-КАРТА SUICA/PASMO**
|
||||
|
||||
**Что это:** Электронная карта для метро/автобусов/магазинов **Где купить:**
|
||||
|
||||
- Автоматы на станции JR в аэропорту
|
||||
- Или JR East Travel Service Center (офис JR)
|
||||
|
||||
**Варианты:**
|
||||
|
||||
**А) Welcome Suica (для туристов):**
|
||||
|
||||
- Цена: ¥1,000-2,000 (без депозита!)
|
||||
- Срок: 28 дней
|
||||
- Невозвратная
|
||||
- **Рекомендую!**
|
||||
|
||||
**Б) Обычная Suica:**
|
||||
|
||||
- Цена: ¥1,000-2,000 + депозит ¥500
|
||||
- Срок: 10 лет
|
||||
- Возвратная (вернете депозит при возврате карты)
|
||||
|
||||
**Что делать:**
|
||||
|
||||
1. Найдите автомат с надписью "Suica" или "PASMO"
|
||||
2. Выберите английский язык
|
||||
3. Купите Welcome Suica за ¥2,000 (¥1,500 баланс + ¥500 стоимость)
|
||||
4. Карта выдается моментально
|
||||
5. Купите 2 карты (на каждого)
|
||||
|
||||
**Пополнение:**
|
||||
|
||||
- В автоматах на станциях
|
||||
- В комбини (7-Eleven, FamilyMart, Lawson)
|
||||
- ТОЛЬКО наличными!
|
||||
- Пополняйте по ¥2,000-3,000 когда нужно
|
||||
|
||||
**ИТОГО:** ¥4,000 на двоих (первая покупка)
|
||||
|
||||
---
|
||||
|
||||
### **2. НАЛИЧНЫЕ ЙЕНЫ**
|
||||
|
||||
**Где:** Банкомат в аэропорту (7-Eleven ATM или Japan Post Bank)
|
||||
|
||||
**Сколько снять:**
|
||||
|
||||
- **Сразу:** ¥50,000-80,000 (~$340-540)
|
||||
- Этого хватит на 3-4 дня
|
||||
|
||||
**Почему много:**
|
||||
|
||||
- 60% мест в Японии НЕ принимают карты
|
||||
- Рестораны, храмы, рынки - только наличные
|
||||
- Комбини принимают карты, но не везде
|
||||
|
||||
**Где еще снимать:**
|
||||
|
||||
- 7-Eleven (банкоматы работают 24/7 с зарубежными картами)
|
||||
- Japan Post Bank
|
||||
- Избегайте банкоматы обычных банков (высокие комиссии)
|
||||
|
||||
---
|
||||
|
||||
### **3. POCKET WiFi (если заказывали)**
|
||||
|
||||
**Где:** Стойка в зале прилета
|
||||
|
||||
- Ищите вашу компанию (Japan Wireless, GA, etc.)
|
||||
- Покажите подтверждение
|
||||
- Получите роутер + зарядку
|
||||
- Залог обычно НЕ требуется
|
||||
|
||||
**Или купите SIM-карту:**
|
||||
|
||||
- В аэропорту есть киоски
|
||||
- ~¥3,000-5,000 за 7-14 дней
|
||||
- Но Pocket WiFi удобнее (делите на двоих)
|
||||
|
||||
---
|
||||
|
||||
### **4. ТРАНСПОРТ В ТОКИО**
|
||||
|
||||
**Варианты из Narita в Tokyo:**
|
||||
|
||||
**А) Narita Express (N'EX) - рекомендую:**
|
||||
|
||||
- До Tokyo Station: 60 минут, ¥3,070
|
||||
- До Shinjuku: 80 минут, ¥3,250
|
||||
- Комфортный, быстрый
|
||||
- **НЕ покрывается никакими Pass!**
|
||||
- Покупайте билет в автомате JR в аэропорту
|
||||
|
||||
**Б) Keisei Skyliner:**
|
||||
|
||||
- До Ueno: 41 минута, ¥2,570
|
||||
- До Nippori: 36 минут, ¥2,570
|
||||
- Самый быстрый
|
||||
- НЕ покрывается Pass
|
||||
|
||||
**В) Airport Limousine Bus:**
|
||||
|
||||
- До отеля: 90-120 минут, ¥3,200
|
||||
- Удобно с багажом
|
||||
- Прямо до района отеля
|
||||
|
||||
**ИТОГО на двоих:** ¥5,140-6,500
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 1-3: ТОКИО (3-5 марта)
|
||||
|
||||
**Транспорт:** Используйте Suica для всех поездок в метро
|
||||
|
||||
**Расходы:**
|
||||
|
||||
- ¥1,000-1,500/день на человека на метро
|
||||
- Пополняйте Suica в автоматах когда баланс <¥500
|
||||
|
||||
**Ничего покупать НЕ нужно!** Просто пользуйтесь Suica.
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 4: КАМАКУРА (6 марта)
|
||||
|
||||
### **УТРО: TOKYO STATION или SHINJUKU STATION**
|
||||
|
||||
**Что купить:** Билет в Камакуру туда-обратно
|
||||
|
||||
**Где:** Автомат JR Ticket Machine (зеленые автоматы "Midori-no-madoguchi")
|
||||
|
||||
**Как:**
|
||||
|
||||
**Из Shinjuku (если отель там):**
|
||||
|
||||
1. Идите на JR Shonan-Shinjuku Line
|
||||
2. Купите билет Shinjuku → Kamakura (¥920)
|
||||
3. Обратный билет купите в Камакуре перед возвратом
|
||||
4. Время: ~1 час прямо
|
||||
|
||||
**Из Tokyo Station:**
|
||||
|
||||
1. JR Yokosuka Line
|
||||
2. Билет Tokyo → Kamakura (¥920)
|
||||
3. Время: ~1 час прямо
|
||||
|
||||
**ИТОГО:** ~¥2,000 на двоих (туда-обратно)
|
||||
|
||||
**⚠️ АЛЬТЕРНАТИВА:** Можно не покупать билеты - просто используйте Suica (автоматически спишется)
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 5: ТОКИО → ХАКОНЭ (7 марта)
|
||||
|
||||
### **УТРО: TOKYO STATION**
|
||||
|
||||
**📍 Место:** Tokyo Station, JR Ticket Office (Midori-no-madoguchi)
|
||||
|
||||
**Время:** 8:00-9:00 (рано, до толп)
|
||||
|
||||
---
|
||||
|
||||
### **ЧТО КУПИТЬ:**
|
||||
|
||||
**1) Билет на синкансэн Tokyo → Odawara**
|
||||
|
||||
**Как купить:**
|
||||
|
||||
1. Идите в **JR Ticket Office** (зеленое окно "みどりの窓口")
|
||||
2. Скажите (покажите на бумажке):
|
||||
- "Tokyo to Odawara, Shinkansen Kodama, 2 tickets, today, 10:00" (или ваше время)
|
||||
3. Оплата: наличные или карта
|
||||
4. Получите 2 билета
|
||||
|
||||
**Цена:** ~¥4,500 × 2 = **¥9,000**
|
||||
|
||||
**⚠️ ВАЖНО:**
|
||||
|
||||
- Садитесь только на **Kodama** или **Hikari** (НЕ Nozomi - дороже и не нужен)
|
||||
- Время: ~35 минут
|
||||
- Можно купить за день до (6 марта вечером)
|
||||
|
||||
---
|
||||
|
||||
### **ПО ПРИБЫТИИ В ОДАВАРА (Odawara Station)**
|
||||
|
||||
**📍 Место:** Odawara Station, Hakone Tourist Information Center
|
||||
|
||||
---
|
||||
|
||||
### **2) HAKONE FREE PASS (2 дня)**
|
||||
|
||||
**Где купить:** Odakyu Tourist Information Center (в здании станции)
|
||||
|
||||
**Что купить:**
|
||||
|
||||
- **Hakone Free Pass (2 days)** - from Odawara
|
||||
- Цена: ~¥5,000 × 2 = **¥10,000**
|
||||
- Срок: 7-8 марта (2 дня)
|
||||
|
||||
**Что включает:**
|
||||
|
||||
- ✅ Автобусы Hakone Tozan Bus
|
||||
- ✅ Hakone Tozan Railway (поезд)
|
||||
- ✅ Hakone Ropeway (канатная дорога)
|
||||
- ✅ Пиратский корабль на озере Аси
|
||||
- ✅ Hakone Tozan Cable Car (фуникулер)
|
||||
- ✅ Скидки на онсэны и музеи
|
||||
|
||||
**Как купить:**
|
||||
|
||||
1. Найдите Odakyu Service Center (сразу на станции)
|
||||
2. Скажите: "Hakone Free Pass, 2 days, 2 adults"
|
||||
3. Оплата: наличные или карта
|
||||
4. Получите физический Pass (пластиковая карта)
|
||||
|
||||
**ИТОГО за день:** ¥9,000 + ¥10,000 = **¥19,000**
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 6: ХАКОНЭ → КИОТО (8 марта)
|
||||
|
||||
### **УТРО-ДЕНЬ: ОДАВАРА СТАНЦИЯ**
|
||||
|
||||
**📍 Место:** Odawara Station, JR Ticket Office
|
||||
|
||||
**Время:** Утром, после выезда из рёкана (~10:00-11:00)
|
||||
|
||||
---
|
||||
|
||||
### **ЧТО КУПИТЬ:**
|
||||
|
||||
**Билет на синкансэн Odawara → Kyoto**
|
||||
|
||||
**⚠️ САМЫЙ ДОРОГОЙ БИЛЕТ ПОЕЗДКИ!**
|
||||
|
||||
**Как купить:**
|
||||
|
||||
1. Идите в **JR Ticket Office** (みどりの窓口)
|
||||
2. Покажите на бумажке:
|
||||
- "Odawara to Kyoto, Shinkansen Hikari, 2 tickets, today, 12:00" (ваше время)
|
||||
3. **НЕ покупайте Nozomi** (дороже и не нужен)
|
||||
4. **Hikari** или **Sakura** - подходящие поезда
|
||||
5. Оплата: наличные или карта
|
||||
|
||||
**Цена:** ~¥13,000 × 2 = **¥26,000** 💰
|
||||
|
||||
**Время в пути:** ~2 часа 15 минут
|
||||
|
||||
**⚠️ ВАЖНО:**
|
||||
|
||||
- Можно купить заранее онлайн через Smart EX (если есть японская карта)
|
||||
- Или за день до в Одаваре
|
||||
- Или утром в день отъезда (НО может не быть мест!)
|
||||
|
||||
**Рекомендация:** Купите вечером 7 марта в Одаваре, чтобы гарантировать места!
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 7-11: КИОТО (9-13 марта)
|
||||
|
||||
### **ПО ПРИБЫТИИ: KYOTO STATION**
|
||||
|
||||
**📍 Место:** Kyoto Station, автобусная информационная стойка
|
||||
|
||||
---
|
||||
|
||||
### **ЧТО КУПИТЬ:**
|
||||
|
||||
**Автобусный проездной Kyoto City Bus Pass**
|
||||
|
||||
**Где:**
|
||||
|
||||
- Bus ticket office на 1 этаже Kyoto Station (сразу у выхода к автобусам)
|
||||
- Или в автоматах около автобусных остановок
|
||||
|
||||
**Что купить:**
|
||||
|
||||
- **1-Day Bus Pass** (一日乗車券)
|
||||
- Цена: ¥700/день
|
||||
- **Купите сразу 5 штук на каждого** = ¥3,500 × 2 = **¥7,000**
|
||||
|
||||
**Что покрывает:**
|
||||
|
||||
- Безлимитные поездки на городских автобусах Киото
|
||||
- Покрывает почти все храмы и достопримечательности
|
||||
|
||||
**Как использовать:**
|
||||
|
||||
- Активируется при первом использовании
|
||||
- Действует до полуночи
|
||||
- Показывайте водителю при выходе
|
||||
|
||||
**Альтернатива:**
|
||||
|
||||
- Можно покупать каждый день (если не уверены в количестве)
|
||||
- Одна поездка: ¥230
|
||||
- Pass окупается с 3-й поездки
|
||||
|
||||
---
|
||||
|
||||
### **ДЕНЬ 10: НАРА (12 марта)**
|
||||
|
||||
**Транспорт:** JR Nara Line из Kyoto
|
||||
|
||||
**Билет:**
|
||||
|
||||
- Покупайте в автомате или используйте Suica
|
||||
- ~¥720 в одну сторону
|
||||
- ~¥1,400 туда-обратно на человека
|
||||
- **ИТОГО:** ¥2,800 на двоих
|
||||
|
||||
**Или:**
|
||||
|
||||
- Используйте Suica (автоматически спишется)
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 12: КИОТО → ОСАКА (14 марта)
|
||||
|
||||
### **УТРО: KYOTO STATION**
|
||||
|
||||
**Транспорт:** JR Tokaido Line
|
||||
|
||||
**Билет:**
|
||||
|
||||
- Покупайте в автомате JR или используйте Suica
|
||||
- ~¥560 на человека
|
||||
- Время: 30 минут
|
||||
|
||||
**⚠️ НО ЛУЧШЕ:**
|
||||
|
||||
---
|
||||
|
||||
### **🎫 АКТИВИРУЙТЕ KANSAI-HIROSHIMA PASS!**
|
||||
|
||||
**📍 Где:** Kyoto Station, JR Ticket Office (Midori-no-madoguchi)
|
||||
|
||||
**Время:** Утром перед выездом в Осаку (9:00-10:00)
|
||||
|
||||
**Что делать:**
|
||||
|
||||
1. Найдите **JR Ticket Office** (зеленое окно)
|
||||
2. Покажите:
|
||||
- **Exchange Order** (распечатка из России)
|
||||
- **Загранпаспорт** с туристической визой
|
||||
3. Заполните короткую форму
|
||||
4. Получите **физический Pass** (пластиковая карта)
|
||||
5. Укажите дату активации: **14 марта 2026**
|
||||
|
||||
**Срок действия Pass:** 14-18 марта (5 дней)
|
||||
|
||||
**С этого момента:**
|
||||
|
||||
- ✅ Все JR поезда в Kansai - БЕСПЛАТНО
|
||||
- ✅ Синкансэн Osaka ↔ Hiroshima - БЕСПЛАТНО
|
||||
- ✅ Паром на Миядзиму - БЕСПЛАТНО
|
||||
- ✅ Haruka до аэропорта - БЕСПЛАТНО
|
||||
|
||||
**Киото → Осака:**
|
||||
|
||||
- Теперь БЕСПЛАТНО с Pass!
|
||||
- Просто показывайте Pass на турникете (проход через боковые ворота с сотрудником)
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 12-14: ОСАКА (14-16 марта)
|
||||
|
||||
**Транспорт:**
|
||||
|
||||
- JR линии: используйте Kansai-Hiroshima Pass (бесплатно)
|
||||
- Метро Osaka Metro: используйте Suica (оплачивайте отдельно)
|
||||
|
||||
**Опционально:**
|
||||
|
||||
- **Osaka Amazing Pass** (1 день: ¥2,800)
|
||||
- Безлимитное метро + 40+ достопримечательностей
|
||||
- Покупайте если планируете много метро и музеев
|
||||
- Или просто используйте Suica (проще)
|
||||
|
||||
**Для USJ (15 марта):**
|
||||
|
||||
- У вас уже есть билеты (купили заранее!)
|
||||
- Просто показывайте QR-код на входе
|
||||
- До USJ: JR Yumesaki Line от Osaka Station (15 минут)
|
||||
- **БЕСПЛАТНО** с Kansai-Hiroshima Pass! ✅
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 15: ОСАКА → ХИРОСИМА (17 марта)
|
||||
|
||||
### **УТРО: SHIN-OSAKA STATION**
|
||||
|
||||
**📍 Место:** Shin-Osaka Station, JR Ticket Office
|
||||
|
||||
---
|
||||
|
||||
### **ЧТО ДЕЛАТЬ:**
|
||||
|
||||
**Зарезервировать место на синкансэн**
|
||||
|
||||
**С Kansai-Hiroshima Pass:**
|
||||
|
||||
- Синкансэн Shin-Osaka → Hiroshima **БЕСПЛАТНЫЙ!** ✅
|
||||
- **НО места нужно резервировать!**
|
||||
|
||||
**Как:**
|
||||
|
||||
1. Идите в **JR Ticket Office** или автомат
|
||||
2. Покажите **Kansai-Hiroshima Pass**
|
||||
3. Скажите: "Reserved seat, Shin-Osaka to Hiroshima, 2 seats, today, 10:00" (ваше время)
|
||||
4. **БЕСПЛАТНО!** Просто получите билеты с местами
|
||||
5. Или езжайте без резерва (свободные вагоны есть)
|
||||
|
||||
**⭐ ПЛЮС:**
|
||||
|
||||
- С Kansai-Hiroshima Pass можете садиться на **Nozomi/Mizuho!**
|
||||
- Это самые быстрые поезда! (1 час 20 минут вместо 1 час 40 минут)
|
||||
|
||||
**Время в пути:**
|
||||
|
||||
- Nozomi: 1 час 20 минут ⚡
|
||||
- Hikari: 1 час 40 минут
|
||||
|
||||
**Рекомендация:**
|
||||
|
||||
- Резервируйте места вечером 16 марта
|
||||
- Или утром 17 марта
|
||||
- Или езжайте без резерва (обычно места есть в будни)
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 16: ХИРОСИМА → МИЯДЗИМА (18 марта)
|
||||
|
||||
**Транспорт:** Полностью покрыт Kansai-Hiroshima Pass!
|
||||
|
||||
**Хиросима → Miyajimaguchi:**
|
||||
|
||||
- JR Sanyo Line (27 минут)
|
||||
- **БЕСПЛАТНО** с Pass ✅
|
||||
|
||||
**Miyajimaguchi → Miyajima Island:**
|
||||
|
||||
- JR Ferry (10 минут)
|
||||
- **БЕСПЛАТНО** с Pass ✅
|
||||
|
||||
**Обратно в Осаку вечером:**
|
||||
|
||||
- Miyajima → Hiroshima → Shin-Osaka (синкансэн)
|
||||
- Всё **БЕСПЛАТНО** с Pass ✅
|
||||
|
||||
**Ничего покупать НЕ нужно!**
|
||||
|
||||
---
|
||||
|
||||
## 📍 ДЕНЬ 17: ОСАКА → АЭРОПОРТ КАНСАЙ (19 марта)
|
||||
|
||||
### **УТРО: TENNOJI или SHIN-OSAKA STATION**
|
||||
|
||||
**Транспорт:** Haruka Express
|
||||
|
||||
**С Kansai-Hiroshima Pass:**
|
||||
|
||||
- Haruka Express **БЕСПЛАТНЫЙ!** ✅
|
||||
- Время: 50 минут от Shin-Osaka, 30 минут от Tennoji
|
||||
|
||||
**Что делать:**
|
||||
|
||||
1. Идите на станцию JR
|
||||
2. Найдите платформу Haruka
|
||||
3. Покажите **Kansai-Hiroshima Pass** на турникете
|
||||
4. Садитесь на поезд
|
||||
5. Приезжаете прямо в аэропорт
|
||||
|
||||
**⚠️ НО Pass истекает 18 марта!**
|
||||
|
||||
**Если Pass истек:**
|
||||
|
||||
- Купите билет Haruka: ~¥2,900 на человека
|
||||
- Или Nankai Railway: ~¥920 (медленнее)
|
||||
|
||||
**Рекомендация:**
|
||||
|
||||
- Продлите Pass на 1 день? НЕТ, нельзя
|
||||
- Купите отдельный билет Haruka за ¥2,900 × 2 = **¥5,800**
|
||||
261
Япония/Япония рекомендации.md
Normal file
261
Япония/Япония рекомендации.md
Normal file
@@ -0,0 +1,261 @@
|
||||
## 🚄 КАК ДОБИРАТЬСЯ МЕЖДУ ГОРОДАМИ
|
||||
|
||||
### **Маршрут:** Токио → Хаконэ → Киото → Осака → Хиросима → Миядзима → Осака (вылет)
|
||||
|
||||
| Переезд | Транспорт | Время | Стоимость без JR Pass | С JR Pass |
|
||||
| ----------------------- | ------------------------------ | --------- | --------------------- | --------- |
|
||||
| **Токио → Хаконэ** | Синкансэн до Одавара + автобус | ~1.5 ч | ¥4,000 | ✅ Покрыто |
|
||||
| **Хаконэ → Киото** | Автобус до Одавара + синкансэн | ~2.5 ч | ¥13,000 | ✅ Покрыто |
|
||||
| **Киото → Осака** | JR или Kintetsu | 15-30 мин | ¥560 | ✅ Покрыто |
|
||||
| **Осака → Хиросима** | Синкансэн Hikari/Sakura | ~1.5 ч | ¥10,000 | ✅ Покрыто |
|
||||
| **Хиросима → Миядзима** | JR + паром | ~40 мин | ¥600 | ✅ Покрыто |
|
||||
| **Хиросима → Осака** | Синкансэн Hikari/Sakura | ~1.5 ч | ¥10,000 | ✅ Покрыто |
|
||||
## 🏨 ЛУЧШИЕ РАЙОНЫ ДЛЯ ПРОЖИВАНИЯ
|
||||
|
||||
### **ТОКИО (4 ночи)**
|
||||
|
||||
**🏆 Рекомендуемые районы:**
|
||||
|
||||
1. **Синдзюку (Shinjuku)** ⭐ Лучший выбор
|
||||
- ✅ Главный транспортный хаб
|
||||
- ✅ Много отелей, ресторанов
|
||||
- ✅ Удобно для всех достопримечательностей
|
||||
- ✅ Ночная жизнь
|
||||
- 💰 ¥6,000-12,000/ночь
|
||||
|
||||
2. **Сибуя (Shibuya)**
|
||||
- ✅ Молодежный район
|
||||
- ✅ Отличный шопинг
|
||||
- ✅ Хорошая транспортная развязка
|
||||
- 💰 ¥7,000-13,000/ночь
|
||||
|
||||
3. **Асакуса (Asakusa)**
|
||||
- ✅ Традиционная атмосфера
|
||||
- ✅ Около храма Сэнсо-дзи
|
||||
- ✅ Тише, чем Синдзюку
|
||||
- ✅ Дешевле
|
||||
- 💰 ¥5,000-10,000/ночь
|
||||
|
||||
**❌ Избегать:** Роппонги (дорого и шумно)
|
||||
|
||||
### **ХАКОНЭ (1-2 ночи)**
|
||||
|
||||
**🏆 Рекомендуемые районы:**
|
||||
|
||||
1. **Хаконэ-Юмото** ⭐ Лучший выбор
|
||||
- ✅ У станции, удобно
|
||||
- ✅ Много рёканов с онсэнами
|
||||
- ✅ Магазины, рестораны
|
||||
- 💰 Рёкан: ¥15,000-30,000/чел (с ужином и завтраком)
|
||||
|
||||
2. **Гора, Мияношита**
|
||||
- ✅ Тихо, в горах
|
||||
- ✅ Традиционные рёканы
|
||||
- 💰 ¥20,000-40,000/чел
|
||||
|
||||
3. **У озера Аси**
|
||||
- ✅ Виды на Фудзи
|
||||
- ✅ Спокойная атмосфера
|
||||
- 💰 ¥25,000-50,000/чел
|
||||
|
||||
**💡 Совет:** Обязательно остановитесь в **рёкане с онсэном** - это главный опыт Хаконэ!
|
||||
|
||||
---
|
||||
|
||||
### **КИОТО (5 ночей)**
|
||||
|
||||
**🏆 Рекомендуемые районы:**
|
||||
|
||||
1. **Около станции Киото** ⭐ Лучший для первого раза
|
||||
- ✅ Удобно для поездок
|
||||
- ✅ Автобусная развязка
|
||||
- ✅ Современные отели
|
||||
- ✅ Недалеко до всех храмов
|
||||
- 💰 ¥6,000-12,000/ночь
|
||||
|
||||
2. **Гион / Хигасияма**
|
||||
- ✅ Традиционная атмосфера
|
||||
- ✅ Район гейш
|
||||
- ✅ Пешая доступность к храмам
|
||||
- 💰 ¥10,000-20,000/ночь
|
||||
|
||||
3. **Каварамачи (Kawaramachi)**
|
||||
- ✅ Центр города
|
||||
- ✅ Рестораны, шопинг
|
||||
- ✅ Река Камо рядом
|
||||
- 💰 ¥7,000-15,000/ночь
|
||||
|
||||
**❌ Избегать:** Арашияма (далеко от центра, неудобно)
|
||||
|
||||
---
|
||||
|
||||
### **ОСАКА (3 ночи)**
|
||||
|
||||
**🏆 Рекомендуемые районы:**
|
||||
|
||||
1. **Нанба / Дотонбори (Namba/Dotonbori)** ⭐ Лучший выбор
|
||||
- ✅ В центре событий
|
||||
- ✅ Еда, развлечения
|
||||
- ✅ Метро, автобусы
|
||||
- ✅ 15 минут до Universal Studios
|
||||
- 💰 ¥7,000-13,000/ночь
|
||||
|
||||
2. **Умэда (Umeda)**
|
||||
- ✅ Деловой центр
|
||||
- ✅ Главный хаб транспорта
|
||||
- ✅ Торговые центры
|
||||
- 💰 ¥8,000-14,000/ночь
|
||||
|
||||
3. **Около станции Osaka**
|
||||
- ✅ Удобно для синкансэна
|
||||
- ✅ Хорошая развязка
|
||||
- 💰 ¥6,000-11,000/ночь
|
||||
|
||||
---
|
||||
|
||||
### **ХИРОСИМА (1 ночь)**
|
||||
|
||||
**🏆 Рекомендуемые районы:**
|
||||
|
||||
1. **Около станции Hiroshima** ⭐ Лучший выбор
|
||||
- ✅ Удобно для поездок
|
||||
- ✅ Трамваи до всех мест
|
||||
- 💰 ¥6,000-10,000/ночь
|
||||
|
||||
2. **Район Peace Park**
|
||||
- ✅ Рядом с мемориалом
|
||||
- ✅ Тихо вечером
|
||||
- 💰 ¥7,000-12,000/ночь
|
||||
|
||||
**💡 Совет:** Хиросима компактный город, любой район подойдет
|
||||
|
||||
## 🗾 КРАТКАЯ ХАРАКТЕРИСТИКА КАЖДОГО ГОРОДА
|
||||
|
||||
### **🗼 ТОКИО (4 дня)**
|
||||
|
||||
**Суть:** Мегаполис контрастов - от традиционных храмов до футуристических небоскребов
|
||||
|
||||
**Must-see:**
|
||||
|
||||
- ⛩️ Храм Сэнсо-дзи (Асакуса) - старейший храм
|
||||
- 🌲 Мэйдзи-дзингу - главный синтоистский храм
|
||||
- 🚶 Сибуя перекресток - символ современного Токио
|
||||
- 🏙️ Синдзюку - небоскребы и бесплатная смотровая
|
||||
- 🐟 Рынок Тоёсу - свежайшие суши на завтрак
|
||||
- 🎮 Акихабара - мировая столица аниме и электроники
|
||||
|
||||
**Атмосфера:** Энергичная, быстрая, современная, огромная
|
||||
|
||||
**Еда:** Суши, рамен, тонкацу, тэмпура, якитори
|
||||
|
||||
---
|
||||
|
||||
### **🗻 ХАКОНЭ (1-2 дня)**
|
||||
|
||||
**Суть:** Горный курорт с онсэнами и видами на Фудзи
|
||||
|
||||
**Must-see:**
|
||||
|
||||
- 🌋 Овакудани - вулканическая долина, черные яйца
|
||||
- ⛵ Озеро Аси - пиратский корабль, виды на Фудзи
|
||||
- 🛁 Онсэн в рёкане - традиционные горячие источники
|
||||
- 🚡 Канатная дорога - панорамный маршрут
|
||||
- ⛩️ Хаконэ-дзиндзя - тории в воде озера
|
||||
|
||||
**Атмосфера:** Спокойная, природная, расслабляющая
|
||||
|
||||
**Еда:** Хаконэ соба, кайсэки в рёкане, черные яйца
|
||||
|
||||
---
|
||||
|
||||
### **🏯 КИОТО (5 дней)**
|
||||
|
||||
**Суть:** Древняя столица Японии, сердце традиционной культуры
|
||||
|
||||
**Must-see:**
|
||||
|
||||
- 🦊 Фусими Инари - 10,000 красных тории
|
||||
- ⛩️ Кинкаку-дзи - Золотой павильон (самый фотогеничный)
|
||||
- 🎋 Бамбуковая роща Арасияма - волшебный зеленый тоннель
|
||||
- 🏛️ Киёмидзу-дэра - храм на сваях с панорамой
|
||||
- 🚶 Гион - район гейш, традиционные улочки
|
||||
- 🦌 Нара - 1,200+ свободных оленей и гигантский Будда
|
||||
|
||||
**Атмосфера:** Традиционная, спокойная, духовная, историческая
|
||||
|
||||
**Еда:** Кайсэки, юдофу (тофу), обанзай, вегетарианская кухня
|
||||
|
||||
**Время:** 5 дней - идеально (можно и 4, но будет спешка)
|
||||
|
||||
---
|
||||
|
||||
### **🍜 ОСАКА (3 дня с Universal Studios)**
|
||||
|
||||
**Суть:** Гастрономическая столица Японии и развлечения
|
||||
|
||||
**Must-see:**
|
||||
|
||||
- 🎢 Universal Studios Japan - Harry Potter + Super Nintendo World
|
||||
- 🏯 Замок Осака - один из трех великих замков
|
||||
- 🌃 Дотонбори - неоновые огни, уличная еда
|
||||
- 🐟 Куротомон Итиба - рынок "кухня Осаки"
|
||||
- 🏙️ Умэда Sky Building - футуристическая смотровая
|
||||
|
||||
**Атмосфера:** Веселая, расслабленная, гастрономическая, энергичная
|
||||
|
||||
**Еда:**
|
||||
|
||||
- 🐙 Такояки (шарики с осьминогом) - символ города
|
||||
- 🥞 Окономияки (японский блин)
|
||||
- 🍢 Кусикацу (жареные шашлычки)
|
||||
- 🦀 Крабы в ресторане Kani Doraku
|
||||
- 🥩 Якинику (японское барбекю)
|
||||
|
||||
**Время:** 3 дня (1 полный день USJ + 2 дня город)
|
||||
|
||||
---
|
||||
|
||||
### **🕊️ ХИРОСИМА (1 день)**
|
||||
|
||||
**Суть:** Город-символ мира, важное историческое место
|
||||
|
||||
**Must-see:**
|
||||
|
||||
- 💣 Атомный купол - объект ЮНЕСКО, символ трагедии
|
||||
- 🏛️ Музей мира - обязательное, но тяжелое эмоционально
|
||||
- 🌳 Мемориальный парк Мира - кенотаф, памятник детям
|
||||
- 🏯 Замок Хиросима (если есть время)
|
||||
|
||||
**Атмосфера:** Торжественная, трогательная, мирная
|
||||
|
||||
**Еда:**
|
||||
|
||||
- 🥞 Хиросима-яки - окономияки с лапшой (отличается от осакского!)
|
||||
- 🦪 Устрицы - местная специальность
|
||||
- 🐟 Анаго-меши - угорь на рисе
|
||||
|
||||
**Время:** 1 день достаточно (можно 2, если хотите глубже)
|
||||
|
||||
---
|
||||
|
||||
### **⛩️ МИЯДЗИМА (1 день)**
|
||||
|
||||
**Суть:** Священный остров с "плавающими" воротами тории
|
||||
|
||||
**Must-see:**
|
||||
|
||||
- ⛩️ Ицукусима-дзиндзя - святилище ЮНЕСКО, тории в воде
|
||||
- ⛰️ Гора Мисэн - один из трех лучших видов Японии
|
||||
- 🦌 Священные олени - 500+ диких оленей
|
||||
- 🍁 Момидзи мандзю - пирожные-кленовые листья
|
||||
- 🦪 Устрицы - свежайшие!
|
||||
|
||||
**Атмосфера:** Священная, умиротворенная, природная, магическая
|
||||
|
||||
**Еда:**
|
||||
|
||||
- 🦪 Устрицы (жареные, на гриле, сырые)
|
||||
- 🍁 Момидзи мандзю (везите как сувенир!)
|
||||
- 🐟 Анаго-меши
|
||||
|
||||
**Время:** 6-8 часов на острове (или ночевка для особого опыта)
|
||||
Reference in New Issue
Block a user