Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: VPSCSQ1

VPSCSQ1.m

Go to the documentation of this file.
  1. VPSCSQ1 ;KC - preinstall routine to save off data and remove existing DD stucture;08/20/14 09:28
  1. ;;1.0;VA POINT OF SERVICE (KIOSKS);**14**;Aug 20, 2015;Build 26
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. QUIT
  1. ;
  1. ;
  1. EN ; Entry point for calling both tags to save off existing VPS information
  1. I $D(^DD(853.81133)) S ^TMP("VPS 1*14",$J,"DNC")=1 Q
  1. D EN0,EN1
  1. Q
  1. EN0 ; entry point for saving off existing VPS QUESTIONNAIRE INTERNAL NAME (File: 853.85, Field 3)
  1. N A,VPSARR
  1. S A=0
  1. S VPSARR="^TMP(""VPS QIN"",$J)"
  1. K @VPSARR
  1. F S A=$O(^VPS(853.85,A)) Q:'A S @VPSARR@(A,1,0)=$$GET1^DIQ(853.85,A_",",3)
  1. ;K ^TMP("VPS 853.85 HOLD")
  1. ;M ^TMP("VPS 853.85 HOLD",853.85)=^VPS(853.85)
  1. Q
  1. EN1 ; entry point for saving off existing VPS CSQ data
  1. ;
  1. ; Save off existing VPS CSQ data into TMP global
  1. N CSQARR,DFN
  1. S CSQARR="^TMP(""VPS CSQ"",$J)"
  1. K @CSQARR
  1. S DFN=0
  1. F S DFN=$O(^VPS(853.8,DFN)) Q:'DFN D GETS^DIQ(853.8,DFN_",","**","I",.CSQARR)
  1. ;K ^TMP("VPS 853.8 HOLD")
  1. ;M ^TMP("VPS 853.8 HOLD",853.8)=^VPS(853.8)
  1. H 2
  1. ;
  1. ; Remove existing VPS CSQ DD and data
  1. S DIU="^VPS(853.8,",DIU(0)="DS" D EN^DIU2
  1. ; now evironment is prepared for the installation of VPS*1.0*14
  1. ; which has a totally new data structure for VPS CSQ information
  1. Q
  1. ;
  1. ; Entry point for moving saved off information into new structure
  1. UPDATE ;
  1. I $G(^TMP("VPS 1*14",$J,"DNC"))=1 Q
  1. D EN2,EN3
  1. Q
  1. ;
  1. EN2 ; Entry point for moving VPS QUESTIONNAIRE INTERNAL NAME into its word processing field
  1. N A,VPSARR,FDAERR,QIN,DIK
  1. S A=0
  1. S VPSARR="^TMP(""VPS QIN"",$J)"
  1. F S A=$O(@VPSARR@(A)) Q:'A!$D(FDAERR) D WP^DIE(853.85,A_",",3,"","^TMP(""VPS QIN"",$J,"_A_")","FDAERR")
  1. ;
  1. ; Add leading space to Template ID field to prevent it from being evaluated as a number
  1. ;S A=0
  1. ;F S A=$O(^VPS(853.85,A)) Q:'A S QIN=$P(^VPS(853.85,A,0),U),QIN="VPS_"_QIN,$P(^VPS(853.85,A,0),U)=QIN
  1. K ^VPS(853.85,"B")
  1. S DIK="^VPS(853.85," D IXALL^DIK
  1. Q
  1. EN3 ; Entry point for moving previous CSQ information into the new CSQ data structure
  1. ;
  1. N CSQARR,DFN,SUB8,SUB81,SUB811
  1. N DTS,DTT,DTLM,DAT,INV,SCV,CS,PS,IA,TID,CREATOR
  1. N CNT,QNUM,QUEST,ANS,QCV
  1. ;
  1. S CSQARR="^TMP(""VPS CSQ"",$J)"
  1. ;
  1. S SUB8=""
  1. CSQ8 ;Obtain DFN
  1. S SUB8=$O(@CSQARR@(853.8,SUB8))
  1. G:SUB8="" DONE
  1. S DFN=@CSQARR@(853.8,SUB8,.01,"I") ; PATIENT
  1. ;
  1. S SUB81=""
  1. ; Obtain data from the 853.81 sub-file for given DFN
  1. CSQ81 ;
  1. S SUB81=$O(@CSQARR@(853.81,SUB81))
  1. G:SUB81="" CSQ8
  1. I $P(SUB81,",",2)'=DFN G CSQ81
  1. S DTS=@CSQARR@(853.81,SUB81,.01,"I") ; DATE/TIME STORED
  1. S DTT=@CSQARR@(853.81,SUB81,2,"I") ; DATE/TIME TAKEN
  1. S DTLM=@CSQARR@(853.81,SUB81,3,"I") ; DATE/TIME LAST MODIFIED
  1. S DAT=@CSQARR@(853.81,SUB81,4,"I")
  1. S INV=$$GET1^DIQ(200,DAT_",",.01) ; INTERVIEWER STAFF
  1. S SCV=@CSQARR@(853.81,SUB81,5,"I") ; SURVEY CALCULATED VALUE
  1. S CS=@CSQARR@(853.81,SUB81,6,"I") ; COMPLETION STATUS
  1. ; Convert completion status into new set values
  1. I CS="C" S CS=1
  1. E S CS=2
  1. S PS=@CSQARR@(853.81,SUB81,7,"I") ; PATIENT SAFETY
  1. ; Convert patient safety into new set values
  1. I PS="Y" S PS=1
  1. E S PS=2
  1. ;
  1. S IA=@CSQARR@(853.81,SUB81,8,"I") ; IMMEDIATE ACTION
  1. ; Convert immediate action into new set values
  1. I IA="Y" S IA=1
  1. E S IA=2
  1. ;
  1. S TID=@CSQARR@(853.81,SUB81,11,"I") ; QUESTIONNAIRE TEMPLATE ID
  1. S CREATOR=@CSQARR@(853.81,SUB81,12,"I") ; SURVEY CREATOR
  1. ;
  1. S SUB811=""
  1. S CNT=0
  1. K QNUM,QUEST,ANS,QCV
  1. ; Obtain data from the 853.811 sub-file for given DFN
  1. CSQ811 ;
  1. S SUB811=$O(@CSQARR@(853.811,SUB811))
  1. G:SUB811="" STORE
  1. I $P(SUB811,",",3)'=DFN G CSQ811 ; making sure dealing wiht same paitent
  1. I $P(SUB811,",",2)'=DTS G CSQ811 ; making sure information is for same date/time stored
  1. S CNT=CNT+1
  1. S QNUM(CNT)=@CSQARR@(853.811,SUB811,.01,"I") ; QUESTION NUMBER
  1. S QUEST(CNT)=@CSQARR@(853.811,SUB811,1,"I") ; QUESTION PRESENTED
  1. S ANS(CNT)=@CSQARR@(853.811,SUB811,2,"I") ; ANSWER RESPONSE PROVIDED
  1. S QCV(CNT)=@CSQARR@(853.811,SUB811,3,"I") ; QUESTION CALCULATED VALUE
  1. G CSQ811
  1. ;
  1. ; Create CSQ record for the information
  1. STORE ;
  1. ;
  1. ; STORE DATA
  1. D ADDDFN(DFN)
  1. D ADDQST(DFN,TID)
  1. D ADDSRVY(DFN,TID,DTS,CREATOR)
  1. D ADDRES(DFN,TID,DTS,DTT,DTLM,CS,PS,IA)
  1. D ADDQUEST(DFN,TID,DTS,DTLM,.QNUM,.QCV,.QUEST,.ANS)
  1. G CSQ81
  1. ;
  1. ;
  1. ;
  1. DONE ;
  1. QUIT
  1. ;
  1. ;================================================================================================================
  1. ; THE BELOW CODE COULD BE MODIFIED TO STORE INFOMATION IN THE NEW CSQ DATA STRUCTURE
  1. ;
  1. ;================================================================================================================
  1. ADDDFN(VPSDFN) ;Add Survey (patient level)
  1. QUIT:$D(^VPS(853.8,VPSDFN,0)) ""
  1. N FIL S FIL=853.8
  1. N IENS S IENS(1)=VPSDFN
  1. N FDA S FDA(FIL,"+1,",.01)=VPSDFN
  1. N FDAERR D UPDATE^DIE("","FDA","IENS","FDAERR")
  1. QUIT $$ERROR(.FDAERR)
  1. ;
  1. ADDQST(VPSDFN,SURVEY) ;add (QUESTIONNAIRE IDENTIFIER level)
  1. N FIL S FIL=853.805
  1. N IENS S IENS(1)=SURVEY
  1. N SUBS S SUBS="+1,"_VPSDFN_","
  1. N FDA,FDAERR
  1. N FLD S FLD=0
  1. ;
  1. S FDA(FIL,SUBS,.01)=SURVEY
  1. ;
  1. ; -- store the survey data
  1. D UPDATE^DIE("","FDA","IENS","FDAERR")
  1. QUIT $$ERROR(.FDAERR)
  1. ADDSRVY(VPSDFN,TID,TRNDT,SURVEY) ;add survey (questionnaire level)
  1. N FIL S FIL=853.81
  1. N IENS S IENS(1)=TRNDT
  1. N SUBS S SUBS="+1,"_TID_","_VPSDFN_","
  1. N FDA,FDAERR
  1. N FLD S FLD=0
  1. ;
  1. ; -- fill in FDA with the survey data
  1. S FDA(853.81,SUBS,.01)=TRNDT
  1. ;S FDA(853.81,SUBS,.02)=.5
  1. ;
  1. ; -- store the survey data
  1. D UPDATE^DIE("","FDA","IENS","FDAERR")
  1. QUIT $$ERROR(.FDAERR)
  1. ADDRES(VPSDFN,TID,TRNDT,DTT,DTLM,CS,PS,IA) ;add questionnaire response
  1. N FIL S FIL=853.811
  1. N IENS S IENS(1)=1
  1. N SUBS S SUBS="+1,"_TRNDT_","_TID_","_VPSDFN_","
  1. N FDA,FDAERR
  1. ; -- fill in FDA with the survey data
  1. S FDA(853.811,SUBS,.01)="CONVERTED"
  1. S FDA(853.811,SUBS,.02)=DTT
  1. S FDA(853.811,SUBS,.03)=DTLM
  1. S FDA(853.811,SUBS,.04)=CS
  1. S FDA(853.811,SUBS,.05)=PS
  1. S FDA(853.811,SUBS,.06)=IA
  1. D UPDATE^DIE("","FDA","IENS","FDAERR")
  1. ;
  1. QUIT $$ERROR(.FDAERR)
  1. ;
  1. ADDQUEST(VPSDFN,TID,TRNDT,DTLM,QNUM,QCV,QUEST,ANS) ;add question
  1. N FIL S FIL=853.8113
  1. N SUBS,SUBWP
  1. N IENS
  1. N FDA,FDAERR
  1. N WPERR,I,MULT
  1. ; -- fill in FDA with the survey data
  1. S I=0
  1. F S I=$O(QNUM(I)) Q:'I D
  1. . S IENS(1)=I
  1. . S SUBS="+1,"_1_","_TRNDT_","_TID_","_VPSDFN_","
  1. . S FDA(853.8113,SUBS,.01)=QNUM(I)
  1. . S FDA(853.8113,SUBS,1)=QCV(I)
  1. . D UPDATE^DIE("E","FDA","IENS","FDAERR")
  1. . K ^TMP("CSQ CON",$J)
  1. . S ^TMP("CSQ CON",$J,1,0)=QUEST(I)
  1. . S SUBWP=I_",1,"_TRNDT_","_TID_","_VPSDFN_","
  1. . K WPERR
  1. . D WP^DIE(FIL,SUBWP,2,"","^TMP(""CSQ CON"",$J)","WPERR")
  1. . S MULT=0
  1. . I ANS(I)["~"!(ANS(I)["^") S MULT=1
  1. . I MULT=0 D ADDANS(SUBWP,I,VPSDFN,TID,TRNDT,.ANS,DTLM)
  1. . I MULT=1 D
  1. .. N ARR,J
  1. .. I ANS(I)["~" F J=1:1:$L(ANS(I),"~") S ARR(I)=$P(ANS(I),"~",J) D ADDANS(SUBWP,I,VPSDFN,TID,TRNDT,.ARR,DTLM)
  1. .. I ANS(I)["^" F J=1:1:$L(ANS(I),"^") S ARR(I)=$P(ANS(I),"^",J) D ADDANS(SUBWP,I,VPSDFN,TID,TRNDT,.ARR,DTLM)
  1. ;
  1. ;
  1. QUIT $$ERROR(.FDAERR)
  1. ;
  1. ADDANS(SUBS,I,VPSDFN,TID,TRNDT,ANS,DTLM) ;add ANSWER
  1. N FIL S FIL=853.81133
  1. N IENS
  1. N FDA,FDAERR
  1. N SUBWP,WPERR
  1. ; -- fill in FDA with the survey data
  1. ;
  1. Q:'$D(ANS(I))
  1. S IENS(1)=I
  1. S SUBS="+1,"_SUBS
  1. S FDA(853.81133,SUBS,.01)="ANSWER "_I
  1. S FDA(853.81133,SUBS,.02)=2
  1. S FDA(853.81133,SUBS,.03)=1
  1. S FDA(853.81133,SUBS,1)=DTLM
  1. S FDA(853.81133,SUBS,3)="CONVERTED"
  1. S FDA(853.81133,SUBS,4)="CONVERTED"
  1. S FDA(853.81133,SUBS,5)="CONVERTED"
  1. D UPDATE^DIE("","FDA","IENS","FDAERR")
  1. K ^TMP("CSQ CON",$J)
  1. S ^TMP("CSQ CON",$J,1,0)=ANS(I)
  1. S SUBWP=I_","_I_",1,"_TRNDT_","_TID_","_VPSDFN_","
  1. K WPERR
  1. D WP^DIE(FIL,SUBWP,6,"","^TMP(""CSQ CON"",$J)","WPERR")
  1. ;
  1. QUIT $$ERROR(.FDAERR)
  1. ;
  1. ERROR(FDAERR) ;return error text
  1. QUIT:'$D(FDAERR) ""
  1. N ERRNUM S ERRNUM=0
  1. S ERRNUM=$O(FDAERR("DIERR",ERRNUM))
  1. N ERRTXT S ERRTXT=""
  1. S:ERRNUM ERRTXT=FDAERR("DIERR",ERRNUM,"TEXT",1)
  1. QUIT ERRTXT
  1. ;
  1. LOCK(VPSDFN) ;Lock this process
  1. L +^TMP("VPSSRVY1",VPSDFN):3 E QUIT "Another process updating survey for this patient"
  1. QUIT ""
  1. ;
  1. UNLOCK(VPSDFN) ;Unlock this process
  1. L -^TMP("VPSSRVY1",VPSDFN)
  1. QUIT