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

PXKMAIN.m

Go to the documentation of this file.
  1. PXKMAIN ;ISL/JVS,PKR,ISA/Zoltan - Main Routine for Data Capture ;03/12/2020
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**22,59,73,88,69,117,130,124,174,164,210,215,216,211**;Aug 12, 1996;Build 454
  1. ;+This routine is responsible for:
  1. ;+
  1. ;+LOCAL VARIABLE LIST:
  1. ;+ PXFG = Stop flag with duplicate of delete
  1. ;+ PXKAFT = After node
  1. ;+ PXKBEF = Before node
  1. ;+ PXKAV = Pieces from the after node
  1. ;+ PXKBV = Pieces from the before node
  1. ;+ PXKERROR = Set when there is an error
  1. ;+ PXKFGAD = ADD flag
  1. ;+ PXKFGED = EDIT flag
  1. ;+ PXKFGDE = DELETE flag
  1. ;+ PXKSEQ = Sequence number in PXK TMP global
  1. ;+ PXKCAT = Category of entry (CPT,MSR,VST...)
  1. ;+ PXKREF = Root of temp global
  1. ;+ PXKPIEN = IEN of v file or the visit file
  1. ;+ PXKREF = The original reference we are ordering off of
  1. ;+ PXKRT = name of the node in the v file
  1. ;+ PXKRTN = routine name for the file routine
  1. ;+ PXKSOR = the data source for this entry
  1. ;+ PXKSUB = the subscript the data is located on the v file
  1. ;+ PXKVST = the visit IEN
  1. ;+ PXKDUZ = the DUZ of the user
  1. ;+ *PXKHLR* = A variable set by calling routine so that duplicate
  1. ;+ PXKERROR messages aren't produced.
  1. ;
  1. W !,"This is not an entry point" Q
  1. EN1 ;+Main entry point to read ^TMP("PXK", Global
  1. ;+ Partial ^TMP Global Structure when called:
  1. ;+ ^TMP("PXK",$J,"SOR") = Source ien
  1. ;+
  1. ;+ ^TMP("PXK",$J,"VST",1,0,"BEFORE") = the 0-node of the visit file
  1. ;+ ^TMP("PXK",$J,"VST",1,0,"AFTER") = 0-node after changes.
  1. ;+ ^TMP("PXK",$J,"VST",provider counter,"IEN") = ""
  1. ;+
  1. ;+ ^TMP("PXK",$J,"PRV",provider counter,0,"BEFORE") = ""
  1. ;+ ^TMP("PXK",$J,"PRV",provider counter,0,"AFTER") = Provider id^DFN^Visitien^'P' or 'S' for primary/secondary
  1. ;+ ^TMP("PXK",$J,"PRV",provider counter,"IEN") = ""
  1. ;+ ^TMP("PXK",$J,"PRV",provider counter,"BEFORE") = ""
  1. ;+ ^TMP("PXK",$J,"PRV",provider counter,"AFTER") = ^Package ien^Source ien
  1. ;+
  1. N LOCK,PXKDUZ,VISITIEN
  1. K PXKERROR
  1. I '$G(PXKDUZ) S PXKDUZ=$S($G(DUZ):DUZ,1:.5)
  1. D VST(.VISITIEN,PXKDUZ,.LOCK)
  1. I LOCK=0 S PXAERRF=4 Q
  1. I VISITIEN>0 D UNLOCK^PXLOCK(VISITIEN,PXKDUZ)
  1. Q
  1. ;
  1. ;VST ;--Check for visit node and get one created or quit.
  1. VST(VISITIEN,PXKDUZ,LOCK) ;--Check for visit node and get one created or quit.
  1. S LOCK=0,VISITIEN=""
  1. I '$G(^TMP("PXK",$J,"VST",1,"IEN")) D VSIT^PXKVST
  1. I +$G(^TMP("PXK",$J,"VST",1,"IEN"))=-1 S PXKERROR("VISIT")="Visit Tracking could not get a visit." Q
  1. I +$G(^TMP("PXK",$J,"VST",1,"IEN"))=-2 S PXKERROR("VISIT")="PCE is not activated in Visit Tracking Parameters and thus cannot create visits." Q
  1. I +$G(^TMP("PXK",$J,"VST",1,"IEN"))<1 S PXKERROR("VISIT")="Did not get a visit^"_$G(^TMP("PXK",$J,"VST",1,"IEN")) Q
  1. S VISITIEN=^TMP("PXK",$J,"VST",1,"IEN")
  1. S LOCK=$$LOCK^PXLOCK(VISITIEN,PXKDUZ,2,.PXKERROR)
  1. I LOCK=0 Q
  1. ;
  1. NEW ;--New variables and set main variables
  1. N PXKDFN,PXKSOR,PXKVST,PXKSEQ,PXFG,PXKAFT,PXKBEF,PXKAUDIT
  1. N PXKCAT,PXKCO,PXKER,PXKFGAD,PXKFGED,PXKFGDE,PXKNOD,PXKPCE
  1. N PXKPIEN,PXKREF,PXKRTN,PXKSORR,PXKSUB,PXKVCAT
  1. N PXKPTR,PXDFG,PX,PXJJ,PXJJJ,PXKAFT8,PXKAFTR,PXKGN,PXKN,PXKNOW,PXKP
  1. N PXKRRT,PXKVRTN,PXKRT,PXKFVDLM,TMPPX
  1. PRVTYPE ;---DO PROVIDER TYPE--PXKMAIN2
  1. D PRVTYPE^PXKMAIN2
  1. ;
  1. SET ;--SET VARIABLES NECESSARY
  1. ;'DA' should not be defined at this point
  1. N DA ;PX*1.0*117
  1. ;
  1. S PXFG=0,TMPPX="^",PXKLAYGO="",PXDFG=0
  1. SOURCE S PXKSOR=$G(^TMP("PXK",$J,"SOR")) D Q:$D(PXKERROR("SOURCE"))
  1. .S PXKCO("SOR")=PXKSOR
  1. .I $D(PXKSOR)']"" S PXKERROR("SOURCE")="" Q
  1. VISIT S (PXKVST,VSIT("IEN"))=$G(^TMP("PXK",$J,"VST",1,"IEN"))
  1. ORDER ;--$ORDER Through the ^TMP("PXK", global setting variables
  1. S PXKREF="^TMP(""PXK"",$J)"
  1. CATEG S PXKCAT="" F S (PXKCAT,PXKVCAT)=$O(@PXKREF@(PXKCAT)) Q:PXKCAT="" D
  1. .I PXKCAT="VST" S PXKVCAT="SIT"
  1. .S PXKRTN="PXKF"_PXKCAT
  1. .S X=PXKRTN X ^%ZOSF("TEST") Q:'$T
  1. SEQUE .S PXKSEQ=0 F S PXKSEQ=$O(@PXKREF@(PXKCAT,PXKSEQ)) K PXKAV,PXKBV S PXFG=0 Q:'PXKSEQ D
  1. ..S PXKPIEN=$G(@PXKREF@(PXKCAT,PXKSEQ,"IEN")),(PXKFGAD,PXKFGDE,PXKFGED,PXDFG)=0
  1. SUBSCR ..S PXKSUB="" F S PXKSUB=$O(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB)) Q:PXKSUB["IEN" Q:PXFG=1 Q:PXDFG=1 D
  1. AFTER ...S PXKAFT(PXKSUB)=$G(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,"AFTER"))
  1. BEFORE ...S PXKBEF(PXKSUB)=$G(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,"BEFORE"))
  1. ...I PXKCAT="CPT",PXKSUB=1 D SUBSCR^PXKMOD
  1. ...I PXKCAT="IMM",PXKSUB?1(1"2",1"3",1"11") D MULT
  1. ...D LOOP^PXKMAIN1 I PXKSUB=0 D ERROR^PXKMAIN1
  1. ...S PXDFG=0 I $G(PXKAV(0,1))["@"!('$D(PXKAV(0,1))) S PXKAFT(PXKSUB)="" K PXKAV(0) S PXDFG=1
  1. ..Q:PXFG=1
  1. ..I $D(PXKAV),'$D(PXKBV) S PXKSORR=PXKSOR_"-A "_PXKDUZ,PXKFGAD=1 I PXKCAT["VST" S PXKFGAD=0
  1. ..I '$D(PXKAV),$D(PXKBV) S PXKFGDE=1,PXKFVDLM="" D
  1. ...S PXKRT=$P($T(GLOBAL^@PXKRTN),";;",2)_"("_PXKPIEN_")" I $D(@PXKRT) D CHKAUD,DELETE^PXKMAIN1,EN1^PXKMASC S PXFG=1 K PXKRT Q
  1. ..I 'PXKFGAD,'PXKFGDE D
  1. ...I PXKCAT="VST" D CQDEL
  1. ...D CLEAN^PXKMAIN1
  1. ...I $D(PXKAV) S PXKSORR=PXKSOR_"-E "_PXKDUZ,PXKFGED=1 I PXKCAT="VST",'$D(PXKBV),$D(PXKVST) S PXKFGED=0
  1. ..I 'PXKFGAD,'PXKFGDE,'PXKFGED,PXKCAT["VST" D EN1^PXKMASC
  1. ..I PXKFGAD=1 D Q:PXFG
  1. ...D ERROR^PXKMAIN1
  1. ...I $D(PXKERROR(PXKCAT,PXKSEQ)) S PXFG=1
  1. ...D:'PXFG DUP^PXKMAIN1
  1. ...I PXFG=1 D Q
  1. ....Q:PXKCAT'="CPT"
  1. ....I $G(@PXKREF@(PXKCAT,PXKSEQ,"IEN"))]"" D REMOVE^PXCEVFIL(@PXKREF@(PXKCAT,PXKSEQ,"IEN"))
  1. ...;FILE^PXKMAIN1 MAKES THE ENTRY
  1. ...D:'PXKPIEN FILE^PXKMAIN1
  1. ...S:'$G(DA) DA=PXKPIEN
  1. ...D AUD2^PXKMAIN1,DRDIE^PXKMAIN1,EN1^PXKMASC
  1. ..I PXKFGED=1,PXKCAT'="VST" S PXKRT=$P($T(GLOBAL^@PXKRTN),";;",2)_"("_PXKPIEN_")" Q:'$D(@PXKRT) S DA=PXKPIEN D DUP^PXKMAIN1 Q:PXFG=1 D AUD12^PXKMAIN1,CHKAUD,DRDIE^PXKMAIN1,EN1^PXKMASC
  1. ..I PXKFGED=1,PXKCAT="VST" S PXKRT=$P($T(GLOBAL^@PXKRTN),";;",2)_"("_PXKPIEN_")" Q:'$D(@PXKRT) S DA=PXKPIEN D DUP^PXKMAIN1 Q:PXFG=1 D DRDIE^PXKMAIN1,EN1^PXKMASC
  1. ..D SPEC2^PXKMAIN2
  1. ..D EN^PXKMCODE
  1. ..K PXKAFT,PXKBEF
  1. I $D(^TMP("PXKSAVE",$J)) D RECALL^PXKMAIN2
  1. D EXIT
  1. Q
  1. ;
  1. MULT ; Add multiples to PXKAFT, PXKBEF, PXKAV, PXKBV arrays
  1. ;
  1. N PXKSUBIEN,PXKI
  1. ;
  1. S PXKSUBIEN=0
  1. F S PXKSUBIEN=$O(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,PXKSUBIEN)) Q:'PXKSUBIEN D
  1. . ;
  1. . I $D(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,PXKSUBIEN,"AFTER")) D
  1. . . S PXKAFT(PXKSUB,PXKSUBIEN)=$G(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,PXKSUBIEN,"AFTER"))
  1. . . F PXKI=1:1:$L(PXKAFT(PXKSUB,PXKSUBIEN),"^") D
  1. . . . I $P(PXKAFT(PXKSUB,PXKSUBIEN),"^",PXKI)'="" S PXKAV(PXKSUB,PXKSUBIEN,PXKI)=$P(PXKAFT(PXKSUB,PXKSUBIEN),"^",PXKI)
  1. . ;
  1. . I $D(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,PXKSUBIEN,"BEFORE")) D
  1. . . S PXKBEF(PXKSUB,PXKSUBIEN)=$G(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,PXKSUBIEN,"BEFORE"))
  1. . . F PXKI=1:1:$L(PXKBEF(PXKSUB,PXKSUBIEN),"^") D
  1. . . . I $P(PXKBEF(PXKSUB,PXKSUBIEN),"^",PXKI)'="" S PXKBV(PXKSUB,PXKSUBIEN,PXKI)=$P(PXKBEF(PXKSUB,PXKSUBIEN),"^",PXKI)
  1. ;
  1. I $G(@PXKREF@(PXKCAT,PXKSEQ,PXKSUB,0,"AFTER"))="@" D
  1. . S PXKAFT(PXKSUB,0)="@"
  1. . S PXKAV(PXKSUB,0)="@"
  1. ;
  1. Q
  1. ;
  1. CHKAUD ; Check and turn on Auditing
  1. I PXKCAT="IMM" D TURNON^DIAUTL(9000010.11,"*","y")
  1. Q
  1. ;
  1. EXIT ;--EXIT
  1. I $D(PXKFVDLM) D MODIFIED^VSIT(PXKVST)
  1. K PXKPXD,TMPPX
  1. K DA,DR,PXKI,PXKJ,PXKLAYGO,PXKDUZ,PXKAFT8,PXKAFTR,VSIT("IEN")
  1. Q
  1. ;
  1. EVENT ;--ENTRY POINT TO POST EXECUTE PCE'S EVENT
  1. ;Setting the variable PXKNOEVT=1 will stop the event from being
  1. ;fired off whenever any data is sent into PCE
  1. ;
  1. ;PX*1*124 AUTO-POPULATE THE ENCOUNTER SC/EI BASED ON THE ENCOUNTER DX'S
  1. ;PX*1.0*164 Relocate the PXCECCLS call
  1. I $D(^TMP("PXKCO",$J)) D
  1. . S PXKVVST=+$O(^TMP("PXKCO",$J,0))
  1. . I $G(PXKVVST),$D(^AUPNVSIT(PXKVVST)) D VST^PXCECCLS(PXKVVST) ;PX*1.0*174
  1. ;
  1. I $G(PXKNOEVT) K ^TMP("PXKCO",$J) Q
  1. D EVENT^PXKMASC
  1. Q
  1. ;
  1. CQDEL ;Classification question deletion check
  1. I PXKCAT'="VST" Q
  1. S PXJ="" F S PXJ=$O(PXKBV(800,PXJ)) Q:'PXJ I PXKBV(800,PXJ)'="" I '$D(PXKAV(800,PXJ)) S PXKAV(800,PXJ)="@"
  1. K PXJ Q
  1. ;