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

PXHFMEASREPAIR.m

Go to the documentation of this file.
  1. PXHFMEASREPAIR ;SLC/PKR - Repair V Health Factor entries that have corrupted measurements. ;05/03/2023
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**234**;Aug 12, 1996;Build 6
  1. ;
  1. ; Reference Field ICR#
  1. ;^DPT(D0,0) .01 NAME 0;1 10035
  1. ;
  1. ;===============================
  1. EDITMEASUREMENT ;Let the user select V HF entries and edit the measurement.
  1. N COMMENTS,DA,DIC,DIE,DONE,DR,HFIEN,HFNAME,HFTEMP220,MAGNITUDE,MAX,MIN,MAXDEC
  1. N NUMNULL,NUMVHFDEC,NL,TEXT,UCUMCODE,UCUMIEN,VALID,VHFDEC,VHFTEMP220,VHFUCUMIEN,Y
  1. S (DIC,DIE)=9000010.23
  1. S DIC("A")="Input the internal entry number, or press ENTER to exit: "
  1. S DR="220;221"
  1. W !,"Edit the measurement for selected V HEALTH FACTOR entries."
  1. S DONE=0
  1. F Q:DONE D
  1. . S DIC(0)="AEN"
  1. . D ^DIC
  1. . I Y=-1 S DONE=1 Q
  1. . S DA=$P(Y,U,1)
  1. .;Display the HF information for the user.
  1. . S HFIEN=$P(^AUPNVHF(DA,0),U,1)
  1. . S COMMENTS=$G(^AUPNVHF(DA,811))
  1. . S HFNAME=$P(^AUTTHF(HFIEN,0),U,1)
  1. . S HFTEMP220=$G(^AUTTHF(HFIEN,220))
  1. . S MIN=$P(HFTEMP220,U,1),MAX=$P(HFTEMP220,U,2)
  1. . S MAXDEC=$P(HFTEMP220,U,3),UCUMIEN=$P(HFTEMP220,U,4)
  1. . S UCUMCODE=$S(UCUMIEN>0:$$UCUMFIELDS^PXUCUM(UCUMIEN,"DESCRIPTION"),1:"")
  1. . S NUMNULL=0
  1. . I MIN="" S NUMNULL=NUMNULL+1
  1. . I MAX="" S NUMNULL=NUMNULL+1
  1. . I MAXDEC="" S NUMNULL=NUMNULL+1
  1. . I UCUMIEN="" S NUMNULL=NUMNULL+1
  1. . W !!,"Health Factor: ",HFNAME
  1. . I NUMNULL=4 W !,"A measurement is not defined for this health factor."
  1. . I (NUMNULL>0),(NUMNULL<4) W !,"The measurement is not completly defined for this health factor."
  1. . I NUMNULL=0 D
  1. .. W !," MINIMUM VALUE: ",MIN
  1. .. W !," MAXIMUM VALUE: ",MAX
  1. .. W !," MAXIMUM DECIMALS: ",MAXDEC
  1. .. W !," UCUM DESCRIPTION: ",UCUMCODE
  1. . W !," COMMENTS: ",COMMENTS
  1. . W !
  1. . S VALID=0
  1. . F Q:VALID D
  1. .. D ^DIE
  1. ..;Validate the user's input.
  1. .. S NL=1,TEXT(NL)=""
  1. .. K TEXT
  1. .. S VALID=1
  1. .. S VHFTEMP220=$G(^AUPNVHF(DA,220))
  1. .. S MAGNITUDE=$P(VHFTEMP220,U,1)
  1. .. S VHFUCUMIEN=$P(VHFTEMP220,U,2)
  1. .. S NUMVHFDEC=$L($P(MAGNITUDE,".",2))
  1. .. I (MAGNITUDE=""),(VHFUCUMIEN'="") D
  1. ... S NL=NL+1,TEXT(NL)="MAGNITUDE is NULL, but UCUM CODE is not NULL."
  1. ... S VALID=0
  1. .. I (MAGNITUDE'=""),(VHFUCUMIEN="") D
  1. ... S NL=NL+1,TEXT(NL)="MAGNITUDE is not NULL, but UCUM CODE is NULL."
  1. ... S VALID=0
  1. .. I (MAGNITUDE'=""),((MAGNITUDE<MIN)!(MAGNITUDE>MAX)) D
  1. ... S NL=NL+1,TEXT(NL)=MAGNITUDE_" is not in the inclusive range "_MIN_" to "_MAX_"."
  1. ... S VALID=0
  1. .. I NUMVHFDEC>MAXDEC D
  1. ... S NL=NL+1,TEXT(NL)="The maximum number of decimals is exceeded."
  1. ... S VALID=0
  1. .. I (VHFUCUMIEN'=""),(VHFUCUMIEN'=UCUMIEN) D
  1. ... S NL=NL+1,TEXT(NL)="The V HEALTH FACTORS UCUM CODE does not match the HEALTH FACTORS UCUM CODE."
  1. ... S VALID=0
  1. .. I 'VALID D EN^DDIOL(.TEXT)
  1. Q
  1. ;
  1. ;===============================
  1. LCSHF(HFIEN,VHFIEN,MEASDEF,NUMREPAIRED) ;Special handling for the LCS HFs, if what is stored
  1. ;in COMMENTS is a valid magnitude use it.
  1. N COMMENTS,DEC,DECLEN,MAGNITUDE,NUMBER,ORGMAG,TEMP220,UCUMIEN,VALIDNUM,VHFTEMP220
  1. S VHFTEMP220=$G(^AUPNVHF(VHFIEN,220))
  1. S (MAGNITUDE,ORGMAG)=$P(VHFTEMP220,U,1)
  1. S UCUMIEN=$P(VHFTEMP220,U,2)
  1. ;If MAGNITUDE is NULL try to get a number from COMMENTS.
  1. I MAGNITUDE="" D
  1. . S COMMENTS=$G(^AUPNVHF(VHFIEN,811))
  1. . I COMMENTS="" Q
  1. . S NUMBER=+COMMENTS
  1. . S VALIDNUM=$S(NUMBER=COMMENTS:1,1:0)
  1. . I 'VALIDNUM S VALIDNUM=$$NUMCHECK(COMMENTS)
  1. . I 'VALIDNUM Q
  1. . I (NUMBER<MEASDEF("MIN"))!(NUMBER>MEASDEF("MAX")) Q
  1. . S MAGNITUDE=NUMBER
  1. ;Could not obtain a valid MAGNITUDE, remove anything on the 220 node.
  1. I MAGNITUDE="" D Q
  1. . K ^AUPNVHF(VHFIEN,220)
  1. . S ^TMP("PXNOREPAIR",$J,HFIEN,VHFIEN)="",NUMNOTREPAIRED=NUMNOTREPAIRED+1
  1. I (MAGNITUDE<MEASDEF("MIN"))!(MAGNITUDE>MEASDEF("MAX")) D Q
  1. . S ^TMP("PXNOREPAIR",$J,HFIEN,VHFIEN)="",NUMNOTREPAIRED=NUMNOTREPAIRED+1
  1. ;Have a MAGNITUDE, make sure the number of decimals does not exceed MAXDEC.
  1. S DEC=$P(MAGNITUDE,".",2),DECLEN=$L(DEC)
  1. I DECLEN>MEASDEF("MAXDEC") S MAGNITUDE=$FN(MAGNITUDE,"",MEASDEF("MAXDEC"))
  1. ;Store the measurement using the UCUM from the health factor.
  1. I (MAGNITUDE'=ORGMAG)!(UCUMIEN'=MEASDEF("UCUMIEN")) D
  1. . S ^AUPNVHF(VHFIEN,220)=MAGNITUDE_U_MEASDEF("UCUMIEN")
  1. . S NUMREPAIRED=NUMREPAIRED+1
  1. Q
  1. ;
  1. ;===============================
  1. NUMCHECK(COMMENTS) ;Verify all the characters in COMMENTS are numbers or ".".
  1. N ASCII,CHAR,DONE,IND,LEN,VALID
  1. S LEN=$L(COMMENTS)
  1. S (DONE,IND)=0,VALID=1
  1. F Q:(DONE)!(IND=LEN) D
  1. . S IND=IND+1
  1. . S CHAR=$E(COMMENTS,IND)
  1. . S ASCII=$A(CHAR)
  1. . I ASCII=46 Q
  1. . I (ASCII<48)!(ASCII>57) S DONE=1,VALID=0
  1. Q VALID
  1. ;
  1. ;===============================
  1. REPAIR ;Repair V Health Factor entries that have corrupted measurements.
  1. N COMMENTS,DEC,DECLEN,HFIEN,HFTEMP220,LCSHF,LCSPACKDAY,LCSYEARSSMOKED,MAGNITUDE,MEASDEF
  1. N NUMBER,NUMREPAIRED,NUMNOTREPAIRED,ORGMAG,UCUMIEN,VALIDNUM,VHFIEN,VHFTEMP220
  1. K ^TMP("PXMEASDEF",$J),^TMP("PXNOREPAIR",$J)
  1. ;Get the IEN of the LCS health factors.
  1. S LCSPACKDAY=$O(^AUTTHF("B","LCS PACKS/DAY",""))
  1. S LCSYEARSSMOKED=$O(^AUTTHF("B","LCS YEARS SMOKED",""))
  1. S (HFIEN,NUMREPAIRED,NUMNOTREPAIRED)=0
  1. F S HFIEN=+$O(^AUPNVHF("B",HFIEN)) Q:HFIEN=0 D
  1. . I (HFIEN=LCSPACKDAY)!(HFIEN=LCSYEARSSMOKED) S LCSHF=1
  1. . E S LCSHF=0
  1. . S HFTEMP220=$G(^AUTTHF(HFIEN,220))
  1. . I HFTEMP220'="" D
  1. .. S MEASDEF("MIN")=$P(HFTEMP220,U,1)
  1. .. S MEASDEF("MAX")=$P(HFTEMP220,U,2)
  1. .. S MEASDEF("MAXDEC")=$P(HFTEMP220,U,3)
  1. .. S MEASDEF("UCUMIEN")=$P(HFTEMP220,U,4)
  1. .. S MEASDEF("PROMPT CAPTION")=$P(HFTEMP220,U,5)
  1. .. S MEASDEF("UCUM DISPLAY")=$P(HFTEMP220,U,6)
  1. .. I '$$VALIDMEASDEF(.MEASDEF) S ^TMP("PXMEASDEF",$J,HFIEN)=""
  1. . I HFTEMP220="" S (MEASDEF("MIN"),MEASDEF("MAX"),MEASDEF("MAXDEC"),MEASDEF("UCUMIEN"),MEASDEF("PROMPT CAPTION"),MEASDEF("UCUM DISPLAY"))=""
  1. . S MEASDEF=$S(MEASDEF("MIN")="":0,MEASDEF("MAX")="":0,1:1)
  1. . S VHFIEN=0
  1. . F S VHFIEN=+$O(^AUPNVHF("B",HFIEN,VHFIEN)) Q:VHFIEN=0 D
  1. .. I LCSHF D LCSHF(HFIEN,VHFIEN,.MEASDEF,.NUMREPAIRED) Q
  1. .. S VHFTEMP220=$G(^AUPNVHF(VHFIEN,220))
  1. .. S (MAGNITUDE,ORGMAG)=$P(VHFTEMP220,U,1)
  1. .. S UCUMIEN=$P(VHFTEMP220,U,2)
  1. ..;If the HF does not have a measurement defined delete the VHF 220 node.
  1. ..;The 220 node could be ^.
  1. .. I (MEASDEF=0),((MAGNITUDE'="")!(UCUMIEN'="")) D Q
  1. ... S ^AUPNVHF(VHFIEN,220)="",NUMREPAIRED=NUMREPAIRED+1
  1. .. I (MAGNITUDE=""),(UCUMIEN="") Q
  1. ..;If the units do not match automatic repair is not posible.
  1. .. I UCUMIEN'=MEASDEF("UCUMIEN") S ^TMP("PXNOREPAIR",$J,HFIEN,VHFIEN)="",NUMNOTREPAIRED=NUMNOTREPAIRED+1 Q
  1. .. ;If MAGNITUDE is NULL try to get a number from COMMENTS.
  1. .. I MAGNITUDE="" D
  1. ... S COMMENTS=$G(^AUPNVHF(VHFIEN,811))
  1. ... I COMMENTS="" Q
  1. ... S NUMBER=+COMMENTS
  1. ... S VALIDNUM=$S(NUMBER=COMMENTS:1,1:0)
  1. ... I 'VALIDNUM S VALIDNUM=$$NUMCHECK(COMMENTS)
  1. ... I 'VALIDNUM Q
  1. ... I (NUMBER<MEASDEF("MIN"))!(NUMBER>MEASDEF("MAX")) Q
  1. ... S MAGNITUDE=NUMBER
  1. ..;Could not obtain a valid MAGNITUDE, remove anything on the 220 node.
  1. .. I MAGNITUDE="" D Q
  1. ... K ^AUPNVHF(VHFIEN,220)
  1. ... S ^TMP("PXNOREPAIR",$J,HFIEN,VHFIEN)="",NUMNOTREPAIRED=NUMNOTREPAIRED+1
  1. .. I (MAGNITUDE<MEASDEF("MIN"))!(MAGNITUDE>MEASDEF("MAX")) D Q
  1. ... S ^TMP("PXNOREPAIR",$J,HFIEN,VHFIEN)="",NUMNOTREPAIRED=NUMNOTREPAIRED+1
  1. .. ;Have a MAGNITUDE, make sure the number of decimals does not exceed MAXDEC.
  1. .. S DEC=$P(MAGNITUDE,".",2),DECLEN=$L(DEC)
  1. .. I DECLEN>MEASDEF("MAXDEC") S MAGNITUDE=$FN(MAGNITUDE,"",MEASDEF("MAXDEC"))
  1. .. I MAGNITUDE'=ORGMAG D
  1. ... S ^AUPNVHF(VHFIEN,220)=MAGNITUDE_U_MEASDEF("UCUMIEN")
  1. ... S NUMREPAIRED=NUMREPAIRED+1
  1. D SENDVHFMESSAGE(NUMREPAIRED,NUMNOTREPAIRED)
  1. I $D(^TMP("PXMEASDEF",$J)) D SENDHFMESSAGE
  1. K ^TMP("PXMEASDEF",$J),^TMP("PXNOREPAIR",$J)
  1. Q
  1. ;
  1. ;===============================
  1. SENDHFMESSAGE ;Send a MailMan message to the PCE Management Repair mail group
  1. ;listing the HF entries with incomplete measurement definitions.
  1. N HFIEN,MGIEN,MGROUP,NAME,NL,SUBJECT,TO,VALUE
  1. S SUBJECT="HEALTH FACTORS WITH INCOMPLETE MEASUREMENT DEFINITION"
  1. S MGIEN=+$G(^PX(815,1,650))
  1. I MGIEN>0 D
  1. . S MGROUP="G."_$$GET1^DIQ(3.8,MGIEN,.01)
  1. . S TO(MGROUP)=""
  1. S TO(DUZ)=""
  1. K ^TMP("PXHFMSG",$J)
  1. S ^TMP("PXHFMSG",$J,1,0)="The following health factors have incomplete measurement definitions, they"
  1. S ^TMP("PXHFMSG",$J,2,0)="should be completed as soon as possible."
  1. S NL=2
  1. S HFIEN=0
  1. F S HFIEN=$O(^TMP("PXMEASDEF",$J,HFIEN)) Q:HFIEN="" D
  1. . S NAME=$P(^AUTTHF(HFIEN,0),U,1)
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=""
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=NAME
  1. . S HFTEMP220=$G(^AUTTHF(HFIEN,220))
  1. . S VALUE=$P(HFTEMP220,U,1)
  1. . I VALUE="" S VALUE="Missing"
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=" MINIMUM VALUE: "_VALUE
  1. . S VALUE=$P(HFTEMP220,U,2)
  1. . I VALUE="" S VALUE="Missing"
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=" MAXIMUM VALUE: "_VALUE
  1. . S VALUE=$P(HFTEMP220,U,3)
  1. . I VALUE="" S VALUE="Missing"
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=" MAXIMUM DECIMALS: "_VALUE
  1. . S VALUE=$P(HFTEMP220,U,4)
  1. . S VALUE=$S(VALUE'="":$$UCUMFIELDS^PXUCUM(VALUE,"DESCRIPTION"),1:"Missing")
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=" UCUM CODE: "_VALUE
  1. . S VALUE=$P(HFTEMP220,U,5)
  1. . I VALUE="" S VALUE="Missing"
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=" PROMPT CAPTION: "_VALUE
  1. . S VALUE=$P(HFTEMP220,U,6)
  1. . I VALUE="" S VALUE="Missing"
  1. . S NL=NL+1,^TMP("PXHFMSG",$J,NL,0)=" UCUM DISPLAY: "_VALUE
  1. D SEND^PXMSG("PXHFMSG",SUBJECT,.TO)
  1. K ^TMP("PXHFMSG",$J)
  1. Q
  1. ;
  1. ;===============================
  1. SENDVHFMESSAGE(NUMREPAIRED,NUMNOTREPAIRED) ;Send a MailMan message to the PCE Management Repair mail group
  1. ;listing the VHF entries whose measurement could not be repaired.
  1. N DFN,HF,HFIEN,HFTEMP220,MAGNITUDE,MAX,MAXDEC,MGIEN,MGROUP,MIN,PATIENT,NL,NOW
  1. N SUBJECT,TEMP,TO,UCUMCODE,UCUMIEN,VHFIEN,VHFTEMP220,VISITDT,VISITIEN
  1. K ^TMP("PXVHFMSG",$J)
  1. S SUBJECT="V HEALTH FACTORS MEASUREMENT REPAIR"
  1. S MGIEN=+$G(^PX(815,1,650))
  1. I MGIEN>0 D
  1. . S MGROUP="G."_$$GET1^DIQ(3.8,MGIEN,.01)
  1. . S TO(MGROUP)=""
  1. S TO(DUZ)=""
  1. S NOW=$$NOW^XLFDT
  1. S ^TMP("PXVHFMSG",$J,1,0)="V HEALTH FACTORS measurement repair completed at "_$$FMTE^XLFDT(NOW)
  1. S ^TMP("PXVHFMSG",$J,2,0)="Measurements were repaired for "_NUMREPAIRED_" entries."
  1. I '$D(^TMP("PXNOREPAIR",$J)) D Q
  1. . D SEND^PXMSG("PXVHFMSG",SUBJECT,.TO)
  1. . K ^TMP("PXVHFMSG",$J)
  1. S ^TMP("PXVHFMSG",$J,3,0)="There were "_NUMNOTREPAIRED_" V HEALTH FACTORS entries that could not be automatically"
  1. S ^TMP("PXVHFMSG",$J,4,0)="repaired:"
  1. S HFIEN=0,NL=4
  1. F S HFIEN=$O(^TMP("PXNOREPAIR",$J,HFIEN)) Q:HFIEN="" D
  1. . S HF=$P(^AUTTHF(HFIEN,0),U,1)
  1. . S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)=""
  1. . S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)="Health Factor: "_HF
  1. . S HFTEMP220=^AUTTHF(HFIEN,220)
  1. . S MIN=$P(HFTEMP220,U,1)
  1. . S MAX=$P(HFTEMP220,U,2)
  1. . S MAXDEC=$P(HFTEMP220,U,3)
  1. . S UCUMIEN=$P(HFTEMP220,U,4)
  1. . S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)="Minimum Value: "_MIN_" Maximum Value: "_MAX
  1. . S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)="Maximum Decimals: "_MAXDEC
  1. . S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)="UCUM Code: "_$$UCUMFIELDS^PXUCUM(UCUMIEN,"DESCRIPTION")
  1. . S VHFIEN=0
  1. . F S VHFIEN=$O(^TMP("PXNOREPAIR",$J,HFIEN,VHFIEN)) Q:VHFIEN="" D
  1. .. S TEMP=^AUPNVHF(VHFIEN,0)
  1. .. S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)=""
  1. .. S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)=" V Health Factors IEN: "_VHFIEN
  1. .. S DFN=$P(TEMP,U,2),PATIENT=$P(^DPT(DFN,0),U,1)
  1. .. S VISITIEN=$P(TEMP,U,3),VISITDT=$P(^AUPNVSIT(VISITIEN,0),U,1)
  1. .. S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)=" Visit: "_$$FMTE^XLFDT(VISITDT)
  1. .. S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)=" Patient: "_PATIENT
  1. .. S VHFTEMP220=$G(^AUPNVHF(VHFIEN,220))
  1. .. S MAGNITUDE=$P(VHFTEMP220,U,1)
  1. .. I MAGNITUDE="" S MAGNITUDE="Missing"
  1. .. S UCUMIEN=$P(VHFTEMP220,U,2)
  1. .. I UCUMIEN>0 S UCUMCODE=$$UCUMFIELDS^PXUCUM(UCUMIEN,"DESCRIPTION")
  1. .. E S UCUMCODE="Missing"
  1. .. S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)=" MAGNITUDE: "_MAGNITUDE_"; UCUM CODE: "_UCUMCODE
  1. .. S NL=NL+1,^TMP("PXVHFMSG",$J,NL,0)=" Comments: "_$G(^AUPNVHF(VHFIEN,811))
  1. D SEND^PXMSG("PXVHFMSG",SUBJECT,.TO)
  1. K ^TMP("PXVHFMSG",$J)
  1. Q
  1. ;
  1. ;===============================
  1. TASKREPAIR ;Run REPAIR^PXHFMEASREPAIR as a TaskMan job.
  1. N TEXT,ZTDTH,ZTSAVE,ZTIO,ZTSK,ZTRTN,ZTDESC,ZTUCI,ZTCPU,ZTSYNC,ZTKIL
  1. S ZTRTN="REPAIR^PXHFMEASREPAIR"
  1. S ZTDESC="Repair corrupted V HEALTH FACTORS measurements"
  1. S ZTIO=""
  1. S ZTDTH=$H
  1. D ^%ZTLOAD
  1. I $G(ZTSK) D
  1. . S TEXT="V HEALTH FACTORS measurement repair has been queued, task number: "_ZTSK
  1. . D BMES^XPDUTL(.TEXT)
  1. I '$G(ZTSK) D
  1. . S TEXT="V HEALTH FACTORS measurement repair failed to queue. Please create a ticket."
  1. . D BMES^XPDUTL(.TEXT)
  1. Q
  1. ;
  1. ;===============================
  1. VALIDMEASDEF(MEASDEF) ;Make sure a measurement is completely defined.
  1. N NUMNULL
  1. S NUMNULL=0
  1. I MEASDEF("MIN")="" S NUMNULL=NUMNULL+1
  1. I MEASDEF("MAX")="" S NUMNULL=NUMNULL+1
  1. I MEASDEF("MAXDEC")="" S NUMNULL=NUMNULL+1
  1. I MEASDEF("UCUMIEN")="" S NUMNULL=NUMNULL+1
  1. I MEASDEF("PROMPT CAPTION")="" S NUMNULL=NUMNULL+1
  1. I MEASDEF("UCUM DISPLAY")="" S NUMNULL=NUMNULL+1
  1. Q $S(NUMNULL=0:1,1:0)
  1. ;