(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{368:function(e,t,r){"use strict";r.r(t);r(61);var o=r(153),n=r(11),c=(r(21),r(150),r(147)),m=r.n(c),l=r(149),d=r(155),f=r.n(d),h=r(159),v={head:function(){return{title:"Specification for process messages"}},created:function(){var e=this,t=new Date,r="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v3",device:{id:r},process:{ts:t.toISOString()},measurements:[{ts:new Date(t.valueOf()+100).toISOString(),series:{time:[0,23,24],force:[26,23,null],pressure:[100952.4,100946.32,100944.2432]}}]},complexMessage:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v3",device:{id:r,mode:"auto",state:"OK",additionalData:{swVersion:"2.0.3.13",swBuildId:"41535"}},part:{code:"HUH289",id:"420003844",type:"SINGLE",typeId:"F00VH07328",result:"NOK",additionalData:{toolId:"32324-432143"}},process:{externalId:"b4927dad-58d4-4580-b460-79cefd56775b",program:{id:"1",lastChangedDate:"2002-05-30T09:30:10.123+02:00",name:"Programm 1"},result:"NOK",ts:t.toISOString(),additionalData:{escalation:"shift leader",maxDuration:"30min",shutoffPhase:"phase 2"}},measurements:[{code:"0000 EE01",context:{pressure:{limits:{upperError:103e3,lowerError:99e3,upperWarn:102e3,lowerWarn:1e5,target:100950},namespace:"https://mycompany.com/productvariants/5986",unit:"Pa"},force:{limits:{upperError:[29,27,26],lowerError:[23,21,20],upperWarn:[28.5,26.5,25.5],lowerWarn:[23.5,21.5,null],target:[26,24,23]}}},name:"heating up",phase:"phase 1",result:"OK",series:{force:[26,23,24],pressure:[100952.4,100946.32,100944.2432],temperature:[45.4243,null,44.2432]},specialValues:[{name:"turning point",value:{pressure:101530,force:50}},{name:"shutoffForce",time:24,value:{force:24,upperError:26,lowerError:22,upperWarn:25,lowerWarn:23,target:24}},{name:"shutoffPressure",time:24,value:{pressure:100950,upperError:103e3,lowerError:99e3}}],ts:new Date(t.valueOf()+100).toISOString()},{name:"processing",phase:"phase 2",result:"OK",series:{time:[0,23,24],temperature:[49.2,48.8,50]},ts:new Date(t.valueOf()+430).toISOString()}]}},this.$static.examples=Object.entries(Object(n.a)({},["content-spec","device","device.id","device.mode","device.additionalData","measurements","part","part.code","part.id","part.result","part.type","part.typeId","process","process.externalId","process.program","process.program.id","process.program.lastChangedDate","process.program.name","process.result","process.ts"].reduce(function(t,r){return t[e.schemafy(r)]=r,t},{"properties.measurements.allOf[0].items.properties.context":"measurements[0].context",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.unit':"measurements[0].context.pressure.unit",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.namespace':"measurements[0].context.pressure.namespace",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[0]':"measurements[0].context.pressure.limits",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[1]':"measurements[0].context.force.limits",'properties.measurements.allOf[0].items.properties.series.patternProperties["^[^$]+"]':"measurements[0].series.force"}),["code","result","series","series.time","ts"].reduce(function(t,r){return t["properties.measurements.allOf[0].items.".concat(e.schemafy(r))]="measurements[0].".concat(r),t},{}),["name","phase","specialValues","specialValues[1].time","specialValues[1].name","specialValues[1].value"].reduce(function(t,r){return t["properties.measurements.allOf[1].items.".concat(e.schemafy(r))]="measurements[0].".concat(r),t},{}),["lowerError","lowerWarn","target","upperError","upperWarn"].reduce(function(e,t){return e['properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[0].properties.'.concat(t)]="measurements[0].context.pressure.limits.".concat(t),e['properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[1].properties.'.concat(t)]="measurements[0].context.force.limits.".concat(t),e},{}))).reduce(function(t,r){var n=Object(o.a)(r,2),c=n[0],path=n[1],m=f()(e.$static.message,path)||f()(e.$static.complexMessage,path);return m?t[c]=[m]:console.error('no example provided in process-message for:\n"'.concat(c,'": "').concat(path,'"')),t},{})},filters:{stringify:function(e){return JSON.stringify(e," ",2)}},methods:{schemafy:function(e){return e.replace(/(^|\.)/g,"$1properties.").replace(/\[[^]]*]/g,".items")}},components:{card:l.a,prism:m.a,schemaDetail:h.a}},O=r(2),component=Object(O.a)(v,function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"process-message content"},[e._m(0),e._v(" "),r("p",[e._v("The process message is the format to exchange data out of discrete processes. It also allows to transport process information, part information and measurement data for each phase of the process.")]),e._v(" "),e._m(1),e._v(" "),r("schemaDetail",{attrs:{type:"v3/process",examples:e.$static.examples}},[r("card",{attrs:{collapsed:!0}},[r("template",{slot:"header"},[e._v("\n        Minimal message example\n      ")]),e._v(" "),r("prism",{attrs:{language:"json"}},[e._v(e._s(e._f("stringify")(e.$static.message)))])],2),e._v(" "),r("card",{attrs:{collapsed:!0}},[r("template",{slot:"header"},[e._v("\n        Process message example\n      ")]),e._v(" "),r("prism",{attrs:{language:"json"}},[e._v(e._s(e._f("stringify")(e.$static.complexMessage)))])],2)],1)],1)},[function(){var e=this.$createElement,t=this._self._c||e;return t("h1",[t("a",{attrs:{id:"Process-Payload",title:"Process Message payload"}}),this._v("\n    Process Payload\n  ")])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"diagram"},[t("img",{attrs:{src:"images/specification/v3/processPayload.svg",alt:"Class diagram of the Process message payload",title:"Class diagram of the Process Message payload"}})])}],!1,null,null,null);t.default=component.exports}}]);