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

SCMCCV.m

Go to the documentation of this file.
  1. SCMCCV ;ALB/REW - PCMM Conversion of Patient File Fields ; 1 Feb 1996
  1. ;;5.3;Scheduling;**41**;AUG 13, 1993
  1. EN ;
  1. ; Variables:
  1. ; SCASSIGN: 1=Make Patient Assignments if unambiguous (0=No,default)
  1. ; SCDT: Date to make assignments (Default=DT)
  1. ; SCYESTM: 1=Make Pt Tm as well as Pt Posit Assmnts,default(0=No)
  1. ; SCNOPRPT 1=Don't print patient-detail lines
  1. ;
  1. N SCOK,DFN,SCPCNODE,SCLIST,SCTMPLST,SCHISTAR,SCASSIGN,SCYESTM,SCTM,Y,SCSTOP,SCPAGE,SCNOPRPT,SCTEAMAR,SCNOW,SCSUB
  1. N SCLSEQ,SCN,SCESEQ,SCPARM,SCP,SCBEGIN,SCEND,SCINCL,SCDTS
  1. IF '$$OKASK D MESS("Search aborted","!?5") G QTEN
  1. IF '$D(IO("Q")) D
  1. .U IO
  1. .D REP
  1. .D ^%ZISC
  1. ELSE D
  1. .F X="SCASSIGN","SCYESTM","SCDT","SCNOPRPT" S ZTSAVE(X)=""
  1. .S Y=$$QUE("SC Patient-Team/Practitioner"_$S('SCASSIGN:"Report Only",1:"Report and Assignment"),"REP^SCMCCV")
  1. QTEN Q
  1. ;
  1. OKASK() ;
  1. N SCOK,DIR
  1. ;do you want to assign or just get a report?
  1. S DIR(0)="Y"
  1. S DIR("B")="NO"
  1. S DIR("A")="Do you want to assign patients right now?"
  1. S DIR("A",1)=""
  1. S DIR("A",2)=""
  1. S DIR("A",3)=" YES = Assign Patients to Teams and Team Positions"
  1. S DIR("A",4)=" NO = Just print report to see how things would be"
  1. D ^DIR
  1. IF $D(DTOUT)!$D(DUOUT)!$D(DIROUT) S SCOK=0 G QTASK
  1. S SCASSIGN=Y
  1. ;do you want to omit printing patients?
  1. S DIR(0)="Y"
  1. S DIR("B")="YES"
  1. S DIR("A")="Do you want to omit printing patients?"
  1. S DIR("A",1)=""
  1. S DIR("A",2)=""
  1. S DIR("A",3)=" NO = Print detail line for each patient that is assignable"
  1. S DIR("A",4)=" YES = Just print Team & Practitioner information"
  1. D ^DIR
  1. IF $D(DTOUT)!$D(DUOUT)!$D(DIROUT) S SCOK=0 G QTASK
  1. S SCNOPRPT=Y
  1. IF '$D(SCASSIGN) S SCASSIGN=0
  1. IF '$D(SCDT) S SCDT=DT
  1. IF '$D(SCYESTM) S SCYESTM=1
  1. S SCOK=$$GETDEV
  1. QTASK Q SCOK
  1. ;
  1. REP ;non-interactive portion
  1. Q:$$FIRST^SCMCRU ;check for task end
  1. IF '$$OKINIT() G QTEN
  1. D MESS(" ..Ok")
  1. IF '$$OKBUILD G QRP
  1. D MESS(" ..Ok")
  1. IF '$$OKREPORT G QRP
  1. D MESS(" ..Ok")
  1. IF '$$OKCLEAN G QRP
  1. D MESS(" ..Ok")
  1. QRP Q
  1. ;
  1. OKINIT() ;
  1. N SCOK
  1. S SCOK=1
  1. D MESS(">>> Checking Programmer Variables:","!,?5")
  1. IF +$G(DUZ)'>0!($G(U)'="^")!('$D(DT)) D Q 0
  1. . S XPDABORT=1
  1. . D MESS("You must first initialize Programmer Environment by running ^XUP")
  1. . S SCOK=0
  1. S SCLIST="SCTMPLST"
  1. D INIT^SCAPMCU1(.SCOK)
  1. D NOW^%DTC
  1. S SCNOW=%
  1. S SCHISTAR(.05)=1 ;pc practitioner
  1. S SCHISTAR(.06)=DUZ ;user entering
  1. S SCHISTAR(.07)=SCNOW ;date entered
  1. S SCTEAMAR(.08)=1 ;pc team
  1. S SCTEAMAR(.11)=DUZ ;user
  1. S SCTEAMAR(.12)=SCNOW ;date enter=now
  1. Q SCOK
  1. ;
  1. OKBUILD() ;
  1. N SCOK
  1. S SCOK=1
  1. D MESS(">>> Looping through PC Nodes of PATIENT File","!,?5")
  1. S DFN=0
  1. F S DFN=$O(^DPT(DFN)) Q:'DFN S SCPCNODE=$G(^DPT(DFN,"PC")) IF SCPCNODE]"" D D:'(DFN#100) MESS(".")
  1. .S ^TMP("SCMC",$J,"TMPRPT",+$P(SCPCNODE,U,2),+$P(SCPCNODE,U,1),DFN)=""
  1. Q SCOK
  1. ;
  1. OKREPORT() ;
  1. N SCOK,SCTM,SCPR,SCTMNODE
  1. S SCOK=1
  1. D MESS(">>> Producing PATIENT File PC Report","!?5")
  1. D MESS(" Checking Team/Practitioner Assignments:","!?10")
  1. S SCTM=0
  1. F S SCTM=$O(^TMP("SCMC",$J,"TMPRPT",SCTM)) Q:'SCTM!$G(SCSTOP) D
  1. .S SCTMNODE=$G(^SCTM(404.51,SCTM,0))
  1. .D MESS(">>>Team: "_$$DISPTM(SCTM),"!!?10")
  1. .IF '$$OKTEAM(SCTM,SCDT) D
  1. ..S SCOK=0
  1. ..;D MESS("Problem(s) with Practitioner Assignments","!?15")
  1. Q SCOK
  1. ;
  1. OKTEAM(SCTM,SCDT) ;return 1 if exactly 1 posit for each team assignment
  1. ;needs 'tmp('scmc',$j,'tmpr' array defined
  1. ;return count of positions pract is assigned to to team
  1. N SCOK,SC200,SCTMND,SCFLD,SCF
  1. S SCOK=1
  1. S SCTMND=$G(^SCTM(404.51,+$G(SCTM),0))
  1. F SCFLD=3,6,7 IF '$P(SCTMND,U,SCFLD) D ;check required fields
  1. .S SCOK=0
  1. .S SCF=$$DDNAME^SCMCRU(404.51,(SCFLD*.01))
  1. .D MESS(SCF_" (#"_(SCFLD*.01)_") of Team required. Enter via PCMM ","!?20")
  1. G:'SCOK QTOKTM
  1. S SCOK=$$ACTTM^SCMCTMU(SCTM,SCDT)
  1. IF 'SCOK D G QTOKTM
  1. .N SCX
  1. .S SCX=$D(^SCTM(404.58,SCTM,"AIDT",SCTM))
  1. .D:'SCX MESS(" Never activated - Edit via PCMM")
  1. .D:SCX MESS(" Not active on "_SCDT)
  1. IF SCOK<0 D G QTOKTM
  1. .D MESS(" Error in setup")
  1. IF $D(^TMP("SCMC",$J,"TMPRPT",SCTM,0)) D
  1. .D MESS("Team Assignment Only","!?15")
  1. .D:'SCNOPRPT MESS("Patients to be assigned to this team:","!?20")
  1. .S DFN=0 F S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,0,DFN)) Q:'DFN D
  1. ..D MESS($$DISPPT(DFN),"!?25")
  1. ..S SCX=$$NMPCTM^SCAPMCU2(DFN,SCDT,1)
  1. ..D:SCX&(+SCX=SCTM)&('SCNOPRPT) MESS("Already assigned","!?27")
  1. ..D:SCX&(+SCX'=SCTM)&('SCNOPRPT) MESS("Previously assigned to "_$P(SCX,U,2),"!?27")
  1. ..Q:SCX
  1. ..D:$G(SCASSIGN) PCUPDTM(DFN)
  1. .D:$G(SCASSIGN) MAILLST^SCMCTMM(SCTM,"SCTEAMAR",SCDT,"^TMP(""SCMC"",$J,""NEWTM"",SCTM)")
  1. .F SCSUB="NEWTM","BADTM" K ^TMP("SCMC",$J,SCSUB,SCTM)
  1. S SC200=0
  1. F S SC200=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200)) Q:'SC200 D
  1. .N SCTMPLST,SCCNT,SCTP,SCX,DFN
  1. .D MESS("Practitioner: "_$$DISP200(SC200),"!?15")
  1. .IF '$D(^VA(200,SC200,0)) D
  1. ..S SCOK=0
  1. ..D MESS("Bad Practitioner Assignment"_$S(SCNOPRPT:"",1:" for the following patient(s):"),"!?15")
  1. ..S DFN=0 F S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200,DFN)) Q:'DFN D
  1. ...D MESS($$DISPPT(DFN),"!?25")
  1. .ELSE D
  1. .S:'$$TPPR^SCAPMC(SC200,"SCDTS",,,"SCTMPLST($J)",.SCERR) SCOK=0
  1. .S SCXTP=0 F SCCNT=0:1 S SCXTP=$O(SCTMPLST($J,"SCTP",SCTM,SCXTP)) Q:'SCXTP S SCTP=SCXTP D MESS("Position: "_$$DISPTP(SCTP),"!?17")
  1. .;if no team-position assignments for pract
  1. .IF 'SCCNT D
  1. ..S SCOK=0
  1. ..D MESS("is assigned to "_SCCNT_" positions on team","!?20")
  1. ..D MESS("you need to assign him/her to a position on the team","!?20")
  1. ..S ^TMP("SCMC",$J,"NO_TP",SCTM,SC200)=""
  1. .;if exactly one practitioner assignment to team
  1. .IF SCCNT=1 D
  1. ..D:'SCNOPRPT MESS("Patients to be assigned to this position:","!?20")
  1. ..S DFN=0 F S DFN=$O(^TMP("SCMC",$J,"TMPRPT",SCTM,SC200,DFN)) Q:'DFN D
  1. ...D MESS($$DISPPT(DFN),"!?25")
  1. ...S SCX=$$NMPCTP^SCAPMCU2(DFN,SCDT,1)
  1. ...D:SCX&(+SCX=SCTP)&('SCNOPRPT) MESS("Already assigned","!?27")
  1. ...D:SCX&(+SCX'=SCTP)&('SCNOPRPT) MESS("Previously assigned to "_$P(SCX,U,2),"!?27")
  1. ...Q:SCX
  1. ...D:$G(SCASSIGN) PCUPD(DFN)
  1. ..D:$G(SCASSIGN) MAILLST^SCMCTPM(SCTP,"SCHISTAR",SCDT,"^TMP(""SCMC"",$J,""NEWTP"",SCTP)","^TMP(""SCMC"",$J,""OLDTP"",SCTP)","^TMP(""SCMC"",$J,""BADTP"",SCTP)")
  1. ..D:$G(SCASSIGN) MAILLST^SCMCTMM(SCTM,"SCTEAMAR",SCDT,"^TMP(""SCMC"",$J,""NEWTM"",SCTM)")
  1. ..F SCSUB="NEWTP","OLDTP","BADTP" K ^TMP("SCMC",$J,SCSUB,SCTP)
  1. ..K ^TMP("SCMC",$J,"NEWTM",SCTM)
  1. .;if multiple positin assignments for team for pract
  1. .IF SCCNT>1 D
  1. ..S SCOK=0
  1. ..D MESS("Practitioner is assigned to "_SCCNT_" positions on team","!?20")
  1. ..D MESS("because there is more than one position for this team","!?20")
  1. ..D MESS("and practitioner, there will be no patient assignments","!?20")
  1. ..S SCTP=0 F S SCTP=$O(SCTMPLST($J,SCTM,SCTP)) Q:'SCTP S ^TMP("SCMC",$J,"MULT_TP",SCTM,SC200,SCTP)=""
  1. .IF SCCNT=1 S ^TMP("SCMC",$J,"ONE_TP",SCTM,SC200,SCTP)=""
  1. QTOKTM Q SCOK
  1. ;
  1. PCUPD(DFN) ;
  1. N SCX,SCNOMAIL
  1. S SCNOMAIL=1
  1. ;This is NOT a stand-alone procedure
  1. S SCX=$$ACPTTP^SCAPMC(DFN,SCTP,"SCHISTAR",SCDT,.SCERR,SCYESTM)
  1. IF SCX D
  1. .D MESS("File #404.43 ien = "_+SCX,"!?30")
  1. .IF $P(SCX,U,2) D
  1. ..D MESS(" New Entry")
  1. ..S ^TMP("SCMC",$J,"NEWTP",SCTP,DFN)=""
  1. ..IF $P(SCX,U,4) D
  1. ...D MESS(" Team Assignment Made. IEN="_$P(SCX,U,3),"!?30")
  1. ...S ^TMP("SCMC",$J,"NEWTM",SCTM,DFN)=""
  1. .ELSE D
  1. ..D MESS(" Already Assigned")
  1. ..S ^TMP("SCMC",$J,"OLDTP",SCTP,DFN)=""
  1. ELSE D
  1. .D MESS(" - NOT saved")
  1. .S ^TMP("SCMC",$J,"BADTP",+$G(SCTP),DFN)=""
  1. .D:('$P(SCX,U,2))&('$P(SCX,U,4))&('$P(SCX,U,3)) MESS("No Patient Team Assignment","!?30")
  1. Q
  1. ;
  1. PCUPDTM(DFN) ;
  1. N SCX,SCNOMAIL
  1. S SCNOMAIL=1
  1. ;This is NOT a stand-alone procedure
  1. S SCX=$$ACPTTM^SCAPMC(DFN,SCTM,"SCTEAMAR",SCDT,.SCERR)
  1. IF SCX D
  1. .D MESS("File #404.42 ien = "_+SCX,"!?30")
  1. .IF $P(SCX,U,2) D
  1. ..D MESS(" New Entry")
  1. ..S ^TMP("SCMC",$J,"NEWTM",SCTM,DFN)=""
  1. ELSE D
  1. .D MESS(" - NOT saved")
  1. .S ^TMP("SCMC",$J,"BADTM",+$G(SCTM),DFN)=""
  1. Q
  1. ;
  1. OKCLEAN() ;
  1. D MESS(">>> Cleaning up ^TMP(""SCMC"" global","!?5")
  1. N SCOK
  1. S SCOK=1
  1. ;K ^TMP("SCMC",$J)
  1. Q SCOK
  1. ;
  1. DISP200(SC200) ;
  1. Q $P($G(^VA(200,SC200,0)),U,1)_" [#"_SC200_"]"
  1. ;
  1. DISPTP(SCTP) ;
  1. Q $P($G(^SCTM(404.57,SCTP,0)),U,1)_" [#"_SCTP_"]"
  1. ;
  1. DISPTM(SCTM) ;
  1. Q $P($G(^SCTM(404.51,SCTM,0)),U,1)_" [#"_SCTM_"]"
  1. ;
  1. DISPPT(DFN) ;
  1. Q $S(SCNOPRPT:"",1:$E($P($G(^DPT(DFN,0)),U,1),1,21)_" [SSN#:"_$P($G(^DPT(DFN,0)),U,9)_"]")
  1. ;
  1. MESS(TEXT,FORMAT) ;
  1. Q:$G(SCSTOP)!($G(TEXT)="")
  1. S FORMAT=$G(FORMAT,"?5")
  1. D OUT^SCMCRU(TEXT,FORMAT)
  1. Q
  1. ;
  1. GETDEV() ;
  1. N SCOK
  1. S SCOK=0
  1. S %ZIS="PMQ" D ^%ZIS G:POP QTGDV
  1. S SCOK=1
  1. QTGDV Q (SCOK)
  1. ;
  1. QUE(NAME,START) ;
  1. ; Needed: ZTSAVE array
  1. ; NAME = description
  1. ; START = starting point of routine
  1. S ZTDESC=NAME,ZTRTN=START
  1. D ^%ZTLOAD W:$D(ZTSK) !,"TASK #",ZTSK
  1. D HOME^%ZIS K IO("Q")
  1. Q ZTSK