HDISVC02 ;BPFO/JRP - PROCESS RECEIVED XML DATA;12/20/2004 ;;1.0;HEALTH DATA & INFORMATICS;;Feb 22, 2005 ; TERM(DATA,EINDX,AINDX,ERRARR,FILE,FIELD) ;Process 'Term' portion of XML document ; Input : DATA - Array reference from which the 'File' element ; begins (closed root) ; EINDX - Element index array (closed root) ; AINDX - Attribute index array (closed root) ; ERRARR - Error array (closed root) ; FILE - Value of 'FileNumber' element ; FIELD - Value of 'FieldNumber' element ;Output : None ; @ERRARR@(x) = Error text (if applicable) ; Notes : Existance/validity of input assumed (internal call) N INDX,REP,TERM,IREF,VUID,TMP,OOPS,DATE,NTNL S INDX=@EINDX@("Term") S REP=0 F S REP=+$O(@DATA@(INDX,REP)) Q:'REP D .S OOPS=0 .;Get elements .S TERM=$G(@DATA@(INDX,REP,@EINDX@("TermName"),1,"V")) .S IREF=$G(@DATA@(INDX,REP,@EINDX@("FacilityInternalReference"),1,"V")) .S VUID=$G(@DATA@(INDX,REP,@EINDX@("VUID"),1,"V")) .S NTNL=$G(@DATA@(INDX,REP,@EINDX@("NationalTerm"),1,"V")) .;Validate elements .F TMP="TERM","VUID","IREF","NTNL" I $G(@TMP)="" D ..S Y="TermName" ..I TMP="VUID" S Y="VUID" ..I TMP="IREF" S Y="FacilityInternalReference" ..I TMP="NTNL" S Y="NationalTerm" ..S X="XML element '"_Y_"' for repetition number "_REP_" of 'Term' " ..I TMP="TERM" S X="Repetition number "_REP_" of XML element 'Term' " ..I TMP'="TERM" S X=X_"("_TERM_") " ..S X=X_"did not have a value" ..D ADDERR^HDISVC00(X,ERRARR) ..S OOPS=1 .;Problem found - quit .I OOPS Q .;Does entry exist .I '$$EXISTS(FILE,FIELD,IREF) D ..S TMP="Value for 'FacilityInternalReference' ("_IREF_") not valid " ..S TMP=TMP_"for repetition number "_REP_" of 'Term' ("_TERM_")" ..D ADDERR^HDISVC00(TMP,ERRARR) ..S OOPS=1 .;Does received term match stored term .I 'OOPS I '$$VALMATCH(FILE,FIELD,IREF,TERM) D ..S TMP="Local value does not match received value for repetition " ..S TMP=TMP_"number "_REP_" of 'Term' ("_TERM_")" ..D ADDERR^HDISVC00(TMP,ERRARR) ..S OOPS=1 .;Is 'NationalTerm; valid value .I NTNL'=0 I NTNL'=1 D ..S TMP="Value for 'NationalTerm' ("_NTNL_") not valid for " ..S TMP=TMP_"repetition number "_REP_" of 'Term' ("_TERM_")" ..D ADDERR^HDISVC00(TMP,ERRARR) ..S OOPS=1 .;Problem found - don't continue .I OOPS Q .;Store/update VUID (inactivates term when appropriate) .D STOREIT(FILE,FIELD,IREF,VUID,NTNL,ERRARR) Q ; EXISTS(FILE,FIELD,IREF) ;Does entry exist ; Input : FILE - File number ; FIELD - Field number ; IREF - Internal reference ;Output : 1 if entry exists ; 0 if entry doesn't exist ; Notes : Existance/validity of input assumed (internal call) N EXIST,CODES S EXIST=0 S CODES=$$SETCODE(FILE,FIELD) ;Set of codes I CODES I $$EXTERNAL^DILFD(FILE,FIELD,"",IREF) S EXIST=1 ;Entry in file I 'CODES D .S IREF="`"_(+IREF) .I $$FIND1^DIC(FILE,"","",IREF) S EXIST=1 D CLEAN^DILF Q EXIST ; VALMATCH(FILE,FIELD,IREF,VALUE) ;Check input value against stored value ; Input : FILE - File number ; FIELD - Field number ; IREF - Internal reference ; VALUE - Value to verify ;Output : 1 if stored value equals input VALUE ; 0 if stored value does not equal input VALUE ; Notes : Existance/validity of input assumed (internal call) N MATCH,CODES,LOCVAL S MATCH=0 S CODES=$$SETCODE(FILE,FIELD) ;Set of codes I CODES S LOCVAL=$$EXTERNAL^DILFD(FILE,FIELD,"",IREF) ;Entry in file I 'CODES S LOCVAL=$$GET1^DIQ(FILE,IREF,FIELD) ;Case insensitive compare I $$UP^XLFSTR(LOCVAL)=$$UP^XLFSTR(VALUE) S MATCH=1 D CLEAN^DILF Q MATCH ; SETCODE(FILE,FIELD) ;Is field a set of codes ; Input : FILE - File number ; FIELD - Field number ;Output : 1 if field is a set of codes ; 0 if field is not a set of codes ; Notes : Existance/validity of input assumed (internal call) N CODES S CODES=0 I $$GET1^DID(FILE,FIELD,"","TYPE")="SET" S CODES=1 Q CODES ; STOREIT(FILE,FIELD,IREF,VUID,NTNL,ERRARR) ;Store VUID ; Input : FILE - File number ; FIELD - Field number ; IREF - Internal reference ; VUID - VUID ; NTNL - National term ; 0 = No (default) 1 = Yes ; ERRARR - Error array (closed root) ;Output : None ; @ERRARR@(x) = Error text (if applicable) ; Notes : Existance/validity of input assumed (internal call) ; : Call will automatically inactivate terms when appropriate ; N TMP,MASTER S NTNL=+$G(NTNL) ;Store VUID (also sets master entry flag, if appropriate) I '$$SETVUID^XTID(FILE,FIELD,IREF,VUID) D Q .S TMP="Unable to store "_VUID_" as the VUID for internal reference '" .S TMP=TMP_IREF_"' of field number "_FIELD_" in file number "_FILE .D ADDERR^HDISVC00(TMP,ERRARR) ;Get master entry flag S MASTER=$$GETMASTR^XTID(FILE,FIELD,IREF) ;Don't inactivate national terms that are the master entry I NTNL I MASTER Q ;Inactivate I '$$SETSTAT^XTID(FILE,FIELD,IREF,0,$$NOW^XLFDT()) D Q .S TMP="Unable to inactivate internal reference "_IREF_" of field " .S TMP=TMP_"number "_FIELD_" in file number "_FILE_". VUID for the" .S TMP=TMP_" "_$S(NTNL:"",1:"non-")_"standard term was "_VUID_"." .D ADDERR^HDISVC00(TMP,ERRARR) Q