- WVRPCPT ;HIOFO/FT - WV PATIENT FILE (790) APIS AND RPCS ;Apr 05, 2021@14:28
- ;;1.0;WOMEN'S HEALTH;**16,24,26**;Sep 30, 1998;Build 624
- ;
- BRTX(DFN,BRTX,BRDD,CRTX,CRDD,WVPDATE) ; Update the patient's treatment needs and
- ; due dates in WV PATIENT file (790)
- ; Input: DFN - patient DFN [required]
- ; BRTX - breast treatment need IEN (790.51) [optional]
- ; BRDD - breast treatment need offset (e.g., 1Y) [optional]
- ; CRTX - cervical treament need IEN (790.5) [optional]
- ; CRDD - cervical treatment need offset (e.g., 90D) [optional]
- ; WVPDATE - date procedure was performed [optional]
- ; default is today
- ; Output: <none>
- Q:'DFN
- Q:'$D(^WV(790,DFN,0))
- S:'$D(BRTX) BRTX=""
- S:'$D(BRDD) BRDD=""
- S:'$D(CRTX) CRTX=""
- S:'$D(CRDD) CRDD=""
- S:'$G(WVPDATE) WVPDATE=DT
- N WVDATE,WVFDA
- S:BRTX]"" WVFDA(790,DFN_",",.18)=BRTX
- I BRDD]"" D
- .S WVDATE=$$FMADD^WVUTL3(BRDD,WVPDATE)
- .S:WVDATE>0 WVFDA(790,DFN_",",.19)=WVDATE
- .Q
- S:CRTX]"" WVFDA(790,DFN_",",.11)=CRTX
- I CRDD]"" D
- .S WVDATE=$$FMADD^WVUTL3(CRDD,WVPDATE)
- .S:WVDATE>0 WVFDA(790,DFN_",",.12)=WVDATE
- .Q
- I $D(WVFDA) D FILE^DIE("","WVFDA","WVERR")
- Q
- ;
- GETDATA(RESULT,WVDFN,WVTYPE,WVSDATE,WVEDATE,WVMAX,WVDIR,WVDT) ;RETURN REQUESTED DATA
- ; INPUT: RESULT - SUBSCRIPT UNDER WHICH TO RETURN DATA OR ERROR MESSAGES
- ; [REQUIRED]
- ; WVDFN - IEN OF PATIENT IN WV PATIENT FILE [REQUIRED]
- ; WVTYPE - TYPE OF DATA TO RETURN [REQUIRED]:
- ; "P": PREGNANCY DATA
- ; "L": LACTATION DATA
- ; WVSDATE - START DATE IN INTERNAL FILEMAN FORMAT [OPTIONAL]
- ; DEFAULT: NO DATE RANGE RESTRICTION
- ; WVEDATE - END DATE IN INTERNAL FILEMAN FORMAT [OPTIONAL]
- ; DEFAULT: NO DATE RANGE RESTRICTION
- ; WVMAX - MAXIMUM NUMBER OF ENTRIES TO RETURN [OPTIONAL]
- ; DEFAULT: RETURN ALL DATA
- ; WVDIR - SEARCH DIRECTION [OPTIONAL]:
- ; 1:CHRONOLOGICAL ORDER
- ; -1: REVERSE CHRONOLOGICAL ORDER [DEFAULT]
- ; WVDT - THE DATE (IN FILEMAN INTERNAL FORMAT) TO USE AS TODAY'S DATE [OPTIONAL]
- ; DEFAULT: VALUE STORED IN DT VARIABLE
- ; OUTPUT: ^TMP(RESULT,$J)=NUMBER OF ENTRIES RETURNED
- ; -1^Error message
- ; ^TMP(RESULT,$J,N,"FIELD NAME")=INTERNAL_FORMAT^EXTERNAL FORMAT
- I $G(RESULT)="" S RESULT="WVDATA"
- K ^TMP(RESULT,$J)
- I $G(WVDFN)'?1.N D Q
- .S ^TMP(RESULT,$J)="-1"_U_"Invalid parameter: WVDFN="_$G(WVDFN)
- N WVFILE,WVCOUNT
- S WVFILE=$S(WVTYPE="P":790.05,WVTYPE="L":790.16,1:""),WVCOUNT=0
- I $G(WVFKST) D Q
- .S WVCOUNT=1+WVCOUNT,^TMP(RESULT,$J)=WVCOUNT
- .D SETARRAY(WVFILE,.01,$$NOW^XLFDT),SETARRAY(WVFILE,21,1)
- .I WVTYPE="P" D SETARRAY(WVFILE,42,DT),SETARRAY(,"P2",0)
- .I WVTYPE="L" D SETARRAY(,"P2",1)
- I '$D(^WV(790,WVDFN)) D Q
- .S ^TMP(RESULT,$J)="-1"_U_"The specified patient is not in the WV PATIENT file"
- I "^P^L^"'[U_$G(WVTYPE)_U!($G(WVTYPE)="") D Q
- .S ^TMP(RESULT,$J)="-1"_U_"Invalid parameter: WVTYPE="_$G(WVTYPE)
- S WVDIR=$G(WVDIR,-1)
- I '(WVDIR=1!(WVDIR=-1)) D Q
- .S ^TMP(RESULT,$J)="-1"_U_"Invalid parameter: WVDIR="_WVDIR
- N WVIDX,WVDATE,WVTEMP
- S WVDATE(1)=+$G(WVSDATE),WVDATE(2)=+$G(WVEDATE)
- M WVTEMP=WVDATE
- I (WVDIR=1&(WVDATE(1)>WVDATE(2)))!((WVDIR=-1&(WVDATE(2)>WVDATE(1)))) D
- .S WVDATE(1)=WVTEMP(2),WVDATE(2)=WVTEMP(1)
- I WVDATE(1)=0,WVDIR=-1 S WVDATE(1)="?"
- S WVMAX=$G(WVMAX)
- I WVMAX<0 D Q
- .S ^TMP(RESULT,$J)="-1"_U_"Invalid parameter: WVMAX="_WVMAX
- N WVPATDT,WVDATES
- I $$INSTALDT^XPDUTL("WV*1.0*24",.WVDATES)>0 S WVPATDT=$O(WVDATES(0))
- E S WVPATDT=$$DT^XLFDT
- N WVSUB,WVIEN,WVEXIT,WVPNUM,WVNODE,WVDTE,WVINDEX
- S WVSUB=$S(WVTYPE="P":4,WVTYPE="L":5,1:""),WVDTE=0
- F S WVDTE=$O(^WV(790,WVDFN,WVSUB,"B",WVDTE)) Q:'+WVDTE S WVINDEX=0 F S WVINDEX=$O(^WV(790,WVDFN,WVSUB,"B",WVDTE,WVINDEX)) Q:'+WVINDEX D
- .Q:$P($G(^WV(790,WVDFN,WVSUB,WVINDEX,0)),U,6)=1!('$D(^WV(790,WVDFN,WVSUB,WVINDEX)))
- .S WVINDEX(WVDTE,WVINDEX)=""
- S WVDATE=WVDATE(1)
- F S WVDATE=$O(WVINDEX(WVDATE),WVDIR) Q:WVDATE=""!($G(WVEXIT))!(WVCOUNT=WVMAX) D
- .I WVDATE(2)>0 D Q:$G(WVEXIT)
- ..I WVDIR=-1,WVDATE<WVDATE(2) S WVEXIT=1 Q
- ..I WVDIR=1,WVDATE>WVDATE(2) S WVEXIT=1 Q
- .S WVIEN=$S(WVDIR=-1:"?",1:0) F S WVIEN=$O(WVINDEX(WVDATE,WVIEN),WVDIR) Q:WVIEN=""!($G(WVEXIT))!(WVCOUNT=WVMAX) D
- ..S WVCOUNT=WVCOUNT+1,WVNODE=$G(^WV(790,WVDFN,WVSUB,WVIEN,0))
- ..S ^TMP(RESULT,$J,WVCOUNT,"RECORD ID")=WVIEN_","_WVDFN_","
- ..S ^TMP(RESULT,$J,WVCOUNT,"VISIT STRING")=$$VSTRING^WVUTL11($P(WVNODE,U,4))
- ..D SETARRAY(WVFILE,.01,$P(WVNODE,U))
- ..D SETARRAY(WVFILE,3,$P(WVNODE,U,3))
- ..D SETARRAY(WVFILE,5,$P(WVNODE,U,5))
- ..S WVNODE=$G(^WV(790,WVDFN,WVSUB,WVIEN,2))
- ..F WVPNUM=1:1:$L(WVNODE,U) D
- ...Q:$P(WVNODE,U,WVPNUM)=""
- ...D SETARRAY(WVFILE,"2"_WVPNUM,$P(WVNODE,U,WVPNUM))
- ..I WVTYPE="P" D
- ...I $O(^WV(790,WVDFN,WVSUB,WVIEN,3,0))'="" D
- ....N WVSIEN,WVRLEVEL
- ....S WVSIEN=0 F S WVSIEN=$O(^WV(790,WVDFN,WVSUB,WVIEN,3,WVSIEN)) Q:'WVSIEN!($G(WVRLEVEL)<0) D
- .....S WVNODE=$G(^WV(790,WVDFN,WVSUB,WVIEN,3,WVSIEN,0))
- .....D SETARRAY(790.17,.01,$P(WVNODE,U),WVSIEN)
- .....N WVLEVEL
- .....S WVLEVEL=$$MOA^WVUTL11($P(WVNODE,U),WVDFN,$G(WVDT,DT))
- .....I WVLEVEL=-1!($G(WVRLEVEL)>-1&(WVLEVEL>$G(WVRLEVEL))) S WVRLEVEL=WVLEVEL
- ....D SETARRAY(,"P1",$G(WVRLEVEL))
- ...S WVNODE=$G(^WV(790,WVDFN,WVSUB,WVIEN,4))
- ...F WVPNUM=1:1:$L(WVNODE,U) D
- ....Q:$P(WVNODE,U,WVPNUM)=""
- ....D SETARRAY(WVFILE,"4"_WVPNUM,$P(WVNODE,U,WVPNUM))
- ...N WVSTATUS,WVDSS
- ...S WVSTATUS=$P($G(^TMP(RESULT,$J,WVCOUNT,"PREGNANCY STATE")),U,2)
- ...I $P(^TMP(RESULT,$J,WVCOUNT,"DATA SOURCE"),U,2)="WOMEN'S HEALTH",$P(^TMP(RESULT,$J,WVCOUNT,"PREGNANCY STATUS D/T ENTERED"),U)<WVPATDT D Q
- ....I WVSTATUS="PREGNANT" D
- .....D SETARRAY(,"P2",$S($D(^TMP(RESULT,$J,WVCOUNT,"EDD"))=1:1,1:0))
- ....I WVSTATUS'="PREGNANT" D SETARRAY(,"P2",1)
- ...I $D(^TMP(RESULT,$J,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"))=0 D SETARRAY(,"P2",0) Q
- ...I $P(^TMP(RESULT,$J,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"),U)=1 D
- ....I '$D(^TMP(RESULT,$J,WVCOUNT,"MEDICAL REASON")) D SETARRAY(,"P2",0)
- ...I WVSTATUS="PREGNANT" D
- ....D SETARRAY(,"P2",$S($D(^TMP(RESULT,$J,WVCOUNT,"EDD"))=1:1,1:0))
- ...I WVSTATUS'="PREGNANT" D
- ....I $P(^TMP(RESULT,$J,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"),U)=0 D Q:$G(WVDSS)
- .....I $D(^TMP(RESULT,$J,WVCOUNT,"TRYING TO BECOME PREGNANT"))=0 D SETARRAY(,"P2",0) S WVDSS=1 Q
- .....I '$P(^TMP(RESULT,$J,WVCOUNT,"TRYING TO BECOME PREGNANT"),U),$D(^TMP(RESULT,$J,WVCOUNT,"CONTRACEPTIVE METHOD USED"))'=10 D Q
- ......D SETARRAY(,"P2",0)
- ......S WVDSS=1
- ....I $$ISPREG^WVUTL11(WVDFN,,,1),$D(^TMP(RESULT,$J,WVCOUNT,"PREGNANCY END DATE"))=0 D SETARRAY(,"P2",0) Q
- ....I $D(^TMP(RESULT,$J,WVCOUNT,"PREGNANCY END DATE"))=1,$D(^TMP(RESULT,$J,WVCOUNT,"REASON PREGNANCY ENDED"))'=1 D SETARRAY(,"P2",0) Q
- ....D SETARRAY(,"P2",1)
- ...Q:$P(^TMP(RESULT,$J,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"),U)=1
- ...I WVSTATUS="" D SETARRAY(,"P2",0)
- ...I '$D(^TMP(RESULT,$J,WVCOUNT,"DOCUMENTATION STATUS")) D SETARRAY(,"P2",1)
- ..I WVTYPE="L" D
- ...I $P($G(^TMP(RESULT,$J,WVCOUNT,"LACTATION STATE")),U)=0&('$D(^TMP(RESULT,$J,WVCOUNT,"END DATE")))&($P($G(^WV(790,WVDFN,WVSUB,0)),U,4)>1) D Q
- ....N WVPIEN
- ....S WVPIEN=+$O(WVINDEX(WVDATE),-1) I WVPIEN>0 S WVPIEN=+$O(WVINDEX(WVPIEN,0))
- ....I WVPIEN>0,$P($G(^WV(790,WVDFN,WVSUB,WVPIEN,2)),U)=1 D SETARRAY(,"P2",0) Q
- ....D SETARRAY(,"P2",1)
- ...D SETARRAY(,"P2",1)
- S ^TMP(RESULT,$J)=WVCOUNT
- Q
- ;
- PFIELDS ;PSEUDO-FIELD DEFINITIONS
- ;;PREGNANCY LIKELIHOOD^S $P(WVDATA,U,2)=$S(WVDATA=1:"HIGH",WVDATA=2:"LOW",WVDATA=-1:"CALCULATION ERROR",1:"UNKNOWN")
- ;;DOCUMENTATION STATUS^S $P(WVDATA,U,2)=$S(WVDATA=0:"INCOMPLETE",WVDATA=1:"COMPLETE",1:"UNKNOWN")
- SAVEDATA(WVRETURN,WVDATA) ;SAVE DATA FROM CLINICAL REMINDERS
- ; INPUT: WVRETURN - REFERENCE TO ARRAY IN WHICH TO RETURN STATUS
- ; [REQUIRED]
- ; WVDATA - REFERENCE TO ARRAY OF DATA TO SAVE
- ; [REQUIRED]
- N WVFILE
- S WVFILE=0 F S WVFILE=$O(WVDATA("DATA",WVFILE)) Q:WVFILE=""!(+$G(WVRETURN(1))<0) D
- .I "^790^790.05^790.17^790.16^790.9^790.1^790.4^790.23^"'[(U_WVFILE_U) S WVRETURN(1)=-1_U_"Invalid file number: "_WVFILE
- Q:$D(WVRETURN)
- I $G(WVDATA("DFN"))'?1.N D Q
- .S WVRETURN(1)=-1_U_"Invalid patient identifier: "_$G(WVDATA("DFN"),"No identifer specified.")
- N WVNPFLAG
- S WVNPFLAG=$$ISREG^WVUTL11(WVDATA("DFN"))
- I '+WVNPFLAG S WVRETURN(1)=-1_U_$P(WVNPFLAG,U,2) Q
- I $D(WVDATA("DATA",790)) D
- .N WVID
- .S WVID=$O(WVDATA("DATA",790,"")) Q:WVID=""
- .I WVID["+" M WVDATA("DATA",790,WVDATA("DFN")_",")=WVDATA("DATA",790,WVID) K WVDATA("DATA",790,WVID)
- I $D(WVDATA("DATA",790))!($D(WVDATA("DATA",790.1)))!($D(WVDATA("DATA",790.4)))!($D(WVDATA("DATA",790.23))) D NEW^WVRPCGF(.WVRETURN,.WVDATA)
- I $D(WVDATA("DATA",790.9)) S WVRETURN(1)=$$CLRSRND^WVRPCPT2(WVDATA("DFN"),$E(WVDATA("DATA",790.9,$O(WVDATA("DATA",790.9,"")),.01),*))
- Q:+$G(WVRETURN(1))=-1
- N WVERROR,WVCMNEW,WVIEN,WVNEWREC,WVREC,WVFIELD,WVVPR
- N WVFDA,WVARRAY,WVCMIEN,WV79005NR,WVENTRY,WVVIEN,WVSEQ
- I $G(WVDATA("VISIT"))="" S WVVIEN=0
- E D Q:+$G(WVRETURN(1))=-1
- .S WVVIEN=$$VISITIEN^WVUTL11(WVDATA("DFN"),$G(WVDATA("VISIT")))
- .I WVVIEN<1 D
- ..F WVFILE=790.05,790.16 D Q:+$G(WVRETURN(1))<0
- ...Q:'$D(WVDATA("DATA",WVFILE))
- ...I $G(WVDATA("DATA",WVFILE,"MASTER ID"))="" D Q
- ....S WVRETURN(1)=-1_U_"Invalid VISIT file entry specified: "_$G(WVDATA("VISIT"))
- D CHKIENS(.WVDATA)
- D EXTRTDAT^WVRPCVPR(+$$GETLREC^WVUTL11(WVDATA("DFN"),4)_","_WVDATA("DFN")_",","BEFORE")
- ;Ensure records are complete and then save data (contraceptive methods handled separately)
- S WVFILE=0 F S WVFILE=$O(WVDATA("DATA",WVFILE)) Q:'WVFILE!(+$G(WVRETURN(1))<0) D
- .I "^790^790.1^790.4^790.9^790.23^"[(U_WVFILE_U) Q
- .S WVARRAY=$S(WVFILE=790.17:"WVCMNEW",1:"WVFDA")
- .S WVREC="" F S WVREC=$O(WVDATA("DATA",WVFILE,WVREC)) Q:'WVREC!($P($G(WVRETURN(1)),U)=-1) D
- ..S WVNEWREC=$S($E(WVREC,1)="+":1,1:0),WVENTRY=""
- ..I WVFILE=790.17,WVREC["?" S WVENTRY=$P(WVREC,"?")_WVCMIEN_","_$P($P(WVREC,"?",2),",",2,$L($P(WVREC,"?",2),","))
- ..M @WVARRAY@(WVFILE,$S(WVENTRY'="":WVENTRY,1:WVREC))=WVDATA("DATA",WVFILE,WVREC)
- ..Q:'$D(WVFDA)
- ..I WVNEWREC,$D(WVFDA(WVFILE,WVREC)),'$D(WVFDA(WVFILE,WVREC,.01)) S WVFDA(WVFILE,WVREC,.01)=$$NOW^XLFDT
- ..I WVVIEN>0,'$D(WVFDA(WVFILE,WVREC,4)) S WVFDA(WVFILE,WVREC,4)="`"_WVVIEN
- ..I $G(WVDATA("DOCUMENT"))>0 S WVFDA(WVFILE,WVREC,5)="`"_WVDATA("DOCUMENT")
- ..D VALENTRY(WVFILE,WVREC,.WVFDA,WVNEWREC)
- ..D:$G(WVNEWREC) UPDATE^DIE("E","WVFDA","WVIEN","WVERROR")
- ..D:'$G(WVNEWREC) FILE^DIE("EK","WVFDA","WVERROR")
- ..I WVFILE=790.05 D
- ...I WVNEWREC S WVSEQ=$P($P(WVREC,",",1),"+",2),WVCMIEN=$G(WVIEN(WVSEQ))
- ...E S WVCMIEN=$P(WVREC,",")
- ...S WVCMIEN(1)=$P(WVREC,",",2),WV79005NR=WVNEWREC
- ...S WVVPR("AFTER")=$S(WVNEWREC:$G(WVIEN(WVSEQ))_","_WVDATA("DFN")_",",1:WVREC)
- ..I $D(WVERROR) S WVRETURN(1)=-1_U_"Unable to save/update the status data: "_$$FMERROR^WVUTL11(.WVERROR)
- Q:+$G(WVRETURN(1))=-1
- I $D(WVDATA("DATA",790.05))!($D(WVDATA("DATA",790.17))) D
- .S WVRETURN(1)=$$METHOD^WVTDALRT(WVDATA("DFN"),.WVCMIEN,+$G(WV79005NR),.WVCMNEW)
- .D NOTIFY^WVRPCVPR(.WVVPR)
- I '$D(WVRETURN(1)) S WVRETURN(1)=1
- Q
- ;
- VALENTRY(WVFILE,WVENTRY,WVFDA,WVNEWREC) ;VALIDATE THE DATA TO FILE
- ;INPUT: WVFILE - FILE NUMBER IN WHICH DATA WILL BE SAVED [REQUIRED]
- ; WVENTRY - FILEMAN IENS VALUE OF THE ENTRY IN THE FILE [REQUIRED]
- ; WVFDA - REFERENCE TO ARRAY CONTAINING THE NEW ENTRY
- I $D(WVFDA(WVFILE,WVENTRY,23)) K WVFDA(WVFILE,WVENTRY,24) ;WIPE OUT LATER FIELDS IF MUC REASON IS SET
- N WVFIELD,WVVALUE
- ;HANDLE BLANK FIELD VALUES
- S WVFIELD="" F S WVFIELD=$O(WVFDA(WVFILE,WVENTRY,WVFIELD)) Q:WVFIELD="" D
- .S WVVALUE=$G(WVFDA(WVFILE,WVENTRY,WVFIELD)) Q:WVVALUE'=""
- .I WVNEWREC K WVFDA(WVFILE,WVENTRY,WVFIELD)
- .I 'WVNEWREC S WVFDA(WVFILE,WVENTRY,WVFIELD)="@"
- Q
- ;
- CHKIENS(WVDATA) ;ENSURE IENS ARE COMPLETE AND ACCURATE
- ;INPUT: WVDATA - REFERENCE TO ARRAY CONTAINING DATA TO CHECK
- N WVLEVELS,WVLEVEL,WVIEN,WVFILE,WVMIENS,WVIENS,WVENTRY,WVUPLVL,WVPFILE,WVPLCHDR,WVID,WVSTRIP,WVNEWPH,WVPDIENS
- ;WVLEVELS(LEVEL_#,FILE_#)=PARENT_FILE_#
- S WVLEVELS(1,790)="",WVLEVELS(2,790.05)=790,WVLEVELS(2,790.16)=790,WVLEVELS(3,790.17)=790.05
- S WVLEVELS(1,790.1)="",WVLEVELS(2,790.23)=790.1,WVLEVELS(1,790.4)=""
- S WVSTRIP("+")="?"
- S WVIEN(790)=$G(WVDATA("DFN"))
- S WVLEVEL=0 F S WVLEVEL=$O(WVLEVELS(WVLEVEL)) Q:'+WVLEVEL D
- .S WVFILE=0 F S WVFILE=$O(WVLEVELS(WVLEVEL,WVFILE)) Q:'+WVFILE D
- ..Q:'$D(WVDATA("DATA",WVFILE))
- ..K WVPDIENS
- ..S WVMIENS=$P($G(WVDATA("DATA",WVFILE,"MASTER ID")),":"),WVNEWPH=0
- ..S WVIENS="" F S WVIENS=$O(WVDATA("DATA",WVFILE,WVIENS)) Q:WVIENS="" D
- ...I (WVIENS="MASTER ID")!($D(WVPDIENS(WVIENS))) Q
- ...I $E(WVIENS,1)="+" D
- ....S WVID=$E(WVIENS,2,$L($P(WVIENS,",")))
- ....I $D(WVPLCHDR(WVID)) S WVPLCHDR=WVPLCHDR+1,WVPLCHDR(WVPLCHDR)="",WVNEWPH=1
- ....E S WVPLCHDR(WVID)="",WVPLCHDR=WVID
- ...S WVIEN(WVFILE)=$S(WVNEWPH:"+"_WVPLCHDR,1:$P(WVIENS,","))
- ...I $L(WVIENS,",")<(WVLEVEL+1) D
- ....S WVENTRY=WVIEN(WVFILE)_","
- ....S WVUPLVL=WVLEVEL+1,WVPFILE=WVFILE F S WVUPLVL=$O(WVLEVELS(WVUPLVL),-1) Q:'+WVUPLVL S WVPFILE=WVLEVELS(WVUPLVL,WVPFILE) I WVPFILE'="" S WVENTRY=WVENTRY_WVIEN(WVPFILE)_","
- ....S $P(WVENTRY,",",2,$L(WVENTRY,","))=$$REPLACE^XLFSTR($P(WVENTRY,",",2,$L(WVENTRY,",")),.WVSTRIP)
- ....M WVDATA("DATA",WVFILE,WVENTRY)=WVDATA("DATA",WVFILE,WVIENS)
- ....K WVDATA("DATA",WVFILE,WVIENS)
- ....S WVIENS="",WVPDIENS(WVENTRY)=""
- ...I WVIENS'="" S WVPDIENS(WVIENS)=""
- ..I WVMIENS'="" K WVDATA("DATA",WVFILE,"MASTER ID")
- Q
- SETARRAY(WVFILE,WVFIELD,WVDATA,WVMSUB) ;SET DATA INTO THE RETURN ARRAY
- ; INPUT: WVFILE - FILE NUMBER CONTAINING THE FIELD [REQUIRED]
- ; WVFIELD - FIELD NUMBER [REQUIRED]
- ; WVDATA - INTERNAL VALUE OF THE FIELD [REQUIRED]
- ; WVMSUB - SUBSCRIPT WITHIN THE TMP GLOBAL TO RETURN DATA IN
- N WVSUB
- I $E(WVFIELD,1)="P" D
- .N WVCODE,WVLINE
- .S WVLINE=$E(WVFIELD,2,*)
- .S WVSUB=$P($P($T(PFIELDS+WVLINE),";;",2),U)
- .S WVCODE=$P($P($T(PFIELDS+WVLINE),";;",2),U,2)
- .X:WVCODE'="" WVCODE
- I $E(WVFIELD,1)'="P" D
- .S WVSUB=$$GET1^DID(WVFILE,WVFIELD,,"LABEL")
- .S $P(WVDATA,U,2)=$$EXTERNAL^DILFD(WVFILE,WVFIELD,"",WVDATA)
- I $G(WVMSUB)>0 S ^TMP(RESULT,$J,WVCOUNT,WVSUB,WVMSUB)=WVDATA
- E S ^TMP(RESULT,$J,WVCOUNT,WVSUB)=WVDATA
- Q
- ;
- GETSTATUS(WVDFN) ;RETURN SINGLE LINE PREGNANT/LACTATING
- N WVPOST,WVINDEX,WVRET,WVTEXT,WVSUB
- D POSTLIST^WVRPCOR(.WVPOST,WVDFN,.WVINDEX)
- S WVINDEX=0 F S WVINDEX=$O(WVPOST(WVINDEX)) Q:WVINDEX="" D
- .S WVTEXT=$P(WVPOST(WVINDEX),U,2)
- .S WVRET=$S($G(WVRET)'="":WVRET_" and ",1:"")_WVTEXT
- .I WVTEXT'="Pregnant" Q
- .S WVSUB(1)=$$GETSUB^WVRPCOR(WVDFN)
- .S WVSUB(2)=$P($P($G(^XTMP(WVSUB(1),"POSTINGS","P")),";",2),",",1)
- .I WVSUB(2)="" Q
- .S WVRET=WVRET_" (Expected Due Date: "_$$FMTE^XLFDT($P($G(^WV(790,WVDFN,4,WVSUB(2),4)),U,2))_")"
- Q $G(WVRET)
- GETEDD(WVDFN) ;RETURN EDD AND WEEKS GESTATION
- N WVREC,WVEDD,WVGA,WVRESULT,WVSTATUS
- S WVRESULT=$NA(^TMP("WVEDD",$J))
- S WVREC=$$GETLREC^WVUTL11(WVDFN,4)
- S WVSTATUS=$P($G(^WV(790,WVDFN,4,+WVREC,2)),U,1)
- I WVSTATUS'=1 S @WVRESULT@(1,0)="" Q "~@"_WVRESULT
- S WVEDD=$P($G(^WV(790,WVDFN,4,+WVREC,4)),U,2)
- S @WVRESULT@(1,0)="Expected Due Date: "_$$FMTE^XLFDT(WVEDD)
- S WVGA=$P(((280-$$FMDIFF^XLFDT(WVEDD,DT,1))/7),".",1)
- I $P(WVREC,U,4)=1 S @WVRESULT@(2,0)="Gestational Age: "_WVGA_" weeks"
- Q "~@"_WVRESULT
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HWVRPCPT 15526 printed Mar 13, 2025@21:52:46 Page 2
- WVRPCPT ;HIOFO/FT - WV PATIENT FILE (790) APIS AND RPCS ;Apr 05, 2021@14:28
- +1 ;;1.0;WOMEN'S HEALTH;**16,24,26**;Sep 30, 1998;Build 624
- +2 ;
- BRTX(DFN,BRTX,BRDD,CRTX,CRDD,WVPDATE) ; Update the patient's treatment needs and
- +1 ; due dates in WV PATIENT file (790)
- +2 ; Input: DFN - patient DFN [required]
- +3 ; BRTX - breast treatment need IEN (790.51) [optional]
- +4 ; BRDD - breast treatment need offset (e.g., 1Y) [optional]
- +5 ; CRTX - cervical treament need IEN (790.5) [optional]
- +6 ; CRDD - cervical treatment need offset (e.g., 90D) [optional]
- +7 ; WVPDATE - date procedure was performed [optional]
- +8 ; default is today
- +9 ; Output: <none>
- +10 if 'DFN
- QUIT
- +11 if '$DATA(^WV(790,DFN,0))
- QUIT
- +12 if '$DATA(BRTX)
- SET BRTX=""
- +13 if '$DATA(BRDD)
- SET BRDD=""
- +14 if '$DATA(CRTX)
- SET CRTX=""
- +15 if '$DATA(CRDD)
- SET CRDD=""
- +16 if '$GET(WVPDATE)
- SET WVPDATE=DT
- +17 NEW WVDATE,WVFDA
- +18 if BRTX]""
- SET WVFDA(790,DFN_",",.18)=BRTX
- +19 IF BRDD]""
- Begin DoDot:1
- +20 SET WVDATE=$$FMADD^WVUTL3(BRDD,WVPDATE)
- +21 if WVDATE>0
- SET WVFDA(790,DFN_",",.19)=WVDATE
- +22 QUIT
- End DoDot:1
- +23 if CRTX]""
- SET WVFDA(790,DFN_",",.11)=CRTX
- +24 IF CRDD]""
- Begin DoDot:1
- +25 SET WVDATE=$$FMADD^WVUTL3(CRDD,WVPDATE)
- +26 if WVDATE>0
- SET WVFDA(790,DFN_",",.12)=WVDATE
- +27 QUIT
- End DoDot:1
- +28 IF $DATA(WVFDA)
- DO FILE^DIE("","WVFDA","WVERR")
- +29 QUIT
- +30 ;
- GETDATA(RESULT,WVDFN,WVTYPE,WVSDATE,WVEDATE,WVMAX,WVDIR,WVDT) ;RETURN REQUESTED DATA
- +1 ; INPUT: RESULT - SUBSCRIPT UNDER WHICH TO RETURN DATA OR ERROR MESSAGES
- +2 ; [REQUIRED]
- +3 ; WVDFN - IEN OF PATIENT IN WV PATIENT FILE [REQUIRED]
- +4 ; WVTYPE - TYPE OF DATA TO RETURN [REQUIRED]:
- +5 ; "P": PREGNANCY DATA
- +6 ; "L": LACTATION DATA
- +7 ; WVSDATE - START DATE IN INTERNAL FILEMAN FORMAT [OPTIONAL]
- +8 ; DEFAULT: NO DATE RANGE RESTRICTION
- +9 ; WVEDATE - END DATE IN INTERNAL FILEMAN FORMAT [OPTIONAL]
- +10 ; DEFAULT: NO DATE RANGE RESTRICTION
- +11 ; WVMAX - MAXIMUM NUMBER OF ENTRIES TO RETURN [OPTIONAL]
- +12 ; DEFAULT: RETURN ALL DATA
- +13 ; WVDIR - SEARCH DIRECTION [OPTIONAL]:
- +14 ; 1:CHRONOLOGICAL ORDER
- +15 ; -1: REVERSE CHRONOLOGICAL ORDER [DEFAULT]
- +16 ; WVDT - THE DATE (IN FILEMAN INTERNAL FORMAT) TO USE AS TODAY'S DATE [OPTIONAL]
- +17 ; DEFAULT: VALUE STORED IN DT VARIABLE
- +18 ; OUTPUT: ^TMP(RESULT,$J)=NUMBER OF ENTRIES RETURNED
- +19 ; -1^Error message
- +20 ; ^TMP(RESULT,$J,N,"FIELD NAME")=INTERNAL_FORMAT^EXTERNAL FORMAT
- +21 IF $GET(RESULT)=""
- SET RESULT="WVDATA"
- +22 KILL ^TMP(RESULT,$JOB)
- +23 IF $GET(WVDFN)'?1.N
- Begin DoDot:1
- +24 SET ^TMP(RESULT,$JOB)="-1"_U_"Invalid parameter: WVDFN="_$GET(WVDFN)
- End DoDot:1
- QUIT
- +25 NEW WVFILE,WVCOUNT
- +26 SET WVFILE=$SELECT(WVTYPE="P":790.05,WVTYPE="L":790.16,1:"")
- SET WVCOUNT=0
- +27 IF $GET(WVFKST)
- Begin DoDot:1
- +28 SET WVCOUNT=1+WVCOUNT
- SET ^TMP(RESULT,$JOB)=WVCOUNT
- +29 DO SETARRAY(WVFILE,.01,$$NOW^XLFDT)
- DO SETARRAY(WVFILE,21,1)
- +30 IF WVTYPE="P"
- DO SETARRAY(WVFILE,42,DT)
- DO SETARRAY(,"P2",0)
- +31 IF WVTYPE="L"
- DO SETARRAY(,"P2",1)
- End DoDot:1
- QUIT
- +32 IF '$DATA(^WV(790,WVDFN))
- Begin DoDot:1
- +33 SET ^TMP(RESULT,$JOB)="-1"_U_"The specified patient is not in the WV PATIENT file"
- End DoDot:1
- QUIT
- +34 IF "^P^L^"'[U_$GET(WVTYPE)_U!($GET(WVTYPE)="")
- Begin DoDot:1
- +35 SET ^TMP(RESULT,$JOB)="-1"_U_"Invalid parameter: WVTYPE="_$GET(WVTYPE)
- End DoDot:1
- QUIT
- +36 SET WVDIR=$GET(WVDIR,-1)
- +37 IF '(WVDIR=1!(WVDIR=-1))
- Begin DoDot:1
- +38 SET ^TMP(RESULT,$JOB)="-1"_U_"Invalid parameter: WVDIR="_WVDIR
- End DoDot:1
- QUIT
- +39 NEW WVIDX,WVDATE,WVTEMP
- +40 SET WVDATE(1)=+$GET(WVSDATE)
- SET WVDATE(2)=+$GET(WVEDATE)
- +41 MERGE WVTEMP=WVDATE
- +42 IF (WVDIR=1&(WVDATE(1)>WVDATE(2)))!((WVDIR=-1&(WVDATE(2)>WVDATE(1))))
- Begin DoDot:1
- +43 SET WVDATE(1)=WVTEMP(2)
- SET WVDATE(2)=WVTEMP(1)
- End DoDot:1
- +44 IF WVDATE(1)=0
- IF WVDIR=-1
- SET WVDATE(1)="?"
- +45 SET WVMAX=$GET(WVMAX)
- +46 IF WVMAX<0
- Begin DoDot:1
- +47 SET ^TMP(RESULT,$JOB)="-1"_U_"Invalid parameter: WVMAX="_WVMAX
- End DoDot:1
- QUIT
- +48 NEW WVPATDT,WVDATES
- +49 IF $$INSTALDT^XPDUTL("WV*1.0*24",.WVDATES)>0
- SET WVPATDT=$ORDER(WVDATES(0))
- +50 IF '$TEST
- SET WVPATDT=$$DT^XLFDT
- +51 NEW WVSUB,WVIEN,WVEXIT,WVPNUM,WVNODE,WVDTE,WVINDEX
- +52 SET WVSUB=$SELECT(WVTYPE="P":4,WVTYPE="L":5,1:"")
- SET WVDTE=0
- +53 FOR
- SET WVDTE=$ORDER(^WV(790,WVDFN,WVSUB,"B",WVDTE))
- if '+WVDTE
- QUIT
- SET WVINDEX=0
- FOR
- SET WVINDEX=$ORDER(^WV(790,WVDFN,WVSUB,"B",WVDTE,WVINDEX))
- if '+WVINDEX
- QUIT
- Begin DoDot:1
- +54 if $PIECE($GET(^WV(790,WVDFN,WVSUB,WVINDEX,0)),U,6)=1!('$DATA(^WV(790,WVDFN,WVSUB,WVINDEX)))
- QUIT
- +55 SET WVINDEX(WVDTE,WVINDEX)=""
- End DoDot:1
- +56 SET WVDATE=WVDATE(1)
- +57 FOR
- SET WVDATE=$ORDER(WVINDEX(WVDATE),WVDIR)
- if WVDATE=""!($GET(WVEXIT))!(WVCOUNT=WVMAX)
- QUIT
- Begin DoDot:1
- +58 IF WVDATE(2)>0
- Begin DoDot:2
- +59 IF WVDIR=-1
- IF WVDATE<WVDATE(2)
- SET WVEXIT=1
- QUIT
- +60 IF WVDIR=1
- IF WVDATE>WVDATE(2)
- SET WVEXIT=1
- QUIT
- End DoDot:2
- if $GET(WVEXIT)
- QUIT
- +61 SET WVIEN=$SELECT(WVDIR=-1:"?",1:0)
- FOR
- SET WVIEN=$ORDER(WVINDEX(WVDATE,WVIEN),WVDIR)
- if WVIEN=""!($GET(WVEXIT))!(WVCOUNT=WVMAX)
- QUIT
- Begin DoDot:2
- +62 SET WVCOUNT=WVCOUNT+1
- SET WVNODE=$GET(^WV(790,WVDFN,WVSUB,WVIEN,0))
- +63 SET ^TMP(RESULT,$JOB,WVCOUNT,"RECORD ID")=WVIEN_","_WVDFN_","
- +64 SET ^TMP(RESULT,$JOB,WVCOUNT,"VISIT STRING")=$$VSTRING^WVUTL11($PIECE(WVNODE,U,4))
- +65 DO SETARRAY(WVFILE,.01,$PIECE(WVNODE,U))
- +66 DO SETARRAY(WVFILE,3,$PIECE(WVNODE,U,3))
- +67 DO SETARRAY(WVFILE,5,$PIECE(WVNODE,U,5))
- +68 SET WVNODE=$GET(^WV(790,WVDFN,WVSUB,WVIEN,2))
- +69 FOR WVPNUM=1:1:$LENGTH(WVNODE,U)
- Begin DoDot:3
- +70 if $PIECE(WVNODE,U,WVPNUM)=""
- QUIT
- +71 DO SETARRAY(WVFILE,"2"_WVPNUM,$PIECE(WVNODE,U,WVPNUM))
- End DoDot:3
- +72 IF WVTYPE="P"
- Begin DoDot:3
- +73 IF $ORDER(^WV(790,WVDFN,WVSUB,WVIEN,3,0))'=""
- Begin DoDot:4
- +74 NEW WVSIEN,WVRLEVEL
- +75 SET WVSIEN=0
- FOR
- SET WVSIEN=$ORDER(^WV(790,WVDFN,WVSUB,WVIEN,3,WVSIEN))
- if 'WVSIEN!($GET(WVRLEVEL)<0)
- QUIT
- Begin DoDot:5
- +76 SET WVNODE=$GET(^WV(790,WVDFN,WVSUB,WVIEN,3,WVSIEN,0))
- +77 DO SETARRAY(790.17,.01,$PIECE(WVNODE,U),WVSIEN)
- +78 NEW WVLEVEL
- +79 SET WVLEVEL=$$MOA^WVUTL11($PIECE(WVNODE,U),WVDFN,$GET(WVDT,DT))
- +80 IF WVLEVEL=-1!($GET(WVRLEVEL)>-1&(WVLEVEL>$GET(WVRLEVEL)))
- SET WVRLEVEL=WVLEVEL
- End DoDot:5
- +81 DO SETARRAY(,"P1",$GET(WVRLEVEL))
- End DoDot:4
- +82 SET WVNODE=$GET(^WV(790,WVDFN,WVSUB,WVIEN,4))
- +83 FOR WVPNUM=1:1:$LENGTH(WVNODE,U)
- Begin DoDot:4
- +84 if $PIECE(WVNODE,U,WVPNUM)=""
- QUIT
- +85 DO SETARRAY(WVFILE,"4"_WVPNUM,$PIECE(WVNODE,U,WVPNUM))
- End DoDot:4
- +86 NEW WVSTATUS,WVDSS
- +87 SET WVSTATUS=$PIECE($GET(^TMP(RESULT,$JOB,WVCOUNT,"PREGNANCY STATE")),U,2)
- +88 IF $PIECE(^TMP(RESULT,$JOB,WVCOUNT,"DATA SOURCE"),U,2)="WOMEN'S HEALTH"
- IF $PIECE(^TMP(RESULT,$JOB,WVCOUNT,"PREGNANCY STATUS D/T ENTERED"),U)<WVPATDT
- Begin DoDot:4
- +89 IF WVSTATUS="PREGNANT"
- Begin DoDot:5
- +90 DO SETARRAY(,"P2",$SELECT($DATA(^TMP(RESULT,$JOB,WVCOUNT,"EDD"))=1:1,1:0))
- End DoDot:5
- +91 IF WVSTATUS'="PREGNANT"
- DO SETARRAY(,"P2",1)
- End DoDot:4
- QUIT
- +92 IF $DATA(^TMP(RESULT,$JOB,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"))=0
- DO SETARRAY(,"P2",0)
- QUIT
- +93 IF $PIECE(^TMP(RESULT,$JOB,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"),U)=1
- Begin DoDot:4
- +94 IF '$DATA(^TMP(RESULT,$JOB,WVCOUNT,"MEDICAL REASON"))
- DO SETARRAY(,"P2",0)
- End DoDot:4
- +95 IF WVSTATUS="PREGNANT"
- Begin DoDot:4
- +96 DO SETARRAY(,"P2",$SELECT($DATA(^TMP(RESULT,$JOB,WVCOUNT,"EDD"))=1:1,1:0))
- End DoDot:4
- +97 IF WVSTATUS'="PREGNANT"
- Begin DoDot:4
- +98 IF $PIECE(^TMP(RESULT,$JOB,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"),U)=0
- Begin DoDot:5
- +99 IF $DATA(^TMP(RESULT,$JOB,WVCOUNT,"TRYING TO BECOME PREGNANT"))=0
- DO SETARRAY(,"P2",0)
- SET WVDSS=1
- QUIT
- +100 IF '$PIECE(^TMP(RESULT,$JOB,WVCOUNT,"TRYING TO BECOME PREGNANT"),U)
- IF $DATA(^TMP(RESULT,$JOB,WVCOUNT,"CONTRACEPTIVE METHOD USED"))'=10
- Begin DoDot:6
- +101 DO SETARRAY(,"P2",0)
- +102 SET WVDSS=1
- End DoDot:6
- QUIT
- End DoDot:5
- if $GET(WVDSS)
- QUIT
- +103 IF $$ISPREG^WVUTL11(WVDFN,,,1)
- IF $DATA(^TMP(RESULT,$JOB,WVCOUNT,"PREGNANCY END DATE"))=0
- DO SETARRAY(,"P2",0)
- QUIT
- +104 IF $DATA(^TMP(RESULT,$JOB,WVCOUNT,"PREGNANCY END DATE"))=1
- IF $DATA(^TMP(RESULT,$JOB,WVCOUNT,"REASON PREGNANCY ENDED"))'=1
- DO SETARRAY(,"P2",0)
- QUIT
- +105 DO SETARRAY(,"P2",1)
- End DoDot:4
- +106 if $PIECE(^TMP(RESULT,$JOB,WVCOUNT,"MEDICALLY UNABLE TO CONCEIVE"),U)=1
- QUIT
- +107 IF WVSTATUS=""
- DO SETARRAY(,"P2",0)
- +108 IF '$DATA(^TMP(RESULT,$JOB,WVCOUNT,"DOCUMENTATION STATUS"))
- DO SETARRAY(,"P2",1)
- End DoDot:3
- +109 IF WVTYPE="L"
- Begin DoDot:3
- +110 IF $PIECE($GET(^TMP(RESULT,$JOB,WVCOUNT,"LACTATION STATE")),U)=0&('$DATA(^TMP(RESULT,$JOB,WVCOUNT,"END DATE")))&($PIECE($GET(^WV(790,WVDFN,WVSUB,0)),U,4)>1)
- Begin DoDot:4
- +111 NEW WVPIEN
- +112 SET WVPIEN=+$ORDER(WVINDEX(WVDATE),-1)
- IF WVPIEN>0
- SET WVPIEN=+$ORDER(WVINDEX(WVPIEN,0))
- +113 IF WVPIEN>0
- IF $PIECE($GET(^WV(790,WVDFN,WVSUB,WVPIEN,2)),U)=1
- DO SETARRAY(,"P2",0)
- QUIT
- +114 DO SETARRAY(,"P2",1)
- End DoDot:4
- QUIT
- +115 DO SETARRAY(,"P2",1)
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +116 SET ^TMP(RESULT,$JOB)=WVCOUNT
- +117 QUIT
- +118 ;
- PFIELDS ;PSEUDO-FIELD DEFINITIONS
- +1 ;;PREGNANCY LIKELIHOOD^S $P(WVDATA,U,2)=$S(WVDATA=1:"HIGH",WVDATA=2:"LOW",WVDATA=-1:"CALCULATION ERROR",1:"UNKNOWN")
- +2 ;;DOCUMENTATION STATUS^S $P(WVDATA,U,2)=$S(WVDATA=0:"INCOMPLETE",WVDATA=1:"COMPLETE",1:"UNKNOWN")
- SAVEDATA(WVRETURN,WVDATA) ;SAVE DATA FROM CLINICAL REMINDERS
- +1 ; INPUT: WVRETURN - REFERENCE TO ARRAY IN WHICH TO RETURN STATUS
- +2 ; [REQUIRED]
- +3 ; WVDATA - REFERENCE TO ARRAY OF DATA TO SAVE
- +4 ; [REQUIRED]
- +5 NEW WVFILE
- +6 SET WVFILE=0
- FOR
- SET WVFILE=$ORDER(WVDATA("DATA",WVFILE))
- if WVFILE=""!(+$GET(WVRETURN(1))<0)
- QUIT
- Begin DoDot:1
- +7 IF "^790^790.05^790.17^790.16^790.9^790.1^790.4^790.23^"'[(U_WVFILE_U)
- SET WVRETURN(1)=-1_U_"Invalid file number: "_WVFILE
- End DoDot:1
- +8 if $DATA(WVRETURN)
- QUIT
- +9 IF $GET(WVDATA("DFN"))'?1.N
- Begin DoDot:1
- +10 SET WVRETURN(1)=-1_U_"Invalid patient identifier: "_$GET(WVDATA("DFN"),"No identifer specified.")
- End DoDot:1
- QUIT
- +11 NEW WVNPFLAG
- +12 SET WVNPFLAG=$$ISREG^WVUTL11(WVDATA("DFN"))
- +13 IF '+WVNPFLAG
- SET WVRETURN(1)=-1_U_$PIECE(WVNPFLAG,U,2)
- QUIT
- +14 IF $DATA(WVDATA("DATA",790))
- Begin DoDot:1
- +15 NEW WVID
- +16 SET WVID=$ORDER(WVDATA("DATA",790,""))
- if WVID=""
- QUIT
- +17 IF WVID["+"
- MERGE WVDATA("DATA",790,WVDATA("DFN")_",")=WVDATA("DATA",790,WVID)
- KILL WVDATA("DATA",790,WVID)
- End DoDot:1
- +18 IF $DATA(WVDATA("DATA",790))!($DATA(WVDATA("DATA",790.1)))!($DATA(WVDATA("DATA",790.4)))!($DATA(WVDATA("DATA",790.23)))
- DO NEW^WVRPCGF(.WVRETURN,.WVDATA)
- +19 IF $DATA(WVDATA("DATA",790.9))
- SET WVRETURN(1)=$$CLRSRND^WVRPCPT2(WVDATA("DFN"),$EXTRACT(WVDATA("DATA",790.9,$ORDER(WVDATA("DATA",790.9,"")),.01),*))
- +20 if +$GET(WVRETURN(1))=-1
- QUIT
- +21 NEW WVERROR,WVCMNEW,WVIEN,WVNEWREC,WVREC,WVFIELD,WVVPR
- +22 NEW WVFDA,WVARRAY,WVCMIEN,WV79005NR,WVENTRY,WVVIEN,WVSEQ
- +23 IF $GET(WVDATA("VISIT"))=""
- SET WVVIEN=0
- +24 IF '$TEST
- Begin DoDot:1
- +25 SET WVVIEN=$$VISITIEN^WVUTL11(WVDATA("DFN"),$GET(WVDATA("VISIT")))
- +26 IF WVVIEN<1
- Begin DoDot:2
- +27 FOR WVFILE=790.05,790.16
- Begin DoDot:3
- +28 if '$DATA(WVDATA("DATA",WVFILE))
- QUIT
- +29 IF $GET(WVDATA("DATA",WVFILE,"MASTER ID"))=""
- Begin DoDot:4
- +30 SET WVRETURN(1)=-1_U_"Invalid VISIT file entry specified: "_$GET(WVDATA("VISIT"))
- End DoDot:4
- QUIT
- End DoDot:3
- if +$GET(WVRETURN(1))<0
- QUIT
- End DoDot:2
- End DoDot:1
- if +$GET(WVRETURN(1))=-1
- QUIT
- +31 DO CHKIENS(.WVDATA)
- +32 DO EXTRTDAT^WVRPCVPR(+$$GETLREC^WVUTL11(WVDATA("DFN"),4)_","_WVDATA("DFN")_",","BEFORE")
- +33 ;Ensure records are complete and then save data (contraceptive methods handled separately)
- +34 SET WVFILE=0
- FOR
- SET WVFILE=$ORDER(WVDATA("DATA",WVFILE))
- if 'WVFILE!(+$GET(WVRETURN(1))<0)
- QUIT
- Begin DoDot:1
- +35 IF "^790^790.1^790.4^790.9^790.23^"[(U_WVFILE_U)
- QUIT
- +36 SET WVARRAY=$SELECT(WVFILE=790.17:"WVCMNEW",1:"WVFDA")
- +37 SET WVREC=""
- FOR
- SET WVREC=$ORDER(WVDATA("DATA",WVFILE,WVREC))
- if 'WVREC!($PIECE($GET(WVRETURN(1)),U)=-1)
- QUIT
- Begin DoDot:2
- +38 SET WVNEWREC=$SELECT($EXTRACT(WVREC,1)="+":1,1:0)
- SET WVENTRY=""
- +39 IF WVFILE=790.17
- IF WVREC["?"
- SET WVENTRY=$PIECE(WVREC,"?")_WVCMIEN_","_$PIECE($PIECE(WVREC,"?",2),",",2,$LENGTH($PIECE(WVREC,"?",2),","))
- +40 MERGE @WVARRAY@(WVFILE,$SELECT(WVENTRY'="":WVENTRY,1:WVREC))=WVDATA("DATA",WVFILE,WVREC)
- +41 if '$DATA(WVFDA)
- QUIT
- +42 IF WVNEWREC
- IF $DATA(WVFDA(WVFILE,WVREC))
- IF '$DATA(WVFDA(WVFILE,WVREC,.01))
- SET WVFDA(WVFILE,WVREC,.01)=$$NOW^XLFDT
- +43 IF WVVIEN>0
- IF '$DATA(WVFDA(WVFILE,WVREC,4))
- SET WVFDA(WVFILE,WVREC,4)="`"_WVVIEN
- +44 IF $GET(WVDATA("DOCUMENT"))>0
- SET WVFDA(WVFILE,WVREC,5)="`"_WVDATA("DOCUMENT")
- +45 DO VALENTRY(WVFILE,WVREC,.WVFDA,WVNEWREC)
- +46 if $GET(WVNEWREC)
- DO UPDATE^DIE("E","WVFDA","WVIEN","WVERROR")
- +47 if '$GET(WVNEWREC)
- DO FILE^DIE("EK","WVFDA","WVERROR")
- +48 IF WVFILE=790.05
- Begin DoDot:3
- +49 IF WVNEWREC
- SET WVSEQ=$PIECE($PIECE(WVREC,",",1),"+",2)
- SET WVCMIEN=$GET(WVIEN(WVSEQ))
- +50 IF '$TEST
- SET WVCMIEN=$PIECE(WVREC,",")
- +51 SET WVCMIEN(1)=$PIECE(WVREC,",",2)
- SET WV79005NR=WVNEWREC
- +52 SET WVVPR("AFTER")=$SELECT(WVNEWREC:$GET(WVIEN(WVSEQ))_","_WVDATA("DFN")_",",1:WVREC)
- End DoDot:3
- +53 IF $DATA(WVERROR)
- SET WVRETURN(1)=-1_U_"Unable to save/update the status data: "_$$FMERROR^WVUTL11(.WVERROR)
- End DoDot:2
- End DoDot:1
- +54 if +$GET(WVRETURN(1))=-1
- QUIT
- +55 IF $DATA(WVDATA("DATA",790.05))!($DATA(WVDATA("DATA",790.17)))
- Begin DoDot:1
- +56 SET WVRETURN(1)=$$METHOD^WVTDALRT(WVDATA("DFN"),.WVCMIEN,+$GET(WV79005NR),.WVCMNEW)
- +57 DO NOTIFY^WVRPCVPR(.WVVPR)
- End DoDot:1
- +58 IF '$DATA(WVRETURN(1))
- SET WVRETURN(1)=1
- +59 QUIT
- +60 ;
- VALENTRY(WVFILE,WVENTRY,WVFDA,WVNEWREC) ;VALIDATE THE DATA TO FILE
- +1 ;INPUT: WVFILE - FILE NUMBER IN WHICH DATA WILL BE SAVED [REQUIRED]
- +2 ; WVENTRY - FILEMAN IENS VALUE OF THE ENTRY IN THE FILE [REQUIRED]
- +3 ; WVFDA - REFERENCE TO ARRAY CONTAINING THE NEW ENTRY
- +4 ;WIPE OUT LATER FIELDS IF MUC REASON IS SET
- IF $DATA(WVFDA(WVFILE,WVENTRY,23))
- KILL WVFDA(WVFILE,WVENTRY,24)
- +5 NEW WVFIELD,WVVALUE
- +6 ;HANDLE BLANK FIELD VALUES
- +7 SET WVFIELD=""
- FOR
- SET WVFIELD=$ORDER(WVFDA(WVFILE,WVENTRY,WVFIELD))
- if WVFIELD=""
- QUIT
- Begin DoDot:1
- +8 SET WVVALUE=$GET(WVFDA(WVFILE,WVENTRY,WVFIELD))
- if WVVALUE'=""
- QUIT
- +9 IF WVNEWREC
- KILL WVFDA(WVFILE,WVENTRY,WVFIELD)
- +10 IF 'WVNEWREC
- SET WVFDA(WVFILE,WVENTRY,WVFIELD)="@"
- End DoDot:1
- +11 QUIT
- +12 ;
- CHKIENS(WVDATA) ;ENSURE IENS ARE COMPLETE AND ACCURATE
- +1 ;INPUT: WVDATA - REFERENCE TO ARRAY CONTAINING DATA TO CHECK
- +2 NEW WVLEVELS,WVLEVEL,WVIEN,WVFILE,WVMIENS,WVIENS,WVENTRY,WVUPLVL,WVPFILE,WVPLCHDR,WVID,WVSTRIP,WVNEWPH,WVPDIENS
- +3 ;WVLEVELS(LEVEL_#,FILE_#)=PARENT_FILE_#
- +4 SET WVLEVELS(1,790)=""
- SET WVLEVELS(2,790.05)=790
- SET WVLEVELS(2,790.16)=790
- SET WVLEVELS(3,790.17)=790.05
- +5 SET WVLEVELS(1,790.1)=""
- SET WVLEVELS(2,790.23)=790.1
- SET WVLEVELS(1,790.4)=""
- +6 SET WVSTRIP("+")="?"
- +7 SET WVIEN(790)=$GET(WVDATA("DFN"))
- +8 SET WVLEVEL=0
- FOR
- SET WVLEVEL=$ORDER(WVLEVELS(WVLEVEL))
- if '+WVLEVEL
- QUIT
- Begin DoDot:1
- +9 SET WVFILE=0
- FOR
- SET WVFILE=$ORDER(WVLEVELS(WVLEVEL,WVFILE))
- if '+WVFILE
- QUIT
- Begin DoDot:2
- +10 if '$DATA(WVDATA("DATA",WVFILE))
- QUIT
- +11 KILL WVPDIENS
- +12 SET WVMIENS=$PIECE($GET(WVDATA("DATA",WVFILE,"MASTER ID")),":")
- SET WVNEWPH=0
- +13 SET WVIENS=""
- FOR
- SET WVIENS=$ORDER(WVDATA("DATA",WVFILE,WVIENS))
- if WVIENS=""
- QUIT
- Begin DoDot:3
- +14 IF (WVIENS="MASTER ID")!($DATA(WVPDIENS(WVIENS)))
- QUIT
- +15 IF $EXTRACT(WVIENS,1)="+"
- Begin DoDot:4
- +16 SET WVID=$EXTRACT(WVIENS,2,$LENGTH($PIECE(WVIENS,",")))
- +17 IF $DATA(WVPLCHDR(WVID))
- SET WVPLCHDR=WVPLCHDR+1
- SET WVPLCHDR(WVPLCHDR)=""
- SET WVNEWPH=1
- +18 IF '$TEST
- SET WVPLCHDR(WVID)=""
- SET WVPLCHDR=WVID
- End DoDot:4
- +19 SET WVIEN(WVFILE)=$SELECT(WVNEWPH:"+"_WVPLCHDR,1:$PIECE(WVIENS,","))
- +20 IF $LENGTH(WVIENS,",")<(WVLEVEL+1)
- Begin DoDot:4
- +21 SET WVENTRY=WVIEN(WVFILE)_","
- +22 SET WVUPLVL=WVLEVEL+1
- SET WVPFILE=WVFILE
- FOR
- SET WVUPLVL=$ORDER(WVLEVELS(WVUPLVL),-1)
- if '+WVUPLVL
- QUIT
- SET WVPFILE=WVLEVELS(WVUPLVL,WVPFILE)
- IF WVPFILE'=""
- SET WVENTRY=WVENTRY_WVIEN(WVPFILE)_","
- +23 SET $PIECE(WVENTRY,",",2,$LENGTH(WVENTRY,","))=$$REPLACE^XLFSTR($PIECE(WVENTRY,",",2,$LENGTH(WVENTRY,",")),.WVSTRIP)
- +24 MERGE WVDATA("DATA",WVFILE,WVENTRY)=WVDATA("DATA",WVFILE,WVIENS)
- +25 KILL WVDATA("DATA",WVFILE,WVIENS)
- +26 SET WVIENS=""
- SET WVPDIENS(WVENTRY)=""
- End DoDot:4
- +27 IF WVIENS'=""
- SET WVPDIENS(WVIENS)=""
- End DoDot:3
- +28 IF WVMIENS'=""
- KILL WVDATA("DATA",WVFILE,"MASTER ID")
- End DoDot:2
- End DoDot:1
- +29 QUIT
- SETARRAY(WVFILE,WVFIELD,WVDATA,WVMSUB) ;SET DATA INTO THE RETURN ARRAY
- +1 ; INPUT: WVFILE - FILE NUMBER CONTAINING THE FIELD [REQUIRED]
- +2 ; WVFIELD - FIELD NUMBER [REQUIRED]
- +3 ; WVDATA - INTERNAL VALUE OF THE FIELD [REQUIRED]
- +4 ; WVMSUB - SUBSCRIPT WITHIN THE TMP GLOBAL TO RETURN DATA IN
- +5 NEW WVSUB
- +6 IF $EXTRACT(WVFIELD,1)="P"
- Begin DoDot:1
- +7 NEW WVCODE,WVLINE
- +8 SET WVLINE=$EXTRACT(WVFIELD,2,*)
- +9 SET WVSUB=$PIECE($PIECE($TEXT(PFIELDS+WVLINE),";;",2),U)
- +10 SET WVCODE=$PIECE($PIECE($TEXT(PFIELDS+WVLINE),";;",2),U,2)
- +11 if WVCODE'=""
- XECUTE WVCODE
- End DoDot:1
- +12 IF $EXTRACT(WVFIELD,1)'="P"
- Begin DoDot:1
- +13 SET WVSUB=$$GET1^DID(WVFILE,WVFIELD,,"LABEL")
- +14 SET $PIECE(WVDATA,U,2)=$$EXTERNAL^DILFD(WVFILE,WVFIELD,"",WVDATA)
- End DoDot:1
- +15 IF $GET(WVMSUB)>0
- SET ^TMP(RESULT,$JOB,WVCOUNT,WVSUB,WVMSUB)=WVDATA
- +16 IF '$TEST
- SET ^TMP(RESULT,$JOB,WVCOUNT,WVSUB)=WVDATA
- +17 QUIT
- +18 ;
- GETSTATUS(WVDFN) ;RETURN SINGLE LINE PREGNANT/LACTATING
- +1 NEW WVPOST,WVINDEX,WVRET,WVTEXT,WVSUB
- +2 DO POSTLIST^WVRPCOR(.WVPOST,WVDFN,.WVINDEX)
- +3 SET WVINDEX=0
- FOR
- SET WVINDEX=$ORDER(WVPOST(WVINDEX))
- if WVINDEX=""
- QUIT
- Begin DoDot:1
- +4 SET WVTEXT=$PIECE(WVPOST(WVINDEX),U,2)
- +5 SET WVRET=$SELECT($GET(WVRET)'="":WVRET_" and ",1:"")_WVTEXT
- +6 IF WVTEXT'="Pregnant"
- QUIT
- +7 SET WVSUB(1)=$$GETSUB^WVRPCOR(WVDFN)
- +8 SET WVSUB(2)=$PIECE($PIECE($GET(^XTMP(WVSUB(1),"POSTINGS","P")),";",2),",",1)
- +9 IF WVSUB(2)=""
- QUIT
- +10 SET WVRET=WVRET_" (Expected Due Date: "_$$FMTE^XLFDT($PIECE($GET(^WV(790,WVDFN,4,WVSUB(2),4)),U,2))_")"
- End DoDot:1
- +11 QUIT $GET(WVRET)
- GETEDD(WVDFN) ;RETURN EDD AND WEEKS GESTATION
- +1 NEW WVREC,WVEDD,WVGA,WVRESULT,WVSTATUS
- +2 SET WVRESULT=$NAME(^TMP("WVEDD",$JOB))
- +3 SET WVREC=$$GETLREC^WVUTL11(WVDFN,4)
- +4 SET WVSTATUS=$PIECE($GET(^WV(790,WVDFN,4,+WVREC,2)),U,1)
- +5 IF WVSTATUS'=1
- SET @WVRESULT@(1,0)=""
- QUIT "~@"_WVRESULT
- +6 SET WVEDD=$PIECE($GET(^WV(790,WVDFN,4,+WVREC,4)),U,2)
- +7 SET @WVRESULT@(1,0)="Expected Due Date: "_$$FMTE^XLFDT(WVEDD)
- +8 SET WVGA=$PIECE(((280-$$FMDIFF^XLFDT(WVEDD,DT,1))/7),".",1)
- +9 IF $PIECE(WVREC,U,4)=1
- SET @WVRESULT@(2,0)="Gestational Age: "_WVGA_" weeks"
- +10 QUIT "~@"_WVRESULT