Last modified by Nico Lemaire on 2025/05/06 15:49
From version 1.1
edited by Roelof Zwaan
on 2021/11/23 10:02
on 2021/11/23 10:02
Change comment:
There is no comment for this version
To version 26.5
edited by Nico Lemaire
on 2025/05/06 15:49
on 2025/05/06 15:49
Change comment:
There is no comment for this version
Summary
-
Page properties (4 modified, 0 added, 0 removed)
-
Attachments (0 modified, 6 added, 0 removed)
Details
- Page properties
-
- Title
-
... ... @@ -1,1 +1,1 @@ 1 -Setting up Labcommunication by REST services with TerraIndex1 +Setting up API communication by REST services with TerraIndex for laboratories - Parent
-
... ... @@ -1,1 +1,1 @@ 1 -Implementati edcoumentatie.WebHome1 +Implementation documentation.WebHome - Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. RoelofZwaan1 +XWiki.NicoLemaire - Content
-
... ... @@ -1,47 +1,89 @@ 1 1 {{toc/}} 2 2 3 3 4 -= FirewallIP-AdresssenvanTerraIndex=4 += Digital Lab Exchange process = 5 5 6 -Onze IP-adressen: 6 +The flow diagram gives a small overview of what the data flow of a lab assignment is. 7 +Every block shows a step of the lab assignment process. From top to bottom these steps are: 7 7 8 -ingaand [[Web.terraindex.com>>url:http://Web.terraindex.com]] 9 +1. Showing the laboratory and all the analyses that can be requested as an option to the user. 10 +1. The user creating a lab assignment and sending it to the lab trough TerraIndex. 11 +1. The lab delivering the analysis results back to the TerraIndex. 12 + 13 +[[attach:Lab exchange.svg||rel="noopener noreferrer" target="_blank"]] [[attach:Lab exchange.txt||rel="noopener noreferrer" target="_blank"]] 14 + 15 +[[image:1712326465681-980.png||height="315" width="630"]] 16 + 17 + 18 +[[image:1712326492306-381.png||height="781" width="635"]] 19 + 20 +~==> TODO; add option to confirm order based on the Order price PDF 21 + 22 + 23 +[[image:1712326520488-924.png||height="312" width="632"]] 24 + 25 +~==> TODO; add option download labcertificate 26 + 27 +(% element-id="1884" %) 28 += = 29 + 30 +(% element-id="1884" %) 31 += (% element-id="1883" %)Firewall IP-Addresses of TerraIndex(%%) = 32 + 33 +(% element-id="1882" %) 34 +Our IP-addresses: 35 + 36 +(% element-id="1881" %) 37 +__**inbound [[Web.terraindex.com>>url:http://Web.terraindex.com||element-id="1880"]]**__ 9 9 137.116.199.164 10 10 11 -ingaand [[Test.terraindex.com>>url:http://Test.terraindex.com]] 40 +(% element-id="1878" %) 41 +__**outbound [[Test.terraindex.com>>url:http://Test.terraindex.com||element-id="1877"]]**__ 12 12 104.45.9.128 13 13 14 -Productie uitgaand 44 +(% element-id="1875" %) 45 +__**Production outbound (http)**__ 15 15 40.115.34.64 16 16 17 -Test uitgaand 48 +__**Production outbound (ftp):**__ 49 + 50 +13.93.123.234 51 + 52 +(% element-id="1873" %) 53 +__**Test outbound (http, ftp)**__ 18 18 13.73.138.173 19 19 20 -CD/CI uitgaand 21 -40.114.238.16 56 +__**Test outbound (ftp: eurofins, eurofins spain):**__ 22 22 23 ---Kantoor VPN uitgaand (niet meer in gebruik, was de oude OpenVPN) 24 -10.33.66.215-- 58 +51.145.244.12 25 25 26 -Kantoor uitgaand 60 +(% element-id="1871" %) 61 +__**CD/CI outbound**__ 62 +40.114.238.16 63 + 64 +(% element-id="1869" %) 65 +__**Office outbound**__ 27 27 213.124.115.132 28 28 29 ---Oude Citrix uitgaand (citrix is ook verhuisd, dit is niet meer in gebruik) 30 -83.96.194.140-- 68 +(% element-id="1869" %) 69 +__**Deliveryservice**__ 70 +Production: 13.93.123.234 71 +Test: 51.145.244.12 31 31 73 +(% element-id="1864" %) 74 += (% element-id="1863" %)Labdelivery (menu-card) files Exchange(%%) = 32 32 33 -= Labaanlever bestanden uitwisseling = 76 +(% element-id="1862" %) 77 +== (% element-id="1861" %)Solution/Design(%%) == 34 34 35 -== Oplossing/Design == 36 36 37 - 38 -(% class="table-hover" %) 39 -|**Action**|**TerraIndex**| |**Laboratorium**|**Parameters/Message**|**Remarks**|**ResultCodes** 40 -|1|Sends a request to the function: GetCustomers().|=>| |**WebserviceUsername (string), ** 41 -**WebservicePassword (string),** 42 -**CustomerUsername (string)**| | 43 -|2| | |Receives the request and check the customers this username and searches the dateLastChanged for this Customer.| | | 44 -|3| |<=|Sends back the list of customers with the lastChangedTimestamp|ResultCode (), 80 +(% class="table-hover" element-id="1858" %) 81 +(% element-id="1856" %)|(% element-id="1855" %)(% element-id="1854" %)**Action**|(% element-id="1853" %)(% element-id="1852" %)**TerraIndex**|(% element-id="1851" %) |(% element-id="1849" %)(% element-id="1848" %)**Laboratorium**|(% element-id="1847" %)(% element-id="1846" %)**Parameters/Message**|(% element-id="1845" %)(% element-id="1844" %)**Remarks**|(% element-id="1843" %)(% element-id="1842" %)**ResultCodes** 82 +(% element-id="1841" %)|(% element-id="1840" %)1|(% element-id="1839" %)Sends a request to the function: GetCustomers().|=(% element-id="1838" %)>|(% element-id="1837" %) |(% element-id="1835" %)(% element-id="1834" %)**WebserviceUsername (string), **(%%) 83 +(% element-id="1832" %)**WebservicePassword (string),**(%%) 84 +(% element-id="1830" %)**CustomerUsername (string)**|(% element-id="1829" %) |(% element-id="1827" %) 85 +(% element-id="1825" %)|(% element-id="1824" %)2|(% element-id="1823" %) |(% element-id="1821" %) |(% element-id="1819" %)Receives the request and check the customers this username and searches the dateLastChanged for this Customer.|(% element-id="1818" %) |(% element-id="1816" %) |(% element-id="1814" %) 86 +(% element-id="1812" %)|(% element-id="1811" %)3|(% element-id="1810" %) |(% element-id="1808" %)<=|(% element-id="1807" %)Sends back the list of customers with the lastChangedTimestamp|(% element-id="1806" %)ResultCode (), 45 45 ErrorMessage (string), 46 46 List<customer> , Customer: 47 47 CustomerCode (string), ... ... @@ -48,7 +48,7 @@ 48 48 CustomerName (string), 49 49 LabID (int), 50 50 LabName (string), 51 -ChangedTimeStamp (DateTime)|We receive the dateTimestamp instead of sending it, so we always get the full list and we are also able to delete customercodes.|1 = Success, 93 +ChangedTimeStamp (DateTime)|(% element-id="1798" %)We receive the dateTimestamp instead of sending it, so we always get the full list and we are also able to delete customercodes.|(% element-id="1797" %)1 = Success, 52 52 2 = GeneralError, 53 53 3 = WrongSIKBVersion, 54 54 4 = InvalidCredentials, ... ... @@ -58,26 +58,32 @@ 58 58 8 = InvalidOrderId, 59 59 9 = OrderIdAlreadyApproved 60 60 10 = PDFNotAvailable 61 -|4|Receives the list of Customers, and will check for each customer it needs to request a new/changed labdelivery file based on the ChangedTimestamp.| | | |If a customer is not longer in this list, TerraIndex can remove this customercode from the customer database.| 62 -|5|Sends a request to the function: GetProductList() if it has changed.|=>| |**WebserviceUsername (string), ** 63 -**WebservicePassword (string),** 64 -**CustomerUsername (string),** 103 +(% element-id="1787" %)|(% element-id="1786" %)4|(% element-id="1785" %)Receives the list of Customers, and will check for each customer it needs to request a new/changed labdelivery file based on the ChangedTimestamp.|(% element-id="1784" %) |(% element-id="1782" %) |(% element-id="1780" %) |(% element-id="1778" %)If a customer is not longer in this list, TerraIndex can remove this customercode from the customer database.|(% element-id="1777" %) 104 +(% element-id="1775" %)|(% element-id="1774" %)5|(% element-id="1773" %)Sends a request to the function: GetProductList() if it has changed.|=(% element-id="1772" %)>|(% element-id="1771" %) |(% element-id="1769" %)(% element-id="1768" %)**WebserviceUsername (string), **(%%) 105 +(% element-id="1766" %)**WebservicePassword (string),**(%%) 106 +(% element-id="1764" %)**CustomerUsername (string),**(%%) 65 65 LabID (int), 66 66 CustomerCode (string), 67 67 LanguageCode (string, default 'nld' volgens ISO 639-3-codes), 68 68 SIKBVersion (string, default: '13.4.0'), 69 -UseZipStream/UseZip (bool, default: 'false')|((( 111 +UseZipStream/UseZip (bool, default: 'false')|(% element-id="1758" %)(% element-id="1757" %) 112 +((( 113 +(% element-id="1756" %) 70 70 We start with dutch, then extend with multiple languages, TerraIndex is in the lead to request multiple languages. 71 71 TerraIndex uses: 'fra', 'nld', 'eng', 'spa', 'deu', 'ita', 'por', 'dan' 72 72 73 73 118 +(% element-id="1752" %) 74 74 Besides SIKB 13.4.0, TerraIndex also supports 9.0.0/8.0.0 etc. 75 -)))| 76 -|6| | |Reveives a request to create a labdelivery file in a certain version of SIKB. It will generate the file.| | | 77 -|7| |<=|Sends back the SIKB file, as a Base64 encoded string, with or without using a zipstream.|ResultCode (), 120 + 121 +(% element-id="1752" %) 122 +~==> nle Do you want to mention these old versions? 123 +)))|(% element-id="1751" %) 124 +(% element-id="1749" %)|(% element-id="1748" %)6|(% element-id="1747" %) |(% element-id="1745" %) |(% element-id="1743" %)Reveives a request to create a labdelivery file in a certain version of SIKB. It will generate the file.|(% element-id="1742" %) |(% element-id="1740" %) |(% element-id="1738" %) 125 +(% element-id="1736" %)|(% element-id="1735" %)7|(% element-id="1734" %) |(% element-id="1732" %)<=|(% element-id="1731" %)Sends back the SIKB file, as a Base64 encoded string, with or without using a zipstream.|(% element-id="1730" %)ResultCode (), 78 78 ErrorMessage (string), 79 79 FileContent_Base64 (string), 80 -UseZipStream/UseZip (bool, default: 'false')| |1 = Success, 128 +UseZipStream/UseZip (bool, default: 'false')|(% element-id="1726" %) |(% element-id="1724" %)1 = Success, 81 81 2 = GeneralError, 82 82 3 = WrongSIKBVersion, 83 83 4 = InvalidCredentials, ... ... @@ -87,330 +87,380 @@ 87 87 8 = InvalidOrderId, 88 88 9 = OrderIdAlreadyApproved 89 89 10 = PDFNotAvailable 90 -|8|Receives the DeliveryFile and saves the file for import into customer database.| | | | | 91 -|9|Go back to step 5, for every Customer code, every language.| | | | | 92 -|10|Process the LabDeliveryFiles| | | | | 138 +(% element-id="1714" %)|(% element-id="1713" %)8|(% element-id="1712" %)Receives the DeliveryFile and saves the file for import into customer database.|(% element-id="1711" %) |(% element-id="1709" %) |(% element-id="1707" %) |(% element-id="1705" %) |(% element-id="1703" %) 139 +(% element-id="1701" %)|(% element-id="1700" %)9|(% element-id="1699" %)Go back to step 5, for every Customer code, every language.|(% element-id="1698" %) |(% element-id="1696" %) |(% element-id="1694" %) |(% element-id="1692" %) |(% element-id="1690" %) 140 +(% element-id="1688" %)|(% element-id="1687" %)10|(% element-id="1686" %)Process the LabDeliveryFiles|(% element-id="1685" %) |(% element-id="1683" %) |(% element-id="1681" %) |(% element-id="1679" %) |(% element-id="1677" %) 93 93 142 +(% element-id="1675" %) 143 +== (% element-id="1674" %)Get Customers (POST)(%%) == 94 94 95 -== Get Customers (POST) == 145 +(% element-id="1673" %) 146 +=== (% element-id="1672" %)Request example(%%) === 96 96 97 -=== Request example === 98 - 99 -|((( 148 +(% element-id="1671" %) 149 +(% element-id="1669" %)|(% element-id="1668" %)(% element-id="1667" %) 150 +((( 151 +{{code language="C#"}} 100 100 public GetCustomersCall.Response GetCustomers(string WebserviceUsername, string WebservicePassword, string CustomerUsername) 153 + { 154 + GetCustomersCall.Response set = new GetCustomersCall.Response(); 101 101 102 - { 156 + try 157 + { 158 + var content = new FormUrlEncodedContent(new[] 159 + { 160 + new KeyValuePair<string, string>("userName", WebserviceUsername), 161 + new KeyValuePair<string, string>("password", WebservicePassword), 162 + new KeyValuePair<string, string>("customerUsername", CustomerUsername), 163 + }); 103 103 104 - GetCustomersCall.Response set = new GetCustomersCall.Response(); 165 + HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/GetCustomers", content).Result; 166 + response.EnsureSuccessStatusCode(); 167 + string responseMessage = response.Content.ReadAsStringAsync().Result; 105 105 169 + if (string.IsNullOrEmpty(responseMessage)) 170 + { 171 + throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " / GetCustomers" + "]"); 172 + } 173 + using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage))) 174 + { 175 + XmlSerializer serializer = new XmlSerializer(typeof(GetCustomersCall.Response)); 176 + set = (GetCustomersCall.Response)serializer.Deserialize(ms); 177 + } 178 + } 179 + catch (Exception ex) 180 + { 181 + #region handle exception 182 + set.Status = new BusinessEntities.LabRestService.GetCustomersCall.ResponseStatus(); 183 + set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString(); 184 + set.Status.ErrorMessage = "Exception occurred in GetCustomers (username: " + WebserviceUsername + ", password: " + WebservicePassword + ") with message: " + ex.Message; 185 + ex.Data.Add("WebserviceUsername", WebserviceUsername); 186 + ex.Data.Add("WebservicePassword", WebservicePassword); 187 + ex.Data.Add("CustomerUsername", CustomerUsername); 188 + ExceptionHandler.HandleException(ex); 189 + #endregion 190 + } 191 + return set; 192 + } 193 +{{/code}} 106 106 107 - try 108 - 109 - { 110 - 111 - 112 - var content = new FormUrlEncodedContent(new[] 113 - 114 - { 115 - 116 - new KeyValuePair<string, string>("userName", WebserviceUsername), 117 - 118 - new KeyValuePair<string, string>("password", WebservicePassword), 119 - 120 - new KeyValuePair<string, string>("customerUsername", CustomerUsername), 121 - 122 - }); 123 - 124 - 125 - HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/GetCustomers", content).Result; 126 - 127 - response.EnsureSuccessStatusCode(); 128 - 129 - string responseMessage = response.Content.ReadAsStringAsync().Result; 130 - 131 - 132 - if (string.IsNullOrEmpty(responseMessage)) 133 - 134 - { 135 - 136 - throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " / GetCustomers" + "]"); 137 - 138 - } 139 - 140 - using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~) 141 - 142 - { 143 - 144 - XmlSerializer serializer = new XmlSerializer(typeof(GetCustomersCall.Response)); 145 - 146 - set = (GetCustomersCall.Response)serializer.Deserialize(ms); 147 - 148 - } 149 - 150 - 151 - } 152 - 153 - catch (Exception ex) 154 - 155 - { 156 - 157 - #region handle exception 158 - 159 - 160 - set.Status = new BusinessEntities.LabRestService.GetCustomersCall.ResponseStatus(); 161 - 162 - set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString(); 163 - 164 - set.Status.ErrorMessage = "Exception occurred in GetCustomers (username: " + WebserviceUsername + ", password: " + WebservicePassword + ") with message: " + ex.Message; 165 - 166 - 167 - ex.Data.Add("WebserviceUsername", WebserviceUsername); 168 - 169 - ex.Data.Add("WebservicePassword", WebservicePassword); 170 - 171 - ex.Data.Add("CustomerUsername", CustomerUsername); 172 - 173 - 174 - ExceptionHandler.HandleException(ex); 175 - 176 - #endregion 177 - 178 - } 179 - 180 - 181 - return set; 182 - 183 - } 195 +(% element-id="1566" %) 196 + 184 184 ))) 185 185 186 -|((( 199 +(% element-id="1564" %) 200 +(% element-id="1562" %)|(% element-id="1561" %)(% element-id="1560" %) 201 +((( 202 +(% element-id="1559" %) 187 187 POST https:~/~/<URL>/GetCustomers HTTP/1.1 188 188 205 +(% element-id="1558" %) 189 189 Content-Type: application/x-www-form-urlencoded 190 190 208 +(% element-id="1557" %) 191 191 Host: 81.175.89.24 192 192 211 +(% element-id="1556" %) 193 193 Content-Length: 115 194 194 214 +(% element-id="1555" %) 195 195 Expect: 100-continue 196 196 197 197 218 +(% element-id="1552" %) 198 198 userName=<webservice_username>&password=<Webservice_password>&customerUsername=<customer_username or token> 199 199 ))) 200 200 201 -=== Response example === 222 +(% element-id="1551" %) 223 +=== (% element-id="1550" %)Response example(%%) === 202 202 203 -|((( 225 +(% element-id="1549" %) 226 +(% element-id="1547" %)|(% element-id="1546" %)(% element-id="1545" %) 227 +((( 228 +{{code language="XML"}} 204 204 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 205 - 206 206 <Response><Customers> 207 - 208 - <Customer LabId="1" LabName="Example Laboratorium" CustomerId="300" CustomerName="Adviesbureau De bodemkoning - Rotterdam" LastModifiedOnClient="2019-05-08T11:05:14.17+02:00" /> 209 - 210 - <Customer LabId="1" LabName="Example Laboratorium" CustomerId="656" CustomerName="Adviesbureau De bodemkoning - Delft" LastModifiedOnClient="2019-04-19T13:20:10.123+02:00" /> 211 - 231 + <Customer LabId="1" LabName="Example Laboratorium" CustomerId="300" CustomerName="Adviesbureau De bodemkoning - Rotterdam" LastModifiedOnClient="2019-05-08T11:05:14.17+02:00" ></Customer> 232 + <Customer LabId="1" LabName="Example Laboratorium" CustomerId="656" CustomerName="Adviesbureau De bodemkoning - Delft" LastModifiedOnClient="2019-04-19T13:20:10.123+02:00" ></Customer> 212 212 </Customers> 213 - 214 214 <Status> 215 - 216 - <StatusCode>1</StatusCode> 217 - 218 - <StatusCodeDescription>OK</StatusCodeDescription> 219 - 220 - <ErrorMessage></ErrorMessage> 221 - 235 + <StatusCode>1</StatusCode> 236 + <StatusCodeDescription>OK</StatusCodeDescription> 237 + <ErrorMessage></ErrorMessage> 222 222 </Status> 223 - 224 224 </Response> 240 +{{/code}} 241 + 242 +(% element-id="1492" %) 243 + 225 225 ))) 226 226 246 +(% element-id="1490" %) 247 +== (% element-id="1489" %)Get Products (POST)(%%) == 227 227 228 -== Get Products (POST) == 249 +(% element-id="1488" %) 250 +=== (% element-id="1487" %)Request example(%%) === 229 229 230 -=== Request example === 231 - 232 -|((( 252 +(% element-id="1486" %) 253 +(% element-id="1484" %)|(% element-id="1483" %)(% element-id="1482" %) 254 +((( 255 +(% element-id="1481" %) 233 233 public GetProductsCall.Response GetProductList(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid, int labid, string sikbVersion, string languageCode) 234 234 258 +(% element-id="1480" %) 235 235 { 236 236 237 237 262 +(% element-id="1477" %) 238 238 GetProductsCall.Response set = new GetProductsCall.Response(); 239 239 240 240 266 +(% element-id="1474" %) 241 241 try 242 242 269 +(% element-id="1473" %) 243 243 { 244 244 272 +(% element-id="1472" %) 245 245 bool useZipstream = true; 246 246 275 +(% element-id="1471" %) 247 247 var content = new FormUrlEncodedContent(new[] 248 248 278 +(% element-id="1470" %) 249 249 { 250 250 281 +(% element-id="1469" %) 251 251 new KeyValuePair<string, string>("userName", WebserviceUsername), 252 252 284 +(% element-id="1468" %) 253 253 new KeyValuePair<string, string>("password", WebservicePassword), 254 254 287 +(% element-id="1467" %) 255 255 new KeyValuePair<string, string>("customerUsername", CustomerUsername), 256 256 290 +(% element-id="1466" %) 257 257 new KeyValuePair<string, string>("languageCode", languageCode), 258 258 293 +(% element-id="1465" %) 259 259 new KeyValuePair<string, string>("clientId", customerid), 260 260 296 +(% element-id="1464" %) 261 261 new KeyValuePair<string, string>("sikbVersion", sikbVersion), 262 262 299 +(% element-id="1463" %) 263 263 new KeyValuePair<string, string>("useZip", useZipstream.ToString() ), 264 264 302 +(% element-id="1462" %) 265 265 }); 266 266 267 267 306 +(% element-id="1459" %) 268 268 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/GetProducts", content).Result; 269 269 309 +(% element-id="1458" %) 270 270 response.EnsureSuccessStatusCode(); 271 271 312 +(% element-id="1457" %) 272 272 string responseMessage = response.Content.ReadAsStringAsync().Result; 273 273 274 274 316 +(% element-id="1454" %) 275 275 if (string.IsNullOrEmpty(responseMessage)) 276 276 319 +(% element-id="1453" %) 277 277 { 278 278 322 +(% element-id="1452" %) 279 279 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " /GetProducts" + "]"); 280 280 325 +(% element-id="1451" %) 281 281 } 282 282 328 +(% element-id="1450" %) 283 283 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~) 284 284 331 +(% element-id="1449" %) 285 285 { 286 286 334 +(% element-id="1448" %) 287 287 XmlSerializer serializer = new XmlSerializer(typeof(GetProductsCall.Response)); 288 288 337 +(% element-id="1447" %) 289 289 set = (GetProductsCall.Response)serializer.Deserialize(ms); 290 290 340 +(% element-id="1446" %) 291 291 } 292 292 293 293 344 +(% element-id="1443" %) 294 294 if (useZipstream && !string.IsNullOrEmpty(set.FileContent)) 295 295 347 +(% element-id="1442" %) 296 296 { 297 297 350 +(% element-id="1441" %) 298 298 ~/~/convert from base64 string back to normal 299 299 353 +(% element-id="1440" %) 300 300 ~/~/first check for real Base64, by checking there is no 'xml' in it 301 301 356 +(% element-id="1439" %) 302 302 if (!set.FileContent.Contains("<labaanlevering")) 303 303 359 +(% element-id="1438" %) 304 304 { 305 305 362 +(% element-id="1437" %) 306 306 set.FileContent = ZipStreamHelper.DecompressBase64StringToString(set.FileContent); 307 307 365 +(% element-id="1436" %) 308 308 } 309 309 368 +(% element-id="1435" %) 310 310 } 311 311 312 312 372 +(% element-id="1432" %) 313 313 } 314 314 375 +(% element-id="1431" %) 315 315 catch (Exception ex) 316 316 378 +(% element-id="1430" %) 317 317 { 318 318 381 +(% element-id="1429" %) 319 319 #region handle exception 320 320 321 321 385 +(% element-id="1426" %) 322 322 set.Status = new BusinessEntities.LabRestService.GetProductsCall.ResponseStatus(); 323 323 388 +(% element-id="1425" %) 324 324 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString(); 325 325 391 +(% element-id="1424" %) 326 326 set.Status.ErrorMessage = "Exception occurred in GetProducts (username: " + WebserviceUsername + ", password: " + WebservicePassword + ") with message: " + ex.Message; 327 327 328 328 395 +(% element-id="1421" %) 329 329 ex.Data.Add("WebserviceUsername", WebserviceUsername); 330 330 398 +(% element-id="1420" %) 331 331 ex.Data.Add("WebservicePassword", WebservicePassword); 332 332 401 +(% element-id="1419" %) 333 333 ex.Data.Add("CustomerUsername", CustomerUsername); 334 334 404 +(% element-id="1418" %) 335 335 ex.Data.Add("sikbVersion", sikbVersion); 336 336 407 +(% element-id="1417" %) 337 337 ex.Data.Add("customerid", customerid); 338 338 410 +(% element-id="1416" %) 339 339 ex.Data.Add("languageCode", languageCode); 340 340 341 341 414 +(% element-id="1413" %) 342 342 ExceptionHandler.HandleException(ex); 343 343 417 +(% element-id="1412" %) 344 344 #endregion 345 345 420 +(% element-id="1411" %) 346 346 } 347 347 348 348 424 +(% element-id="1408" %) 349 349 return set; 350 350 427 +(% element-id="1407" %) 351 351 } 352 352 ))) 353 353 354 -|((( 431 +(% element-id="1406" %) 432 +(% element-id="1404" %)|(% element-id="1403" %)(% element-id="1402" %) 433 +((( 434 +(% element-id="1401" %) 355 355 POST https:~/~/<URL>/GetProducts HTTP/1.1 356 356 437 +(% element-id="1400" %) 357 357 Content-Type: application/x-www-form-urlencoded 358 358 440 +(% element-id="1399" %) 359 359 Host: 81.175.89.24 360 360 443 +(% element-id="1398" %) 361 361 Content-Length: 179 362 362 446 +(% element-id="1397" %) 363 363 Expect: 100-continue 364 364 365 365 450 +(% element-id="1394" %) 366 366 userName=<webservice_username>&password=<Webservice_password>&customerUsername=<customer_username or token>&languageCode=nld&clientId=300&sikbVersion=13.5.0&useZip=True 367 367 ))) 368 368 369 -=== Response example === 454 +(% element-id="1393" %) 455 +=== (% element-id="1392" %)Response example(%%) === 370 370 371 -|((( 457 +(% element-id="1391" %) 458 +(% element-id="1389" %)|(% element-id="1388" %)(% element-id="1387" %) 459 +((( 460 +(% element-id="1386" %) 372 372 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 373 373 463 +(% element-id="1385" %) 374 374 <Response> 375 375 466 +(% element-id="1384" %) 376 376 <FileContent> {SIKB FILE in ZIPSTREAM BASE64 format}</FileContent> 377 377 469 +(% element-id="1383" %) 378 378 <Status> 379 379 472 +(% element-id="1382" %) 380 380 <StatusCode>1</StatusCode> 381 381 475 +(% element-id="1381" %) 382 382 <StatusCodeDescription>OK</StatusCodeDescription> 383 383 478 +(% element-id="1380" %) 384 384 <ErrorMessage></ErrorMessage> 385 385 481 +(% element-id="1379" %) 386 386 </Status></Response> 387 387 ))) 388 388 485 +(% element-id="1378" %) 486 += (% element-id="1377" %)Useraccount Checkup.(%%) = 389 389 488 +(% element-id="1374" %) 489 +== (% element-id="1373" %)Solution/Design(%%) == 390 390 391 -= Gebruikersaccount controleren. = 491 +(% element-id="1372" %) 492 +With every call we will no longer send customer usernames and customer passwords. We want to use a fixed Machine 2 Machine username and password for TerraIndex. So we need to be able to quickly check whether the Customer username we want to use exists, and is bound to our TerraIndex fixed Machine 2 machine account. 392 392 393 - 394 -== Oplossing/Design == 395 - 396 -Bij iedere call gaan we geen username van de klanten meer sturen met een vast webservice username en password voor TerraIndex. Hier willen we ook snel op kunnen controleren of deze wel bestaat. 397 - 494 +(% element-id="1371" %) 398 398 WebserviceUsername (string), 399 399 WebservicePassword (string), 400 400 CustomerUsername (string) 401 401 402 402 403 -Hiervoor maken we een Webserice voor ValidCredentials Check: 500 +(% element-id="1366" %) 501 +Therefore we call a Webserice for ValidCredentials Check: 404 404 405 405 406 -(% class="table-hover" %) 407 -|**Action**|**TerraIndex**| |**Laboratorium**|**Parameters/Message**|**Remarks**|**ResultCodes** 408 -|1|Sends a request to the function: ValidCredentials().|=>| |WebserviceUsername (string), 504 +(% class="table-hover" element-id="1363" %) 505 +(% element-id="1361" %)|(% element-id="1360" %)(% element-id="1359" %)**Action**|(% element-id="1358" %)(% element-id="1357" %)**TerraIndex**|(% element-id="1356" %) |(% element-id="1354" %)(% element-id="1353" %)**Laboratorium**|(% element-id="1352" %)(% element-id="1351" %)**Parameters/Message**|(% element-id="1350" %)(% element-id="1349" %)**Remarks**|(% element-id="1348" %)(% element-id="1347" %)**ResultCodes** 506 +(% element-id="1346" %)|(% element-id="1345" %)1|(% element-id="1344" %)Sends a request to the function: ValidCredentials().|=(% element-id="1343" %)>|(% element-id="1342" %) |(% element-id="1340" %)WebserviceUsername (string), 409 409 WebservicePassword (string), 410 -CustomerUsername (string)|We want to skip the Password of the customer, and we use the WebserviceUsername + WebservicePassword for real authentication.| 411 -|2| | |Receives the request and checks the combination of WebserviceUsername and WebservicePassword is Ok. Then checks the CustomerUsername is valid.| | | 412 -|3| |<=|Sends back a Success of InvalidCredentials|ResultCode (), 413 -ErrorMessage (string),| |1 = Success, 508 +CustomerUsername (string)|(% element-id="1337" %)We want to skip the Password of the customer, and we use the WebserviceUsername + WebservicePassword for real authentication.|(% element-id="1336" %) 509 +(% element-id="1334" %)|(% element-id="1333" %)2|(% element-id="1332" %) |(% element-id="1330" %) |(% element-id="1328" %)Receives the request and checks the combination of WebserviceUsername and WebservicePassword is Ok. Then checks the CustomerUsername is valid.|(% element-id="1327" %) |(% element-id="1325" %) |(% element-id="1323" %) 510 +(% element-id="1321" %)|(% element-id="1320" %)3|(% element-id="1319" %) |(% element-id="1317" %)<=|(% element-id="1316" %)Sends back a Success of InvalidCredentials|(% element-id="1315" %)ResultCode (), 511 +ErrorMessage (string),|(% element-id="1313" %) |(% element-id="1311" %)1 = Success, 414 414 2 = GeneralError, 415 415 3 = WrongSIKBVersion, 416 416 4 = InvalidCredentials, ... ... @@ -421,149 +421,215 @@ 421 421 9 = OrderIdAlreadyApproved 422 422 10 = PDFNotAvailable 423 423 424 -== Check ValidCredentials (POST) == 522 +(% element-id="1301" %) 523 +== (% element-id="1300" %)Check ValidCredentials (POST)(%%) == 425 425 426 -=== Request example === 525 +(% element-id="1299" %) 526 +=== (% element-id="1298" %)Request example(%%) === 427 427 428 -|((( 528 +(% element-id="1297" %) 529 +(% element-id="1295" %)|(% element-id="1294" %)(% element-id="1293" %) 530 +((( 531 +(% element-id="1292" %) 429 429 public ValidCredentialsCall.Response ValidCredentials(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid) 430 430 534 +(% element-id="1291" %) 431 431 { 432 432 537 +(% element-id="1290" %) 433 433 ValidCredentialsCall.Response set = new ValidCredentialsCall.Response(); 434 434 435 435 541 +(% element-id="1287" %) 436 436 try 437 437 544 +(% element-id="1286" %) 438 438 { 439 439 440 440 548 +(% element-id="1283" %) 441 441 var content = new FormUrlEncodedContent(new[] 442 442 551 +(% element-id="1282" %) 443 443 { 444 444 554 +(% element-id="1281" %) 445 445 new KeyValuePair<string, string>("userName", WebserviceUsername), 446 446 557 +(% element-id="1280" %) 447 447 new KeyValuePair<string, string>("password", WebservicePassword), 448 448 560 +(% element-id="1279" %) 449 449 ~/~/new KeyValuePair<string, string>("clientId", customerid), ~/~/ Optional 450 450 563 +(% element-id="1278" %) 451 451 new KeyValuePair<string, string>("customerUsername", CustomerUsername), 452 452 566 +(% element-id="1277" %) 453 453 }); 454 454 455 455 570 +(% element-id="1274" %) 456 456 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/ValidCredentials", content).Result; 457 457 573 +(% element-id="1273" %) 458 458 response.EnsureSuccessStatusCode(); 459 459 576 +(% element-id="1272" %) 460 460 string responseMessage = response.Content.ReadAsStringAsync().Result; 461 461 462 462 580 +(% element-id="1269" %) 463 463 if (string.IsNullOrEmpty(responseMessage)) 464 464 583 +(% element-id="1268" %) 465 465 { 466 466 586 +(% element-id="1267" %) 467 467 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " / ValidCredentials" + "]"); 468 468 589 +(% element-id="1266" %) 469 469 } 470 470 592 +(% element-id="1265" %) 471 471 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~) 472 472 595 +(% element-id="1264" %) 473 473 { 474 474 598 +(% element-id="1263" %) 475 475 XmlSerializer serializer = new XmlSerializer(typeof(ValidCredentialsCall.Response)); 476 476 601 +(% element-id="1262" %) 477 477 set = (ValidCredentialsCall.Response)serializer.Deserialize(ms); 478 478 479 479 605 +(% element-id="1259" %) 480 480 return set; 481 481 608 +(% element-id="1258" %) 482 482 } 483 483 484 484 612 +(% element-id="1255" %) 485 485 } 486 486 615 +(% element-id="1254" %) 487 487 catch (Exception ex) 488 488 618 +(% element-id="1253" %) 489 489 { 490 490 621 +(% element-id="1252" %) 491 491 #region handle exception 492 492 493 493 625 +(% element-id="1249" %) 494 494 set.Status = new BusinessEntities.LabRestService.ValidCredentialsCall.ResponseStatus(); 495 495 628 +(% element-id="1248" %) 496 496 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString(); 497 497 631 +(% element-id="1247" %) 498 498 set.Status.ErrorMessage = "Exception occurred in GetValidCredentials (username: " + WebserviceUsername + ", with message: " + ex.Message; 499 499 500 500 635 +(% element-id="1244" %) 501 501 ex.Data.Add("WebserviceUsername", WebserviceUsername); 502 502 638 +(% element-id="1243" %) 503 503 ex.Data.Add("WebservicePassword", WebservicePassword); 504 504 641 +(% element-id="1242" %) 505 505 ex.Data.Add("CustomerUsername", CustomerUsername); 506 506 507 507 645 +(% element-id="1239" %) 508 508 ExceptionHandler.HandleException(ex); 509 509 648 +(% element-id="1238" %) 510 510 #endregion 511 511 651 +(% element-id="1237" %) 512 512 } 513 513 514 514 655 +(% element-id="1234" %) 515 515 return set; 516 516 658 +(% element-id="1233" %) 517 517 } 518 518 ))) 519 519 520 -|((( 662 +(% element-id="1232" %) 663 +(% element-id="1230" %)|(% element-id="1229" %)(% element-id="1228" %) 664 +((( 665 +(% element-id="1227" %) 521 521 POST https:~/~/<URL>/ValidCredentials HTTP/1.1 522 522 668 +(% element-id="1226" %) 523 523 Content-Type: application/x-www-form-urlencoded 524 524 671 +(% element-id="1225" %) 525 525 Host: 81.175.89.24 526 526 674 +(% element-id="1224" %) 527 527 Content-Length: 125 528 528 677 +(% element-id="1223" %) 529 529 Expect: 100-continue 530 530 531 531 681 +(% element-id="1220" %) 532 532 userName=<webservice_username>&password=<Webservice_password>&clientId=<optional otherwise empty>&customerUsername=<customer_username or token> 533 533 ))) 534 534 535 -=== Response example === 685 +(% element-id="1219" %) 686 +=== (% element-id="1218" %)Response example(%%) === 536 536 537 -|((( 688 +(% element-id="1217" %) 689 +(% element-id="1215" %)|(% element-id="1214" %)(% element-id="1213" %) 690 +((( 691 +(% element-id="1212" %) 538 538 <?xml version="1.0" encoding="UTF-8" standalone="no"?><Response> 539 539 694 +(% element-id="1211" %) 540 540 <Status> 541 541 697 +(% element-id="1210" %) 542 542 <StatusCode>1</StatusCode> 543 543 700 +(% element-id="1209" %) 544 544 <StatusCodeDescription>OK</StatusCodeDescription> 545 545 703 +(% element-id="1208" %) 546 546 <ErrorMessage></ErrorMessage> 547 547 706 +(% element-id="1207" %) 548 548 </Status> 549 549 709 +(% element-id="1206" %) 550 550 </Response> 551 551 ))) 552 552 553 -= Opdrachten versturen (POST) = 713 +(% element-id="1205" %) 714 += (% element-id="1204" %)Labassignment request delivery(POST)(%%) = 554 554 555 -== Oplossing/Design == 716 +(% element-id="1203" %) 717 +== (% element-id="1202" %)Solution/Design(%%) == 556 556 557 -Hiervoor maken we een Webserice voor CreateOrder om de opdracht aan te maken. 558 -Na de create willen we in de toekomst een overzicht van het laboratorium in bijv. PDF tonen, waarbij de gebruiker de prijzen ziet en kan bevestigen of annuleren. 559 -Afhankelijk van de keuze van de gebruiker bij het laboratorium, roept TerraIndex de ApproveOrder of de CancelOrder aan. 719 +(% element-id="1201" %) 720 +For this we create a Webservice for CreateOrder to create the order in the lab system. 721 +After the creation, we would like to show an order overview of the laboratory in the future in PDF. The user can see the prices and can confirm or cancel. 722 +Depending on the user's choice at the laboratory, to support this or not, TerraIndex calls the ApproveOrder or the CancelOrder. 560 560 561 -Voor nu gaan we er vanuit dat wij dit niet kunnen, en stuurt TerraIndex needsApprovalIsSupported = false mee. Mocht dit True worden in de toekomst, dan kan het Lab bij het result aangeven of het wel of niet nodig is, in het NeedsApprove veld. 724 +(% element-id="0" %) 725 +For default we assume that we cannot do this yet, and TerraIndex sends needsApprovaIsSupported = false. If this becomes true in the future, the Lab can indicate whether or not it is necessary in the NeedsApprove field. 562 562 563 563 564 -(% class="table-hover" %) 565 -|**Action**|**TerraIndex**| |**Laboratorium**|**Parameters/Message**|**Remarks**|**ResultCodes** 566 -|1|Sends a request to the function: CreateOrder().|=>| |WebserviceUsername (string), 728 +(% class="table-hover" element-id="1195" %) 729 +(% element-id="1193" %)|(% element-id="1192" %)(% element-id="1191" %)**Action**|(% element-id="1190" %)(% element-id="1189" %)**TerraIndex**|(% element-id="1188" %) |(% element-id="1186" %)(% element-id="1185" %)**Laboratorium**|(% element-id="1184" %)(% element-id="1183" %)**Parameters/Message**|(% element-id="1182" %)(% element-id="1181" %)**Remarks**|(% element-id="1180" %)(% element-id="1179" %)**ResultCodes** 730 +(% element-id="1178" %)|(% element-id="1177" %)1|(% element-id="1176" %)Sends a request to the function: CreateOrder().|=(% element-id="1175" %)>|(% element-id="1174" %) |(% element-id="1172" %)WebserviceUsername (string), 567 567 WebservicePassword (string), 568 568 CustomerUsername (string), 569 569 FileContent_Base64 (string), ... ... @@ -570,22 +570,22 @@ 570 570 UseZipStream/UseZip (bool, default: 'false'), 571 571 CustomerCode (string), 572 572 SIKBVersion (string, default: '13.4.0'), 573 -needsApprovalIsSupported (bool)|SIKB Version included, so labs can quickly check the version. 737 +needsApprovalIsSupported (bool)|(% element-id="1164" %)SIKB Version included, so labs can quickly check the version. 574 574 Besides SIKB 13.4.0, TerraIndex also supports 9.0.0. 575 575 \\Before sending the SIKB, validate to the XSD! 576 576 And to the XSLT? 577 577 \\needsApprovalIsSupported = false; means we dont get PDF with offerte. This will make is faster. 578 -needsApprovalIsSupported = true; means lab will check the user setting to send a PDF Offerte back or not. (If the lab can support this.)| 579 -|2| | |Receives the request and checks the credentials.| | | 580 -|(% colspan="1" %)3|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %)Credentials are valid, the Filecontent is checked on a valid Labassignment. When valid it will be processed and a OrderId is given.|(% colspan="1" %) |(% colspan="1" %)Laboratorium saves the Sample GUIDs if it's SIKB 13 or higher. 581 -Otherwise we use the idanlmons unique ID.|(% colspan="1" %) 582 -|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %)Based on what customer, the order will be approved or the approve needs to be done in laboratorium system.|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 583 -|4| |<=|Sends back a Success with the new OrderId|ResultCode (), 742 +needsApprovalIsSupported = true; means lab will check the user setting to send a PDF Offerte back or not. (If the lab can support this.)|(% element-id="1156" %) 743 +(% element-id="1154" %)|(% element-id="1153" %)2|(% element-id="1152" %) |(% element-id="1150" %) |(% element-id="1148" %)Receives the request and checks the credentials.|(% element-id="1147" %) |(% element-id="1145" %) |(% element-id="1143" %) 744 +(% element-id="1141" %)|(% colspan="1" element-id="1140" %)3|(% colspan="1" element-id="1139" %) |(% colspan="1" element-id="1137" %) |(% colspan="1" element-id="1135" %)Credentials are valid, the Filecontent is checked on a valid Labassignment. When valid it will be processed and a OrderId is given.|(% colspan="1" element-id="1134" %) |(% colspan="1" element-id="1132" %)Laboratorium saves the Sample GUIDs if it's SIKB 13 or higher. 745 +Otherwise we use the idanlmons unique ID.|(% colspan="1" element-id="1130" %) 746 +(% element-id="1128" %)|(% colspan="1" element-id="1127" %) |(% colspan="1" element-id="1125" %) |(% colspan="1" element-id="1123" %) |(% colspan="1" element-id="1121" %)Based on what customer, the order will be approved or the approve needs to be done in laboratorium system.|(% colspan="1" element-id="1120" %) |(% colspan="1" element-id="1118" %) |(% colspan="1" element-id="1116" %) 747 +(% element-id="1114" %)|(% element-id="1113" %)4|(% element-id="1112" %) |(% element-id="1110" %)<=|(% element-id="1109" %)Sends back a Success with the new OrderId|(% element-id="1108" %)ResultCode (), 584 584 ErrorMessage (string), 585 585 OrderId (string), 586 586 NeedsApprove (bool), 587 587 FileContent_Base64 (string), 588 -UseZipStream/UseZip (bool, default: 'false'),|In the future labs will send back the PDF with the prices and some checks. To approve or cancel. For the first version this is not required yet and the fileContent remains empty.|1 = Success, 752 +UseZipStream/UseZip (bool, default: 'false'),|(% element-id="1102" %)In the future labs will send back the PDF with the prices and some checks. To approve or cancel. For the first version this is not required yet and the fileContent remains empty.|(% element-id="1101" %)1 = Success, 589 589 2 = GeneralError, 590 590 3 = WrongSIKBVersion, 591 591 4 = InvalidCredentials, ... ... @@ -595,8 +595,10 @@ 595 595 8 = InvalidOrderId, 596 596 9 = OrderIdAlreadyApproved 597 597 10 = PDFNotAvailable 598 -|(% colspan="1" %)6|(% colspan="1" %)Receives the OrderId, and saves it. 599 - |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %)((( 762 +(% element-id="1091" %)|(% colspan="1" element-id="1090" %)6|(% colspan="1" element-id="1089" %)Receives the OrderId, and saves it. 763 + |(% colspan="1" element-id="1086" %) |(% colspan="1" element-id="1084" %) |(% colspan="1" element-id="1082" %) |(% colspan="1" element-id="1080" %)(% element-id="1079" %) 764 +((( 765 +(% element-id="1078" %) 600 600 Default for now laboratorium will send: 601 601 NeedsApprove = False, 602 602 PDF = Empty, ... ... @@ -603,23 +603,25 @@ 603 603 Zipstream = False, 604 604 605 605 772 +(% element-id="1072" %) 606 606 In the future, do something with the PDF and show the PDF to users to Approve or Cancel. 607 607 This will be done by; NeedsApprove = true. 608 608 \\If NeedsApprove is False, the order is Processed and can't be changed in TI. Like it is now. 609 609 777 +(% element-id="1068" %) 610 610 611 -)))|(% colspan="1" %) 612 -|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 613 -|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 614 -|(% colspan="1" %) |(% colspan="1" %)**IN THE FUTURE: APPROVEORDER**|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 615 -|(% colspan="1" %)7|(% colspan="1" %)Sends a request to the function: ApproveOrder().|(% colspan="1" %)=>|(% colspan="1" %) |(% colspan="1" %)WebserviceUsername (string), 779 +)))|(% colspan="1" element-id="1066" %) 780 +(% element-id="1064" %)|(% colspan="1" element-id="1063" %) |(% colspan="1" element-id="1061" %) |(% colspan="1" element-id="1059" %) |(% colspan="1" element-id="1057" %) |(% colspan="1" element-id="1055" %) |(% colspan="1" element-id="1053" %) |(% colspan="1" element-id="1051" %) 781 +(% element-id="1049" %)|(% colspan="1" element-id="1048" %) |(% colspan="1" element-id="1046" %) |(% colspan="1" element-id="1044" %) |(% colspan="1" element-id="1042" %) |(% colspan="1" element-id="1040" %) |(% colspan="1" element-id="1038" %) |(% colspan="1" element-id="1036" %) 782 +(% element-id="1034" %)|(% colspan="1" element-id="1033" %) |(% colspan="1" element-id="1031" %)(% element-id="1030" %)**IN THE FUTURE: APPROVEORDER**|(% colspan="1" element-id="1029" %) |(% colspan="1" element-id="1027" %) |(% colspan="1" element-id="1025" %) |(% colspan="1" element-id="1023" %) |(% colspan="1" element-id="1021" %) 783 +(% element-id="1019" %)|(% colspan="1" element-id="1018" %)7|(% colspan="1" element-id="1017" %)Sends a request to the function: ApproveOrder().|(% colspan="1" element-id="1016" %)=>|(% colspan="1" element-id="1015" %) |(% colspan="1" element-id="1013" %)WebserviceUsername (string), 616 616 WebservicePassword (string), 617 617 CustomerUsername (string), 618 -OrderId (string)|(% colspan="1" %) |(% colspan="1" %) 619 -|(% colspan="1" %)8|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %)Receives the approve and checks the credentials and the OrderId.|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 620 -|(% colspan="1" %)9|(% colspan="1" %) |(% colspan="1" %)<=|(% colspan="1" %)Sends back a Success with the new CertificateNr|(% colspan="1" %)ResultCode (), 786 +OrderId (string)|(% colspan="1" element-id="1009" %) |(% colspan="1" element-id="1007" %) 787 +(% element-id="1005" %)|(% colspan="1" element-id="1004" %)8|(% colspan="1" element-id="1003" %) |(% colspan="1" element-id="1001" %) |(% colspan="1" element-id="999" %)Receives the approve and checks the credentials and the OrderId.|(% colspan="1" element-id="998" %) |(% colspan="1" element-id="996" %) |(% colspan="1" element-id="994" %) 788 +(% element-id="992" %)|(% colspan="1" element-id="991" %)9|(% colspan="1" element-id="990" %) |(% colspan="1" element-id="988" %)<=|(% colspan="1" element-id="987" %)Sends back a Success with the new CertificateNr|(% colspan="1" element-id="986" %)ResultCode (), 621 621 ErrorMessage (string), 622 -CertificateNr (string)|(% colspan="1" %)This process takes too long at some labs. Maybe this won't be workable...so maybe the CertificateNr return won't be possible. In this case, leave the CertificateNr empty. TerraIndex will read it from GetOrderStatus calls.|(% colspan="1" %)1 = Success, 790 +CertificateNr (string)|(% colspan="1" element-id="983" %)This process takes too long at some labs. Maybe this won't be workable...so maybe the CertificateNr return won't be possible. In this case, leave the CertificateNr empty. TerraIndex will read it from GetOrderStatus calls.|(% colspan="1" element-id="982" %)1 = Success, 623 623 2 = GeneralError, 624 624 3 = WrongSIKBVersion, 625 625 4 = InvalidCredentials, ... ... @@ -629,16 +629,16 @@ 629 629 8 = InvalidOrderId, 630 630 9 = OrderIdAlreadyApproved 631 631 10 = PDFNotAvailable 632 -|(% colspan="1" %)10|(% colspan="1" %)Receives the CerificateNr and saves it.|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 633 -|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 634 -|(% colspan="1" %) |(% colspan="1" %)**IN THE FUTURE: CANCELORDER**|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 635 -|7|Sends a request to the function: CancelOrder().|=>| |WebserviceUsername (string), 800 +(% element-id="972" %)|(% colspan="1" element-id="971" %)10|(% colspan="1" element-id="970" %)Receives the CerificateNr and saves it.|(% colspan="1" element-id="969" %) |(% colspan="1" element-id="967" %) |(% colspan="1" element-id="965" %) |(% colspan="1" element-id="963" %) |(% colspan="1" element-id="961" %) 801 +(% element-id="959" %)|(% colspan="1" element-id="958" %) |(% colspan="1" element-id="956" %) |(% colspan="1" element-id="954" %) |(% colspan="1" element-id="952" %) |(% colspan="1" element-id="950" %) |(% colspan="1" element-id="948" %) |(% colspan="1" element-id="946" %) 802 +(% element-id="944" %)|(% colspan="1" element-id="943" %) |(% colspan="1" element-id="941" %)(% element-id="940" %)**IN THE FUTURE: CANCELORDER**|(% colspan="1" element-id="939" %) |(% colspan="1" element-id="937" %) |(% colspan="1" element-id="935" %) |(% colspan="1" element-id="933" %) |(% colspan="1" element-id="931" %) 803 +(% element-id="929" %)|(% element-id="928" %)7|(% element-id="927" %)Sends a request to the function: CancelOrder().|=(% element-id="926" %)>|(% element-id="925" %) |(% element-id="923" %)WebserviceUsername (string), 636 636 WebservicePassword (string), 637 637 CustomerUsername (string), 638 -OrderId (string)| | 639 -|8| | |Receives the cancel and checks the credentials and the OrderId.| | | 640 -|9| |<=|Sends back a Success |ResultCode (), 641 -ErrorMessage (string)| |1 = Success, 806 +OrderId (string)|(% element-id="919" %) |(% element-id="917" %) 807 +(% element-id="915" %)|(% element-id="914" %)8|(% element-id="913" %) |(% element-id="911" %) |(% element-id="909" %)Receives the cancel and checks the credentials and the OrderId.|(% element-id="908" %) |(% element-id="906" %) |(% element-id="904" %) 808 +(% element-id="902" %)|(% element-id="901" %)9|(% element-id="900" %) |(% element-id="898" %)<=|(% element-id="897" %)Sends back a Success |(% element-id="896" %)ResultCode (), 809 +ErrorMessage (string)|(% element-id="894" %) |(% element-id="892" %)1 = Success, 642 642 2 = GeneralError, 643 643 3 = WrongSIKBVersion, 644 644 4 = InvalidCredentials, ... ... @@ -648,325 +648,475 @@ 648 648 8 = InvalidOrderId, 649 649 9 = OrderIdAlreadyApproved 650 650 10 = PDFNotAvailable 651 -|10|Removes the OrderId and the IsSend to False| | | |If OrderIsAleadyApproved, set the values to Approved and keep the OrderId and IsSend.| 652 -|(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) |(% colspan="1" %) 819 +(% element-id="882" %)|(% element-id="881" %)10|(% element-id="880" %)Removes the OrderId and the IsSend to False|(% element-id="879" %) |(% element-id="877" %) |(% element-id="875" %) |(% element-id="873" %)If OrderIsAleadyApproved, set the values to Approved and keep the OrderId and IsSend.|(% element-id="872" %) 820 +(% element-id="870" %)|(% colspan="1" element-id="869" %) |(% colspan="1" element-id="867" %) |(% colspan="1" element-id="865" %) |(% colspan="1" element-id="863" %) |(% colspan="1" element-id="861" %) |(% colspan="1" element-id="859" %) |(% colspan="1" element-id="857" %) 653 653 654 -== Create Order == 822 +(% element-id="855" %) 823 +== (% element-id="854" %)Create Order(%%) == 655 655 656 -=== Request example === 825 +(% element-id="853" %) 826 +=== (% element-id="852" %)Request example(%%) === 657 657 658 -|((( 828 +(% element-id="851" %) 829 +(% element-id="849" %)|(% element-id="848" %)(% element-id="847" %) 830 +((( 831 +(% element-id="846" %) 659 659 public CreateOrderResponse.Response SendLabAssignment(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid, string sikbVersion, string assignmentXML, string languageCode, bool needsApprovalIsSupported = false) 660 660 834 +(% element-id="845" %) 661 661 { 662 662 837 +(% element-id="844" %) 663 663 CreateOrderResponse.Response set = new CreateOrderResponse.Response(); 664 664 665 665 841 +(% element-id="841" %) 666 666 try 667 667 844 +(% element-id="840" %) 668 668 { 669 669 847 +(% element-id="839" %) 670 670 bool useZipstream = true; 671 671 672 672 851 +(% element-id="836" %) 673 673 MultipartFormDataContent content = new MultipartFormDataContent(); 674 674 675 675 855 +(% element-id="833" %) 676 676 ~/~/Add Formdata 677 677 858 +(% element-id="832" %) 678 678 var formDataDictionary = new[] 679 679 861 +(% element-id="831" %) 680 680 { 681 681 864 +(% element-id="830" %) 682 682 new KeyValuePair<string, string>("userName", WebserviceUsername), 683 683 867 +(% element-id="829" %) 684 684 new KeyValuePair<string, string>("password", WebservicePassword), 685 685 870 +(% element-id="828" %) 686 686 new KeyValuePair<string, string>("customerUserName", CustomerUsername), 687 687 873 +(% element-id="827" %) 688 688 new KeyValuePair<string, string>("clientId", customerid), 689 689 876 +(% element-id="826" %) 690 690 new KeyValuePair<string, string>("sikbVersion", sikbVersion), 691 691 879 +(% element-id="825" %) 692 692 new KeyValuePair<string, string>("languageCode", languageCode), 693 693 882 +(% element-id="824" %) 694 694 new KeyValuePair<string, string>("useZip", useZipstream.ToString() ), 695 695 885 +(% element-id="823" %) 696 696 new KeyValuePair<string, string>("needsApprovalIsSupported", needsApprovalIsSupported.ToString() ), 697 697 888 +(% element-id="822" %) 698 698 ~/~/new KeyValuePair<string, string>("orderXml", ZipStreamHelper.CompressToBase64String(assignmentXML)), 699 699 891 +(% element-id="821" %) 700 700 ~/~/new KeyValuePair<string, string>("orderXml", assignmentXML), 701 701 894 +(% element-id="820" %) 702 702 }; 703 703 897 +(% element-id="819" %) 704 704 foreach (var item in formDataDictionary) 705 705 900 +(% element-id="818" %) 706 706 { 707 707 903 +(% element-id="817" %) 708 708 content.Add(new StringContent(item.Value), $"\"{item.Key}\""); 709 709 906 +(% element-id="816" %) 710 710 } 711 711 712 712 910 +(% element-id="813" %) 713 713 string filexml = string.Empty; 714 714 913 +(% element-id="812" %) 715 715 if (useZipstream) 716 716 916 +(% element-id="811" %) 717 717 { 718 718 919 +(% element-id="810" %) 719 719 filexml = ZipStreamHelper.CompressToBase64String(assignmentXML); 720 720 922 +(% element-id="809" %) 721 721 } 722 722 925 +(% element-id="808" %) 723 723 else 724 724 928 +(% element-id="807" %) 725 725 { 726 726 931 +(% element-id="806" %) 727 727 filexml = assignmentXML; 728 728 934 +(% element-id="805" %) 729 729 } 730 730 731 731 938 +(% element-id="802" %) 732 732 ~/~/Add filecontent 733 733 941 +(% element-id="801" %) 734 734 var fileContent = new ByteArrayContent(ZipStreamHelper.stringToByteArray(filexml)); 735 735 944 +(% element-id="800" %) 736 736 fileContent.Headers.ContentDisposition = 737 737 947 +(% element-id="799" %) 738 738 new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") ~/~/<- 'form-data' instead of 'attachment' 739 739 950 +(% element-id="798" %) 740 740 { 741 741 953 +(% element-id="797" %) 742 742 Name = "\"orderXml\"", ~/~/ \" is needed so the message contains the quotes, wihtout it will fail 743 743 956 +(% element-id="796" %) 744 744 FileName = "\"VivaTerraIndexAssignment.xml\"" 745 745 959 +(% element-id="795" %) 746 746 }; 747 747 962 +(% element-id="794" %) 748 748 fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/xml"); 749 749 965 +(% element-id="793" %) 750 750 content.Add(fileContent); 751 751 752 752 969 +(% element-id="790" %) 753 753 ~/~/Start sending 754 754 755 755 973 +(% element-id="787" %) 756 756 HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/CreateOrder", content).Result; 757 757 976 +(% element-id="786" %) 758 758 response.EnsureSuccessStatusCode(); 759 759 979 +(% element-id="785" %) 760 760 string responseMessage = response.Content.ReadAsStringAsync().Result; 761 761 762 762 983 +(% element-id="782" %) 763 763 if (string.IsNullOrEmpty(responseMessage)) 764 764 986 +(% element-id="781" %) 765 765 { 766 766 989 +(% element-id="780" %) 767 767 throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " /CreateOrder" + "]"); 768 768 992 +(% element-id="779" %) 769 769 } 770 770 995 +(% element-id="778" %) 771 771 using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~) 772 772 998 +(% element-id="777" %) 773 773 { 774 774 1001 +(% element-id="776" %) 775 775 XmlSerializer serializer = new XmlSerializer(typeof(CreateOrderResponse.Response)); 776 776 1004 +(% element-id="775" %) 777 777 set = (CreateOrderResponse.Response)serializer.Deserialize(ms); 778 778 1007 +(% element-id="774" %) 779 779 } 780 780 781 781 1011 +(% element-id="771" %) 782 782 ~/~/Can contain a PDf with price information 783 783 1014 +(% element-id="770" %) 784 784 if (set.UseZip && !string.IsNullOrEmpty(set.FileContent)) 785 785 1017 +(% element-id="769" %) 786 786 { 787 787 1020 +(% element-id="768" %) 788 788 ~/~/convert from base64 string back to normal 789 789 1023 +(% element-id="767" %) 790 790 set.FileContent = ZipStreamHelper.DecompressBase64StringToString(set.FileContent); 791 791 1026 +(% element-id="766" %) 792 792 } 793 793 794 794 1030 +(% element-id="763" %) 795 795 } 796 796 1033 +(% element-id="762" %) 797 797 catch (Exception ex) 798 798 1036 +(% element-id="761" %) 799 799 { 800 800 1039 +(% element-id="760" %) 801 801 #region handle exception 802 802 803 803 1043 +(% element-id="757" %) 804 804 set.Status = new BusinessEntities.LabRestService.CreateOrderResponse.ResponseStatus(); 805 805 1046 +(% element-id="756" %) 806 806 set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString(); 807 807 1049 +(% element-id="755" %) 808 808 set.Status.ErrorMessage = "Exception occurred in CreateOrder (username: " + WebserviceUsername + ") with message: " + ex.Message; 809 809 810 810 1053 +(% element-id="752" %) 811 811 ex.Data.Add("WebserviceUsername", WebserviceUsername); 812 812 1056 +(% element-id="751" %) 813 813 ex.Data.Add("WebservicePassword", WebservicePassword); 814 814 1059 +(% element-id="750" %) 815 815 ex.Data.Add("CustomerUsername", CustomerUsername); 816 816 1062 +(% element-id="749" %) 817 817 ex.Data.Add("sikbVersion", sikbVersion); 818 818 1065 +(% element-id="748" %) 819 819 ex.Data.Add("customerid", customerid); 820 820 821 821 1069 +(% element-id="745" %) 822 822 ExceptionHandler.HandleException(ex); 823 823 1072 +(% element-id="744" %) 824 824 #endregion 825 825 1075 +(% element-id="743" %) 826 826 } 827 827 828 828 1079 +(% element-id="740" %) 829 829 return set; 830 830 1082 +(% element-id="739" %) 831 831 } 832 832 ))) 833 833 834 -|((( 1086 +(% element-id="738" %) 1087 +(% element-id="736" %)|(% element-id="735" %)(% element-id="734" %) 1088 +((( 1089 +(% element-id="733" %) 835 835 POST https:~/~/<URL>/CreateOrder HTTP/1.1 836 836 1092 +(% element-id="732" %) 837 837 Content-Type: multipart/form-data; boundary="28a3e130-70c9-4a1a-b544-a802a1ade6ca" 838 838 1095 +(% element-id="731" %) 839 839 Host: 81.175.89.24 840 840 1098 +(% element-id="730" %) 841 841 Content-Length: 5010 842 842 1101 +(% element-id="729" %) 843 843 Expect: 100-continue 844 844 845 845 1105 +(% element-id="726" %) 846 846 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 847 847 1108 +(% element-id="725" %) 848 848 Content-Type: text/plain; charset=utf-8 849 849 1111 +(% element-id="724" %) 850 850 Content-Disposition: form-data; name="userName" 851 851 852 852 1115 +(% element-id="721" %) 853 853 <Webservice_Username> 854 854 1118 +(% element-id="720" %) 855 855 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 856 856 1121 +(% element-id="719" %) 857 857 Content-Type: text/plain; charset=utf-8 858 858 1124 +(% element-id="718" %) 859 859 Content-Disposition: form-data; name="password" 860 860 861 861 1128 +(% element-id="715" %) 862 862 <Webservice_Password> 863 863 1131 +(% element-id="714" %) 864 864 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 865 865 1134 +(% element-id="713" %) 866 866 Content-Type: text/plain; charset=utf-8 867 867 1137 +(% element-id="712" %) 868 868 Content-Disposition: form-data; name="customerUserName" 869 869 870 870 1141 +(% element-id="709" %) 871 871 <Customer_Username or token> 872 872 1144 +(% element-id="708" %) 873 873 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 874 874 1147 +(% element-id="707" %) 875 875 Content-Type: text/plain; charset=utf-8 876 876 1150 +(% element-id="706" %) 877 877 Content-Disposition: form-data; name="clientId" 878 878 879 879 1154 +(% element-id="703" %) 880 880 300 881 881 1157 +(% element-id="702" %) 882 882 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 883 883 1160 +(% element-id="701" %) 884 884 Content-Type: text/plain; charset=utf-8 885 885 1163 +(% element-id="700" %) 886 886 Content-Disposition: form-data; name="sikbVersion" 887 887 888 888 1167 +(% element-id="697" %) 889 889 13.4.0 890 890 1170 +(% element-id="696" %) 891 891 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 892 892 1173 +(% element-id="695" %) 893 893 Content-Type: text/plain; charset=utf-8 894 894 1176 +(% element-id="694" %) 895 895 Content-Disposition: form-data; name="languageCode" 896 896 897 897 1180 +(% element-id="691" %) 898 898 nld 899 899 1183 +(% element-id="690" %) 900 900 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 901 901 1186 +(% element-id="689" %) 902 902 Content-Type: text/plain; charset=utf-8 903 903 1189 +(% element-id="688" %) 904 904 Content-Disposition: form-data; name="useZip" 905 905 906 906 1193 +(% element-id="685" %) 907 907 True 908 908 1196 +(% element-id="684" %) 909 909 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 910 910 1199 +(% element-id="683" %) 911 911 Content-Type: text/plain; charset=utf-8 912 912 1202 +(% element-id="682" %) 913 913 Content-Disposition: form-data; name="needsApprovalIsSupported" 914 914 915 915 1206 +(% element-id="679" %) 916 916 False 917 917 1209 +(% element-id="678" %) 918 918 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca 919 919 1212 +(% element-id="677" %) 920 920 Content-Disposition: form-data; name="orderXml"; filename="VivaTerraIndexAssignment.xml" 921 921 1215 +(% element-id="676" %) 922 922 Content-Type: application/xml 923 923 924 924 1219 +(% element-id="673" %) 925 925 <SIKB File in Zip stream Base64 encoding> 926 926 1222 +(% element-id="672" %) 927 927 ~-~-28a3e130-70c9-4a1a-b544-a802a1ade6ca~-~- 928 928 ))) 929 929 930 -=== Response example === 1226 +(% element-id="671" %) 1227 +=== (% element-id="670" %)Response example(%%) === 931 931 932 -|((( 1229 +(% element-id="669" %) 1230 +(% element-id="667" %)|(% element-id="666" %)(% element-id="665" %) 1231 +((( 1232 +(% element-id="664" %) 933 933 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 934 934 1235 +(% element-id="663" %) 935 935 <Response> 936 936 1238 +(% element-id="662" %) 937 937 <OrderId>7113828</OrderId> 938 938 1241 +(% element-id="661" %) 939 939 <NeedsApproval>True</NeedsApproval> 940 940 1244 +(% element-id="660" %) 941 941 <FileContent></FileContent> 942 942 1247 +(% element-id="659" %) 943 943 <Status> 944 944 1250 +(% element-id="658" %) 945 945 <StatusCode>1</StatusCode> 946 946 1253 +(% element-id="657" %) 947 947 <StatusCodeDescription>OK</StatusCodeDescription> 948 948 1256 +(% element-id="656" %) 949 949 <ErrorMessage></ErrorMessage> 950 950 1259 +(% element-id="655" %) 951 951 </Status></Response> 952 952 ))) 953 953 1263 +(% element-id="654" %) 1264 += (% element-id="653" %)Get Order status and Results XML and with PDF(%%) = 954 954 1266 +(% element-id="652" %) 1267 +== (% element-id="651" %)Solution/Design(%%) == 955 955 956 -= Get Order status and Results = 1269 +(% element-id="650" %) 1270 +TerraIndex will request per license/customer which results are ready. These are queried if the latest changes are newer than the last check. This way we never download too much unnecessarily and it can always be requested again. 957 957 958 -== Oplossing/Design == 959 959 960 -TerraIndex gaat opvragen per licentie, welke resultaten en klaar staan. Deze worden opgevraagd als de nieuwste wijzigingen nieuwer zijn dan de laatste keer checken. Zo downloaden we nooit onnodig teveel en is het altijd nogmaals op te vragen. 961 - 1273 +(% class="box infomessage" element-id="650" %) 1274 +((( 1275 +**Order status** we support as minimal: 1276 +3 = Reportnumber is known, no results yet, but it's the official report certificate number. This is optional to send. 1277 +4 = Conceptual, temporary results avaiable, but not final yet. This is optional to send. 1278 +5 = Final results are available. This is required to send. 1279 +))) 962 962 963 -(% class="table-hover" %) 964 -|Action|TerraIndex| |Laboratorium|Parameters/Message|Remarks|ResultCodes 965 -|1|Sends a request to the function: GetCustomers().|=>| |WebserviceUsername (string), 1281 +(% class="table-hover" element-id="647" %) 1282 +(% element-id="645" %)|(% element-id="644" %)Action|(% element-id="643" %)TerraIndex|(% element-id="642" %) |(% element-id="640" %)Laboratorium|(% element-id="639" %)Parameters/Message|(% element-id="638" %)Remarks|(% element-id="637" %)ResultCodes 1283 +(% element-id="636" %)|(% element-id="635" %)1|(% element-id="634" %)Sends a request to the function: GetCustomers().|=(% element-id="633" %)>|(% element-id="632" %) |(% element-id="630" %)WebserviceUsername (string), 966 966 WebservicePassword (string), 967 -CustomerUsername (string)|We want to skip the Password of the customer, and we introduce the WebserviceUsername + WebservicePassword.| 968 -|2| | |Receives the request and check the customers this username and searches the dateLastChanged for this Customer.| | | 969 -|3| |<=|Sends back the list of customers withthelastChangedTimestamp|ResultCode (),1285 +CustomerUsername (string)|(% element-id="627" %)We want to skip the Password of the customer, and we introduce the WebserviceUsername + WebservicePassword.|(% element-id="626" %) 1286 +(% element-id="624" %)|(% element-id="623" %)2|(% element-id="622" %) |(% element-id="620" %) |(% element-id="618" %)Receives the request and check the customers this username and searches the dateLastChanged for this Customer.|(% element-id="617" %) |(% element-id="615" %) |(% element-id="613" %) 1287 +(% element-id="611" %)|(% element-id="610" %)3|(% element-id="609" %) |(% element-id="607" %)<=|(% element-id="606" %)Sends back the list of customers to check for orderStatuses|(% element-id="605" %)ResultCode (), 970 970 ErrorMessage (string), 971 971 List<customer> , Customer: 972 972 CustomerCode (string), ... ... @@ -973,7 +973,7 @@ 973 973 CustomerName (string), 974 974 LabID (int), 975 975 LabName (string), 976 -ChangedTimeStamp (DateTime)|We receive the dateTimestamp instead of sending it, so we always get the full list and we are also able to delete customercodes.|1 = Success, 1294 +ChangedTimeStamp (DateTime)|(% element-id="597" %)We receive the dateTimestamp instead of sending it, so we always get the full list and we are also able to delete customercodes.|(% element-id="596" %)1 = Success, 977 977 2 = GeneralError, 978 978 3 = WrongSIKBVersion, 979 979 4 = InvalidCredentials, ... ... @@ -983,15 +983,15 @@ 983 983 8 = InvalidOrderId, 984 984 9 = OrderIdAlreadyApproved 985 985 10 = PDFNotAvailable 986 -|4|Receives the list of Customers. Read the Timestamp this Customer is last checked for Results/Statuses.| | | | | 987 -|5|Send for each Customer a call to retreive all orders statuses changes since a certain timestamp. 988 -Function: GetOrderStatuses()|=>| |WebserviceUsername (string), 1304 +(% element-id="586" %)|(% element-id="585" %)4|(% element-id="584" %)Receives the list of Customers. Read the Timestamp this Customer is last checked for Results/Statuses.|(% element-id="583" %) |(% element-id="581" %) |(% element-id="579" %) |(% element-id="577" %) |(% element-id="575" %) 1305 +(% element-id="573" %)|(% element-id="572" %)5|(% element-id="571" %)Send for each Customer a call to retreive all orders statuses changes since a certain timestamp. 1306 +Function: GetOrderStatuses()|=(% element-id="569" %)>|(% element-id="568" %) |(% element-id="566" %)WebserviceUsername (string), 989 989 WebservicePassword (string), 990 990 CustomerUsername (string), 991 991 CustomerCode (string), 992 -LastCheckedTimestamp (DateTime)|TerraIndex keeps track of the last check timestamp for each license.| 993 -|6| | |Receives the request and check the orders that are changed since the timestamp for this Customer.| | | 994 -|7| |<=|Sends back the list of orders with the status and lastChangedTimestamp|ResultCode (), 1310 +LastCheckedTimestamp (DateTime)|(% element-id="561" %)TerraIndex keeps track of the last check timestamp for each license.|(% element-id="560" %) 1311 +(% element-id="558" %)|(% element-id="557" %)6|(% element-id="556" %) |(% element-id="554" %) |(% element-id="552" %)Receives the request and check the orders that are changed since the timestamp for this Customer.|(% element-id="551" %) |(% element-id="549" %) |(% element-id="547" %) 1312 +(% element-id="545" %)|(% element-id="544" %)7|(% element-id="543" %) |(% element-id="541" %)<=|(% element-id="540" %)Sends back the list of orders with the status and lastChangedTimestamp|(% element-id="539" %)ResultCode (), 995 995 ErrorMessage (string), 996 996 OrderID (string), 997 997 LabassignmentGUID (GUID), ... ... @@ -998,10 +998,10 @@ 998 998 CertificateNumber (string) 999 999 OrderStatusSIKB (int), 1000 1000 Delayed (boolean), 1001 -ExpectedTimeStamp (DateTime),|OrderStatusSIKB is the SIKB Labassignment status. 1319 +ExpectedTimeStamp (DateTime),|(% element-id="531" %)OrderStatusSIKB is the SIKB Labassignment status. 1002 1002 \\Delayed is a boolean to tell the customer a order will be later ready then expected. The ExpectedTimestamp. 1003 1003 If Delayed for the firsttime, TerraIndex can send a notification to the users and show a different layout. 1004 -\\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|1 = Success, 1322 +\\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|(% element-id="525" %)1 = Success, 1005 1005 2 = GeneralError, 1006 1006 3 = WrongSIKBVersion, 1007 1007 4 = InvalidCredentials, ... ... @@ -1011,22 +1011,22 @@ 1011 1011 8 = InvalidOrderId, 1012 1012 9 = OrderIdAlreadyApproved 1013 1013 10 = PDFNotAvailable 1014 -|8|Receives the list of Orders with status. 1015 -Update the CertificateNr if this is not already present in the labassignment. | | | |CertifcateNumber could be new here, if the lab wasn't able to fill it directly at the ApproveOrder.| 1016 -|9|Send for each Order a call to retreive all results. 1017 -Function: GetOrderResults()|=>| |WebserviceUsername (string), 1332 +(% element-id="515" %)|(% element-id="514" %)8|(% element-id="513" %)Receives the list of Orders with status. 1333 +Update the CertificateNr if this is not already present in the labassignment. |(% element-id="511" %) |(% element-id="509" %) |(% element-id="507" %) |(% element-id="505" %)CertifcateNumber could be new here, if the lab wasn't able to fill it directly at the ApproveOrder.|(% element-id="504" %) 1334 +(% element-id="502" %)|(% element-id="501" %)9|(% element-id="500" %)Send for each Order a call to retreive all results. 1335 +Function: GetOrderResults()|=(% element-id="498" %)>|(% element-id="497" %) |(% element-id="495" %)WebserviceUsername (string), 1018 1018 WebservicePassword (string), 1019 1019 CustomerUsername (string), 1020 1020 CustomerCode (string), 1021 1021 OrderID (string), 1022 -SIKBVersion (string, default: '13.4.0')|Besides SIKB 13.4.0, TerraIndex also supports 9.0.0/8.0.0 etc.| 1023 -|10| | |Receives the request and creates a SIKB results file based on the version that is requested.| | | 1024 -|11| |<=|Sends back the results of the orders.|ResultCode (), 1340 +SIKBVersion (string, default: '13.4.0')|(% element-id="489" %)Besides SIKB 13.4.0, TerraIndex also supports 9.0.0/8.0.0 etc.|(% element-id="488" %) 1341 +(% element-id="486" %)|(% element-id="485" %)10|(% element-id="484" %) |(% element-id="482" %) |(% element-id="480" %)Receives the request and creates a SIKB results file based on the version that is requested.|(% element-id="479" %) |(% element-id="477" %) |(% element-id="475" %) 1342 +(% element-id="473" %)|(% element-id="472" %)11|(% element-id="471" %) |(% element-id="469" %)<=|(% element-id="468" %)Sends back the results of the orders.|(% element-id="467" %)ResultCode (), 1025 1025 ErrorMessage (string), 1026 1026 OrderId (string), 1027 1027 LabassignmentGUID (GUID), 1028 1028 FileContent_Base64 (string), 1029 -UseZipStream/UseZip (bool, default: 'false'),| |1 = Success, 1347 +UseZipStream/UseZip (bool, default: 'false'),|(% element-id="461" %) |(% element-id="459" %)1 = Success, 1030 1030 2 = GeneralError, 1031 1031 3 = WrongSIKBVersion, 1032 1032 4 = InvalidCredentials, ... ... @@ -1036,9 +1036,12 @@ 1036 1036 8 = InvalidOrderId, 1037 1037 9 = OrderIdAlreadyApproved 1038 1038 10 = PDFNotAvailable 1039 -|12|Receives the results and imports all results.| | | |((( 1357 +(% element-id="449" %)|(% element-id="448" %)12|(% element-id="447" %)Receives the results and imports all results.|(% element-id="446" %) |(% element-id="444" %) |(% element-id="442" %) |(% element-id="440" %)(% element-id="439" %) 1358 +((( 1359 +(% element-id="438" %) 1040 1040 Import will be done to corresponding samples based on: 1041 1041 1362 +(% element-id="437" %) 1042 1042 * Find Project by ProjectGUID (as provided in the labassignment) 1043 1043 * Find Project by ProjectCode (as provided in the Labassignment) 1044 1044 * Find Project and Labassignment by LabassignmentGUID (as provided in the Labassignment) ... ... @@ -1047,25 +1047,27 @@ 1047 1047 For lower version Labassignments the lab should return the 'old' idanlmons as SampleGUID in the XML. 1048 1048 * Find Samples (only if Project is already found ) by SampleName 1049 1049 1371 +(% element-id="429" %) 1050 1050 What is imported? 1051 1051 1374 +(% element-id="428" %) 1052 1052 * If Sample is found, the results in the XML are always all updated and/or inserted. 1053 1053 * If Project is found, but the sample is not; The Sample and the results are inserted as new Sample. (If watersample; fake filtertube and fake measurementpoints are created) 1054 -)))| 1055 -|13|If OrderStatus is 'Completed/Reported' (SIKBID: 5) 1377 +)))|(% element-id="425" %) 1378 +(% element-id="423" %)|(% element-id="422" %)13|(% element-id="421" %)If OrderStatus is 'Completed/Reported' (SIKBID: 5) 1056 1056 Request the PDF certificate. 1057 -Function: GetOrderPDF()|=>| |WebserviceUsername (string), 1380 +Function: GetOrderPDF()|=(% element-id="418" %)>|(% element-id="417" %) |(% element-id="415" %)WebserviceUsername (string), 1058 1058 WebservicePassword (string), 1059 1059 CustomerUsername (string), 1060 1060 CustomerCode (string), 1061 -OrderID (string),| | 1062 -|14| | |Receives the request and creates the PDF for the Order.| | | 1063 -|15| |<=|Sends back the PDF of the order.|ResultCode (), 1384 +OrderID (string),|(% element-id="410" %) |(% element-id="408" %) 1385 +(% element-id="406" %)|(% element-id="405" %)14|(% element-id="404" %) |(% element-id="402" %) |(% element-id="400" %)Receives the request and creates the PDF for the Order.|(% element-id="399" %) |(% element-id="397" %) |(% element-id="395" %) 1386 +(% element-id="393" %)|(% element-id="392" %)15|(% element-id="391" %) |(% element-id="389" %)<=|(% element-id="388" %)Sends back the PDF of the order.|(% element-id="387" %)ResultCode (), 1064 1064 ErrorMessage (string), 1065 1065 OrderId (string), 1066 1066 LabassignmentGUID (GUID), 1067 1067 FileContent_Base64 (string), 1068 -UseZipStream/UseZip (bool, default: 'false'),|If the PDF is not available yet, please give the resultcode: PDFNotAvailable.|1 = Success, 1391 +UseZipStream/UseZip (bool, default: 'false'),|(% element-id="381" %)If the PDF is not available yet, please give the resultcode: PDFNotAvailable.|(% element-id="380" %)1 = Success, 1069 1069 2 = GeneralError, 1070 1070 3 = WrongSIKBVersion, 1071 1071 4 = InvalidCredentials, ... ... @@ -1075,27 +1075,264 @@ 1075 1075 8 = InvalidOrderId, 1076 1076 9 = OrderIdAlreadyApproved 1077 1077 10 = PDFNotAvailable 1078 -|12|Receives the PDF and stores it for reporting and downloading.| | | | | 1401 +(% element-id="370" %)|(% element-id="369" %)12|(% element-id="368" %)Receives the PDF and stores it for reporting and downloading.|(% element-id="367" %) |(% element-id="365" %) |(% element-id="363" %) |(% element-id="361" %) |(% element-id="359" %) 1079 1079 1080 -= 1081 - Customer wantsosee real timeinformation about thestatusin the interface=1403 +(% element-id="357" %) 1404 +== Request example Order Status == 1082 1082 1083 -== Oplossing/Design == 1406 +public GetOrderStatusesCall.Response OrderStatuses(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid, DateTime? timestampSince) 1407 + { 1408 + GetOrderStatusesCall.Response set = new GetOrderStatusesCall.Response(); 1409 + string responseMessage = null; 1084 1084 1085 -Om in de interface van TerraIndex altijd up to date informatie te tonen als een gebruiker een labopdracht opent om de status te zien, hergebruiken we een deel van de GetOrderStatus, maar dan met specifiek een OrderID. 1411 + if (timestampSince == null) timestampSince = DateTime.Now.AddHours(-3); ~/~/Now, minus 3 hours 1412 + var formattedTimestamp = System.Xml.XmlConvert.ToString((DateTime)timestampSince, System.Xml.XmlDateTimeSerializationMode.RoundtripKind); 1086 1086 1414 + try 1415 + { 1416 + var content = new FormUrlEncodedContent(new[] 1417 + { 1418 + new KeyValuePair<string, string>("userName", WebserviceUsername), 1419 + new KeyValuePair<string, string>("password", WebservicePassword), 1420 + new KeyValuePair<string, string>("customerUsername", CustomerUsername), 1421 + new KeyValuePair<string, string>("clientId", customerid), 1422 + new KeyValuePair<string, string>("lastModified", formattedTimestamp), 1423 + }); 1424 + 1425 + HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/GetOrderStatuses", content).GetAwaiter().GetResult(); 1426 + responseMessage = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); 1427 + response.EnsureSuccessStatusCode(); 1428 + 1429 + if (string.IsNullOrEmpty(responseMessage)) 1430 + { 1431 + throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " /GetOrderStatuses" + "]"); 1432 + } 1433 + using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~) 1434 + { 1435 + XmlSerializer serializer = new XmlSerializer(typeof(GetOrderStatusesCall.Response)); 1436 + set = (GetOrderStatusesCall.Response)serializer.Deserialize(ms); 1437 + } 1438 + 1439 + } 1440 + catch (Exception ex) 1441 + { 1442 + #region handle exception 1443 + 1444 + set.Status = new BusinessEntities.LabRestService.GetOrderStatusesCall.ResponseStatus(); 1445 + set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString(); 1446 + set.Status.ErrorMessage = "Exception occurred in GetOrderStatuses (username: " + WebserviceUsername + ", password: " + WebservicePassword + ") with message: " + ex.ToString(); 1447 + 1448 + ex.Data.Add("Response", responseMessage); 1449 + ex.Data.Add("WebserviceUsername", WebserviceUsername); 1450 + ex.Data.Add("WebservicePassword", WebservicePassword); 1451 + ex.Data.Add("CustomerUsername", CustomerUsername); 1452 + ex.Data.Add("customerid", customerid); 1453 + ex.Data.Add("lastModified", formattedTimestamp); 1454 + ex.Data.Add("Result", set); 1455 + 1456 + throw; 1457 + #endregion 1458 + } 1459 + 1460 + return set; 1461 + } 1462 + 1463 +== Response Status XML Example == 1464 + 1465 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 1466 + <Response> 1467 + <Orders> 1468 + <Order> 1469 + <OrderStatus>Reported</OrderStatus> 1470 + <SIKBOrderId></SIKBOrderId> 1471 + <SIKBOrderStatus>5</SIKBOrderStatus> 1472 + <OrderId>4855422</OrderId> 1473 + <RapportNummer>12193838</RapportNummer> 1474 + <IsDelayed>False</IsDelayed> 1475 + <ExpectedOn>09/10/2015 17:15:00</ExpectedOn> 1476 + </Order> 1477 + <Order> 1478 + <OrderStatus>New</OrderStatus> 1479 + <SIKBOrderId></SIKBOrderId> 1480 + <SIKBOrderStatus>3</SIKBOrderStatus> 1481 + <OrderId>7106525</OrderId> 1482 + <RapportNummer>02808304-0749-41ae-96eb-d62b0365ebe4</RapportNummer> 1483 + <IsDelayed>False</IsDelayed> 1484 + <ExpectedOn></ExpectedOn> 1485 + </Order> 1486 + <Order> 1487 + <OrderStatus>New</OrderStatus> 1488 + <SIKBOrderId></SIKBOrderId> 1489 + <SIKBOrderStatus>3</SIKBOrderStatus> 1490 + <OrderId>7108954</OrderId> 1491 + <RapportNummer>10776137-ef99-4947-9a6a-9a3b32cd2dec</RapportNummer> 1492 + <IsDelayed>False</IsDelayed> 1493 + <ExpectedOn></ExpectedOn> 1494 + </Order> 1495 + <Order> 1496 + <OrderStatus>New</OrderStatus> 1497 + <SIKBOrderId></SIKBOrderId> 1498 + <SIKBOrderStatus>3</SIKBOrderStatus> 1499 + <OrderId>7110401</OrderId> 1500 + <RapportNummer>7881575c-bee2-409f-b304-9e472e7ac702</RapportNummer> 1501 + <IsDelayed>False</IsDelayed> 1502 + <ExpectedOn>11/10/2018 00:00:00</ExpectedOn> 1503 + </Order> 1504 + </Orders> 1505 + <Status> 1506 + <StatusCode>1</StatusCode> 1507 + <StatusCodeDescription>OK</StatusCodeDescription> 1508 + <AtmisErrorCode>0</AtmisErrorCode> 1509 + <ErrorMessage></ErrorMessage> 1510 + </Status> 1511 + </Response> 1512 + 1513 + 1514 +== Request example Order XML == 1515 + 1516 + 1517 +public GetOrderResultsCall.Response GetOrderResults(string WebserviceUsername, string WebservicePassword, string CustomerUsername, string customerid, string orderid, string sikbVersion) 1518 + { 1519 + GetOrderResultsCall.Response set = new GetOrderResultsCall.Response(); 1520 + string responseMessage = null; 1521 + try 1522 + { 1523 + bool useZipstream = true; 1524 + var content = new FormUrlEncodedContent(new[] 1525 + { 1526 + new KeyValuePair<string, string>("userName", WebserviceUsername), 1527 + new KeyValuePair<string, string>("password", WebservicePassword), 1528 + new KeyValuePair<string, string>("customerUsername", CustomerUsername), 1529 + new KeyValuePair<string, string>("clientId", customerid), 1530 + new KeyValuePair<string, string>("orderId", orderid), 1531 + new KeyValuePair<string, string>("sikbVersion", sikbVersion), 1532 + new KeyValuePair<string, string>("useZip", useZipstream.ToString() ), 1533 + }); 1534 + 1535 + HttpResponseMessage response = _HttpClient.PostAsync(_HttpClient.BaseAddress + "/GetOrderResults", content).GetAwaiter().GetResult(); 1536 + responseMessage = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); 1537 + response.EnsureSuccessStatusCode(); 1538 + 1539 + if (string.IsNullOrEmpty(responseMessage)) 1540 + { 1541 + throw new Exception("Empty response from: [" + _HttpClient.BaseAddress + " /GetOrderResults" + "]"); 1542 + } 1543 + using (var ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseMessage~)~)~) 1544 + { 1545 + XmlSerializer serializer = new XmlSerializer(typeof(GetOrderResultsCall.Response)); 1546 + set = (GetOrderResultsCall.Response)serializer.Deserialize(ms); 1547 + } 1548 + 1549 + if (useZipstream && !string.IsNullOrEmpty(set.FileContent)) 1550 + { 1551 + ~/~/convert from base64 string back to normal 1552 + ~/~/first check for real Base64, by checking there is no 'xml' in it 1553 + ~/~/If encoded, it wont contain either of the root XML tags of SIKB 1554 + if (!set.FileContent.Contains("FeatureCollectionIMSIKB0101") && !set.FileContent.Contains("labresultaat")) 1555 + { 1556 + set.FileContent = ZipStreamHelper.DecompressBase64StringToString(set.FileContent); 1557 + } 1558 + } 1559 + 1560 + } 1561 + catch (Exception ex) 1562 + { 1563 + #region handle exception 1564 + 1565 + set.Status = new BusinessEntities.LabRestService.GetOrderResultsCall.ResponseStatus(); 1566 + set.Status.StatusCode = ((int)ResultCodes.GeneralError).ToString(); 1567 + set.Status.ErrorMessage = "Exception occurred in GetOrderResults (username: " + WebserviceUsername + ", password: " + WebservicePassword + ") with message: " + ex.ToString(); 1568 + 1569 + ex.Data.Add("Response", responseMessage); 1570 + ex.Data.Add("WebserviceUsername", WebserviceUsername); 1571 + ex.Data.Add("WebservicePassword", WebservicePassword); 1572 + ex.Data.Add("CustomerUsername", CustomerUsername); 1573 + ex.Data.Add("sikbVersion", sikbVersion); 1574 + ex.Data.Add("customerid", customerid); 1575 + ex.Data.Add("orderId", orderid); 1576 + ex.Data.Add("Result", set); 1577 + 1578 + throw; 1579 + #endregion 1580 + } 1581 + 1582 + return set; 1583 + 1584 + 1585 +== Response Order XML Example == 1586 + 1587 + 1588 +<?xml version="1.0" encoding="UTF-8" standalone="no"?> 1589 + <Response> 1590 + <FileContent>DhVn3Q1AA==</FileContent> ~/~/BASE64 Zip Stream, SIKB0101 labresults xml file 1591 + <Status> 1592 + <StatusCode>1</StatusCode> 1593 + <StatusCodeDescription>OK</StatusCodeDescription> 1594 + <AtmisErrorCode>0</AtmisErrorCode> 1595 + <ErrorMessage></ErrorMessage> 1596 + </Status> 1597 + </Response> 1598 + 1599 + 1600 +== Request example Order PDF File == 1601 + 1602 + 1603 + 1604 + bool useZipstream = true; ~/~/ Always Supported, Keep it true!! 1605 + var content = new FormUrlEncodedContent(new[] 1606 + { 1607 + new KeyValuePair<string, string>("userName", WebserviceUsername), 1608 + new KeyValuePair<string, string>("password", WebservicePassword), 1609 + new KeyValuePair<string, string>("customerUsername", CustomerUsername), 1610 + new KeyValuePair<string, string>("clientId", customerid), 1611 + new KeyValuePair<string, string>("orderId", orderid), 1612 + new KeyValuePair<string, string>("useZip", useZipstream.ToString()), ~/~/ Always Supported, Keep it true!!. 1613 + new KeyValuePair<string, string>("languageCode", languageCode) 1614 + }); 1615 + 1616 + HttpResponseMessage response = _HttpClient.PostAsync("GetOrderPdf", content).GetAwaiter().GetResult(); 1617 + responseMessage = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); 1618 + response.EnsureSuccessStatusCode(); 1619 + 1620 + 1621 +== Response Order PDF Example == 1622 + 1623 + <Response> 1624 + <OrderId>7113737</OrderId> 1625 + <FileContent> 1626 + BASE64 encoded file 1627 + </FileContent> 1628 + <Status> 1629 + <StatusCode>1</StatusCode> 1630 + <StatusCodeDescription>OK</StatusCodeDescription> 1631 + <ErrorMessage></ErrorMessage> 1632 + </Status> 1633 + </Response> 1634 + 1635 + 1636 + 1637 +(% element-id="357" %) 1638 += (% element-id="356" %)Customer wants to see real time information about the status in the interface(%%) = 1639 + 1640 +(% element-id="354" %) 1641 +== (% element-id="353" %)Solution/Design(%%) == 1642 + 1643 +(% element-id="352" %) 1644 +To always show up-to-date information in the TerraIndex interface when a user opens a lab assignment to see the status, we reuse part of the GetOrderStatus, but with a specific OrderID. 1645 + 1646 +(% element-id="351" %) 1087 1087 ..NOT SUPPORTED YET... 1088 1088 1089 -(% class="table-hover" %) 1090 -|(% colspan="1" %)Action|(% colspan="1" %)TerraIndex|(% colspan="1" %) |(% colspan="1" %)Laboratorium|(% colspan="1" %)Parameters/Message|(% colspan="1" %)Remarks|(% colspan="1" %)ResultCodes 1091 -|1|Request the Order status for a single Order/Labassignment. 1092 -Function: GetOrderStatus()|=>| |WebserviceUsername (string), 1649 +(% class="table-hover" element-id="350" %) 1650 +(% element-id="348" %)|(% colspan="1" element-id="347" %)Action|(% colspan="1" element-id="346" %)TerraIndex|(% colspan="1" element-id="345" %) |(% colspan="1" element-id="343" %)Laboratorium|(% colspan="1" element-id="342" %)Parameters/Message|(% colspan="1" element-id="341" %)Remarks|(% colspan="1" element-id="340" %)ResultCodes 1651 +(% element-id="339" %)|(% element-id="338" %)1|(% element-id="337" %)Request the Order status for a single Order/Labassignment. 1652 +Function: GetOrderStatus()|=(% element-id="335" %)>|(% element-id="334" %) |(% element-id="332" %)WebserviceUsername (string), 1093 1093 WebservicePassword (string), 1094 1094 CustomerUsername (string), 1095 1095 CustomerCode (string), 1096 -OrderID (string),| | 1097 -|2| | |Receives the request and gets the status for the Order.| | | 1098 -|3| |<=|Sends back the status of the order.|ResultCode (), 1656 +OrderID (string),|(% element-id="327" %) |(% element-id="325" %) 1657 +(% element-id="323" %)|(% element-id="322" %)2|(% element-id="321" %) |(% element-id="319" %) |(% element-id="317" %)Receives the request and gets the status for the Order.|(% element-id="316" %) |(% element-id="314" %) |(% element-id="312" %) 1658 +(% element-id="310" %)|(% element-id="309" %)3|(% element-id="308" %) |(% element-id="306" %)<=|(% element-id="305" %)Sends back the status of the order.|(% element-id="304" %)ResultCode (), 1099 1099 ErrorMessage (string), 1100 1100 OrderID (string), 1101 1101 LabassignmentGUID (GUID), ... ... @@ -1102,10 +1102,10 @@ 1102 1102 CertificateNumber (string) 1103 1103 OrderStatusSIKB (int), 1104 1104 Delayed (boolean), 1105 -ExpectedTimeStamp (DateTime),|OrderStatusSIKB is the SIKB Labassignment status. 1665 +ExpectedTimeStamp (DateTime),|(% element-id="296" %)OrderStatusSIKB is the SIKB Labassignment status. 1106 1106 \\Delayed is a boolean to tell the customer a order will be later ready then expected. The ExpectedTimestamp. 1107 1107 If Delayed for the firsttime, TerraIndex can send a notification to the users and show a different layout. 1108 -\\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|1 = Success, 1668 +\\LabassignmentGUID is filled to support also Labassignments that are not from TerraIndex Ordered.|(% element-id="290" %)1 = Success, 1109 1109 2 = GeneralError, 1110 1110 3 = WrongSIKBVersion, 1111 1111 4 = InvalidCredentials, ... ... @@ -1115,12 +1115,8 @@ 1115 1115 8 = InvalidOrderId, 1116 1116 9 = OrderIdAlreadyApproved 1117 1117 10 = PDFNotAvailable 1118 -|4|Receives the status and shows in the interface the updated info. 1119 -Update the CertificateNr if this is not already present in the labassignment. | | | |CertifcateNumber could be new here, if the lab wasn't able to fill it directly at the ApproveOrder.| 1678 +(% element-id="280" %)|(% element-id="279" %)4|(% element-id="278" %)Receives the status and shows in the interface the updated info. 1679 +Update the CertificateNr if this is not already present in the labassignment. |(% element-id="276" %) |(% element-id="274" %) |(% element-id="272" %) |(% element-id="270" %)CertifcateNumber could be new here, if the lab wasn't able to fill it directly at the ApproveOrder.|(% element-id="269" %) 1120 1120 1121 - 1122 - 1123 - 1124 - 1125 - 1681 +(% element-id="265" %) 1126 1126
- 1712326445096-102.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.RobinHuisman - Size
-
... ... @@ -1,0 +1,1 @@ 1 +20.5 KB - Content
- 1712326465681-980.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.RobinHuisman - Size
-
... ... @@ -1,0 +1,1 @@ 1 +20.5 KB - Content
- 1712326492306-381.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.RobinHuisman - Size
-
... ... @@ -1,0 +1,1 @@ 1 +38.6 KB - Content
- 1712326520488-924.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.RobinHuisman - Size
-
... ... @@ -1,0 +1,1 @@ 1 +16.8 KB - Content
- Lab exchange.svg
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.RobinHuisman - Size
-
... ... @@ -1,0 +1,1 @@ 1 +44.4 KB - Content
-
... ... @@ -1,0 +1,1 @@ 1 +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="998" height="2266"><desc>title%20Digital%20Lab%20exchange%20Process%0A%0Aparticipant%20Lab%0Aparticipant%20TerraIndex%0Aparticipant%20TerraIndex_User%0A%0A%0A%3D%3D**Labdelivery%20data**%3D%3D%0Anote%20over%20Lab%2CTerraIndex_User%3ATerraIndex%20retrieves%20the%20'menu-card'%20so%20the%20user%20can%20order%20analysis.%0ATerraIndex-%3ELab%3ARequest%20the%20Client%20codes%20for%20a%20Customer%0ALab-%3ETerraIndex%3Areturn%20the%20active%20Client%20codes%0ATerraIndex-%3ELab%3ALabDelivery%20Data%2FFile%20for%20a%20Customer%20Client%20Code%0ALab-%3ETerraIndex%3Areturn%20the%20Labdelivery%20SIKB0101%20File.%0ATerraIndex-%3ETerraIndex%3AStore%20and%20import%20into%20User%20database.%0A%0A%3D%3D**Labassignment**%3D%3D%0Anote%20over%20Lab%2CTerraIndex_User%3ATerraIndex%20sends%20the%20'order'%20so%20the%20lab%20can%20process%20the%20samples.%0ATerraIndex-%3ETerraIndex_User%3AShow%20available%20Lab%20and%20Client%20codes%0ATerraIndex_User-%3ETerraIndex_User%3ASelect%20Lab%20and%20Client%20code%0ATerraIndex-%3ETerraIndex_User%3AShow%20available%20Analysis%20Sets%20and%20Urgencies%0ATerraIndex_User-%3ETerraIndex_User%3ASelect%20the%20samples%20%0ATerraIndex_User-%3ETerraIndex_User%3ASelect%20the%20needed%20analysis%20sets%0ATerraIndex_User-%3ETerraIndex%3AStore%2FSave%20the%20labassignment%20%0ATerraIndex_User-%3ETerraIndex%3ASend%20to%20the%20lab%0ATerraIndex-%3ETerraIndex%3AGenerate%20SIKB0101%20Labassignment%20file%0ATerraIndex-%3ELab%3ASend%20file%20to%20the%20Lab%0Anote%20over%20Lab%2CTerraIndex%3AOption%20A%0ALab-%3ETerraIndex%3AAcknowledge%20a%20success%20received%0ATerraIndex-%3ETerraIndex%3ASave%20status%0ATerraIndex-%3ETerraIndex_User%3AShow%20status%20and%20prevent%20further%20editing%0Anote%20over%20Lab%2CTerraIndex%3AOption%20B%0ALab-%3ETerraIndex%3AReturn%20Order%20price%20PDF%0ATerraIndex-%3ETerraIndex_User%3AShow%20Price%20and%20PDF%0ATerraIndex_User-%3ETerraIndex%3AApprove%20Order%0ATerraIndex-%3ELab%3AApprove%20Order%0ALab-%3ETerraIndex%3AAcknowledge%20a%20success%20received%0ATerraIndex-%3ETerraIndex%3ASave%20status%0ATerraIndex-%3ETerraIndex_User%3AShow%20status%20and%20prevent%20further%20editing%0A%0A%3D%3D**Labresults**%3D%3D%0Anote%20over%20Lab%2CTerraIndex_User%3ATerraIndex%20retrieves%20the%20'results'%20so%20the%20user%20can%20order%20report.%0ATerraIndex-%3ELab%3ARequests%20the%20Changed%20assignments%20since%20last%20asking%0ALab-%3ETerraIndex%3Areturn%20the%20changed%20orders%20with%20status%0ATerraIndex-%3ELab%3ARequest%20the%20results%20of%20a%20Ready%20order%0ALab-%3ETerraIndex%3Areturn%20the%20Analysisresults%20SIKB0101%20File.%0ATerraIndex-%3ETerraIndex%3AStore%20and%20import%20into%20User%20database.%0ATerraIndex-%3ETerraIndex_User%3A%0ATerraIndex_User-%3ETerraIndex_User%3AAsessments%20and%20Report%20results%0A%0A</desc><defs/><g><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g/><g><rect fill="white" stroke="none" x="0" y="0" width="998" height="2266"/></g><g/><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 95.73914152281817 L 38.12107170559766 2266.687660092818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 95.73914152281817 L 429.6485480430326 2266.687660092818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 95.73914152281817 L 762.4931325347643 2266.687660092818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray="12.565541,5.445067766666667"/></g><g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 8.167601650000002 51.63409261281818 L 68.07454176119532 51.63409261281818 L 68.07454176119532 95.73914152281817 L 8.167601650000002 95.73914152281817 L 8.167601650000002 51.63409261281818 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="25.8912972305" y="79.40393822281817" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Lab</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 377.2935124356771 51.63409261281818 L 482.003583650388 51.63409261281818 L 482.003583650388 95.73914152281817 L 377.2935124356771 95.73914152281817 L 377.2935124356771 51.63409261281818 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="395.0172080161771" y="79.40393822281817" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">TerraIndex</text></g><path fill="none" stroke="none"/><g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 690.5854922521158 51.63409261281818 L 834.4007728174128 51.63409261281818 L 834.4007728174128 95.73914152281817 L 690.5854922521158 95.73914152281817 L 690.5854922521158 51.63409261281818 Z" stroke-miterlimit="10" stroke-width="2.613632528" stroke-dasharray=""/></g><g><g/><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="708.3091878326159" y="79.40393822281817" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">TerraIndex_User</text></g></g><g><g><text fill="black" stroke="none" font-family="sans-serif" font-size="16pt" font-style="normal" font-weight="normal" text-decoration="normal" x="357.9024124145508" y="24.651306798181814" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Digital Lab exchange Process</text></g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 8.16760165 141.74996415115152 L 989.83239835 141.74996415115152 M 8.16760165 147.19503191781817 L 989.83239835 147.19503191781817 M 8.16760165 152.64009968448482 L 989.83239835 152.64009968448482" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 418.2817545035352 128.4095481228182 L 579.7182454964649 128.4095481228182 L 579.7182454964649 165.9805157128182 L 418.2817545035352 165.9805157128182 Z" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="bold" text-decoration="normal" x="441.15103912353516" y="151.27883274281814" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Labdelivery data</text></g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 23.419388735597657 190.4833206628182 L 762.4931325347643 190.4833206628182 L 777.1948155047643 205.1850036328182 L 777.1948155047643 228.05428825281817 L 23.419388735597657 228.05428825281817 L 23.419388735597657 190.4833206628182 M 762.4931325347643 190.4833206628182 L 762.4931325347643 205.1850036328182 L 777.1948155047643 205.1850036328182" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="181.57780066754424" y="213.35260528281813" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">TerraIndex retrieves the 'menu-card' so the user can order analysis.</text></g><g><g><rect fill="white" stroke="none" x="99.02225978702997" y="252.55709320281815" width="269.7251001745703" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="101.47254028202997" y="267.25877617281816" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Request the Client codes for a Customer</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 273.79285749281814 L 51.570389089264324 273.79285749281814" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(38.12107170559766,273.79285749281814) translate(-38.12107170559766,-273.79285749281814)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 51.73374112226433 266.9865227844848 L 38.12107170559766 273.79285749281814 L 51.73374112226433 280.5991922011515 Z"/></g></g><g><g><rect fill="white" stroke="none" x="136.50257594913936" y="298.2956624428181" width="194.76446785035156" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="138.95285644413934" y="312.9973454128181" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">return the active Client codes</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 319.53142673281815 L 416.1992306593659 319.53142673281815" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,319.53142673281815) translate(-429.6485480430326,-319.53142673281815)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 416.0358786263659 312.7250920244848 L 429.6485480430326 319.53142673281815 L 416.0358786263659 326.3377614411515 Z"/></g></g><g><g><rect fill="white" stroke="none" x="70.51475246281122" y="344.03423168281813" width="326.7401148230078" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="72.96503295781122" y="358.7359146528181" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">LabDelivery Data/File for a Customer Client Code</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 365.26999597281815 L 51.570389089264324 365.26999597281815" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(38.12107170559766,365.26999597281815) translate(-38.12107170559766,-365.26999597281815)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 51.73374112226433 358.4636612644848 L 38.12107170559766 365.26999597281815 L 51.73374112226433 372.0763306811515 Z"/></g></g><g><g><rect fill="white" stroke="none" x="109.60566432804559" y="389.77280092281813" width="248.55829109253906" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="112.05594482304559" y="404.4744838928181" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">return the Labdelivery SIKB0101 File.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 411.00856521281816 L 416.1992306593659 411.00856521281816" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,411.00856521281816) translate(-429.6485480430326,-411.00856521281816)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 416.0358786263659 404.2022305044848 L 429.6485480430326 411.00856521281816 L 416.0358786263659 417.8148999211515 Z"/></g></g><g><g><rect fill="white" stroke="none" x="448.97853861469923" y="435.5113701628182" width="244.47813667359375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="451.42881910969925" y="450.2130531328182" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Store and import into User database.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 456.74713445281816 L 494.9893612430326 456.74713445281816 L 494.9893612430326 477.9828987428182 L 443.09786542669923 477.9828987428182" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,477.9828987428182) translate(-429.6485480430326,-477.9828987428182)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 471.17656403448484 L 429.6485480430326 477.9828987428182 L 443.26121745969925 484.7892334511515 Z"/></g></g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 8.16760165 515.8261197211515 L 989.83239835 515.8261197211515 M 8.16760165 521.2711874878181 L 989.83239835 521.2711874878181 M 8.16760165 526.7162552544847 L 989.83239835 526.7162552544847" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 422.3654947379102 502.4857036928181 L 575.6345052620899 502.4857036928181 L 575.6345052620899 540.0566712828181 L 422.3654947379102 540.0566712828181 Z" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="bold" text-decoration="normal" x="445.23477935791016" y="525.3549883128181" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Labassignment</text></g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 23.419388735597657 564.559476232818 L 762.4931325347643 564.559476232818 L 777.1948155047643 579.261159202818 L 777.1948155047643 602.130443822818 L 23.419388735597657 602.130443822818 L 23.419388735597657 564.559476232818 M 762.4931325347643 564.559476232818 L 762.4931325347643 579.261159202818 L 777.1948155047643 579.261159202818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="190.93354407574736" y="587.4287608528181" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">TerraIndex sends the 'order' so the lab can process the samples.</text></g><g><g><rect fill="white" stroke="none" x="473.4094391884297" y="626.633248772818" width="245.3228022009375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="475.8597196834297" y="641.334931742818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show available Lab and Client codes</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 647.869013062818 L 749.0438151510976 647.869013062818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,647.869013062818) translate(-762.4931325347643,-647.869013062818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 748.8804631180976 641.0626783544847 L 762.4931325347643 647.869013062818 L 748.8804631180976 654.6753477711513 Z"/></g></g><g><g><rect fill="white" stroke="none" x="781.823123106431" y="672.3718180128179" width="180.12597908082031" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="784.273403601431" y="687.0735009828179" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Select Lab and Client code</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 693.607582302818 L 827.8339457347643 693.607582302818 L 827.8339457347643 714.843346592818 L 775.942449918431 714.843346592818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,714.843346592818) translate(-762.4931325347643,-714.843346592818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 776.105801951431 708.0370118844846 L 762.4931325347643 714.843346592818 L 776.105801951431 721.6496813011513 Z"/></g></g><g><g><rect fill="white" stroke="none" x="448.97853861469923" y="739.3461515428179" width="294.1846033483984" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="451.42881910969925" y="754.0478345128179" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show available Analysis Sets and Urgencies</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 760.5819158328179 L 749.0438151510976 760.5819158328179" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,760.5819158328179) translate(-762.4931325347643,-760.5819158328179)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 748.8804631180976 753.7755811244846 L 762.4931325347643 760.5819158328179 L 748.8804631180976 767.3882505411513 Z"/></g></g><g><g><rect fill="white" stroke="none" x="781.823123106431" y="785.0847207828178" width="132.83178962769531" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="784.273403601431" y="799.7864037528178" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Select the samples </text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 806.3204850728179 L 827.8339457347643 806.3204850728179 L 827.8339457347643 827.5562493628179 L 775.942449918431 827.5562493628179" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,827.5562493628179) translate(-762.4931325347643,-827.5562493628179)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 776.105801951431 820.7499146544845 L 762.4931325347643 827.5562493628179 L 776.105801951431 834.3625840711512 Z"/></g></g><g><g><rect fill="white" stroke="none" x="781.823123106431" y="852.0590543128178" width="211.08514656128906" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="784.273403601431" y="866.7607372828178" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Select the needed analysis sets</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 873.2948186028178 L 827.8339457347643 873.2948186028178 L 827.8339457347643 894.5305828928178 L 775.942449918431 894.5305828928178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,894.5305828928178) translate(-762.4931325347643,-894.5305828928178)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 776.105801951431 887.7242481844845 L 762.4931325347643 894.5305828928178 L 776.105801951431 901.3369176011512 Z"/></g></g><g><g><rect fill="white" stroke="none" x="493.7923966469258" y="919.0333878428178" width="204.55688728394531" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="496.2426771419258" y="933.7350708128178" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Store/Save the labassignment </text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 940.2691521328178 L 443.09786542669923 940.2691521328178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,940.2691521328178) translate(-429.6485480430326,-940.2691521328178)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 933.4628174244845 L 429.6485480430326 940.2691521328178 L 443.26121745969925 947.0754868411511 Z"/></g></g><g><g><rect fill="white" stroke="none" x="544.3077622475117" y="964.7719570828177" width="103.52615608277344" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="546.7580427425117" y="979.4736400528177" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Send to the lab</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 986.0077213728177 L 443.09786542669923 986.0077213728177" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,986.0077213728177) translate(-429.6485480430326,-986.0077213728177)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 979.2013866644844 L 429.6485480430326 986.0077213728177 L 443.26121745969925 992.8140560811511 Z"/></g></g><g><g><rect fill="white" stroke="none" x="448.97853861469923" y="1010.5105263228177" width="262.4308954626562" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="451.42881910969925" y="1025.2122092928178" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Generate SIKB0101 Labassignment file</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1031.7462906128178 L 494.9893612430326 1031.7462906128178 L 494.9893612430326 1052.9820549028177 L 443.09786542669923 1052.9820549028177" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1052.9820549028177) translate(-429.6485480430326,-1052.9820549028177)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 1046.1757201944845 L 429.6485480430326 1052.9820549028177 L 443.26121745969925 1059.788389611151 Z"/></g></g><g><g><rect fill="white" stroke="none" x="168.26704891056514" y="1077.4848598528179" width="131.2355219275" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="170.71732940556512" y="1092.186542822818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Send file to the Lab</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1098.7206241428178 L 51.570389089264324 1098.7206241428178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(38.12107170559766,1098.7206241428178) translate(-38.12107170559766,-1098.7206241428178)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 51.73374112226433 1091.9142894344845 L 38.12107170559766 1098.7206241428178 L 51.73374112226433 1105.526958851151 Z"/></g></g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 23.419388735597657 1123.2234290928177 L 429.6485480430326 1123.2234290928177 L 444.35023101303256 1137.9251120628178 L 444.35023101303256 1160.7943966828177 L 23.419388735597657 1160.7943966828177 L 23.419388735597657 1123.2234290928177 M 429.6485480430326 1123.2234290928177 L 429.6485480430326 1137.9251120628178 L 444.35023101303256 1137.9251120628178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="205.36298217656122" y="1146.0927137128178" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Option A</text></g><g><g><rect fill="white" stroke="none" x="123.46393306583856" y="1185.2972016328179" width="220.84175361695313" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="125.91421356083856" y="1199.998884602818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Acknowledge a success received</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 1206.5329659228178 L 416.1992306593659 1206.5329659228178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1206.5329659228178) translate(-429.6485480430326,-1206.5329659228178)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 416.0358786263659 1199.7266312144845 L 429.6485480430326 1206.5329659228178 L 416.0358786263659 1213.339300631151 Z"/></g></g><g><g><rect fill="white" stroke="none" x="448.97853861469923" y="1231.0357708728177" width="81.50038398804688" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="451.42881910969925" y="1245.7374538428178" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Save status</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1252.2715351628178 L 494.9893612430326 1252.2715351628178 L 494.9893612430326 1273.5072994528177 L 443.09786542669923 1273.5072994528177" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1273.5072994528177) translate(-429.6485480430326,-1273.5072994528177)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 1266.7009647444845 L 429.6485480430326 1273.5072994528177 L 443.26121745969925 1280.313634161151 Z"/></g></g><g><g><rect fill="white" stroke="none" x="466.08303080219923" y="1298.010104402818" width="259.9756189733984" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="468.53331129719925" y="1312.711787372818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show status and prevent further editing</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1319.2458686928178 L 749.0438151510976 1319.2458686928178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,1319.2458686928178) translate(-762.4931325347643,-1319.2458686928178)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 748.8804631180976 1312.4395339844846 L 762.4931325347643 1319.2458686928178 L 748.8804631180976 1326.052203401151 Z"/></g></g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 23.419388735597657 1343.7486736428177 L 429.6485480430326 1343.7486736428177 L 444.35023101303256 1358.4503566128178 L 444.35023101303256 1381.3196412328177 L 23.419388735597657 1381.3196412328177 L 23.419388735597657 1343.7486736428177 M 429.6485480430326 1343.7486736428177 L 429.6485480430326 1358.4503566128178 L 444.35023101303256 1358.4503566128178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="205.36298217656122" y="1366.6179582628179" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Option B</text></g><g><g><rect fill="white" stroke="none" x="154.0401354584167" y="1405.8224461828179" width="159.68934883179688" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="156.4904159534167" y="1420.524129152818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Return Order price PDF</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 1427.0582104728178 L 416.1992306593659 1427.0582104728178" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1427.0582104728178) translate(-429.6485480430326,-1427.0582104728178)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 416.0358786263659 1420.2518757644846 L 429.6485480430326 1427.0582104728178 L 416.0358786263659 1433.864545181151 Z"/></g></g><g><g><rect fill="white" stroke="none" x="525.5855027260274" y="1451.561015422818" width="140.9706751257422" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="528.0357832210274" y="1466.262698392818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show Price and PDF</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1472.7967797128179 L 749.0438151510976 1472.7967797128179" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,1472.7967797128179) translate(-762.4931325347643,-1472.7967797128179)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 748.8804631180976 1465.9904450044846 L 762.4931325347643 1472.7967797128179 L 748.8804631180976 1479.603114421151 Z"/></g></g><g><g><rect fill="white" stroke="none" x="545.5461350502461" y="1497.299584662818" width="101.04941047730469" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="547.9964155452461" y="1512.001267632818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Approve Order</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 1518.535348952818 L 443.09786542669923 1518.535348952818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1518.535348952818) translate(-429.6485480430326,-1518.535348952818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 1511.7290142444847 L 429.6485480430326 1518.535348952818 L 443.26121745969925 1525.3416836611511 Z"/></g></g><g><g><rect fill="white" stroke="none" x="183.3601046356628" y="1543.038153902818" width="101.04941047730469" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="185.81038513066278" y="1557.7398368728182" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Approve Order</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1564.273918192818 L 51.570389089264324 1564.273918192818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(38.12107170559766,1564.273918192818) translate(-38.12107170559766,-1564.273918192818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 51.73374112226433 1557.4675834844847 L 38.12107170559766 1564.273918192818 L 51.73374112226433 1571.0802529011512 Z"/></g></g><g><g><rect fill="white" stroke="none" x="123.46393306583856" y="1588.7767231428181" width="220.84175361695313" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="125.91421356083856" y="1603.4784061128182" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Acknowledge a success received</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 1610.012487432818 L 416.1992306593659 1610.012487432818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1610.012487432818) translate(-429.6485480430326,-1610.012487432818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 416.0358786263659 1603.2061527244848 L 429.6485480430326 1610.012487432818 L 416.0358786263659 1616.8188221411513 Z"/></g></g><g><g><rect fill="white" stroke="none" x="448.97853861469923" y="1634.515292382818" width="81.50038398804688" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="451.42881910969925" y="1649.216975352818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Save status</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1655.751056672818 L 494.9893612430326 1655.751056672818 L 494.9893612430326 1676.986820962818 L 443.09786542669923 1676.986820962818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1676.986820962818) translate(-429.6485480430326,-1676.986820962818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 1670.1804862544848 L 429.6485480430326 1676.986820962818 L 443.26121745969925 1683.7931556711512 Z"/></g></g><g><g><rect fill="white" stroke="none" x="466.08303080219923" y="1701.4896259128182" width="259.9756189733984" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="468.53331129719925" y="1716.1913088828182" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Show status and prevent further editing</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1722.725390202818 L 749.0438151510976 1722.725390202818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,1722.725390202818) translate(-762.4931325347643,-1722.725390202818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 748.8804631180976 1715.9190554944848 L 762.4931325347643 1722.725390202818 L 748.8804631180976 1729.5317249111513 Z"/></g></g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 8.16760165 1760.5686111811515 L 989.83239835 1760.5686111811515 M 8.16760165 1766.013678947818 L 989.83239835 1766.013678947818 M 8.16760165 1771.4587467144847 L 989.83239835 1771.4587467144847" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 439.06199742345706 1747.228195152818 L 558.938002576543 1747.228195152818 L 558.938002576543 1784.799162742818 L 439.06199742345706 1784.799162742818 Z" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="bold" text-decoration="normal" x="461.93128204345703" y="1770.0974797728181" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Labresults</text></g><path fill="white" stroke="black" paint-order="fill stroke markers" d=" M 23.419388735597657 1809.301967692818 L 762.4931325347643 1809.301967692818 L 777.1948155047643 1824.003650662818 L 777.1948155047643 1846.872935282818 L 23.419388735597657 1846.872935282818 L 23.419388735597657 1809.301967692818 M 762.4931325347643 1809.301967692818 L 762.4931325347643 1824.003650662818 L 777.1948155047643 1824.003650662818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="202.35803595807158" y="1832.171252312818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">TerraIndex retrieves the 'results' so the user can order report.</text></g><g><g><rect fill="white" stroke="none" x="57.45106227726434" y="1871.375740232818" width="352.86749519410154" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="59.90134277226434" y="1886.0774232028182" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Requests the Changed assignments since last asking</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1892.611504522818 L 51.570389089264324 1892.611504522818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(38.12107170559766,1892.611504522818) translate(-38.12107170559766,-1892.611504522818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 51.73374112226433 1885.8051698144848 L 38.12107170559766 1892.611504522818 L 51.73374112226433 1899.4178392311512 Z"/></g></g><g><g><rect fill="white" stroke="none" x="110.42169673771356" y="1917.1143094728181" width="246.92622627320313" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="112.87197723271356" y="1931.8159924428182" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">return the changed orders with status</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 1938.350073762818 L 416.1992306593659 1938.350073762818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,1938.350073762818) translate(-429.6485480430326,-1938.350073762818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 416.0358786263659 1931.5437390544848 L 429.6485480430326 1938.350073762818 L 416.0358786263659 1945.1564084711513 Z"/></g></g><g><g><rect fill="white" stroke="none" x="111.64574153751825" y="1962.8528787128182" width="244.47813667359375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="114.09602203251825" y="1977.5545616828183" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Request the results of a Ready order</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 1984.0886430028181 L 51.570389089264324 1984.0886430028181" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(38.12107170559766,1984.0886430028181) translate(-38.12107170559766,-1984.0886430028181)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 51.73374112226433 1977.282308294485 L 38.12107170559766 1984.0886430028181 L 51.73374112226433 1990.8949777111513 Z"/></g></g><g><g><rect fill="white" stroke="none" x="98.20982845158075" y="2008.5914479528183" width="271.3499628454687" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="100.66010894658075" y="2023.2931309228184" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">return the Analysisresults SIKB0101 File.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 38.12107170559766 2029.8272122428182 L 416.1992306593659 2029.8272122428182" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,2029.8272122428182) translate(-429.6485480430326,-2029.8272122428182)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 416.0358786263659 2023.020877534485 L 429.6485480430326 2029.8272122428182 L 416.0358786263659 2036.6335469511514 Z"/></g></g><g><g><rect fill="white" stroke="none" x="448.97853861469923" y="2054.3300171928186" width="244.47813667359375" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="451.42881910969925" y="2069.0317001628187" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Store and import into User database.</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 2075.5657814828182 L 494.9893612430326 2075.5657814828182 L 494.9893612430326 2096.8015457728184 L 443.09786542669923 2096.8015457728184" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(429.6485480430326,2096.8015457728184) translate(-429.6485480430326,-2096.8015457728184)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 443.26121745969925 2089.995211064485 L 429.6485480430326 2096.8015457728184 L 443.26121745969925 2103.607880481152 Z"/></g></g><g><g><rect fill="white" stroke="none" x="593.6205597938985" y="2121.304350722818" width="4.90056099" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="596.0708402888985" y="2136.006033692818" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve"></text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 429.6485480430326 2142.540115012818 L 749.0438151510976 2142.540115012818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,2142.540115012818) translate(-762.4931325347643,-2142.540115012818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 748.8804631180976 2135.7337803044848 L 762.4931325347643 2142.540115012818 L 748.8804631180976 2149.3464497211517 Z"/></g></g><g><g><rect fill="white" stroke="none" x="781.823123106431" y="2167.0429199628184" width="208.60125984253906" height="21.23576429"/></g><text fill="black" stroke="none" font-family="sans-serif" font-size="11pt" font-style="normal" font-weight="normal" text-decoration="normal" x="784.273403601431" y="2181.7446029328185" text-anchor="start" dominant-baseline="alphabetic" xml:space="preserve">Asessments and Report results</text></g><g><path fill="none" stroke="black" paint-order="fill stroke markers" d=" M 762.4931325347643 2188.278684252818 L 827.8339457347643 2188.278684252818 L 827.8339457347643 2209.514448542818 L 775.942449918431 2209.514448542818" stroke-miterlimit="10" stroke-width="1.3612669416666667" stroke-dasharray=""/><g transform="translate(762.4931325347643,2209.514448542818) translate(-762.4931325347643,-2209.514448542818)"><path fill="black" stroke="none" paint-order="stroke fill markers" d=" M 776.105801951431 2202.7081138344847 L 762.4931325347643 2209.514448542818 L 776.105801951431 2216.3207832511516 Z"/></g></g></g><g/><g/><g/></g></svg>
- Lab exchange.txt
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.RobinHuisman - Size
-
... ... @@ -1,0 +1,1 @@ 1 +2.2 KB - Content
-
... ... @@ -1,0 +1,50 @@ 1 +title Digital Lab exchange Process 2 + 3 +participant Lab 4 +participant TerraIndex 5 +participant TerraIndex_User 6 + 7 + 8 +==**Labdelivery data**== 9 +note over Lab,TerraIndex_User:TerraIndex retrieves the 'menu-card' so the user can order analysis. 10 +TerraIndex->Lab:Request the Client codes for a Customer 11 +Lab->TerraIndex:return the active Client codes 12 +TerraIndex->Lab:LabDelivery Data/File for a Customer Client Code 13 +Lab->TerraIndex:return the Labdelivery SIKB0101 File. 14 +TerraIndex->TerraIndex:Store and import into User database. 15 + 16 +==**Labassignment**== 17 +note over Lab,TerraIndex_User:TerraIndex sends the 'order' so the lab can process the samples. 18 +TerraIndex->TerraIndex_User:Show available Lab and Client codes 19 +TerraIndex_User->TerraIndex_User:Select Lab and Client code 20 +TerraIndex->TerraIndex_User:Show available Analysis Sets and Urgencies 21 +TerraIndex_User->TerraIndex_User:Select the samples 22 +TerraIndex_User->TerraIndex_User:Select the needed analysis sets 23 +TerraIndex_User->TerraIndex:Store/Save the labassignment 24 +TerraIndex_User->TerraIndex:Send to the lab 25 +TerraIndex->TerraIndex:Generate SIKB0101 Labassignment file 26 +TerraIndex->Lab:Send file to the Lab 27 +note over Lab,TerraIndex:Option A 28 +Lab->TerraIndex:Acknowledge a success received 29 +TerraIndex->TerraIndex:Save status 30 +TerraIndex->TerraIndex_User:Show status and prevent further editing 31 +note over Lab,TerraIndex:Option B 32 +Lab->TerraIndex:Return Order price PDF 33 +TerraIndex->TerraIndex_User:Show Price and PDF 34 +TerraIndex_User->TerraIndex:Approve Order 35 +TerraIndex->Lab:Approve Order 36 +Lab->TerraIndex:Acknowledge a success received 37 +TerraIndex->TerraIndex:Save status 38 +TerraIndex->TerraIndex_User:Show status and prevent further editing 39 + 40 +==**Labresults**== 41 +note over Lab,TerraIndex_User:TerraIndex retrieves the 'results' so the user can order report. 42 +TerraIndex->Lab:Requests the Changed assignments since last asking 43 +Lab->TerraIndex:return the changed orders with status 44 +TerraIndex->Lab:Request the results of a Ready order 45 +Lab->TerraIndex:return the Analysisresults SIKB0101 File. 46 +TerraIndex->TerraIndex:Store and import into User database. 47 +TerraIndex->TerraIndex_User: 48 +TerraIndex_User->TerraIndex_User:Asessments and Report results 49 + 50 +