1 line
105 KiB
XML
1 line
105 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" style="cursor:pointer;max-width:100%;max-height:1722px;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="2211px" viewBox="-0.5 -0.5 2211 1722" content="<mxfile> <diagram id="7gCwj9mQwRpnqfD4ykJp" name="Page-1"> <mxGraphModel dx="4779" dy="3497" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <object placeholders="1" c4Name="Message Broker" c4Type="Container" c4Technology="Apache Kafka" c4Description="Очередь сообщений" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%:&amp;nbsp;%c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="2"> <mxCell style="shape=cylinder3;size=15;direction=south;whiteSpace=wrap;html=1;boundedLbl=1;rounded=0;labelBackgroundColor=none;fillColor=#23A2D9;fontSize=12;fontColor=#ffffff;align=center;strokeColor=#0E7DAD;metaEdit=1;points=[[0.5,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.5,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];resizable=0;" vertex="1" parent="1"> <mxGeometry x="-780" y="-40" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="connections-service" c4Type="Service" c4Technology="Python" c4Description="Управляет связями между адаптерами системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="3"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-80" y="-200" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="PMS Adapter" c4Type="Service" c4Technology="Python" c4Description="Адаптер передачи сообщений в систему" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="4"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1690" y="-120" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Custom Adapter #N" c4Type="Service" c4Technology="Python" c4Description="Адаптер передачи сообщений в систему" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="6"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1410" y="40" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="PMS" c4Type="Software System" c4Description="" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#cccccc&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="7"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#8C8496;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#736782;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1690" y="-480" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="ERP" c4Type="Software System" c4Description="" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#cccccc&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="8"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#8C8496;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#736782;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1410" y="-480" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Housekeeper" c4Type="Software System" c4Description="" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#cccccc&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="9"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#8C8496;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#736782;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1130" y="-480" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="tasks-service" c4Type="Service" c4Technology="Python" c4Description="Управляет всеми тасками системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="21"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-360" y="-200" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="БД" c4Type="Container" c4Technology="Postgress" c4Description="Сохранение данных системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%:&amp;nbsp;%c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="22"> <mxCell style="shape=cylinder3;size=15;whiteSpace=wrap;html=1;boundedLbl=1;rounded=0;labelBackgroundColor=none;fillColor=#23A2D9;fontSize=12;fontColor=#ffffff;align=center;strokeColor=#0E7DAD;metaEdit=1;points=[[0.5,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.5,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];resizable=0;" vertex="1" parent="1"> <mxGeometry x="-360" y="480" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Web admin" c4Type="Container" c4Technology="Typescript, React" c4Description="Админка для управления системой" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%:&amp;nbsp;%c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="23"> <mxCell style="shape=mxgraph.c4.webBrowserContainer2;whiteSpace=wrap;html=1;boundedLbl=1;rounded=0;labelBackgroundColor=none;strokeColor=#118ACD;fillColor=#23A2D9;strokeColor=#118ACD;strokeColor2=#0E7DAD;fontSize=12;fontColor=#ffffff;align=center;metaEdit=1;points=[[0.5,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.5,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];resizable=0;" vertex="1" parent="1"> <mxGeometry x="-360" y="-960" width="240" height="160" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Service Layer" c4Type="SystemScopeBoundary" c4Application="Layer" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;&lt;div style=&quot;text-align: left&quot;&gt;%c4Name%&lt;/div&gt;&lt;/b&gt;&lt;/font&gt;&lt;div style=&quot;text-align: left&quot;&gt;[%c4Application%]&lt;/div&gt;" id="24"> <mxCell style="rounded=1;fontSize=11;whiteSpace=wrap;html=1;dashed=1;arcSize=20;fillColor=none;strokeColor=#666666;fontColor=#333333;labelBackgroundColor=none;align=left;verticalAlign=bottom;labelBorderColor=none;spacingTop=0;spacing=10;dashPattern=8 4;metaEdit=1;rotatable=0;perimeter=rectanglePerimeter;noLabel=0;labelPadding=0;allowArrows=0;connectable=0;expand=0;recursiveResize=0;editable=1;pointerEvents=0;absoluteArcSize=1;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-400" y="-280" width="880" height="600" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Mobile Apps" c4Type="Container" c4Technology="?" c4Description="Отдельные приложения для работников" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%:&amp;nbsp;%c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="25"> <mxCell style="shape=mxgraph.c4.webBrowserContainer2;whiteSpace=wrap;html=1;boundedLbl=1;rounded=0;labelBackgroundColor=none;strokeColor=#118ACD;fillColor=#23A2D9;strokeColor=#118ACD;strokeColor2=#0E7DAD;fontSize=12;fontColor=#ffffff;align=center;metaEdit=1;points=[[0.5,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.5,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];resizable=0;" vertex="1" parent="1"> <mxGeometry x="-80" y="-960" width="240" height="160" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Telegram Bot" c4Type="Container" c4Technology="?" c4Description="Бот для управления системой" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%:&amp;nbsp;%c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="26"> <mxCell style="shape=mxgraph.c4.webBrowserContainer2;whiteSpace=wrap;html=1;boundedLbl=1;rounded=0;labelBackgroundColor=none;strokeColor=#118ACD;fillColor=#23A2D9;strokeColor=#118ACD;strokeColor2=#0E7DAD;fontSize=12;fontColor=#ffffff;align=center;metaEdit=1;points=[[0.5,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.5,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];resizable=0;" vertex="1" parent="1"> <mxGeometry x="200" y="-960" width="240" height="160" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Client Layer" c4Type="SystemScopeBoundary" c4Application="Layer" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;&lt;div style=&quot;text-align: left&quot;&gt;%c4Name%&lt;/div&gt;&lt;/b&gt;&lt;/font&gt;&lt;div style=&quot;text-align: left&quot;&gt;[%c4Application%]&lt;/div&gt;" id="27"> <mxCell style="rounded=1;fontSize=11;whiteSpace=wrap;html=1;dashed=1;arcSize=20;fillColor=none;strokeColor=#666666;fontColor=#333333;labelBackgroundColor=none;align=left;verticalAlign=bottom;labelBorderColor=none;spacingTop=0;spacing=10;dashPattern=8 4;metaEdit=1;rotatable=0;perimeter=rectanglePerimeter;noLabel=0;labelPadding=0;allowArrows=0;connectable=0;expand=0;recursiveResize=0;editable=1;pointerEvents=0;absoluteArcSize=1;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-400" y="-1040" width="880" height="320" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="API Gateway Layer" c4Type="SystemScopeBoundary" c4Application="Layer" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;&lt;div style=&quot;text-align: left&quot;&gt;%c4Name%&lt;/div&gt;&lt;/b&gt;&lt;/font&gt;&lt;div style=&quot;text-align: left&quot;&gt;[%c4Application%]&lt;/div&gt;" id="31"> <mxCell style="rounded=1;fontSize=11;whiteSpace=wrap;html=1;dashed=1;arcSize=20;fillColor=none;strokeColor=#666666;fontColor=#333333;labelBackgroundColor=none;align=left;verticalAlign=bottom;labelBorderColor=none;spacingTop=0;spacing=10;dashPattern=8 4;metaEdit=1;rotatable=0;perimeter=rectanglePerimeter;noLabel=0;labelPadding=0;allowArrows=0;connectable=0;expand=0;recursiveResize=0;editable=1;pointerEvents=0;absoluteArcSize=1;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-400" y="-640" width="880" height="280" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="REST API" c4Type="Service" c4Technology="?" c4Description="" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="32"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-360" y="-560" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="gRPC" c4Type="Service" c4Technology="?" c4Description="" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="33"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-80" y="-560" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="WebSocket" c4Type="Service" c4Technology="?" c4Description="" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="34"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="200" y="-560" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="users-service" c4Type="Service" c4Technology="Python" c4Description="Управление пользователями системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="35"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="200" y="-200" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="notification-service" c4Type="Service" c4Technology="Python" c4Description="Управление уведомлениями системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="36"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-360" y="-40" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="file-storage-service" c4Type="Service" c4Technology="Python" c4Description="Управление файлами системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="37"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-80" y="-40" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="audit-service" c4Type="Service" c4Technology="Python" c4Description="Аудит действий пользователя" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="38"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="200" y="-40" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="scheduler-service" c4Type="Service" c4Technology="Python" c4Description="Создание задач по расписанию" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="39"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-360" y="120" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="permissions-service" c4Type="Service" c4Technology="Python" c4Description="Управление правами доступа пользователей" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="40"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-80" y="120" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="events-service" c4Type="Service" c4Technology="Python" c4Description="Управление мероприятиями" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="41"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="200" y="120" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Adapter Layer" c4Type="SystemScopeBoundary" c4Application="Layer" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;&lt;div style=&quot;text-align: left&quot;&gt;%c4Name%&lt;/div&gt;&lt;/b&gt;&lt;/font&gt;&lt;div style=&quot;text-align: left&quot;&gt;[%c4Application%]&lt;/div&gt;" id="42"> <mxCell style="rounded=1;fontSize=11;whiteSpace=wrap;html=1;dashed=1;arcSize=20;fillColor=none;strokeColor=#666666;fontColor=#333333;labelBackgroundColor=none;align=left;verticalAlign=bottom;labelBorderColor=none;spacingTop=0;spacing=10;dashPattern=8 4;metaEdit=1;rotatable=0;perimeter=rectanglePerimeter;noLabel=0;labelPadding=0;allowArrows=0;connectable=0;expand=0;recursiveResize=0;editable=1;pointerEvents=0;absoluteArcSize=1;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1730" y="-200" width="880" height="440" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="ERP Adapter" c4Type="Service" c4Technology="Python" c4Description="Адаптер передачи сообщений в систему" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="43"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1410" y="-120" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Housekeeping Adapter" c4Type="Service" c4Technology="Python" c4Description="Адаптер передачи сообщений в систему" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="44"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1130" y="-120" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Telegram Bot Adapter" c4Type="Service" c4Technology="Python" c4Description="Адаптер передачи сообщений в систему" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%: %c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="45"> <mxCell style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;labelBackgroundColor=none;fillColor=#23A2D9;fontColor=#ffffff;align=center;arcSize=10;strokeColor=#0E7DAD;metaEdit=1;resizable=0;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1690" y="40" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Data Layer" c4Type="SystemScopeBoundary" c4Application="Layer" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;&lt;div style=&quot;text-align: left&quot;&gt;%c4Name%&lt;/div&gt;&lt;/b&gt;&lt;/font&gt;&lt;div style=&quot;text-align: left&quot;&gt;[%c4Application%]&lt;/div&gt;" id="46"> <mxCell style="rounded=1;fontSize=11;whiteSpace=wrap;html=1;dashed=1;arcSize=20;fillColor=none;strokeColor=#666666;fontColor=#333333;labelBackgroundColor=none;align=left;verticalAlign=bottom;labelBorderColor=none;spacingTop=0;spacing=10;dashPattern=8 4;metaEdit=1;rotatable=0;perimeter=rectanglePerimeter;noLabel=0;labelPadding=0;allowArrows=0;connectable=0;expand=0;recursiveResize=0;editable=1;pointerEvents=0;absoluteArcSize=1;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-400" y="400" width="880" height="280" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="Cache" c4Type="Container" c4Technology="Redis" c4Description="Сохранение данных системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%:&amp;nbsp;%c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="50"> <mxCell style="shape=cylinder3;size=15;whiteSpace=wrap;html=1;boundedLbl=1;rounded=0;labelBackgroundColor=none;fillColor=#23A2D9;fontSize=12;fontColor=#ffffff;align=center;strokeColor=#0E7DAD;metaEdit=1;points=[[0.5,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.5,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];resizable=0;" vertex="1" parent="1"> <mxGeometry x="-80" y="480" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="File Storage" c4Type="Container" c4Technology="S3" c4Description="Сохранение данных системы" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;%c4Name%&lt;/b&gt;&lt;/font&gt;&lt;div&gt;[%c4Type%:&amp;nbsp;%c4Technology%]&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;font color=&quot;#E6E6E6&quot;&gt;%c4Description%&lt;/font&gt;&lt;/div&gt;" id="51"> <mxCell style="shape=cylinder3;size=15;whiteSpace=wrap;html=1;boundedLbl=1;rounded=0;labelBackgroundColor=none;fillColor=#23A2D9;fontSize=12;fontColor=#ffffff;align=center;strokeColor=#0E7DAD;metaEdit=1;points=[[0.5,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.5,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];resizable=0;" vertex="1" parent="1"> <mxGeometry x="200" y="480" width="240" height="120" as="geometry" /> </mxCell> </object> <object placeholders="1" c4Name="External System" c4Type="SystemScopeBoundary" c4Application="Layer" label="&lt;font style=&quot;font-size: 16px&quot;&gt;&lt;b&gt;&lt;div style=&quot;text-align: left&quot;&gt;%c4Name%&lt;/div&gt;&lt;/b&gt;&lt;/font&gt;&lt;div style=&quot;text-align: left&quot;&gt;[%c4Application%]&lt;/div&gt;" id="52"> <mxCell style="rounded=1;fontSize=11;whiteSpace=wrap;html=1;dashed=1;arcSize=20;fillColor=none;strokeColor=#666666;fontColor=#333333;labelBackgroundColor=none;align=left;verticalAlign=bottom;labelBorderColor=none;spacingTop=0;spacing=10;dashPattern=8 4;metaEdit=1;rotatable=0;perimeter=rectanglePerimeter;noLabel=0;labelPadding=0;allowArrows=0;connectable=0;expand=0;recursiveResize=0;editable=1;pointerEvents=0;absoluteArcSize=1;points=[[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0.25,0],[1,0.5,0],[1,0.75,0],[0.75,1,0],[0.5,1,0],[0.25,1,0],[0,0.75,0],[0,0.5,0],[0,0.25,0]];" vertex="1" parent="1"> <mxGeometry x="-1730" y="-520" width="880" height="240" as="geometry" /> </mxCell> </object> <mxCell id="55" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="43" target="8"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="56" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="4" target="7"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="57" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="44" target="9"> <mxGeometry relative="1" as="geometry" /> </mxCell> <object placeholders="1" c4Type="Relationship" c4Technology="e.g. JSON/HTTP" c4Description="e.g. Makes API calls" label="&lt;div style=&quot;text-align: left&quot;&gt;&lt;div style=&quot;text-align: center&quot;&gt;&lt;b&gt;%c4Description%&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center&quot;&gt;[%c4Technology%]&lt;/div&gt;&lt;/div&gt;" id="64"> <mxCell style="endArrow=blockThin;html=1;fontSize=10;fontColor=#404040;strokeWidth=1;endFill=1;strokeColor=#828282;elbow=vertical;metaEdit=1;endSize=14;startSize=14;jumpStyle=arc;jumpSize=16;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxGeometry width="240" relative="1" as="geometry"> <mxPoint x="39.93" y="-774.5" as="sourcePoint" /> <mxPoint x="39.56" y="-584.5" as="targetPoint" /> </mxGeometry> </mxCell> </object> <object placeholders="1" c4Type="Relationship" id="65"> <mxCell style="endArrow=blockThin;html=1;fontSize=10;fontColor=#404040;strokeWidth=1;endFill=1;strokeColor=#828282;elbow=vertical;metaEdit=1;endSize=14;startSize=14;jumpStyle=arc;jumpSize=16;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxGeometry width="240" relative="1" as="geometry"> <mxPoint x="39.62" y="-420" as="sourcePoint" /> <mxPoint x="40" y="-220" as="targetPoint" /> </mxGeometry> </mxCell> </object> <object placeholders="1" c4Type="Relationship" id="66"> <mxCell style="endArrow=blockThin;html=1;fontSize=10;fontColor=#404040;strokeWidth=1;endFill=1;strokeColor=#828282;elbow=vertical;metaEdit=1;endSize=14;startSize=14;jumpStyle=arc;jumpSize=16;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxGeometry width="240" relative="1" as="geometry"> <mxPoint x="39.089999999999996" y="260" as="sourcePoint" /> <mxPoint x="39.47" y="460" as="targetPoint" /> </mxGeometry> </mxCell> </object> <object placeholders="1" c4Type="Relationship" id="67"> <mxCell style="endArrow=blockThin;html=1;fontSize=10;fontColor=#404040;strokeWidth=1;endFill=1;strokeColor=#828282;elbow=vertical;metaEdit=1;endSize=14;startSize=14;jumpStyle=arc;jumpSize=16;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxGeometry width="240" relative="1" as="geometry"> <mxPoint x="-930" y="20" as="sourcePoint" /> <mxPoint x="-790" y="20" as="targetPoint" /> </mxGeometry> </mxCell> </object> <object placeholders="1" c4Type="Relationship" id="68"> <mxCell style="endArrow=blockThin;html=1;fontSize=10;fontColor=#404040;strokeWidth=1;endFill=1;strokeColor=#828282;elbow=vertical;metaEdit=1;endSize=14;startSize=14;jumpStyle=arc;jumpSize=16;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxGeometry width="240" relative="1" as="geometry"> <mxPoint x="-790" y="40" as="sourcePoint" /> <mxPoint x="-930" y="40" as="targetPoint" /> </mxGeometry> </mxCell> </object> <object placeholders="1" c4Type="Relationship" id="69"> <mxCell style="endArrow=blockThin;html=1;fontSize=10;fontColor=#404040;strokeWidth=1;endFill=1;strokeColor=#828282;elbow=vertical;metaEdit=1;endSize=14;startSize=14;jumpStyle=arc;jumpSize=16;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxGeometry width="240" relative="1" as="geometry"> <mxPoint x="-520" y="9.23" as="sourcePoint" /> <mxPoint x="-380" y="9.23" as="targetPoint" /> </mxGeometry> </mxCell> </object> <object placeholders="1" c4Type="Relationship" id="70"> <mxCell style="endArrow=blockThin;html=1;fontSize=10;fontColor=#404040;strokeWidth=1;endFill=1;strokeColor=#828282;elbow=vertical;metaEdit=1;endSize=14;startSize=14;jumpStyle=arc;jumpSize=16;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxGeometry width="240" relative="1" as="geometry"> <mxPoint x="-380" y="29.23" as="sourcePoint" /> <mxPoint x="-520" y="29.23" as="targetPoint" /> </mxGeometry> </mxCell> </object> </root> </mxGraphModel> </diagram> </mxfile> " onclick="(function(svg){var src=window.event.target||window.event.srcElement;while (src!=null&&src.nodeName.toLowerCase()!='a'){src=src.parentNode;}if(src==null){if(svg.wnd!=null&&!svg.wnd.closed){svg.wnd.focus();}else{var r=function(evt){if(evt.data=='ready'&&evt.source==svg.wnd){svg.wnd.postMessage(decodeURIComponent(svg.getAttribute('content')),'*');window.removeEventListener('message',r);}};window.addEventListener('message',r);svg.wnd=window.open('https://viewer.diagrams.net/?client=1&page=0&edit=_blank');}}})(this);"><defs/><g><g><path d="M 1010 955 C 1010 946.72 1036.86 940 1070 940 C 1085.91 940 1101.17 941.58 1112.43 944.39 C 1123.68 947.21 1130 951.02 1130 955 L 1130 1165 C 1130 1173.28 1103.14 1180 1070 1180 C 1036.86 1180 1010 1173.28 1010 1165 Z" fill="#23a2d9" stroke="#0e7dad" stroke-miterlimit="10" transform="rotate(90,1070,1060)" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/><path d="M 1130 955 C 1130 963.28 1103.14 970 1070 970 C 1036.86 970 1010 963.28 1010 955" fill="none" stroke="#0e7dad" stroke-miterlimit="10" transform="rotate(90,1070,1060)" pointer-events="all" style="stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 203px; height: 1px; padding-top: 1060px; margin-left: 956px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Message Broker</b></font><div>[Container: Apache Kafka]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Очередь сообщений</font></font></div></div></div></div></foreignObject><text x="1058" y="1064" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Message Broker...</text></switch></g></g><g><rect x="1650" y="840" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 900px; margin-left: 1651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>connections-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Управляет связями между адаптерами системы</font></font></div></div></div></div></foreignObject><text x="1770" y="903" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">connections-service...</text></switch></g></g><g><rect x="40" y="920" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 980px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>PMS Adapter</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Адаптер передачи сообщений в систему</font></font></div></div></div></div></foreignObject><text x="160" y="983" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">PMS Adapter...</text></switch></g></g><g><rect x="320" y="1080" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1140px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Custom Adapter #N</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Адаптер передачи сообщений в систему</font></font></div></div></div></div></foreignObject><text x="440" y="1143" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">Custom Adapter #N...</text></switch></g></g><g><rect x="40" y="560" width="240" height="120" rx="12" ry="12" fill="#8c8496" stroke="#736782" pointer-events="all" style="fill: light-dark(rgb(140, 132, 150), rgb(126, 119, 135)); stroke: light-dark(rgb(115, 103, 130), rgb(152, 141, 165));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 620px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>PMS</b></font><div>[Software System]</div><br /><div><font style="font-size: 11px"><font color="#cccccc" style="color: light-dark(rgb(204, 204, 204), rgb(62, 62, 62));"></font></font></div></div></div></div></foreignObject><text x="160" y="624" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">PMS...</text></switch></g></g><g><rect x="320" y="560" width="240" height="120" rx="12" ry="12" fill="#8c8496" stroke="#736782" pointer-events="all" style="fill: light-dark(rgb(140, 132, 150), rgb(126, 119, 135)); stroke: light-dark(rgb(115, 103, 130), rgb(152, 141, 165));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 620px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>ERP</b></font><div>[Software System]</div><br /><div><font style="font-size: 11px"><font color="#cccccc" style="color: light-dark(rgb(204, 204, 204), rgb(62, 62, 62));"></font></font></div></div></div></div></foreignObject><text x="440" y="624" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">ERP...</text></switch></g></g><g><rect x="600" y="560" width="240" height="120" rx="12" ry="12" fill="#8c8496" stroke="#736782" pointer-events="all" style="fill: light-dark(rgb(140, 132, 150), rgb(126, 119, 135)); stroke: light-dark(rgb(115, 103, 130), rgb(152, 141, 165));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 620px; margin-left: 601px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Housekeeper</b></font><div>[Software System]</div><br /><div><font style="font-size: 11px"><font color="#cccccc" style="color: light-dark(rgb(204, 204, 204), rgb(62, 62, 62));"></font></font></div></div></div></div></foreignObject><text x="720" y="624" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Housekeeper...</text></switch></g></g><g><rect x="1370" y="840" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 900px; margin-left: 1371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>tasks-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Управляет всеми тасками системы</font></font></div></div></div></div></foreignObject><text x="1490" y="903" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">tasks-service...</text></switch></g></g><g><path d="M 1370 1535 C 1370 1526.72 1423.73 1520 1490 1520 C 1521.83 1520 1552.35 1521.58 1574.85 1524.39 C 1597.36 1527.21 1610 1531.02 1610 1535 L 1610 1625 C 1610 1633.28 1556.27 1640 1490 1640 C 1423.73 1640 1370 1633.28 1370 1625 Z" fill="#23a2d9" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/><path d="M 1610 1535 C 1610 1543.28 1556.27 1550 1490 1550 C 1423.73 1550 1370 1543.28 1370 1535" fill="none" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1593px; margin-left: 1371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>БД</b></font><div>[Container: Postgress]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Сохранение данных системы</font></font></div></div></div></div></foreignObject><text x="1490" y="1596" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">БД[Container: Postgress]...</text></switch></g></g><g><path d="M 1370 88 C 1370 83.58 1373.58 80 1378 80 L 1602 80 C 1606.42 80 1610 83.58 1610 88 L 1610 232 C 1610 236.42 1606.42 240 1602 240 L 1378 240 C 1373.58 240 1370 236.42 1370 232 Z" fill="#118acd" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(17, 138, 205), rgb(49, 154, 211)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/><path d="M 1375 88 C 1375 86.34 1376.34 85 1378 85 L 1551 85 C 1552.66 85 1554 86.34 1554 88 L 1554 94 C 1554 95.66 1552.66 97 1551 97 L 1378 97 C 1376.34 97 1375 95.66 1375 94 Z M 1559 88 C 1559 86.34 1560.34 85 1562 85 L 1568 85 C 1569.66 85 1571 86.34 1571 88 L 1571 94 C 1571 95.66 1569.66 97 1568 97 L 1562 97 C 1560.34 97 1559 95.66 1559 94 Z M 1576 88 C 1576 86.34 1577.34 85 1579 85 L 1585 85 C 1586.66 85 1588 86.34 1588 88 L 1588 94 C 1588 95.66 1586.66 97 1585 97 L 1579 97 C 1577.34 97 1576 95.66 1576 94 Z M 1593 88 C 1593 86.34 1594.34 85 1596 85 L 1602 85 C 1603.66 85 1605 86.34 1605 88 L 1605 94 C 1605 95.66 1603.66 97 1602 97 L 1596 97 C 1594.34 97 1593 95.66 1593 94 Z M 1375 110 C 1375 105.58 1378.58 102 1383 102 L 1597 102 C 1601.42 102 1605 105.58 1605 110 L 1605 227 C 1605 231.42 1601.42 235 1597 235 L 1383 235 C 1378.58 235 1375 231.42 1375 227 Z" fill="#23a2d9" stroke="none" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 160px; margin-left: 1371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Web admin</b></font><div>[Container: Typescript, React]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Админка для управления системой</font></font></div></div></div></div></foreignObject><text x="1490" y="164" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Web admin...</text></switch></g></g><g><rect x="1330" y="760" width="880" height="600" rx="10" ry="10" fill="none" stroke="#666666" stroke-dasharray="8 4" pointer-events="none" style="stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 862px; height: 1px; padding-top: 1349px; margin-left: 1340px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #333333; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b><div style="text-align: left">Service Layer</div></b></font><div style="text-align: left">[Layer]</div></div></div></div></foreignObject><text x="1340" y="1349" fill="#333333" font-family=""Helvetica"" font-size="11px">Service Layer...</text></switch></g></g><g><path d="M 1650 88 C 1650 83.58 1653.58 80 1658 80 L 1882 80 C 1886.42 80 1890 83.58 1890 88 L 1890 232 C 1890 236.42 1886.42 240 1882 240 L 1658 240 C 1653.58 240 1650 236.42 1650 232 Z" fill="#118acd" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(17, 138, 205), rgb(49, 154, 211)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/><path d="M 1655 88 C 1655 86.34 1656.34 85 1658 85 L 1831 85 C 1832.66 85 1834 86.34 1834 88 L 1834 94 C 1834 95.66 1832.66 97 1831 97 L 1658 97 C 1656.34 97 1655 95.66 1655 94 Z M 1839 88 C 1839 86.34 1840.34 85 1842 85 L 1848 85 C 1849.66 85 1851 86.34 1851 88 L 1851 94 C 1851 95.66 1849.66 97 1848 97 L 1842 97 C 1840.34 97 1839 95.66 1839 94 Z M 1856 88 C 1856 86.34 1857.34 85 1859 85 L 1865 85 C 1866.66 85 1868 86.34 1868 88 L 1868 94 C 1868 95.66 1866.66 97 1865 97 L 1859 97 C 1857.34 97 1856 95.66 1856 94 Z M 1873 88 C 1873 86.34 1874.34 85 1876 85 L 1882 85 C 1883.66 85 1885 86.34 1885 88 L 1885 94 C 1885 95.66 1883.66 97 1882 97 L 1876 97 C 1874.34 97 1873 95.66 1873 94 Z M 1655 110 C 1655 105.58 1658.58 102 1663 102 L 1877 102 C 1881.42 102 1885 105.58 1885 110 L 1885 227 C 1885 231.42 1881.42 235 1877 235 L 1663 235 C 1658.58 235 1655 231.42 1655 227 Z" fill="#23a2d9" stroke="none" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 160px; margin-left: 1651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Mobile Apps</b></font><div>[Container: ?]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Отдельные приложения для работников</font></font></div></div></div></div></foreignObject><text x="1770" y="164" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Mobile Apps...</text></switch></g></g><g><path d="M 1930 88 C 1930 83.58 1933.58 80 1938 80 L 2162 80 C 2166.42 80 2170 83.58 2170 88 L 2170 232 C 2170 236.42 2166.42 240 2162 240 L 1938 240 C 1933.58 240 1930 236.42 1930 232 Z" fill="#118acd" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(17, 138, 205), rgb(49, 154, 211)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/><path d="M 1935 88 C 1935 86.34 1936.34 85 1938 85 L 2111 85 C 2112.66 85 2114 86.34 2114 88 L 2114 94 C 2114 95.66 2112.66 97 2111 97 L 1938 97 C 1936.34 97 1935 95.66 1935 94 Z M 2119 88 C 2119 86.34 2120.34 85 2122 85 L 2128 85 C 2129.66 85 2131 86.34 2131 88 L 2131 94 C 2131 95.66 2129.66 97 2128 97 L 2122 97 C 2120.34 97 2119 95.66 2119 94 Z M 2136 88 C 2136 86.34 2137.34 85 2139 85 L 2145 85 C 2146.66 85 2148 86.34 2148 88 L 2148 94 C 2148 95.66 2146.66 97 2145 97 L 2139 97 C 2137.34 97 2136 95.66 2136 94 Z M 2153 88 C 2153 86.34 2154.34 85 2156 85 L 2162 85 C 2163.66 85 2165 86.34 2165 88 L 2165 94 C 2165 95.66 2163.66 97 2162 97 L 2156 97 C 2154.34 97 2153 95.66 2153 94 Z M 1935 110 C 1935 105.58 1938.58 102 1943 102 L 2157 102 C 2161.42 102 2165 105.58 2165 110 L 2165 227 C 2165 231.42 2161.42 235 2157 235 L 1943 235 C 1938.58 235 1935 231.42 1935 227 Z" fill="#23a2d9" stroke="none" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 160px; margin-left: 1931px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Telegram Bot</b></font><div>[Container: ?]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Бот для управления системой</font></font></div></div></div></div></foreignObject><text x="2050" y="164" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Telegram Bot...</text></switch></g></g><g><rect x="1330" y="0" width="880" height="320" rx="10" ry="10" fill="none" stroke="#666666" stroke-dasharray="8 4" pointer-events="none" style="stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 862px; height: 1px; padding-top: 309px; margin-left: 1340px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #333333; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b><div style="text-align: left">Client Layer</div></b></font><div style="text-align: left">[Layer]</div></div></div></div></foreignObject><text x="1340" y="309" fill="#333333" font-family=""Helvetica"" font-size="11px">Client Layer...</text></switch></g></g><g><rect x="1330" y="400" width="880" height="280" rx="10" ry="10" fill="none" stroke="#666666" stroke-dasharray="8 4" pointer-events="none" style="stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 862px; height: 1px; padding-top: 669px; margin-left: 1340px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #333333; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b><div style="text-align: left">API Gateway Layer</div></b></font><div style="text-align: left">[Layer]</div></div></div></div></foreignObject><text x="1340" y="669" fill="#333333" font-family=""Helvetica"" font-size="11px">API Gateway Layer...</text></switch></g></g><g><rect x="1370" y="480" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 540px; margin-left: 1371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>REST API</b></font><div>[Service: ?]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));"></font></font></div></div></div></div></foreignObject><text x="1490" y="543" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">REST API...</text></switch></g></g><g><rect x="1650" y="480" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 540px; margin-left: 1651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>gRPC</b></font><div>[Service: ?]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));"></font></font></div></div></div></div></foreignObject><text x="1770" y="543" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">gRPC...</text></switch></g></g><g><rect x="1930" y="480" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 540px; margin-left: 1931px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>WebSocket</b></font><div>[Service: ?]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));"></font></font></div></div></div></div></foreignObject><text x="2050" y="543" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">WebSocket...</text></switch></g></g><g><rect x="1930" y="840" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 900px; margin-left: 1931px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>users-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Управление пользователями системы</font></font></div></div></div></div></foreignObject><text x="2050" y="903" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">users-service...</text></switch></g></g><g><rect x="1370" y="1000" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1060px; margin-left: 1371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>notification-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Управление уведомлениями системы</font></font></div></div></div></div></foreignObject><text x="1490" y="1063" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">notification-service...</text></switch></g></g><g><rect x="1650" y="1000" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1060px; margin-left: 1651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>file-storage-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Управление файлами системы</font></font></div></div></div></div></foreignObject><text x="1770" y="1063" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">file-storage-service...</text></switch></g></g><g><rect x="1930" y="1000" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1060px; margin-left: 1931px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>audit-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Аудит действий пользователя</font></font></div></div></div></div></foreignObject><text x="2050" y="1063" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">audit-service...</text></switch></g></g><g><rect x="1370" y="1160" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1220px; margin-left: 1371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>scheduler-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Создание задач по расписанию</font></font></div></div></div></div></foreignObject><text x="1490" y="1223" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">scheduler-service...</text></switch></g></g><g><rect x="1650" y="1160" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1220px; margin-left: 1651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>permissions-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Управление правами доступа пользователей</font></font></div></div></div></div></foreignObject><text x="1770" y="1223" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">permissions-service...</text></switch></g></g><g><rect x="1930" y="1160" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1220px; margin-left: 1931px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>events-service</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Управление мероприятиями</font></font></div></div></div></div></foreignObject><text x="2050" y="1223" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">events-service...</text></switch></g></g><g><rect x="0" y="840" width="880" height="440" rx="10" ry="10" fill="none" stroke="#666666" stroke-dasharray="8 4" pointer-events="none" style="stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 862px; height: 1px; padding-top: 1269px; margin-left: 10px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #333333; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b><div style="text-align: left">Adapter Layer</div></b></font><div style="text-align: left">[Layer]</div></div></div></div></foreignObject><text x="10" y="1269" fill="#333333" font-family=""Helvetica"" font-size="11px">Adapter Layer...</text></switch></g></g><g><rect x="320" y="920" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 980px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>ERP Adapter</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Адаптер передачи сообщений в систему</font></font></div></div></div></div></foreignObject><text x="440" y="983" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">ERP Adapter...</text></switch></g></g><g><rect x="600" y="920" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 980px; margin-left: 601px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Housekeeping Adapter</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Адаптер передачи сообщений в систему</font></font></div></div></div></div></foreignObject><text x="720" y="983" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">Housekeeping Adapter...</text></switch></g></g><g><rect x="40" y="1080" width="240" height="120" rx="12" ry="12" fill="#23a2d9" stroke="#0e7dad" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1140px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Telegram Bot Adapter</b></font><div>[Service: Python]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Адаптер передачи сообщений в систему</font></font></div></div></div></div></foreignObject><text x="160" y="1143" fill="#ffffff" font-family=""Helvetica"" font-size="11px" text-anchor="middle">Telegram Bot Adapter...</text></switch></g></g><g><rect x="1330" y="1440" width="880" height="280" rx="10" ry="10" fill="none" stroke="#666666" stroke-dasharray="8 4" pointer-events="none" style="stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 862px; height: 1px; padding-top: 1709px; margin-left: 1340px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #333333; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b><div style="text-align: left">Data Layer</div></b></font><div style="text-align: left">[Layer]</div></div></div></div></foreignObject><text x="1340" y="1709" fill="#333333" font-family=""Helvetica"" font-size="11px">Data Layer...</text></switch></g></g><g><path d="M 1650 1535 C 1650 1526.72 1703.73 1520 1770 1520 C 1801.83 1520 1832.35 1521.58 1854.85 1524.39 C 1877.36 1527.21 1890 1531.02 1890 1535 L 1890 1625 C 1890 1633.28 1836.27 1640 1770 1640 C 1703.73 1640 1650 1633.28 1650 1625 Z" fill="#23a2d9" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/><path d="M 1890 1535 C 1890 1543.28 1836.27 1550 1770 1550 C 1703.73 1550 1650 1543.28 1650 1535" fill="none" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1593px; margin-left: 1651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>Cache</b></font><div>[Container: Redis]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Сохранение данных системы</font></font></div></div></div></div></foreignObject><text x="1770" y="1596" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Cache...</text></switch></g></g><g><path d="M 1930 1535 C 1930 1526.72 1983.73 1520 2050 1520 C 2081.83 1520 2112.35 1521.58 2134.85 1524.39 C 2157.36 1527.21 2170 1531.02 2170 1535 L 2170 1625 C 2170 1633.28 2116.27 1640 2050 1640 C 1983.73 1640 1930 1633.28 1930 1625 Z" fill="#23a2d9" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(35, 162, 217), rgb(29, 138, 185)); stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/><path d="M 2170 1535 C 2170 1543.28 2116.27 1550 2050 1550 C 1983.73 1550 1930 1543.28 1930 1535" fill="none" stroke="#0e7dad" stroke-miterlimit="10" pointer-events="all" style="stroke: light-dark(rgb(14, 125, 173), rgb(69, 164, 206));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 1593px; margin-left: 1931px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #ffffff; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#ffffff, #121212); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b>File Storage</b></font><div>[Container: S3]</div><br /><div><font style="font-size: 11px"><font color="#E6E6E6" style="color: light-dark(rgb(230, 230, 230), rgb(39, 39, 39));">Сохранение данных системы</font></font></div></div></div></div></foreignObject><text x="2050" y="1596" fill="#ffffff" font-family=""Helvetica"" font-size="12px" text-anchor="middle">File Storage...</text></switch></g></g><g><rect x="0" y="520" width="880" height="240" rx="10" ry="10" fill="none" stroke="#666666" stroke-dasharray="8 4" pointer-events="none" style="stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 862px; height: 1px; padding-top: 749px; margin-left: 10px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #333333; "><div style="display: inline-block; font-size: 11px; font-family: "Helvetica"; color: light-dark(#333333, #c1c1c1); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px"><b><div style="text-align: left">External System</div></b></font><div style="text-align: left">[Layer]</div></div></div></div></foreignObject><text x="10" y="749" fill="#333333" font-family=""Helvetica"" font-size="11px">External System...</text></switch></g></g><g><path d="M 440 920 L 440 686.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 440 681.12 L 443.5 688.12 L 440 686.37 L 436.5 688.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><path d="M 160 920 L 160 686.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 160 681.12 L 163.5 688.12 L 160 686.37 L 156.5 688.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><path d="M 720 920 L 720 686.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 720 681.12 L 723.5 688.12 L 720 686.37 L 716.5 688.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><path d="M 1769.93 265.5 L 1769.72 439.38" fill="none" stroke="#828282" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/><path d="M 1769.57 454.38 L 1764.72 439.33 L 1774.72 439.43 Z" fill="#828282" stroke="#828282" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(130, 130, 130), rgb(125, 125, 125)); stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 360px; margin-left: 1770px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #404040; background-color: #ffffff; "><div style="display: inline-block; font-size: 10px; font-family: "Helvetica"; color: light-dark(#404040, #b6b6b6); line-height: 1.2; pointer-events: all; background-color: light-dark(#ffffff, var(--ge-dark-color, #121212)); white-space: nowrap; "><div style="text-align: left"><div style="text-align: center"><b>e.g. Makes API calls</b></div><div style="text-align: center">[e.g. JSON/HTTP]</div></div></div></div></div></foreignObject><text x="1770" y="363" fill="#404040" font-family=""Helvetica"" font-size="10px" text-anchor="middle">e.g. Makes API calls...</text></switch></g></g><g><path d="M 1769.62 620 L 1770 803.88" fill="none" stroke="#828282" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/><path d="M 1770 818.88 L 1765 803.88 L 1775 803.88 Z" fill="#828282" stroke="#828282" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(130, 130, 130), rgb(125, 125, 125)); stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/></g><g><path d="M 1769.09 1300 L 1769.47 1483.88" fill="none" stroke="#828282" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/><path d="M 1769.47 1498.88 L 1764.47 1483.88 L 1774.47 1483.88 Z" fill="#828282" stroke="#828282" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(130, 130, 130), rgb(125, 125, 125)); stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/></g><g><path d="M 800 1060 L 923.88 1060" fill="none" stroke="#828282" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/><path d="M 938.88 1060 L 923.88 1065 L 923.88 1055 Z" fill="#828282" stroke="#828282" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(130, 130, 130), rgb(125, 125, 125)); stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/></g><g><path d="M 940 1080 L 816.12 1080" fill="none" stroke="#828282" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/><path d="M 801.12 1080 L 816.12 1075 L 816.12 1085 Z" fill="#828282" stroke="#828282" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(130, 130, 130), rgb(125, 125, 125)); stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/></g><g><path d="M 1210 1049.23 L 1333.88 1049.23" fill="none" stroke="#828282" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/><path d="M 1348.88 1049.23 L 1333.88 1054.23 L 1333.88 1044.23 Z" fill="#828282" stroke="#828282" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(130, 130, 130), rgb(125, 125, 125)); stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/></g><g><path d="M 1350 1069.23 L 1226.12 1069.23" fill="none" stroke="#828282" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/><path d="M 1211.12 1069.23 L 1226.12 1064.23 L 1226.12 1074.23 Z" fill="#828282" stroke="#828282" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(130, 130, 130), rgb(125, 125, 125)); stroke: light-dark(rgb(130, 130, 130), rgb(125, 125, 125));"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> |