ONCSAPI3 ;Hines OIFO/SG - COLLABORATIVE STAGING (CALCULATE)  ; 5/18/04 9:47am
 ;;2.11;ONCOLOGY;**40**;Mar 07, 1995
 ;
 ;--- SOAP REQUST TO THE COLLABORATIVE STAGING WEB SERVICE
 ;
 ; 
 ; 
 ;   
 ;     
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;        ... 
 ;     
 ;   
 ; 
 ;
 ;--- SOAP RESPONSE FROM THE COLLABORATIVE STAGING WEB SERVICE
 ;
 ; 
 ; 
 ;   
 ;     
 ;       
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;       
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;          ... 
 ;       
 ;        ... 
 ;        ... 
 ;     
 ;     
 ;        ... 
 ;        ... 
 ;       
 ;          ... 
 ;         
 ;         ...
 ;         
 ;          ... 
 ;       
 ;     
 ;   
 ; 
 ;
 Q
 ;
 ;***** CALLS THE COLLABORATIVE STAGING WEB SERVICE
 ;
 ; [.ONCSAPI]    Reference to the API descriptor (see ^ONCSAPI)
 ;
 ; .INPUT(       Reference to a local variable containg
 ;               input parameters.
 ;
 ;   "AGE")        Age at Diagnosis
 ;   "BEHAV")      Behavior Code ICD-O-3
 ;   "EXT")        CS Extension
 ;   "EXTEVAL")    CS Size/Ext Eval
 ;   "GRADE")      Grade
 ;   "HIST")       Histologic Type ICD-O-3
 ;   "LNPOS")      Regional Nodes Positive
 ;   "LNEXAM")     Regional Nodes Examined
 ;   "METS")       CS Mets at DX
 ;   "METSEVAL")   CS Mets Eval
 ;   "NODES")      CS Lymph Nodes
 ;   "NODESEVAL")  CS Reg Nodes Eval
 ;   "SITE")       Primary site
 ;   "SIZE")       CS Tumor Size
 ;   "SSF1")       CS Site-Specific Factor 1
 ;   "SSF2")       CS Site-Specific Factor 2
 ;   "SSF3")       CS Site-Specific Factor 3
 ;   "SSF4")       CS Site-Specific Factor 4
 ;   "SSF5")       CS Site-Specific Factor 5
 ;   "SSF6")       CS Site-Specific Factor 6
 ;
 ; .ONCSTOR(     Reference to a local variable where output
 ;               storage values are returned.
 ;
 ;   "AJCC")       Derived AJCC Stage Group
 ;   "N")          Derived AJCC N
 ;   "NDESCR")     Derived AJCC N Descriptor
 ;   "M")          Derived AJCC M
 ;   "MDESCR")     Derived AJCC M Descriptor
 ;   "SS1977")     Derived SS1977
 ;   "SS2000")     Derived SS2000
 ;   "T")          Derived AJCC T
 ;   "TDESCR")     Derived AJCC T Descriptor
 ;
 ; .ONCDISP(     Reference to a local variable where output
 ;               display values are returned.
 ;
 ;   "AJCC")       Derived AJCC Stage Group
 ;   "N")          Derived AJCC N
 ;   "NDESCR")     Derived AJCC N Descriptor
 ;   "M")          Derived AJCC M
 ;   "MDESCR")     Derived AJCC M Descriptor
 ;   "SS1977")     Derived SS1977
 ;   "SS2000")     Derived SS2000
 ;   "T")          Derived AJCC T
 ;   "TDESCR")     Derived AJCC T Descriptor
 ;
 ; .ONCSTAT(     Reference to a local variable where status
 ;               values are returned.
 ;
 ;   "APIVER")     Version of the CS API
 ;
 ;   "ERROR",      Error Code
 ;     Name)       Symbolic names of error bits (see
 ;                 the INVLDINP^ONCSAPI3 for details)
 ;
 ;   "MSG",
 ;     i)          Error message returned by the CStage_calculate
 ;
 ;   "RC")         Error code returned by the CS web-service
 ;
 ;   "VERSION")    Version of the service
 ;
 ; The ^TMP("ONCSAPI3",$J) global node is used by this function.
 ;
 ; Note: Patch XT*7.3*67 (VistA XML Parser)) is required for this
 ;       API to work.
 ;
 ; Return values:
 ;
 ;       <0  Error Descriptor (see ^ONCSAPI for details)
 ;           For example:
 ;             "-1^Missing input parameters^CALC+4^ONCSAPI"
 ;
 ;        0  Ok
 ;
 ;        1  Probably Ok (warnings)
 ;
CALC(ONCSAPI,INPUT,ONCSTOR,ONCDISP,ONCSTAT) ;
 N CBK,ONCRDAT,ONCSDAT,ONCXML,RC,TMP,URL,X
 D CLEAR^ONCSAPIE()
 S ONCRDAT=$NA(^TMP("ONCSAPI3",$J))
 K ONCDISP,ONCSTAT,ONCSTOR,@ONCRDAT
 F X="AJCC","N","NDESCR","M","MDESCR","SS1977","SS2000","T","TDESCR" D
 . S (ONCSTOR(X),ONCDISP(X))=""
 Q:$D(INPUT)<10 $$ERROR^ONCSAPIE(-1)
 ;
 ;--- Get the server URL
 S URL=$$GETCSURL^ONCSAPIU()  Q:URL<0 URL
 ;
 ;--- Prepare the request parameters
 S RC=$$PARAMS^ONCSAPIR("ONCSDAT","CS-CALCULATE",.INPUT)
 Q:RC<0 RC
 ;
 S RC=0  D
 . ;--- Call the web service
 . D:$G(ONCSAPI("DEBUG"))
 . . D ZW^ONCSAPIU("ONCSDAT","*** 'CALCULATE' REQUEST ***")
 . S RC=$$REQUEST^ONCSAPIR(URL,ONCRDAT,"ONCSDAT")  Q:RC<0
 . D:$G(ONCSAPI("DEBUG"))
 . . D ZW^ONCSAPIU(ONCRDAT,"*** 'CALCULATE' RESPONSE ***")
 . ;--- Parse the results
 . D SETCBK(.CBK),EN^MXMLPRSE(ONCRDAT,.CBK,"W")
 . ;--- Check the CS error codes
 . S:$G(ONCXML("RC"))<0 ONCSTAT("RC")=ONCXML("RC")
 . D INVLDINP(.STATUS)
 . ;--- Check for parsing and web-service errors
 . S RC=$$CHKERR^ONCSAPIR(.ONCXML,$NA(ONCSTAT("MSG")))
 ;
 ;--- Cleanup
 K ^TMP("ONCSAPI3",$J)
 Q $S(RC<0:RC,$D(ONCSTAT("MSG"))>1:1,1:0)
 ;
 ;***** COMPILES A LIST OF SYMBOLIC ERROR CODES
 ;
 ; .STATUS       Reference to a local variable where the list
 ;               of invalid input parameters is created.
 ;
INVLDINP(STATUS) ;
 ;;01^ NONFAILMSG    ^
 ;;02^ EXTAJCCFAIL   ^ CS Extension
 ;;03^ NODESAJCCFAIL ^ CS Lymph Nodes
 ;;04^ METSAJCCFAIL  ^ CS Mets at DX
 ;;05^ EXTEVALFAIL   ^ Ext Eval
 ;;06^ NODESEVALFAIL ^ Nodes Eval
 ;;07^ METSEVALFAIL  ^ Mets Eval
 ;;08^ STAGEAJCCFAIL ^ Stage Group
 ;;09^ EXT77FAIL     ^ SEER 77 Ext
 ;;10^ NODES77FAIL   ^ SEER 77 Nodes
 ;;11^ METS77FAIL    ^ SEER 77 Mets
 ;;12^ STAGE77FAIL   ^ SEER Summary Stage 77
 ;;13^ EXT2000FAIL   ^ SEER 2000 Ext
 ;;14^ NODES2000FAIL ^ SEER 2000 Nodes
 ;;15^ METS2000FAIL  ^ SEER 2000 Mets
 ;;16^ STAGE2000FAIL ^ SEER Summary Stage 2000
 ;;17^ SITEFAIL      ^ Primary Site
 ;;18^ HISTFAIL      ^ Histology
 ;
 N ERR,IB,IN,NLST,TMP
 S ERR=+$G(STATUS("ERROR"))  Q:'ERR
 S ERR=$REVERSE($$CNV^XLFUTL(ERR,2))
 ;--- Analyze separate bits of the error code
 F IB=1:1:18  D:$E(ERR,IB)
 . S NLST=$TR($P($T(INVLDINP+IB),U,2)," ")
 . F IN=1:1  S TMP=$P(NLST,",",IN)  Q:TMP=""  D
 . . S STATUS("ERROR",TMP)=""
 Q
 ;
 ;***** SETS THE EVENT INTERFACE ENTRY POINTS
SETCBK(CBK) ;
 ;;CHARACTERS^TEXT^ONCSAPI3
 ;
 D SETCBK^ONCSAPIX(.CBK,"SETCBK^ONCSAPI3")
 Q
 ;
 ;***** TEXT CALLBACK FOR THE SAX PARSER
 ;
 ; TXT           Line of unmarked text
 ;
TEXT(TXT) ;
 N ELMT,L,SECT
 ;--- Individual elements
 S L=$L(ONCXML("PATH"),","),ELMT=$P(ONCXML("PATH"),",",L-1,L)
 I ELMT="detail,MSG"  D  Q
 . S ONCSTAT("MSG",$O(ONCSTAT("MSG"," "),-1)+1)=$TR(TXT,U,"~")
 I ELMT="CS-RESPONSE,APIVER"  D  Q
 . S ONCSTAT("APIVER")=$G(ONCSTAT("APIVER"))_TXT
 I ELMT="CS-RESPONSE,VERSION"  D  Q
 . S ONCSTAT("VERSION")=$G(ONCSTAT("VERSION"))_TXT
 ;--- Sections
 S SECT=$P(ONCXML("PATH"),",",L-1),ELMT=$P(ONCXML("PATH"),",",L)
 I SECT="CS-DISP"  D  Q
 . S ONCDISP(ELMT)=$G(ONCDISP(ELMT))_TXT
 I SECT="CS-STOR"  D  Q
 . S ONCSTOR(ELMT)=$G(ONCSTOR(ELMT))_TXT
 I SECT="detail","ERROR"[ELMT  D  Q
 . S ONCSTAT(ELMT)=$G(ONCSTAT(ELMT))_TXT
 ;--- Default processing
 D TEXT^ONCSAPIX(TXT)
 Q