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

TIULC.m

Go to the documentation of this file.
  1. TIULC ; SLC/JER - Computational functions ;08/06/2009
  1. ;;1.0;TEXT INTEGRATION UTILITIES;**3,9,19,23,53,93,109,182,250**;Jun 20, 1997;Build 14
  1. ;
  1. ; ICR #2054 - ^%DT
  1. ; #10000 - NOW^%DTC Routine & %H, %I Local Vars
  1. ; #10003 - %DT Local Var
  1. ; #10103 - $$FMDIFF^XLFDT
  1. ;
  1. LINECNT(DA) ; Compute line count for document record
  1. N CPL,CCNT S CPL=$S(+$P($G(TIUPRM0),U,3)>0:$P(TIUPRM0,U,3),1:60)
  1. Q $$CHARCNT(DA)\CPL
  1. CHARCNT(DA) ; Compute character count for a record
  1. N TIUI
  1. N:'$D(CCNT) CCNT ; Character count is static
  1. S TIUI=0 F S TIUI=$O(^TIU(8925,DA,"TEXT",TIUI)) Q:+TIUI'>0 D
  1. . S CCNT=+$G(CCNT)+$L($$STRIP^TIULS(^TIU(8925,DA,"TEXT",TIUI,0)))
  1. S TIUI=0
  1. F S TIUI=$O(^TIU(8925,"DAD",DA,TIUI)) Q:+TIUI'>0!+$$ISADDNDM^TIULC1(+TIUI) S CCNT=$$CHARCNT(TIUI)
  1. Q +$G(CCNT)
  1. VBCLINES(DA,ROOT) ; Compute the Visible Black Character (VBC) Line Count for a document
  1. Q $FN(($$VBCCNT(DA,$G(ROOT,"^TIU(8925,"_DA_",""TEXT"")"))/65),"",2)
  1. VBCCNT(DA,ROOT) ; Compute Visible Black Character (VBC) Count for a record
  1. N TIUVBC,TIUI S ROOT=$G(ROOT,"^TIU(8925,"_DA_",""TEXT"")")
  1. N:'$D(VBCCNT) VBCCNT
  1. S TIUVBC=$$VBC
  1. S TIUI=0
  1. F S TIUI=$O(@ROOT@(TIUI)) Q:+TIUI'>0 D
  1. . N TIUL,TIUJ S TIUL=$G(@ROOT@(TIUI,0)),TIUJ=0
  1. . F TIUJ=1:1:$L(TIUL) D
  1. . . N TIUC S TIUC=$E(TIUL,TIUJ)
  1. . . S:TIUVBC[TIUC VBCCNT=+$G(VBCCNT)+1
  1. S TIUI=0
  1. I ROOT["^TIU(8925," D
  1. . F S TIUI=$O(^TIU(8925,"DAD",DA,TIUI)) Q:+TIUI'>0!+$$ISADDNDM^TIULC1(+TIUI) S CCNT=$$VBCCNT(TIUI)
  1. Q +$G(VBCCNT)
  1. VBC() ; Return string of Visible Black Characters (VBC)
  1. Q "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+{}|:<>?÷±`1234567890-=[]\;',./"""
  1. STATUS(DA) ; Evaluate Status of Reports
  1. N NODE12,NODE13,NODE15,NODE16,AMENDED,STATUS,SIGNED,COSIGNED,PURGED
  1. N VERIFIED,RELEASED,SIGNER,COSIGNER,SIGSTAT,TYPE,REQVER,REQREL,REQCOS
  1. N DELETED,TIUDPARM,ADMINCL
  1. S STATUS=""
  1. S TYPE=$S($D(TIUTYP(1)):$P(TIUTYP(1),U,2),1:+$G(^TIU(8925,+DA,0)))
  1. D DOCPRM^TIULC1(TYPE,.TIUDPARM,DA)
  1. S REQVER=$$REQVER(+DA,+$P($G(TIUDPARM(0)),U,3))
  1. S REQREL=+$P($G(TIUDPARM(0)),U,2)
  1. S NODE12=$G(^TIU(8925,+DA,12)),NODE13=$G(^TIU(8925,+DA,13))
  1. S NODE15=$G(^TIU(8925,+DA,15)),NODE16=$G(^TIU(8925,+DA,16))
  1. S SIGNED=+$P(NODE15,U),COSIGNED=+$P(NODE15,U,7),REQCOS=+$P(NODE15,U,6)
  1. S SIGNER=+$P(NODE12,U,2),COSIGNER=+$P(NODE12,U,4)
  1. S ADMINCL=+$P(NODE16,U,6) ;P182
  1. S AMENDED=+$P(NODE16,U),PURGED=+$P(NODE16,U,9),DELETED=+$P(NODE16,U,11)
  1. S RELEASED=+$P(NODE13,U,4),VERIFIED=+$P(NODE13,U,5)
  1. I PURGED S STATUS="purged" G STATUSX
  1. I DELETED S STATUS="deleted" G STATUSX
  1. I AMENDED S STATUS="amended" G STATUSX
  1. I +$$ISA^TIULX(+TYPE,+$$CLASS^TIUCP),'SIGNER S STATUS="undictated" G STATUSX
  1. I '+NODE12,+NODE13 S STATUS="untranscribed" G STATUSX
  1. I REQREL,'RELEASED S STATUS="unreleased" G STATUSX
  1. I REQVER,'VERIFIED S STATUS="unverified" G STATUSX
  1. I SIGNED,$S('REQCOS:1,COSIGNED:1,1:0) S STATUS="completed" G STATUSX
  1. I ADMINCL S STATUS="completed" G STATUSX
  1. I 'SIGNED S STATUS="unsigned" G STATUSX
  1. I REQCOS,'COSIGNED S STATUS="uncosigned"
  1. STATUSX Q STATUS
  1. REQVER(TIUDA,TIUVPRM) ; Evaluate conditions of verification requirement
  1. N TIUD0,TIUD13,TIUD15,TIUY
  1. S TIUD0=$G(^TIU(8925,+TIUDA,0)),TIUD13=$G(^(13)),TIUD15=$G(^(15))
  1. I +$G(TIUVPRM)'>0!(+$P(TIUD13,U,5)>0) S TIUY=0 G REQVX
  1. I +$G(TIUVPRM)>0,+$G(TIUD15) S TIUY=0 G REQVX
  1. I +$G(TIUVPRM)=1 S TIUY=1 G REQVX
  1. I +$G(TIUVPRM)=2,($P(TIUD13,U,3)="U") S TIUY=1 G REQVX
  1. I +$G(TIUVPRM)=3,($P(TIUD13,U,3)="D") S TIUY=1
  1. REQVX Q +$G(TIUY)
  1. PRCDNC(DA,SCREEN) ; Determine sort precedence of each record
  1. N SIGNED,URGENCY
  1. S URGENCY=$P($G(^TIU(8925,+DA,0)),U,9)
  1. I +$$SIGNED(DA,.SCREEN)'>0 S Y=$S(URGENCY="P":1,1:2)
  1. E S Y=3
  1. Q Y
  1. PURGE(TIUDA) ; Checks whether or not a given Document should be purged
  1. N TIUEDT,TIUY S TIUY=0
  1. ; if parameters not in symbol table, get them
  1. I '$D(TIUPRM0) D SETPARM^TIULE
  1. ; exit if no Archive/purge grace period defined
  1. I +$P(TIUPRM0,U,4)'>0 G PURGEX
  1. S TIUEDT=$P($G(^TIU(8925,TIUDA,12)),U)
  1. I +TIUEDT'>0 G PURGEX ;Transcription date blank
  1. I +$$ISPN^TIULX(+$G(^TIU(8925,+TIUDA,0))) G PURGEX ; PN's exempt
  1. I +$$ISADDNDM^TIULC1(+TIUDA),+$$ISPN^TIULX(+$G(^TIU(8925,+$P(^TIU(8925,+TIUDA,0),U,6),0))) G PURGEX ; Addenda to Progress Notes exempt
  1. I +$P($G(^TIU(8925,+TIUDA,0)),U,5)<7 G PURGEX ;Incomplete--don't purge
  1. I +$P($G(^TIU(8925,TIUDA,16)),U,4)>0 G PURGEX ;Document already purged
  1. I $$FMDIFF^XLFDT(DT,TIUEDT)>+$P(TIUPRM0,U,4) S TIUY=1
  1. PURGEX Q TIUY
  1. OVERDUE(TIUDA) ; Checks whether or not a given document is overdue
  1. N TIUD0,TIUDATE,TIUY,TIUDPRM S TIUY=0,TIUD0=$G(^TIU(8925,TIUDA,0))
  1. ; if parameters not in symbol table, get them
  1. I '$D(TIUPRM0) D SETPARM^TIULE
  1. D DOCPRM^TIULC1(+TIUD0,.TIUDPRM,TIUDA)
  1. ; exit if no signature grace period defined
  1. I +$P(TIUPRM0,U,5)'>0 G OVERX
  1. I '$D(TIUDPRM) G OVERX
  1. S TIUDATE=$S($$REQVER(TIUDA,+$P(TIUDPRM(0),U,3)):$P($G(^TIU(8925,+TIUDA,13)),U,5),$P(TIUDPRM(0),U,2):$P($G(^TIU(8925,+TIUDA,13)),U,4),1:$P($G(^TIU(8925,+TIUDA,12)),U))
  1. G:+TIUDATE'>0 OVERX
  1. I $$FMDIFF^XLFDT(DT,TIUDATE)>$P(TIUPRM0,U,5),(+$P($G(^TIU(8925,+TIUDA,0)),U,5)>4),(+$P($G(^TIU(8925,+TIUDA,0)),U,5)<7) S TIUY=1
  1. OVERX Q TIUY
  1. NOW() ; Extrinsic function returning current date/time to nearest .01 second
  1. N %,%H,%I,X
  1. D NOW^%DTC
  1. Q %
  1. IDATE(X) ; Recieves date in external format, returns internal format
  1. N %DT,Y
  1. I ($L(X," ")=2),(X?1.2N1P1.2N1P1.2N1" "1.2N.E) S X=$TR(X," ","@")
  1. S %DT="TSP" D ^%DT
  1. Q Y
  1. SIGNED(TIUDA,SCREEN) ; Check whether document requires signature or
  1. ; cosignature on user-sensitive basis
  1. N Y S Y=0 ; Initialize return value to FALSE
  1. ; If archived/purged return TRUE
  1. I +$P($G(^TIU(8925,+TIUDA,16)),U,9) S Y=1 G SIGNEDX
  1. ; If OPTION is Act on MY Unsigned Documents, check
  1. ; whether his/her signature is present
  1. I $P($G(SCREEN(1)),U)="AAU",($P($G(SCREEN(2)),U)="ASUP") D G SIGNEDX
  1. . ; If dictated by user and signed return TRUE
  1. . I $P($G(^TIU(8925,+TIUDA,12)),U,4)=DUZ,(+$P($G(^(15)),U)>0) S Y=1
  1. . ; If user is Expected Cosigner and cosigned, return TRUE
  1. . I $P($G(^TIU(8925,+TIUDA,12)),U,8)=DUZ,(+$P($G(^(15)),U,7)>0) S Y=1
  1. ; Otherwise check search criteria to determine signature status
  1. I $P($G(SCREEN(1)),U)="AAU",+$P($G(^TIU(8925,+TIUDA,15)),U) S Y=1 G SIGNEDX
  1. I $P($G(SCREEN(1)),U)="ASUP",+$P($G(^TIU(8925,+TIUDA,15)),U,7) S Y=1 G SIGNEDX
  1. I +$P($G(^TIU(8925,+TIUDA,15)),U),+$P($G(^(15)),U,7) S Y=1
  1. SIGNEDX Q Y
  1. BLANK(TIUDA) ; Reads a given document for blank lines
  1. ; Returns: 1:Record contains 1 or more blanks
  1. ; 0:Record contains no blanks
  1. N BLANK,TIUI,Y S (TIUI,Y)=0
  1. I '$D(TIUPRM1) D SETPARM^TIULE
  1. I $P($G(TIUPRM1),U,6)']"" G BLANKX
  1. S BLANK=$P(TIUPRM1,U,6)
  1. F S TIUI=$O(^TIU(8925,TIUDA,"TEXT",TIUI)) Q:+TIUI'>0 D
  1. . I $G(^TIU(8925,TIUDA,"TEXT",TIUI,0))[BLANK S Y=1
  1. BLANKX Q Y
  1. CHKSUM(TIUROOT,TIUY) ; Calculates checksum for a record
  1. N TIUI,X S TIUI=0,TIUY=+$G(TIUY)
  1. F S TIUI=$O(@TIUROOT@(TIUI)) Q:+TIUI'>0 D
  1. . S X=$G(@TIUROOT@(TIUI,0))
  1. . N TIUJ
  1. . F TIUJ=1:1:$L(X) S TIUY=+$G(TIUY)+(($A(X,TIUJ)*TIUI)*TIUJ)
  1. S TIUI=0
  1. F S TIUI=$O(^TIU(8925,"DAD",+$P(TIUROOT,",",2),TIUI)) Q:+TIUI'>0 D
  1. . I +$$ISADDNDM^TIULC1(+TIUI) Q
  1. . S TIUY=+$G(TIUY)+$$CHKSUM("^TIU(8925,"_+TIUI_",""TEXT"")",TIUY)
  1. Q +$G(TIUY)