| 1 | ONCSAPI3 ;Hines OIFO/SG - COLLABORATIVE STAGING (CALCULATE)  ; 5/18/04 9:47am | 
|---|
| 2 | ;;2.11;ONCOLOGY;**40**;Mar 07, 1995 | 
|---|
| 3 | ; | 
|---|
| 4 | ;--- SOAP REQUST TO THE COLLABORATIVE STAGING WEB SERVICE | 
|---|
| 5 | ; | 
|---|
| 6 | ; <?xml version="1.0" encoding="utf-8"?> | 
|---|
| 7 | ; <soap:Envelope | 
|---|
| 8 | ;   xmlns:soap="http://www.w3.org/2001/12/soap-envelope" | 
|---|
| 9 | ;   soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> | 
|---|
| 10 | ;   <soap:Body> | 
|---|
| 11 | ;     <CS-CALCULATE xmlns="http://vista.med.va.gov/oncology"> | 
|---|
| 12 | ;       <HIST> ... </HIST> | 
|---|
| 13 | ;       <SITE> ... </SITE> | 
|---|
| 14 | ;       <BEHAV> ... </BEHAV> | 
|---|
| 15 | ;       <GRADE> ... </GRADE> | 
|---|
| 16 | ;       <AGE> ... </AGE> | 
|---|
| 17 | ;       <SIZE> ... </SIZE> | 
|---|
| 18 | ;       <EXT> ... </EXT> | 
|---|
| 19 | ;       <EXTEVAL> ... </EXTEVAL> | 
|---|
| 20 | ;       <NODES> ... </NODES> | 
|---|
| 21 | ;       <NODESEVAL> ... </NODESEVAL> | 
|---|
| 22 | ;       <LNPOS> ... </LNPOS> | 
|---|
| 23 | ;       <LNEXAM> ... </LNEXAM> | 
|---|
| 24 | ;       <METS> ... </METS> | 
|---|
| 25 | ;       <METSEVAL> ... </METSEVAL> | 
|---|
| 26 | ;       <SSF1> ... </SSF1> | 
|---|
| 27 | ;       <SSF2> ... </SSF2> | 
|---|
| 28 | ;       <SSF3> ... </SSF3> | 
|---|
| 29 | ;       <SSF4> ... </SSF4> | 
|---|
| 30 | ;       <SSF5> ... </SSF5> | 
|---|
| 31 | ;       <SSF6> ... </SSF6> | 
|---|
| 32 | ;     </CS-CALCULATE> | 
|---|
| 33 | ;   </soap:Body > | 
|---|
| 34 | ; </soap:Envelope> | 
|---|
| 35 | ; | 
|---|
| 36 | ;--- SOAP RESPONSE FROM THE COLLABORATIVE STAGING WEB SERVICE | 
|---|
| 37 | ; | 
|---|
| 38 | ; <?xml version="1.0" encoding="utf-8"?> | 
|---|
| 39 | ; <soap:Envelope | 
|---|
| 40 | ;   xmlns:soap="http://www.w3.org/2001/12/soap-envelope" | 
|---|
| 41 | ;   soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> | 
|---|
| 42 | ;   <soap:Body> | 
|---|
| 43 | ;     <CS-RESPONSE xmlns="http://vista.med.va.gov/oncology"> | 
|---|
| 44 | ;       <CS-STOR> | 
|---|
| 45 | ;         <AJCC> ... </AJCC> | 
|---|
| 46 | ;         <N> ... </N> | 
|---|
| 47 | ;         <NDESCR> ... </NDESCR> | 
|---|
| 48 | ;         <M> ... </M> | 
|---|
| 49 | ;         <MDESCR> ... </MDESCR> | 
|---|
| 50 | ;         <SS1977> ... </SS1977> | 
|---|
| 51 | ;         <SS2000> ... </SS2000> | 
|---|
| 52 | ;         <T> ... </T> | 
|---|
| 53 | ;         <TDESCR> ... </TDESCR | 
|---|
| 54 | ;       </CS-STOR> | 
|---|
| 55 | ;       <CS-DISP> | 
|---|
| 56 | ;         <AJCC> ... </AJCC> | 
|---|
| 57 | ;         <N> ... </N> | 
|---|
| 58 | ;         <NDESCR> ... </NDESCR> | 
|---|
| 59 | ;         <M> ... </M> | 
|---|
| 60 | ;         <MDESCR> ... </MDESCR> | 
|---|
| 61 | ;         <SS1977> ... </SS1977> | 
|---|
| 62 | ;         <SS2000> ... </SS2000> | 
|---|
| 63 | ;         <T> ... </T> | 
|---|
| 64 | ;         <TDESCR> ... </TDESCR> | 
|---|
| 65 | ;       </CS-DISP> | 
|---|
| 66 | ;       <APIVER> ... </APIVER> | 
|---|
| 67 | ;       <VERSION> ... </VERSION> | 
|---|
| 68 | ;     </CS-RESPONSE> | 
|---|
| 69 | ;     <soap:Fault> | 
|---|
| 70 | ;       <faultcode> ... </faultcode> | 
|---|
| 71 | ;       <faultstring> ... </faultstring> | 
|---|
| 72 | ;       <detail> | 
|---|
| 73 | ;         <ERROR> ... </ERROR> | 
|---|
| 74 | ;         <MSG> | 
|---|
| 75 | ;         ... | 
|---|
| 76 | ;         </MSG> | 
|---|
| 77 | ;         <RC> ... </RC> | 
|---|
| 78 | ;       </detail> | 
|---|
| 79 | ;     </soap:Fault> | 
|---|
| 80 | ;   </soap:Body > | 
|---|
| 81 | ; </soap:Envelope> | 
|---|
| 82 | ; | 
|---|
| 83 | Q | 
|---|
| 84 | ; | 
|---|
| 85 | ;***** CALLS THE COLLABORATIVE STAGING WEB SERVICE | 
|---|
| 86 | ; | 
|---|
| 87 | ; [.ONCSAPI]    Reference to the API descriptor (see ^ONCSAPI) | 
|---|
| 88 | ; | 
|---|
| 89 | ; .INPUT(       Reference to a local variable containg | 
|---|
| 90 | ;               input parameters. | 
|---|
| 91 | ; | 
|---|
| 92 | ;   "AGE")        Age at Diagnosis | 
|---|
| 93 | ;   "BEHAV")      Behavior Code ICD-O-3 | 
|---|
| 94 | ;   "EXT")        CS Extension | 
|---|
| 95 | ;   "EXTEVAL")    CS Size/Ext Eval | 
|---|
| 96 | ;   "GRADE")      Grade | 
|---|
| 97 | ;   "HIST")       Histologic Type ICD-O-3 | 
|---|
| 98 | ;   "LNPOS")      Regional Nodes Positive | 
|---|
| 99 | ;   "LNEXAM")     Regional Nodes Examined | 
|---|
| 100 | ;   "METS")       CS Mets at DX | 
|---|
| 101 | ;   "METSEVAL")   CS Mets Eval | 
|---|
| 102 | ;   "NODES")      CS Lymph Nodes | 
|---|
| 103 | ;   "NODESEVAL")  CS Reg Nodes Eval | 
|---|
| 104 | ;   "SITE")       Primary site | 
|---|
| 105 | ;   "SIZE")       CS Tumor Size | 
|---|
| 106 | ;   "SSF1")       CS Site-Specific Factor 1 | 
|---|
| 107 | ;   "SSF2")       CS Site-Specific Factor 2 | 
|---|
| 108 | ;   "SSF3")       CS Site-Specific Factor 3 | 
|---|
| 109 | ;   "SSF4")       CS Site-Specific Factor 4 | 
|---|
| 110 | ;   "SSF5")       CS Site-Specific Factor 5 | 
|---|
| 111 | ;   "SSF6")       CS Site-Specific Factor 6 | 
|---|
| 112 | ; | 
|---|
| 113 | ; .ONCSTOR(     Reference to a local variable where output | 
|---|
| 114 | ;               storage values are returned. | 
|---|
| 115 | ; | 
|---|
| 116 | ;   "AJCC")       Derived AJCC Stage Group | 
|---|
| 117 | ;   "N")          Derived AJCC N | 
|---|
| 118 | ;   "NDESCR")     Derived AJCC N Descriptor | 
|---|
| 119 | ;   "M")          Derived AJCC M | 
|---|
| 120 | ;   "MDESCR")     Derived AJCC M Descriptor | 
|---|
| 121 | ;   "SS1977")     Derived SS1977 | 
|---|
| 122 | ;   "SS2000")     Derived SS2000 | 
|---|
| 123 | ;   "T")          Derived AJCC T | 
|---|
| 124 | ;   "TDESCR")     Derived AJCC T Descriptor | 
|---|
| 125 | ; | 
|---|
| 126 | ; .ONCDISP(     Reference to a local variable where output | 
|---|
| 127 | ;               display values are returned. | 
|---|
| 128 | ; | 
|---|
| 129 | ;   "AJCC")       Derived AJCC Stage Group | 
|---|
| 130 | ;   "N")          Derived AJCC N | 
|---|
| 131 | ;   "NDESCR")     Derived AJCC N Descriptor | 
|---|
| 132 | ;   "M")          Derived AJCC M | 
|---|
| 133 | ;   "MDESCR")     Derived AJCC M Descriptor | 
|---|
| 134 | ;   "SS1977")     Derived SS1977 | 
|---|
| 135 | ;   "SS2000")     Derived SS2000 | 
|---|
| 136 | ;   "T")          Derived AJCC T | 
|---|
| 137 | ;   "TDESCR")     Derived AJCC T Descriptor | 
|---|
| 138 | ; | 
|---|
| 139 | ; .ONCSTAT(     Reference to a local variable where status | 
|---|
| 140 | ;               values are returned. | 
|---|
| 141 | ; | 
|---|
| 142 | ;   "APIVER")     Version of the CS API | 
|---|
| 143 | ; | 
|---|
| 144 | ;   "ERROR",      Error Code | 
|---|
| 145 | ;     Name)       Symbolic names of error bits (see | 
|---|
| 146 | ;                 the INVLDINP^ONCSAPI3 for details) | 
|---|
| 147 | ; | 
|---|
| 148 | ;   "MSG", | 
|---|
| 149 | ;     i)          Error message returned by the CStage_calculate | 
|---|
| 150 | ; | 
|---|
| 151 | ;   "RC")         Error code returned by the CS web-service | 
|---|
| 152 | ; | 
|---|
| 153 | ;   "VERSION")    Version of the service | 
|---|
| 154 | ; | 
|---|
| 155 | ; The ^TMP("ONCSAPI3",$J) global node is used by this function. | 
|---|
| 156 | ; | 
|---|
| 157 | ; Note: Patch XT*7.3*67 (VistA XML Parser)) is required for this | 
|---|
| 158 | ;       API to work. | 
|---|
| 159 | ; | 
|---|
| 160 | ; Return values: | 
|---|
| 161 | ; | 
|---|
| 162 | ;       <0  Error Descriptor (see ^ONCSAPI for details) | 
|---|
| 163 | ;           For example: | 
|---|
| 164 | ;             "-1^Missing input parameters^CALC+4^ONCSAPI" | 
|---|
| 165 | ; | 
|---|
| 166 | ;        0  Ok | 
|---|
| 167 | ; | 
|---|
| 168 | ;        1  Probably Ok (warnings) | 
|---|
| 169 | ; | 
|---|
| 170 | CALC(ONCSAPI,INPUT,ONCSTOR,ONCDISP,ONCSTAT) ; | 
|---|
| 171 | N CBK,ONCRDAT,ONCSDAT,ONCXML,RC,TMP,URL,X | 
|---|
| 172 | D CLEAR^ONCSAPIE() | 
|---|
| 173 | S ONCRDAT=$NA(^TMP("ONCSAPI3",$J)) | 
|---|
| 174 | K ONCDISP,ONCSTAT,ONCSTOR,@ONCRDAT | 
|---|
| 175 | F X="AJCC","N","NDESCR","M","MDESCR","SS1977","SS2000","T","TDESCR" D | 
|---|
| 176 | . S (ONCSTOR(X),ONCDISP(X))="" | 
|---|
| 177 | Q:$D(INPUT)<10 $$ERROR^ONCSAPIE(-1) | 
|---|
| 178 | ; | 
|---|
| 179 | ;--- Get the server URL | 
|---|
| 180 | S URL=$$GETCSURL^ONCSAPIU()  Q:URL<0 URL | 
|---|
| 181 | ; | 
|---|
| 182 | ;--- Prepare the request parameters | 
|---|
| 183 | S RC=$$PARAMS^ONCSAPIR("ONCSDAT","CS-CALCULATE",.INPUT) | 
|---|
| 184 | Q:RC<0 RC | 
|---|
| 185 | ; | 
|---|
| 186 | S RC=0  D | 
|---|
| 187 | . ;--- Call the web service | 
|---|
| 188 | . D:$G(ONCSAPI("DEBUG")) | 
|---|
| 189 | . . D ZW^ONCSAPIU("ONCSDAT","*** 'CALCULATE' REQUEST ***") | 
|---|
| 190 | . S RC=$$REQUEST^ONCSAPIR(URL,ONCRDAT,"ONCSDAT")  Q:RC<0 | 
|---|
| 191 | . D:$G(ONCSAPI("DEBUG")) | 
|---|
| 192 | . . D ZW^ONCSAPIU(ONCRDAT,"*** 'CALCULATE' RESPONSE ***") | 
|---|
| 193 | . ;--- Parse the results | 
|---|
| 194 | . D SETCBK(.CBK),EN^MXMLPRSE(ONCRDAT,.CBK,"W") | 
|---|
| 195 | . ;--- Check the CS error codes | 
|---|
| 196 | . S:$G(ONCXML("RC"))<0 ONCSTAT("RC")=ONCXML("RC") | 
|---|
| 197 | . D INVLDINP(.STATUS) | 
|---|
| 198 | . ;--- Check for parsing and web-service errors | 
|---|
| 199 | . S RC=$$CHKERR^ONCSAPIR(.ONCXML,$NA(ONCSTAT("MSG"))) | 
|---|
| 200 | ; | 
|---|
| 201 | ;--- Cleanup | 
|---|
| 202 | K ^TMP("ONCSAPI3",$J) | 
|---|
| 203 | Q $S(RC<0:RC,$D(ONCSTAT("MSG"))>1:1,1:0) | 
|---|
| 204 | ; | 
|---|
| 205 | ;***** COMPILES A LIST OF SYMBOLIC ERROR CODES | 
|---|
| 206 | ; | 
|---|
| 207 | ; .STATUS       Reference to a local variable where the list | 
|---|
| 208 | ;               of invalid input parameters is created. | 
|---|
| 209 | ; | 
|---|
| 210 | INVLDINP(STATUS) ; | 
|---|
| 211 | ;;01^ NONFAILMSG    ^ | 
|---|
| 212 | ;;02^ EXTAJCCFAIL   ^ CS Extension | 
|---|
| 213 | ;;03^ NODESAJCCFAIL ^ CS Lymph Nodes | 
|---|
| 214 | ;;04^ METSAJCCFAIL  ^ CS Mets at DX | 
|---|
| 215 | ;;05^ EXTEVALFAIL   ^ Ext Eval | 
|---|
| 216 | ;;06^ NODESEVALFAIL ^ Nodes Eval | 
|---|
| 217 | ;;07^ METSEVALFAIL  ^ Mets Eval | 
|---|
| 218 | ;;08^ STAGEAJCCFAIL ^ Stage Group | 
|---|
| 219 | ;;09^ EXT77FAIL     ^ SEER 77 Ext | 
|---|
| 220 | ;;10^ NODES77FAIL   ^ SEER 77 Nodes | 
|---|
| 221 | ;;11^ METS77FAIL    ^ SEER 77 Mets | 
|---|
| 222 | ;;12^ STAGE77FAIL   ^ SEER Summary Stage 77 | 
|---|
| 223 | ;;13^ EXT2000FAIL   ^ SEER 2000 Ext | 
|---|
| 224 | ;;14^ NODES2000FAIL ^ SEER 2000 Nodes | 
|---|
| 225 | ;;15^ METS2000FAIL  ^ SEER 2000 Mets | 
|---|
| 226 | ;;16^ STAGE2000FAIL ^ SEER Summary Stage 2000 | 
|---|
| 227 | ;;17^ SITEFAIL      ^ Primary Site | 
|---|
| 228 | ;;18^ HISTFAIL      ^ Histology | 
|---|
| 229 | ; | 
|---|
| 230 | N ERR,IB,IN,NLST,TMP | 
|---|
| 231 | S ERR=+$G(STATUS("ERROR"))  Q:'ERR | 
|---|
| 232 | S ERR=$REVERSE($$CNV^XLFUTL(ERR,2)) | 
|---|
| 233 | ;--- Analyze separate bits of the error code | 
|---|
| 234 | F IB=1:1:18  D:$E(ERR,IB) | 
|---|
| 235 | . S NLST=$TR($P($T(INVLDINP+IB),U,2)," ") | 
|---|
| 236 | . F IN=1:1  S TMP=$P(NLST,",",IN)  Q:TMP=""  D | 
|---|
| 237 | . . S STATUS("ERROR",TMP)="" | 
|---|
| 238 | Q | 
|---|
| 239 | ; | 
|---|
| 240 | ;***** SETS THE EVENT INTERFACE ENTRY POINTS | 
|---|
| 241 | SETCBK(CBK) ; | 
|---|
| 242 | ;;CHARACTERS^TEXT^ONCSAPI3 | 
|---|
| 243 | ; | 
|---|
| 244 | D SETCBK^ONCSAPIX(.CBK,"SETCBK^ONCSAPI3") | 
|---|
| 245 | Q | 
|---|
| 246 | ; | 
|---|
| 247 | ;***** TEXT CALLBACK FOR THE SAX PARSER | 
|---|
| 248 | ; | 
|---|
| 249 | ; TXT           Line of unmarked text | 
|---|
| 250 | ; | 
|---|
| 251 | TEXT(TXT) ; | 
|---|
| 252 | N ELMT,L,SECT | 
|---|
| 253 | ;--- Individual elements | 
|---|
| 254 | S L=$L(ONCXML("PATH"),","),ELMT=$P(ONCXML("PATH"),",",L-1,L) | 
|---|
| 255 | I ELMT="detail,MSG"  D  Q | 
|---|
| 256 | . S ONCSTAT("MSG",$O(ONCSTAT("MSG"," "),-1)+1)=$TR(TXT,U,"~") | 
|---|
| 257 | I ELMT="CS-RESPONSE,APIVER"  D  Q | 
|---|
| 258 | . S ONCSTAT("APIVER")=$G(ONCSTAT("APIVER"))_TXT | 
|---|
| 259 | I ELMT="CS-RESPONSE,VERSION"  D  Q | 
|---|
| 260 | . S ONCSTAT("VERSION")=$G(ONCSTAT("VERSION"))_TXT | 
|---|
| 261 | ;--- Sections | 
|---|
| 262 | S SECT=$P(ONCXML("PATH"),",",L-1),ELMT=$P(ONCXML("PATH"),",",L) | 
|---|
| 263 | I SECT="CS-DISP"  D  Q | 
|---|
| 264 | . S ONCDISP(ELMT)=$G(ONCDISP(ELMT))_TXT | 
|---|
| 265 | I SECT="CS-STOR"  D  Q | 
|---|
| 266 | . S ONCSTOR(ELMT)=$G(ONCSTOR(ELMT))_TXT | 
|---|
| 267 | I SECT="detail","ERROR"[ELMT  D  Q | 
|---|
| 268 | . S ONCSTAT(ELMT)=$G(ONCSTAT(ELMT))_TXT | 
|---|
| 269 | ;--- Default processing | 
|---|
| 270 | D TEXT^ONCSAPIX(TXT) | 
|---|
| 271 | Q | 
|---|