1"use strict";(self.webpackChunkksi_docs=self.webpackChunkksi_docs||[]).push([[9743],{5494:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/data_patching_execution_list_en-5f89526bfb37ae7edb73f78c3d29bece.png"},6923:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"guides/technical_guides/data-integrity","title":"Data Integrity \u2013 Data Patching","description":"Data Integrity \u2013 Data Patching","source":"@site/docs/guides/technical_guides/data-integrity.md","sourceDirName":"guides/technical_guides","slug":"/guides/technical_guides/data-integrity","permalink":"/docs/guides/technical_guides/data-integrity","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"title":"Data Integrity \u2013 Data Patching","sidebar_position":6,"sidebar_label":"Data Integrity"},"sidebar":"tutorialSidebar","previous":{"title":"Sales Integration","permalink":"/docs/guides/technical_guides/sales-integration-integration-guide"},"next":{"title":"Period Comparisons","permalink":"/docs/guides/technical_guides/period-comparison-logic"}}');var a=t(4848),s=t(8453);const r={title:"Data Integrity \u2013 Data Patching",sidebar_position:6,sidebar_label:"Data Integrity"},l=void 0,c={},d=[{value:"Data Integrity \u2013 Data Patching",id:"data-integrity--data-patching",level:2},{value:"Objective",id:"objective",level:3},{value:"Context and General Principles",id:"context-and-general-principles",level:2},{value:"Prevention and Automatic Recovery",id:"prevention-and-automatic-recovery",level:3},{value:"When Data Patching Is Required",id:"when-data-patching-is-required",level:3},{value:"Data Patching Characteristics at KSI VISION",id:"data-patching-characteristics-at-ksi-vision",level:2},{value:"Data Patching Methodology",id:"data-patching-methodology",level:2},{value:"Statistical Principle",id:"statistical-principle",level:3},{value:"Missing Hourly Data",id:"missing-hourly-data",level:3},{value:"Procedure",id:"procedure",level:4},{value:"Example",id:"example",level:4},{value:"Visual Example of Statistical Patching",id:"visual-example-of-statistical-patching",level:2},{value:"Data Patching Configuration",id:"data-patching-configuration",level:2},{value:"Patching Execution List",id:"patching-execution-list",level:3},{value:"Creating a Data Patching Execution",id:"creating-a-data-patching-execution",level:3},{value:"Important Considerations",id:"important-considerations",level:2},{value:"Best Practices",id:"best-practices",level:2},{value:"Support and Approvals",id:"support-and-approvals",level:2}];function o(e){const i={a:"a",blockquote:"blockquote",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.h2,{id:"data-integrity--data-patching",children:"Data Integrity \u2013 Data Patching"}),"\n",(0,a.jsx)(i.h3,{id:"objective",children:"Objective"}),"\n",(0,a.jsxs)(i.p,{children:["This document describes the operation of the ",(0,a.jsx)(i.strong,{children:"KSI VISION Data Patching system"}),", designed to ensure the continuity and consistency of indicators in the event of exceptional situations involving partial or total data loss."]}),"\n",(0,a.jsxs)(i.p,{children:["The main objective of data patching is to ",(0,a.jsx)(i.strong,{children:"reconstruct missing or invalid data"})," (at an hourly level) when there is no way to recover the original data, ensuring that macro analyses and historical trends are not affected."]}),"\n",(0,a.jsx)(i.h2,{id:"context-and-general-principles",children:"Context and General Principles"}),"\n",(0,a.jsx)(i.p,{children:"KSI VISION implements multiple preventive and automatic recovery mechanisms to minimize data loss."}),"\n",(0,a.jsx)(i.h3,{id:"prevention-and-automatic-recovery",children:"Prevention and Automatic Recovery"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:["In the event of ",(0,a.jsx)(i.strong,{children:"Internet connectivity issues"}),", the local server stores up to ",(0,a.jsx)(i.strong,{children:"16 hours of data"})," by default, which is automatically synchronized once the connection is restored."]}),"\n",(0,a.jsxs)(i.li,{children:["The ",(0,a.jsx)(i.strong,{children:"integrity of the entire system"})," (cameras, servers, and connectivity) is continuously monitored by the ",(0,a.jsx)(i.strong,{children:"KSI VISION monitoring team"}),", which takes proactive corrective actions when incidents are detected."]}),"\n",(0,a.jsx)(i.li,{children:"Many incidents are resolved without customer intervention or impact on final data."}),"\n"]}),"\n",(0,a.jsx)(i.h3,{id:"when-data-patching-is-required",children:"When Data Patching Is Required"}),"\n",(0,a.jsxs)(i.p,{children:["Data patching is used ",(0,a.jsx)(i.strong,{children:"only"}
1)," when it is not possible to recover the original data, for example:"]}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Persistent configuration errors"}),"\n",(0,a.jsx)(i.li,{children:"Prolonged power outages affecting servers or cameras"}),"\n",(0,a.jsx)(i.li,{children:"Critical failures in camera\u2013server communication"}),"\n",(0,a.jsx)(i.li,{children:"Irreversible loss of historical data (partial or total)"}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"data-patching-characteristics-at-ksi-vision",children:"Data Patching Characteristics at KSI VISION"}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Characteristic"}),(0,a.jsx)(i.th,{children:"Description"})]})}),(0,a.jsxs)(i.tbody,{children:[(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Manual application"})}),(0,a.jsx)(i.td,{children:"Patching operations are executed only upon explicit request and approval by the client or an authorized user."})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Not automatic"})}),(0,a.jsxs)(i.td,{children:["By default, ",(0,a.jsx)(i.strong,{children:"no patching is applied"})," in the platform."]})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Full traceability"})}),(0,a.jsx)(i.td,{children:"All patched data is clearly identified and marked as such."})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Reversibility"})}),(0,a.jsx)(i.td,{children:"Patched data can be differentiated, audited, and removed at any time."})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Controlled scope"})}),(0,a.jsx)(i.td,{children:"Patching is applied per store, node, and specific time range."})]})]})]}),"\n",(0,a.jsx)(i.h2,{id:"data-patching-methodology",children:"Data Patching Methodology"}),"\n",(0,a.jsx)(i.h3,{id:"statistical-principle",children:"Statistical Principle"}),"\n",(0,a.jsxs)(i.p,{children:["The KSI VISION data patching system uses a ",(0,a.jsx)(i.strong,{children:"statistical method based on historical hourly averages"}),", allowing missing values to be reconstructed without altering macro trends."]}),"\n",(0,a.jsx)(i.p,{children:"The user can configure:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:(0,a.jsx)(i.strong,{children:"Number of historical weeks to average"})}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Backward time offset"})," from which historical data will be taken"]}),"\n"]}),"\n",(0,a.jsxs)(i.p,{children:["This allows consideration of both ",(0,a.jsx)(i.strong,{children:"recent patterns"})," and ",(0,a.jsx)(i.strong,{children:"historical seasonality"})," (for example, the same period in the previous year)."]}),"\n",(0,a.jsx)(i.h3,{id:"missing-hourly-data",children:"Missing Hourly Data"}),"\n",(0,a.jsxs)(i.p,{children:["Data is considered missing when ",(0,a.jsx)(i.strong,{children:"one or more hours"})," within a selected time range do not contain valid information."]}),"\n",(0,a.jsx)(i.h4,{id:"procedure",children:"Procedure"}),"\n",(0,a.jsxs)(i.ol,{children:["\n",(0,a.jsx)(i.li,{children:"Missing hours within the selected range are identified."}),"\n",(0,a.jsxs)(i.li,{children:["For each missing hour, historical data from the ",(0,a.jsx)(i.strong,{children:"same hour and same day of the week"})," is selected."]}),"\n",(0,a.jsx)(i.li,{children:"Data corresponding to the configured number of weeks is collected."}),"\n",(0,a.jsx)(i.li,{children:"The hourly average is calculated."}),"\n",(0,a.jsx)(i.li,{children:"The average value is assigned as the patched data for that hour."}),"\n",(0,a.jsx)(i.li,{children:"The hourly behavior is replicated while preserving the original temporal shape."}),"\n"]}),"\n",(0,a.jsx)(i.h4,{id:"example",children:"Example"}),"\n",(0,a.jsxs)(i.p,{children:["If data is missing between ",(0,a.jsx)(i.strong,{children:"14:00 and 17:00 on Wednesday, July 19"}),", and the configuration specifies ",(0,a.jsx)(i.strong,{children:"3 weeks"}),", the system:"]}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Takes data from 14:00\u201317:00 from the last 3 available Wednesdays"}),"\n",(0,a.jsx)(i.li,{children:"Calculates the average for each hour"}),"\n",(0,a.jsx)(i.li,{children:"Applies those values as patched hourly data"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"If only 2 valid weeks are available, the average is calculated using those 2 weeks."}),"\n",(0,a.jsx)(i.h2,{id:"visual-example-of-statistical-patching",children:"Visual Example of Statistical Patching"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Statistical data patching example",src:t(8293).A+"",width:"1154",height:"376"})}),"\n",(0,a.jsx)(i.h2,{id:"data-patching-configuration",children:"Data Patching Configuration"}),"\n",(0,a.jsx)(i.h3,{id:"patching-execution-list",children:"Patching Execution List"}),"\n",(0,a.jsx)(i.p,{children:"The platform displays a complete history of patching executions, including:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Execution date"}),"\n",(0,a.jsx)(i.li,{children:"Patched date and hour range"}),"\n",(0,a.jsx)(i.li,{children:"Patching type"}),"\n",(0,a.jsx)(i.li,{children:"Affected stores or nodes"}),"\n",(0,a.jsx)(i.li,{children:"Execution status"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"This enables full auditability, control, and traceability of the process."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Data patching execution list",src:t(5494).A+"",width:"1904",height:"455"})}),"\n",(0,a.jsx)(i.h3,{id:"creating-a-data-patching-execution",children:"Creating a Data Patching Execution"}),"\n",(0,a.jsx)(i.p,{children:"When creating a new execution, the user must define:"}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Field"}),(0,a.jsx)(i.th,{children:"Description"})]})}),(0,a.jsxs)(i.tbody,{children:[(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Fill with data"})}),(0,a.jsx)(i.td,{children:"Activates the patching process for the selected range"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Start date"})}
1),(0,a.jsx)(i.td,{children:"Beginning of the period to be patched"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"End date"})}),(0,a.jsx)(i.td,{children:"End of the period to be patched"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Patching type"})}),(0,a.jsx)(i.td,{children:"Statistical method to be used"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"Number of weeks"})}),(0,a.jsx)(i.td,{children:"Number of historical weeks used for averaging"})]}),(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:(0,a.jsx)(i.strong,{children:"First week backward"})}),(0,a.jsx)(i.td,{children:"Time offset used to consider older historical data"})]})]})]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Data patching configurator",src:t(7688).A+"",width:"1846",height:"838"})}),"\n",(0,a.jsx)(i.h2,{id:"important-considerations",children:"Important Considerations"}),"\n",(0,a.jsxs)(i.blockquote,{children:["\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.strong,{children:"Note"})}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Data patching applies to both partial and total data loss."}),"\n",(0,a.jsxs)(i.li,{children:["At least ",(0,a.jsx)(i.strong,{children:"one comparable valid historical period"})," must exist to perform averaging."]}),"\n",(0,a.jsx)(i.li,{children:"Patched data should preferably be used for aggregated and trend-level analysis."}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"best-practices",children:"Best Practices"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Use data patching as sparingly as possible."}),"\n",(0,a.jsx)(i.li,{children:"Prioritize recent weeks unless seasonality is required."}),"\n",(0,a.jsx)(i.li,{children:"Validate results before using them in executive reporting."}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"support-and-approvals",children:"Support and Approvals"}),"\n",(0,a.jsx)(i.p,{children:"Every data patching execution must include:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Explicit request from the client or an authorized user"}),"\n",(0,a.jsx)(i.li,{children:"Internal validation by the KSI VISION team"}),"\n",(0,a.jsx)(i.li,{children:"Prior approval before application"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"For questions or support:"}),"\n",(0,a.jsxs)(i.p,{children:["\ud83d\udce7 ",(0,a.jsx)(i.strong,{children:(0,a.jsx)(i.a,{href:"mailto:[email protected]",children:"[email protected]"})})]})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(o,{...e})}):o(e)}},7688:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/data_patching_configurator_en-bf4fd488bc7e4d6f34972368c8e0ebe2.png"},8293:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/data_patching_chart_en-1e757e4875e1d195dfb72850a4a629eb.png"},8453:(e,i,t)=>{t.d(i,{R:()=>r,x:()=>l});var n=t(6540);const a={},s=n.createContext(a);function r(e){const i=n.useContext(s);return n.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.