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

DGHTINAC.m

Go to the documentation of this file.
  1. DGHTINAC ;ALB/JRC/JAM - Home Telehealth Patient Inactivation HL7;10 January 2005 ; 11/14/06 9:46am
  1. ;;5.3;PIMS;**1016**;JUN 30, 2012;Build 20
  1. ;;
  1. EN ;Main entry point
  1. ;Initiate variables
  1. N STOP,ARR,DGTYPE,DGDUZ,FLG
  1. N CNT,DGDFN,DGVEN,NODE,NODE1,MSGTYPE,INACTDT,IRECORD,INODE,DGEVNT
  1. N INAMSGID,ACKCODE,TINACTDT,DGVEN,DGCOOR,DGDATE,VENDOR,CHOICES
  1. N ARECORD,NUMBER,TMPNODE,ITRANS,INODE,DGMID,RESULT,GETOK,DIR,RECORD
  1. S ARR=$NA(HLA("HLS")),DGTYPE="I",DGDUZ=DUZ
  1. S STOP=0
  1. F D Q:STOP
  1. .K ^TMP("DGHT",$J),CHOICES
  1. .S (DGVEN,RECORD,CNT,FLG,ITRANS)=0
  1. .W !!
  1. .;Select patient
  1. .S DGDFN=$$GETPAT()
  1. .I 'DGDFN S STOP=1 Q
  1. .;Get active patient's home telehealth records
  1. .F S DGVEN=$O(^DGHT(391.31,"APATVN",DGDFN,DGVEN)) Q:'DGVEN D
  1. ..S ARECORD=$$LOCREC(DGDFN,DGVEN,"A")
  1. ..Q:'(ARECORD)
  1. ..;Get 0'th node of activation record and 0'th node of transaction
  1. ..S NODE=$G(^DGHT(391.31,$P(ARECORD,U,1),0))
  1. ..S NODE1=$G(^DGHT(391.31,+$P(ARECORD,U,1),"TRAN",+$P(ARECORD,U,2),0))
  1. ..Q:$P(NODE1,U,7)'="A"
  1. ..S IRECORD=$$LOCREC(DGDFN,DGVEN,"I")
  1. ..Q:'+IRECORD
  1. ..S MSGTYPE=$P($G(NODE1),U,4),INACTDT=$P($G(NODE),U,7)
  1. ..;Get Inactivation transaction node if exist
  1. ..S INODE=$G(^DGHT(391.31,+$P(IRECORD,U,1),"TRAN",+$P(IRECORD,U,2),0))
  1. ..S INAMSGID=$P(INODE,U,2),ACKCODE=$P(INODE,U,7),TINACTDT=$P(INODE,U,1)
  1. ..I $P($G(INODE),U,7)="A" Q
  1. ..;Increment counter
  1. ..S CNT=CNT+1
  1. ..;Store records in temporary global
  1. ..;
  1. ..; ^TMP NODE - Record # ^ Transaction # ^ patient ^ vendor ^
  1. ..; trans date ^ coordinator ^ trans type ^ inactiva
  1. ..; tio date ^ inact msg id ^ inact msg ack code ^
  1. ..; trans inactivation date and time ^ inact record
  1. ..;
  1. ..S DGVEN=$P(NODE,U,3),DGCOOR=$P(NODE,U,5),DGDATE=$P(NODE,U,6)
  1. ..S ^TMP("DGHT",$J,CNT,$P(ARECORD,U,1))=ARECORD_U_DGDFN_U_DGVEN_U_DGDATE_U_DGCOOR_U_MSGTYPE_U_INACTDT_U_$G(INAMSGID)_U_$G(ACKCODE)_U_$G(TINACTDT)_U_$TR(IRECORD,U,"~")
  1. ..;If more than one record prepare CHOICES variable for DIR call
  1. ..S VENDOR=$$GET1^DIQ(4,$P(NODE,U,3),.01,"E")
  1. ..S CHOICES=$G(CHOICES)_CNT_":"_$TR($$FMTE^XLFDT(DGDATE,"1HM"),":","")_" "_VENDOR_";"
  1. ..;If more than one active HTH record prompt user for selection
  1. .I CNT>1 D Q:FLG
  1. ..;Resolve external value for PATIENT
  1. ..W !!,"Patient "_$$GET1^DIQ(2,DGDFN,.01,"E")_" has multiple active records"
  1. ..K DIR,X,Y,DIRUT,DUOUT
  1. ..S DIR(0)="S^"_CHOICES
  1. ..S DIR("A")="Select Sign-up/Activation record to Inactivate"
  1. ..D ^DIR
  1. ..I $D(DIRUT)!$D(DUOUT) S FLG=1 Q
  1. ..S NUMBER=Y
  1. ..S RECORD=0,RECORD=$O(^TMP("DGHT",$J,NUMBER,RECORD))
  1. ..S TMPNODE=^TMP("DGHT",$J,NUMBER,RECORD),IRECORD=$P(TMPNODE,U,12)
  1. .;If there is only one record suppress choices
  1. .I CNT=1 D
  1. ..S NUMBER=CNT
  1. ..S RECORD=0,RECORD=$O(^TMP("DGHT",$J,NUMBER,RECORD))
  1. ..S TMPNODE=^TMP("DGHT",$J,CNT,RECORD),IRECORD=$P(TMPNODE,U,12)
  1. .;If no active records
  1. .I 'CNT D Q:FLG
  1. ..W !
  1. ..W !,"************************************************************"
  1. ..W !,"* THIS PATIENT HAS NO ACTIVE HOME TELEHEALTH RECORDS *"
  1. ..W !,"************************************************************"
  1. ..S FLG=1
  1. .;Display patient's record information to screen
  1. .W @IOF
  1. .W !!,"THE FOLLOWING PATIENT'S HOME TELEHEALTH RECORD WILL BE INACTIVATED"
  1. .W !!
  1. .D DSPREC^DGHTENR($P(TMPNODE,U,1,2))
  1. .;If patient's record was previously inactivated display information
  1. .I +$P(IRECORD,"~",2)'="" D
  1. ..W !,"Patient's inactivation was previously transmitted on:"
  1. ..W !!,?3,"Date & Time: ",?21,$$FMTE^XLFDT($P(TMPNODE,U,11),"2")
  1. ..W !,?3,"Message ID: ",?21,$P(TMPNODE,U,9)
  1. ..W !,?3,"Acknowledge Code: ",?21,$S($P(TMPNODE,U,10)="R":"Rejected",$P(TMPNODE,U,10)="A":"Accepted",1:"")
  1. ..W !!
  1. .;Prompt user for inactivation date
  1. .K DIR,X,Y,DIRUT,DUOUT
  1. .S DIR(0)="D^::ERTXS"
  1. .S DIR("A")="Enter Inactivation Date & Time"
  1. .S DIR("B")=$$FMTE^XLFDT($$NOW^XLFDT())
  1. .D ^DIR
  1. .I $D(DIRUT)!$D(DUOUT) D EXIT Q
  1. .S DGEVNT=Y
  1. .;Get okay for tansmission
  1. .S GETOK=$$SNDMSG^DGHTENR(DGTYPE)
  1. .I 'GETOK W " ...Patient record not transmitted." D EXIT Q
  1. .;Set variables and validate
  1. .S DGVEN=$P(TMPNODE,U,4),DGDATE=$P(TMPNODE,U,5)
  1. .S DGCOOR=$P(TMPNODE,U,6),TINACTDT=$P(TMPNODE,U,10)
  1. .;build message
  1. .W !!,"Generating message ..."
  1. .K @ARR
  1. .S RESULT=$$BLDHL7I^DGHTHL7(DGDFN,ARR)
  1. .I RESULT<0 D Q
  1. ..W !,"** UNABLE TO BUILD MESSAGE **"
  1. ..W !,$P(RESULT,"^",2)
  1. ..K @ARR
  1. .I RESULT=0 D Q
  1. ..W !,"** EMPTY MESSAGE BUILT **"
  1. ..K @ARR
  1. .;send message
  1. .W !,"Sending message ..."
  1. .S RESULT=$$SNDHL7^DGHTHL7(ARR,DGVEN,"DG HOME TELEHEALTH ADT-A03 SERVER")
  1. .I RESULT<0 D Q
  1. ..W !,"** UNABLE TO SEND MESSAGE **"
  1. ..W !,$P(RESULT,"^",2)
  1. ..K @ARR
  1. .W !,"Sent using message ID ",+RESULT
  1. .S DGMID=$P(RESULT,U,1)
  1. .K @ARR
  1. .D FILE
  1. D EXIT
  1. Q
  1. ;
  1. GETPAT() ;Prompt user for patient
  1. ;Input : None
  1. ;Output: Pointer to PATIENT File, #2 (i.e. DFN)
  1. ; 0 on user quit
  1. N DIC,X,Y,DTOUT,DUOUT
  1. S DIC="^DPT(",DIC("A")="Patient: "
  1. S DIC(0)="AEQM"
  1. S DIC("S")="I $D(^DGHT(391.31,""APATVN"",+Y))"
  1. D ^DIC
  1. Q $S(+Y<0:0,1:+Y)
  1. ;
  1. FILE ;Update Home Telehealth File Inactivation
  1. N DGHFDA,DGHERR,FLDS,DA
  1. ;Remove old inactivation entry in transaction subfile
  1. I +$P(IRECORD,"~",2) D
  1. .N DIK S DA(1)=+$P(IRECORD,"~",1),DA=+$P(IRECORD,"~",2)
  1. .S DIK="^DGHT(391.31,"_DA(1)_",""TRAN"","
  1. .D ^DIK
  1. ;Update subfile 391.317 Transaction
  1. K DGHFDA,DGHERR
  1. S DGHFDA(391.317,"+2,"_RECORD_",",.01)=DGEVNT
  1. S DGHFDA(391.317,"+2,"_RECORD_",",.02)=DGMID
  1. S DGHFDA(391.317,"+2,"_RECORD_",",.03)=DGDUZ
  1. S DGHFDA(391.317,"+2,"_RECORD_",",.04)=DGTYPE
  1. D UPDATE^DIE("","DGHFDA","","DGHERR")
  1. I $D(DGHERR) D
  1. .W !!!,"Problem encountered during record update "
  1. .W !!,"Contact IRM"_" Error: "_$G(DGHERR("DIERR",1,"TEXT",1))
  1. Q
  1. ;
  1. LOCREC(DFN,VENDOR,TYPE) ;Locate the appropriate record pointer(s) for processing
  1. ;Input : DFN - Patient DFN
  1. ; VENDOR - Vendor IEN
  1. ; TYPE - A for Activation/Sign-up or I for Inactivation
  1. ;Output: Record IEN^transaction IEN (if available)
  1. ; flag 1 = Patient record was located
  1. ; 0 = No record was located.
  1. ;
  1. ;If TYPE="A" and record has inactivation date then nothing will be
  1. ; returned, record is consider closed.
  1. ; TYPE="I" and transaction level record was accepted,then nothing
  1. ; will be returned, record is consider closed.
  1. ;
  1. I ($G(DFN)="")!($G(VENDOR)="")!($G(TYPE)="") Q 0
  1. N IEN,IEN1,DGDAT,DGDAT1,FND,FND1
  1. S (IEN,FND,FND1)=0
  1. F S IEN=$O(^DGHT(391.31,"APATVN",DFN,VENDOR,IEN)) Q:'IEN D I FND Q
  1. .S DGDAT=$G(^DGHT(391.31,IEN,0)) I DGDAT="" Q
  1. .Q:$P(DGDAT,"^",7)'=""
  1. .;I TYPE="A" Q:$P(DGDAT,"^",7)'=""
  1. .;I TYPE="I",$P(DGDAT,"^",7)="" S FND=IEN Q
  1. .S IEN1=0 F S IEN1=$O(^DGHT(391.31,IEN,"TRAN",IEN1)) Q:'IEN1 D Q:+FND1
  1. ..S DGDAT1=$G(^DGHT(391.31,IEN,"TRAN",IEN1,0)) Q:DGDAT1=""
  1. ..I $P(DGDAT1,"^",4)'=$E(TYPE) Q
  1. ..I TYPE="I",$P(DGDAT1,"^",7)="A" Q
  1. ..S FND1=IEN1
  1. .S FND=IEN_$S(IEN1:"^"_IEN1,1:"")
  1. Q FND
  1. ;
  1. EXIT ;Kill array
  1. K ^TMP("DGHT",$J)
  1. Q