| 1 | HDISVC02 ;BPFO/JRP - PROCESS RECEIVED XML DATA;12/20/2004 | 
|---|
| 2 | ;;1.0;HEALTH DATA & INFORMATICS;;Feb 22, 2005 | 
|---|
| 3 | ; | 
|---|
| 4 | TERM(DATA,EINDX,AINDX,ERRARR,FILE,FIELD) ;Process 'Term' portion of XML document | 
|---|
| 5 | ; Input : DATA - Array reference from which the 'File' element | 
|---|
| 6 | ;                begins (closed root) | 
|---|
| 7 | ;         EINDX - Element index array (closed root) | 
|---|
| 8 | ;         AINDX - Attribute index array (closed root) | 
|---|
| 9 | ;         ERRARR - Error array (closed root) | 
|---|
| 10 | ;         FILE - Value of 'FileNumber' element | 
|---|
| 11 | ;         FIELD - Value of 'FieldNumber' element | 
|---|
| 12 | ;Output : None | 
|---|
| 13 | ;         @ERRARR@(x) = Error text (if applicable) | 
|---|
| 14 | ; Notes : Existance/validity of input assumed (internal call) | 
|---|
| 15 | N INDX,REP,TERM,IREF,VUID,TMP,OOPS,DATE,NTNL | 
|---|
| 16 | S INDX=@EINDX@("Term") | 
|---|
| 17 | S REP=0 | 
|---|
| 18 | F  S REP=+$O(@DATA@(INDX,REP)) Q:'REP  D | 
|---|
| 19 | .S OOPS=0 | 
|---|
| 20 | .;Get elements | 
|---|
| 21 | .S TERM=$G(@DATA@(INDX,REP,@EINDX@("TermName"),1,"V")) | 
|---|
| 22 | .S IREF=$G(@DATA@(INDX,REP,@EINDX@("FacilityInternalReference"),1,"V")) | 
|---|
| 23 | .S VUID=$G(@DATA@(INDX,REP,@EINDX@("VUID"),1,"V")) | 
|---|
| 24 | .S NTNL=$G(@DATA@(INDX,REP,@EINDX@("NationalTerm"),1,"V")) | 
|---|
| 25 | .;Validate elements | 
|---|
| 26 | .F TMP="TERM","VUID","IREF","NTNL" I $G(@TMP)="" D | 
|---|
| 27 | ..S Y="TermName" | 
|---|
| 28 | ..I TMP="VUID" S Y="VUID" | 
|---|
| 29 | ..I TMP="IREF" S Y="FacilityInternalReference" | 
|---|
| 30 | ..I TMP="NTNL" S Y="NationalTerm" | 
|---|
| 31 | ..S X="XML element '"_Y_"' for repetition number "_REP_" of 'Term' " | 
|---|
| 32 | ..I TMP="TERM" S X="Repetition number "_REP_" of XML element 'Term' " | 
|---|
| 33 | ..I TMP'="TERM" S X=X_"("_TERM_") " | 
|---|
| 34 | ..S X=X_"did not have a value" | 
|---|
| 35 | ..D ADDERR^HDISVC00(X,ERRARR) | 
|---|
| 36 | ..S OOPS=1 | 
|---|
| 37 | .;Problem found - quit | 
|---|
| 38 | .I OOPS Q | 
|---|
| 39 | .;Does entry exist | 
|---|
| 40 | .I '$$EXISTS(FILE,FIELD,IREF) D | 
|---|
| 41 | ..S TMP="Value for 'FacilityInternalReference' ("_IREF_") not valid " | 
|---|
| 42 | ..S TMP=TMP_"for repetition number "_REP_" of 'Term' ("_TERM_")" | 
|---|
| 43 | ..D ADDERR^HDISVC00(TMP,ERRARR) | 
|---|
| 44 | ..S OOPS=1 | 
|---|
| 45 | .;Does received term match stored term | 
|---|
| 46 | .I 'OOPS I '$$VALMATCH(FILE,FIELD,IREF,TERM) D | 
|---|
| 47 | ..S TMP="Local value does not match received value for repetition " | 
|---|
| 48 | ..S TMP=TMP_"number "_REP_" of 'Term' ("_TERM_")" | 
|---|
| 49 | ..D ADDERR^HDISVC00(TMP,ERRARR) | 
|---|
| 50 | ..S OOPS=1 | 
|---|
| 51 | .;Is 'NationalTerm; valid value | 
|---|
| 52 | .I NTNL'=0 I NTNL'=1 D | 
|---|
| 53 | ..S TMP="Value for 'NationalTerm' ("_NTNL_") not valid for " | 
|---|
| 54 | ..S TMP=TMP_"repetition number "_REP_" of 'Term' ("_TERM_")" | 
|---|
| 55 | ..D ADDERR^HDISVC00(TMP,ERRARR) | 
|---|
| 56 | ..S OOPS=1 | 
|---|
| 57 | .;Problem found - don't continue | 
|---|
| 58 | .I OOPS Q | 
|---|
| 59 | .;Store/update VUID (inactivates term when appropriate) | 
|---|
| 60 | .D STOREIT(FILE,FIELD,IREF,VUID,NTNL,ERRARR) | 
|---|
| 61 | Q | 
|---|
| 62 | ; | 
|---|
| 63 | EXISTS(FILE,FIELD,IREF) ;Does entry exist | 
|---|
| 64 | ; Input : FILE - File number | 
|---|
| 65 | ;         FIELD - Field number | 
|---|
| 66 | ;         IREF - Internal reference | 
|---|
| 67 | ;Output : 1 if entry exists | 
|---|
| 68 | ;         0 if entry doesn't exist | 
|---|
| 69 | ; Notes : Existance/validity of input assumed (internal call) | 
|---|
| 70 | N EXIST,CODES | 
|---|
| 71 | S EXIST=0 | 
|---|
| 72 | S CODES=$$SETCODE(FILE,FIELD) | 
|---|
| 73 | ;Set of codes | 
|---|
| 74 | I CODES I $$EXTERNAL^DILFD(FILE,FIELD,"",IREF) S EXIST=1 | 
|---|
| 75 | ;Entry in file | 
|---|
| 76 | I 'CODES D | 
|---|
| 77 | .S IREF="`"_(+IREF) | 
|---|
| 78 | .I $$FIND1^DIC(FILE,"","",IREF) S EXIST=1 | 
|---|
| 79 | D CLEAN^DILF | 
|---|
| 80 | Q EXIST | 
|---|
| 81 | ; | 
|---|
| 82 | VALMATCH(FILE,FIELD,IREF,VALUE) ;Check input value against stored value | 
|---|
| 83 | ; Input : FILE - File number | 
|---|
| 84 | ;         FIELD - Field number | 
|---|
| 85 | ;         IREF - Internal reference | 
|---|
| 86 | ;         VALUE - Value to verify | 
|---|
| 87 | ;Output : 1 if stored value equals input VALUE | 
|---|
| 88 | ;         0 if stored value does not equal input VALUE | 
|---|
| 89 | ; Notes : Existance/validity of input assumed (internal call) | 
|---|
| 90 | N MATCH,CODES,LOCVAL | 
|---|
| 91 | S MATCH=0 | 
|---|
| 92 | S CODES=$$SETCODE(FILE,FIELD) | 
|---|
| 93 | ;Set of codes | 
|---|
| 94 | I CODES S LOCVAL=$$EXTERNAL^DILFD(FILE,FIELD,"",IREF) | 
|---|
| 95 | ;Entry in file | 
|---|
| 96 | I 'CODES S LOCVAL=$$GET1^DIQ(FILE,IREF,FIELD) | 
|---|
| 97 | ;Case insensitive compare | 
|---|
| 98 | I $$UP^XLFSTR(LOCVAL)=$$UP^XLFSTR(VALUE) S MATCH=1 | 
|---|
| 99 | D CLEAN^DILF | 
|---|
| 100 | Q MATCH | 
|---|
| 101 | ; | 
|---|
| 102 | SETCODE(FILE,FIELD) ;Is field a set of codes | 
|---|
| 103 | ; Input : FILE - File number | 
|---|
| 104 | ;         FIELD - Field number | 
|---|
| 105 | ;Output : 1 if field is a set of codes | 
|---|
| 106 | ;         0 if field is not a set of codes | 
|---|
| 107 | ; Notes : Existance/validity of input assumed (internal call) | 
|---|
| 108 | N CODES | 
|---|
| 109 | S CODES=0 | 
|---|
| 110 | I $$GET1^DID(FILE,FIELD,"","TYPE")="SET" S CODES=1 | 
|---|
| 111 | Q CODES | 
|---|
| 112 | ; | 
|---|
| 113 | STOREIT(FILE,FIELD,IREF,VUID,NTNL,ERRARR) ;Store VUID | 
|---|
| 114 | ; Input : FILE - File number | 
|---|
| 115 | ;         FIELD - Field number | 
|---|
| 116 | ;         IREF - Internal reference | 
|---|
| 117 | ;         VUID - VUID | 
|---|
| 118 | ;         NTNL - National term | 
|---|
| 119 | ;                0 = No (default)     1 = Yes | 
|---|
| 120 | ;         ERRARR - Error array (closed root) | 
|---|
| 121 | ;Output : None | 
|---|
| 122 | ;         @ERRARR@(x) = Error text (if applicable) | 
|---|
| 123 | ; Notes : Existance/validity of input assumed (internal call) | 
|---|
| 124 | ;       : Call will automatically inactivate terms when appropriate | 
|---|
| 125 | ; | 
|---|
| 126 | N TMP,MASTER | 
|---|
| 127 | S NTNL=+$G(NTNL) | 
|---|
| 128 | ;Store VUID (also sets master entry flag, if appropriate) | 
|---|
| 129 | I '$$SETVUID^XTID(FILE,FIELD,IREF,VUID) D  Q | 
|---|
| 130 | .S TMP="Unable to store "_VUID_" as the VUID for internal reference '" | 
|---|
| 131 | .S TMP=TMP_IREF_"' of field number "_FIELD_" in file number "_FILE | 
|---|
| 132 | .D ADDERR^HDISVC00(TMP,ERRARR) | 
|---|
| 133 | ;Get master entry flag | 
|---|
| 134 | S MASTER=$$GETMASTR^XTID(FILE,FIELD,IREF) | 
|---|
| 135 | ;Don't inactivate national terms that are the master entry | 
|---|
| 136 | I NTNL I MASTER Q | 
|---|
| 137 | ;Inactivate | 
|---|
| 138 | I '$$SETSTAT^XTID(FILE,FIELD,IREF,0,$$NOW^XLFDT()) D  Q | 
|---|
| 139 | .S TMP="Unable to inactivate internal reference "_IREF_" of field " | 
|---|
| 140 | .S TMP=TMP_"number "_FIELD_" in file number "_FILE_".  VUID for the" | 
|---|
| 141 | .S TMP=TMP_" "_$S(NTNL:"",1:"non-")_"standard term was "_VUID_"." | 
|---|
| 142 | .D ADDERR^HDISVC00(TMP,ERRARR) | 
|---|
| 143 | Q | 
|---|