SCRPV1A ; bp/djb - PCMM Inconsistency Rpt - Get Data ; 8/25/99 9:57am
;;5.3;Scheduling;**177,528,1015**;AUG 13, 1993;Build 21
;
;Return:
; Inconsistency array in format:
; ^TMP("PCMM POSITION",$J,#,Tm,TmPos,)=""
; ^TMP("PCMM PATIENT",$J,Name,DFN,#,Tm,Pos)=""
;
;For a list of inconsistencies, see bottom of routine SCRPV1B.
;
EN ;
D POSITION
D PATIENT
Q
;
POSITION ;Check for position inconsistencies.
;
NEW POSI,POSN,TMI,TMN
;
;Look at each team
S TMN=""
F S TMN=$O(^SCTM(404.51,"B",TMN)) Q:TMN="" D ;
. S TMI=0
. F S TMI=$O(^SCTM(404.51,"B",TMN,TMI)) Q:'TMI D ;
.. Q:'$D(^SCTM(404.51,TMI,0))
.. ;If user selected teams, quit if this one isn't on list.
.. I SCTYPE("TM")="S" Q:'$D(SCTM(TMI))
.. ;Look at each position for this team
.. S POSI=0
.. F S POSI=$O(^SCTM(404.57,"C",TMI,POSI)) Q:'POSI D ;
... S POSN=$P($G(^SCTM(404.57,POSI,0)),U,1) Q:POSN']""
... D CHECK45(TMI,POSI) ;..Check for inconsistencies 4 & 5.
... Q:'$D(^SCPT(404.43,"APTPA",POSI))
... D CHECK1(TMI,POSI) ;...Check for inconsistency 1.
Q
;
PATIENT ;Check for patient inconsistencies.
D CHECK28
D CHECK367
Q
;
CHECK1(TMI,POSI) ;Check positions for inconsistency 1.
;Input:
; TMI - Team IEN
; POSI - Team Position IEN
;
NEW POSN,TMN
Q:+$$GETPRTP^SCAPMCU2(POSI,DT) ;Current provider. Fld 304 in 404.57.
Q:+$$ACTTM^SCMCTMU(TMI,DT)'=1 ;Team inactive
Q:+$$ACTTP^SCMCTPU(POSI,DT)'=1 ;Position inactive
S TMN=$$TMNAME(TMI)
S POSN=$$POSNAME(POSI)
S ^TMP("PCMM POSITION",$J,1,TMN,POSN)="" ;.........................#1
Q
;
CHECK28 ;Check patients for inconsistencies 2 & 8.
;
;Loop thru 404.43 for each patient.
;Use "ACTDFN" xref. Active entries sorted by patient IEN.
;
NEW DATA,DFN,DFNNAM,NUM,POSI,POSN,PTI,PTPI,TMI,TMN
;
S DFN=0
F S DFN=$O(^SCPT(404.43,"ACTDFN",DFN)) Q:'DFN D ;
. S PTPI=0
. F S PTPI=$O(^SCPT(404.43,"ACTDFN",DFN,PTPI)) Q:'PTPI D ;
.. S DATA=$G(^SCPT(404.43,PTPI,0)) ;Team Position Assign zero node
.. Q:$P(DATA,U,4)]"" ;.............Inactive
.. S PTI=$P(DATA,U,1) Q:'PTI ;.....Team Assign IEN
.. S POSI=$P(DATA,U,2) Q:'POSI ;...Position
.. S DATA=$G(^SCPT(404.42,PTI,0)) ;.Team Assign zero node
.. S TMI=$P(DATA,U,3) Q:'TMI ;.....Team IEN
.. ;
.. ;If user selected teams, quit if this one isn't on list.
.. I SCTYPE("TM")="S" Q:'$D(SCTM(TMI))
.. ;
.. S POSN=$$POSNAME(POSI)
.. S TMN=$$TMNAME(TMI)
.. S DFNNAM=$$PTNAME(DFN) ;Patient name
.. ;
.. D ;Check for nconsistency 8
... I $P(DATA,U,9)]"" D ;...............Tm Pos Assign Inactive....#8
.... S ^TMP("PCMM PATIENT",$J,DFNNAM,DFN,8.1,TMN,POSN)=PTPI
... I +$$ACTTM^SCMCTMU(TMI,DT)'=1 D ;...Team inactive.............#8
.... S ^TMP("PCMM PATIENT",$J,DFNNAM,DFN,8.2,TMN,POSN)=PTPI
... I +$$ACTTP^SCMCTPU(POSI,DT)'=1 D ;..Position inactive.........#8
.... S ^TMP("PCMM PATIENT",$J,DFNNAM,DFN,8.3,TMN,POSN)=PTPI
.. ;
.. Q:$P(DATA,U,8)'=1 ;..Team Assign not PC
.. Q:$P(DATA,U,9)]"" ;..Team Assign inactive
.. ;
.. ;Q:$D(^SCPT(404.43,"APCPOS",DFN,1))
.. I $$GETPRTP^SCAPMCU2(POSI,DT)>0 Q ;sd/528
.. S ^TMP("PCMM PATIENT",$J,DFNNAM,DFN,2,TMN,POSN)=PTPI ;..........#2
Q
;
CHECK367 ;Check patients for inconsistencies 3,6,7.
;
;Loop thru 404.43 for each patient.
;Use "ACTPC" xref. Active entries sorted by patient IEN & PC ROLE.
;
NEW CNT,DATA,DFN,DFNNAM,HLD,POSI,POSN,PTI,PTPI,TMI,TMN
;
S DFN=0
F S DFN=$O(^SCPT(404.43,"ACTPC",DFN)) Q:'DFN D ;
. S CNT=0 KILL HLD ;Initialize for each DFN
. S PTPI=0
. F S PTPI=$O(^SCPT(404.43,"ACTPC",DFN,1,PTPI)) Q:'PTPI D ;
.. S DATA=$G(^SCPT(404.43,PTPI,0)) ;..Team Position Assign zero node
.. Q:$P(DATA,U,4)]"" ;...............Inactive
.. S PTI=$P(DATA,U,1) Q:'PTI ;.......Team Assign IEN
.. S POSI=$P(DATA,U,2) Q:'POSI ;.....Position
.. S DATA=$G(^SCPT(404.42,PTI,0)) ;...Team Assign zero node
.. S TMI=$P(DATA,U,3) Q:'TMI ;.......Team IEN
.. ;
.. ;If user selected teams, quit if this one isn't on list.
.. I SCTYPE("TM")="S" Q:'$D(SCTM(TMI))
.. ;
.. Q:$P(DATA,U,8)'=1 ;...............Team Assign not PC
.. Q:$P(DATA,U,9)]"" ;...............Team Assign inactive
.. S POSN=$$POSNAME(POSI)
.. S TMN=$$TMNAME(TMI)
.. S DFNNAM=$$PTNAME(DFN) ;Patient name
.. ;
.. D CHECK67
.. ;
.. S CNT=CNT+1
.. ;Save 1st occurance. Asingle occurance is not a problem.
.. I CNT=1 S HLD(DFNNAM,DFN,3,TMN,POSN)="" Q
.. ;
.. ;If there is a 2nd occurance, move 1st occurance into array.
.. I CNT=2 M ^TMP("PCMM PATIENT",$J)=HLD KILL HLD
.. S ^TMP("PCMM PATIENT",$J,DFNNAM,DFN,3,TMN,POSN)=PTPI ;..........#3
Q
;
CHECK45(TMI,POSI) ;Check positions for inconsistencies 4 & 5.
;Input:
; TMI - Team IEN
; POSI - Team Position IEN
;
NEW AP,DATA,PCP,POSN,PREHI,STAFFAP,STAFFPCP,TMN
;
S PREHI=0
F S PREHI=$O(^SCTM(404.53,"B",POSI,PREHI)) Q:'PREHI D ;
. S DATA=$G(^SCTM(404.53,PREHI,0))
. Q:DATA']""
. S AP=$P(DATA,U,1) ;.....................Preceptee position
. S PCP=$P(DATA,U,6) ;....................Preceptor position
. S STAFFAP=+$$GETPRTP^SCAPMCU2(AP,DT) ;..Preceptee staff person
. S STAFFPCP=+$$GETPRTP^SCAPMCU2(PCP,DT) ;Preceptor staff person
. ;
. S TMN=$$TMNAME(TMI)
. S POSN=$$POSNAME(POSI)
. I STAFFAP,STAFFAP=STAFFPCP D ;
.. S ^TMP("PCMM POSITION",$J,4,TMN,POSN)="" ;......................#4
. I STAFFPCP="" D ;
.. S ^TMP("PCMM POSITION",$J,5,TMN,POSN)="" ;......................#5
Q
;
CHECK67 ;Check patients for inconsistencies 6 & 7.
NEW ERROR,ID,LIST,NUM,POS,RESULT,TYPE,ZDATE
;
S ZDATE("BEGIN")=DT
S ZDATE("END")=DT
S ZDATE("INCL")=0
;
S RESULT=$$PRPTTPC^SCAPMC(PTPI,"ZDATE","LIST","ERROR",1)
;
S NUM=0
F S NUM=$O(LIST(NUM)) Q:'NUM D ;
. S TYPE=""
. F S TYPE=$O(LIST(NUM,TYPE)) Q:TYPE="" D ;
.. S ID=""
.. F S ID=$O(LIST(NUM,TYPE,ID)) Q:ID="" D ;
... S POS=$P(LIST(NUM,TYPE,ID),U,3) Q:'POS
... ;See if field 4, POSSIBLE PRIMARY PRACTITIONER, equals 1.
... Q:$P($G(^SCTM(404.57,POS,0)),U,4)=1
... I TYPE="AP" D Q
.... S ^TMP("PCMM PATIENT",$J,DFNNAM,DFN,6,TMN,POSN)=PTPI ;........#6
... I TYPE="PCP" D Q
.... S ^TMP("PCMM PATIENT",$J,DFNNAM,DFN,7,TMN,POSN)=PTPI ;........#7
Q
;
TMNAME(TMI) ;Return team name
NEW NAME
S NAME=$P($G(^SCTM(404.51,TMI,0)),U,1)
S:NAME="" NAME="UNKNOWN"
Q NAME
;
POSNAME(POSI) ;Return position name
NEW NAME
S NAME=$P($G(^SCTM(404.57,POSI,0)),U,1)
S:NAME="" NAME="UNKNOWN"
Q NAME
;
PTNAME(DFN) ;Return patient name
NEW NAME
S NAME=$P($G(^DPT(DFN,0)),U,1)
S:NAME="" NAME="UNKNOWN"
Q NAME
SCRPV1A ; bp/djb - PCMM Inconsistency Rpt - Get Data ; 8/25/99 9:57am
+1 ;;5.3;Scheduling;**177,528,1015**;AUG 13, 1993;Build 21
+2 ;
+3 ;Return:
+4 ; Inconsistency array in format:
+5 ; ^TMP("PCMM POSITION",$J,#,Tm,TmPos,)=""
+6 ; ^TMP("PCMM PATIENT",$J,Name,DFN,#,Tm,Pos)=""
+7 ;
+8 ;For a list of inconsistencies, see bottom of routine SCRPV1B.
+9 ;
EN ;
+1 DO POSITION
+2 DO PATIENT
+3 QUIT
+4 ;
POSITION ;Check for position inconsistencies.
+1 ;
+2 NEW POSI,POSN,TMI,TMN
+3 ;
+4 ;Look at each team
+5 SET TMN=""
+6 ;
FOR
SET TMN=$ORDER(^SCTM(404.51,"B",TMN))
IF TMN=""
QUIT
Begin DoDot:1
+7 SET TMI=0
+8 ;
FOR
SET TMI=$ORDER(^SCTM(404.51,"B",TMN,TMI))
IF 'TMI
QUIT
Begin DoDot:2
+9 IF '$DATA(^SCTM(404.51,TMI,0))
QUIT
+10 ;If user selected teams, quit if this one isn't on list.
+11 IF SCTYPE("TM")="S"
IF '$DATA(SCTM(TMI))
QUIT
+12 ;Look at each position for this team
+13 SET POSI=0
+14 ;
FOR
SET POSI=$ORDER(^SCTM(404.57,"C",TMI,POSI))
IF 'POSI
QUIT
Begin DoDot:3
+15 SET POSN=$PIECE($GET(^SCTM(404.57,POSI,0)),U,1)
IF POSN']""
QUIT
+16 ;..Check for inconsistencies 4 & 5.
DO CHECK45(TMI,POSI)
+17 IF '$DATA(^SCPT(404.43,"APTPA",POSI))
QUIT
+18 ;...Check for inconsistency 1.
DO CHECK1(TMI,POSI)
End DoDot:3
End DoDot:2
End DoDot:1
+19 QUIT
+20 ;
PATIENT ;Check for patient inconsistencies.
+1 DO CHECK28
+2 DO CHECK367
+3 QUIT
+4 ;
CHECK1(TMI,POSI) ;Check positions for inconsistency 1.
+1 ;Input:
+2 ; TMI - Team IEN
+3 ; POSI - Team Position IEN
+4 ;
+5 NEW POSN,TMN
+6 ;Current provider. Fld 304 in 404.57.
IF +$$GETPRTP^SCAPMCU2(POSI,DT)
QUIT
+7 ;Team inactive
IF +$$ACTTM^SCMCTMU(TMI,DT)'=1
QUIT
+8 ;Position inactive
IF +$$ACTTP^SCMCTPU(POSI,DT)'=1
QUIT
+9 SET TMN=$$TMNAME(TMI)
+10 SET POSN=$$POSNAME(POSI)
+11 ;.........................#1
SET ^TMP("PCMM POSITION",$JOB,1,TMN,POSN)=""
+12 QUIT
+13 ;
CHECK28 ;Check patients for inconsistencies 2 & 8.
+1 ;
+2 ;Loop thru 404.43 for each patient.
+3 ;Use "ACTDFN" xref. Active entries sorted by patient IEN.
+4 ;
+5 NEW DATA,DFN,DFNNAM,NUM,POSI,POSN,PTI,PTPI,TMI,TMN
+6 ;
+7 SET DFN=0
+8 ;
FOR
SET DFN=$ORDER(^SCPT(404.43,"ACTDFN",DFN))
IF 'DFN
QUIT
Begin DoDot:1
+9 SET PTPI=0
+10 ;
FOR
SET PTPI=$ORDER(^SCPT(404.43,"ACTDFN",DFN,PTPI))
IF 'PTPI
QUIT
Begin DoDot:2
+11 ;Team Position Assign zero node
SET DATA=$GET(^SCPT(404.43,PTPI,0))
+12 ;.............Inactive
IF $PIECE(DATA,U,4)]""
QUIT
+13 ;.....Team Assign IEN
SET PTI=$PIECE(DATA,U,1)
IF 'PTI
QUIT
+14 ;...Position
SET POSI=$PIECE(DATA,U,2)
IF 'POSI
QUIT
+15 ;.Team Assign zero node
SET DATA=$GET(^SCPT(404.42,PTI,0))
+16 ;.....Team IEN
SET TMI=$PIECE(DATA,U,3)
IF 'TMI
QUIT
+17 ;
+18 ;If user selected teams, quit if this one isn't on list.
+19 IF SCTYPE("TM")="S"
IF '$DATA(SCTM(TMI))
QUIT
+20 ;
+21 SET POSN=$$POSNAME(POSI)
+22 SET TMN=$$TMNAME(TMI)
+23 ;Patient name
SET DFNNAM=$$PTNAME(DFN)
+24 ;
+25 ;Check for nconsistency 8
Begin DoDot:3
+26 ;...............Tm Pos Assign Inactive....#8
IF $PIECE(DATA,U,9)]""
Begin DoDot:4
+27 SET ^TMP("PCMM PATIENT",$JOB,DFNNAM,DFN,8.1,TMN,POSN)=PTPI
End DoDot:4
+28 ;...Team inactive.............#8
IF +$$ACTTM^SCMCTMU(TMI,DT)'=1
Begin DoDot:4
+29 SET ^TMP("PCMM PATIENT",$JOB,DFNNAM,DFN,8.2,TMN,POSN)=PTPI
End DoDot:4
+30 ;..Position inactive.........#8
IF +$$ACTTP^SCMCTPU(POSI,DT)'=1
Begin DoDot:4
+31 SET ^TMP("PCMM PATIENT",$JOB,DFNNAM,DFN,8.3,TMN,POSN)=PTPI
End DoDot:4
End DoDot:3
+32 ;
+33 ;..Team Assign not PC
IF $PIECE(DATA,U,8)'=1
QUIT
+34 ;..Team Assign inactive
IF $PIECE(DATA,U,9)]""
QUIT
+35 ;
+36 ;Q:$D(^SCPT(404.43,"APCPOS",DFN,1))
+37 ;sd/528
IF $$GETPRTP^SCAPMCU2(POSI,DT)>0
QUIT
+38 ;..........#2
SET ^TMP("PCMM PATIENT",$JOB,DFNNAM,DFN,2,TMN,POSN)=PTPI
End DoDot:2
End DoDot:1
+39 QUIT
+40 ;
CHECK367 ;Check patients for inconsistencies 3,6,7.
+1 ;
+2 ;Loop thru 404.43 for each patient.
+3 ;Use "ACTPC" xref. Active entries sorted by patient IEN & PC ROLE.
+4 ;
+5 NEW CNT,DATA,DFN,DFNNAM,HLD,POSI,POSN,PTI,PTPI,TMI,TMN
+6 ;
+7 SET DFN=0
+8 ;
FOR
SET DFN=$ORDER(^SCPT(404.43,"ACTPC",DFN))
IF 'DFN
QUIT
Begin DoDot:1
+9 ;Initialize for each DFN
SET CNT=0
KILL HLD
+10 SET PTPI=0
+11 ;
FOR
SET PTPI=$ORDER(^SCPT(404.43,"ACTPC",DFN,1,PTPI))
IF 'PTPI
QUIT
Begin DoDot:2
+12 ;..Team Position Assign zero node
SET DATA=$GET(^SCPT(404.43,PTPI,0))
+13 ;...............Inactive
IF $PIECE(DATA,U,4)]""
QUIT
+14 ;.......Team Assign IEN
SET PTI=$PIECE(DATA,U,1)
IF 'PTI
QUIT
+15 ;.....Position
SET POSI=$PIECE(DATA,U,2)
IF 'POSI
QUIT
+16 ;...Team Assign zero node
SET DATA=$GET(^SCPT(404.42,PTI,0))
+17 ;.......Team IEN
SET TMI=$PIECE(DATA,U,3)
IF 'TMI
QUIT
+18 ;
+19 ;If user selected teams, quit if this one isn't on list.
+20 IF SCTYPE("TM")="S"
IF '$DATA(SCTM(TMI))
QUIT
+21 ;
+22 ;...............Team Assign not PC
IF $PIECE(DATA,U,8)'=1
QUIT
+23 ;...............Team Assign inactive
IF $PIECE(DATA,U,9)]""
QUIT
+24 SET POSN=$$POSNAME(POSI)
+25 SET TMN=$$TMNAME(TMI)
+26 ;Patient name
SET DFNNAM=$$PTNAME(DFN)
+27 ;
+28 DO CHECK67
+29 ;
+30 SET CNT=CNT+1
+31 ;Save 1st occurance. Asingle occurance is not a problem.
+32 IF CNT=1
SET HLD(DFNNAM,DFN,3,TMN,POSN)=""
QUIT
+33 ;
+34 ;If there is a 2nd occurance, move 1st occurance into array.
+35 IF CNT=2
MERGE ^TMP("PCMM PATIENT",$JOB)=HLD
KILL HLD
+36 ;..........#3
SET ^TMP("PCMM PATIENT",$JOB,DFNNAM,DFN,3,TMN,POSN)=PTPI
End DoDot:2
End DoDot:1
+37 QUIT
+38 ;
CHECK45(TMI,POSI) ;Check positions for inconsistencies 4 & 5.
+1 ;Input:
+2 ; TMI - Team IEN
+3 ; POSI - Team Position IEN
+4 ;
+5 NEW AP,DATA,PCP,POSN,PREHI,STAFFAP,STAFFPCP,TMN
+6 ;
+7 SET PREHI=0
+8 ;
FOR
SET PREHI=$ORDER(^SCTM(404.53,"B",POSI,PREHI))
IF 'PREHI
QUIT
Begin DoDot:1
+9 SET DATA=$GET(^SCTM(404.53,PREHI,0))
+10 IF DATA']""
QUIT
+11 ;.....................Preceptee position
SET AP=$PIECE(DATA,U,1)
+12 ;....................Preceptor position
SET PCP=$PIECE(DATA,U,6)
+13 ;..Preceptee staff person
SET STAFFAP=+$$GETPRTP^SCAPMCU2(AP,DT)
+14 ;Preceptor staff person
SET STAFFPCP=+$$GETPRTP^SCAPMCU2(PCP,DT)
+15 ;
+16 SET TMN=$$TMNAME(TMI)
+17 SET POSN=$$POSNAME(POSI)
+18 ;
IF STAFFAP
IF STAFFAP=STAFFPCP
Begin DoDot:2
+19 ;......................#4
SET ^TMP("PCMM POSITION",$JOB,4,TMN,POSN)=""
End DoDot:2
+20 ;
IF STAFFPCP=""
Begin DoDot:2
+21 ;......................#5
SET ^TMP("PCMM POSITION",$JOB,5,TMN,POSN)=""
End DoDot:2
End DoDot:1
+22 QUIT
+23 ;
CHECK67 ;Check patients for inconsistencies 6 & 7.
+1 NEW ERROR,ID,LIST,NUM,POS,RESULT,TYPE,ZDATE
+2 ;
+3 SET ZDATE("BEGIN")=DT
+4 SET ZDATE("END")=DT
+5 SET ZDATE("INCL")=0
+6 ;
+7 SET RESULT=$$PRPTTPC^SCAPMC(PTPI,"ZDATE","LIST","ERROR",1)
+8 ;
+9 SET NUM=0
+10 ;
FOR
SET NUM=$ORDER(LIST(NUM))
IF 'NUM
QUIT
Begin DoDot:1
+11 SET TYPE=""
+12 ;
FOR
SET TYPE=$ORDER(LIST(NUM,TYPE))
IF TYPE=""
QUIT
Begin DoDot:2
+13 SET ID=""
+14 ;
FOR
SET ID=$ORDER(LIST(NUM,TYPE,ID))
IF ID=""
QUIT
Begin DoDot:3
+15 SET POS=$PIECE(LIST(NUM,TYPE,ID),U,3)
IF 'POS
QUIT
+16 ;See if field 4, POSSIBLE PRIMARY PRACTITIONER, equals 1.
+17 IF $PIECE($GET(^SCTM(404.57,POS,0)),U,4)=1
QUIT
+18 IF TYPE="AP"
Begin DoDot:4
+19 ;........#6
SET ^TMP("PCMM PATIENT",$JOB,DFNNAM,DFN,6,TMN,POSN)=PTPI
End DoDot:4
QUIT
+20 IF TYPE="PCP"
Begin DoDot:4
+21 ;........#7
SET ^TMP("PCMM PATIENT",$JOB,DFNNAM,DFN,7,TMN,POSN)=PTPI
End DoDot:4
QUIT
End DoDot:3
End DoDot:2
End DoDot:1
+22 QUIT
+23 ;
TMNAME(TMI) ;Return team name
+1 NEW NAME
+2 SET NAME=$PIECE($GET(^SCTM(404.51,TMI,0)),U,1)
+3 IF NAME=""
SET NAME="UNKNOWN"
+4 QUIT NAME
+5 ;
POSNAME(POSI) ;Return position name
+1 NEW NAME
+2 SET NAME=$PIECE($GET(^SCTM(404.57,POSI,0)),U,1)
+3 IF NAME=""
SET NAME="UNKNOWN"
+4 QUIT NAME
+5 ;
PTNAME(DFN) ;Return patient name
+1 NEW NAME
+2 SET NAME=$PIECE($GET(^DPT(DFN,0)),U,1)
+3 IF NAME=""
SET NAME="UNKNOWN"
+4 QUIT NAME