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

SCAPMC8C.m

Go to the documentation of this file.
  1. SCAPMC8C ;BP/DJB - Convert Practitioners List to PCP/AP ; 8/4/00 2:28pm
  1. ;;5.3;Scheduling;**177,224,1015**;AUG 13, 1993;Build 21
  1. ;;1.0
  1. ;
  1. PRTPC(SCTP,SCDATES,SCLIST,SCERR,SCALLHIS,ADJUSTDT) ;Convert list of providers
  1. ;for a position, to a list of PROV-U/PROV-P/PRECs.
  1. ; PROV-U - Unprecepted provider (PCP)
  1. ; PROV-P - Precepted provider (AP)
  1. ; PREC - Preceptor (PCP)
  1. ;
  1. ; Input:
  1. ; SCTP - IEN of TEAM POSITION [required]
  1. ; SCDATES - See PRTP^SCAPMC8
  1. ; SCLIST - Array NAME for output
  1. ; SCERR - Array NAME to store error messages.
  1. ; Example: ^TMP("ORXX",$J).
  1. ; SCALLHIS - 1: Return unfiltered sub-array in SCLIST
  1. ; ADJUSTDT - 1:Adjust Start/End dates if provider if is both
  1. ; precepted & unprecepted for different times periods.
  1. ;
  1. ;Output:
  1. ; SCLIST(scn,"PROV-U"/"PROV-P"/"PREC",n) = array of practitioners
  1. ; Format: See PRTP^SCAPMC8
  1. ; SCERR() - See PRTP^SCAPMC8
  1. ;
  1. ;Returned: 1 if ok, 0 if error
  1. ;
  1. NEW RESULT,PRTPC
  1. ;
  1. S ADJUSTDT=$G(ADJUSTDT)
  1. ;
  1. ;Get list of practioners for a team position.
  1. S RESULT=$$PRTP^SCAPMC(.SCTP,.SCDATES,"PRTPC",.SCERR,1,.SCALLHIS)
  1. I 'RESULT G QUIT
  1. I '$D(PRTPC(0)) G QUIT
  1. ;
  1. D ADJUST ;Process returned array
  1. QUIT Q RESULT
  1. ;
  1. ADJUST ;Convert returned array to PROV-P/PROV-U/PREC array.
  1. ;Adjust Start/End dates if provider is both precepted & unprecepted.
  1. ;
  1. NEW DATA,DATA1,ID,NUM,NUM1
  1. NEW ADJEDATE,ADJSDATE,EDATE,SDATE,SDATE1
  1. ;
  1. ;Loop thru array
  1. S NUM=0
  1. F S NUM=$O(PRTPC(NUM)) Q:'NUM D ;
  1. . KILL SDATE ;Initialize SDATE array
  1. . S DATA=$G(PRTPC(NUM))
  1. . ;If no preceptor nodes set PCP node.
  1. . ;Place a zero in "404.53 IEN" subscript.
  1. . S ID=$P(DATA,U,11)_"-0-PCP"
  1. . I '$D(PRTPC(NUM,"PR")) S @SCLIST@(NUM,"PROV-U",ID)=DATA Q
  1. . S SDATE=$P(DATA,U,9) ;...Position History Start Date
  1. . S EDATE=$P(DATA,U,10) ;..Position History End Date
  1. . ;
  1. . ;Loop thru "PR" nodes to find preceptor
  1. . S NUM1=0
  1. . F S NUM1=$O(PRTPC(NUM,"PR",NUM1)) Q:'NUM1 D ;
  1. . . S DATA1=$G(PRTPC(NUM,"PR",NUM1))
  1. . . ;Compare piece 9 & piece 14. Use later date.
  1. . . ; Piece 9 - Date provider assigned
  1. . . ; Piece 14 - Date position assigned.
  1. . . S SDATE1=$P(DATA1,U,9)
  1. . . I $P(DATA1,U,14)>SDATE1 S SDATE1=$P(DATA1,U,14)
  1. . . ;Set temp array to later find earliest preceptor Start Date.
  1. . . ;
  1. . . ;alb/rpm;Patch 224;Filter preceptors outside requested date range
  1. . . Q:'$$DTCHK^SCAPU1(@SCDATES@("BEGIN"),@SCDATES@("END"),0,SDATE1,$P(DATA1,U,10))
  1. . . ;
  1. . . I SDATE1 S SDATE(SDATE1)=""
  1. . . ;
  1. . . ;Set preceptor as PCP.
  1. . . S ID=$P(DATA1,U,11)_"-"_$P(DATA1,U,16)_"-PCP"
  1. . . S @SCLIST@(NUM,"PREC",ID)=DATA1
  1. . . Q
  1. . ;Get earliest preceptor Start Date
  1. . S SDATE1=$O(SDATE(0))
  1. . ;
  1. . ;If position date is not earlier than preceptor date, it's all AP.
  1. . S ID=$P(DATA,U,11)_"-0-AP"
  1. . I SDATE'<SDATE1 S @SCLIST@(NUM,"PROV-P",ID)=DATA Q
  1. . ;
  1. . ;If postion Start/End Dates are both earlier than preceptor date,
  1. . ;then it's all PCP.
  1. . S ID=$P(DATA,U,11)_"-0-PCP"
  1. . I EDATE,EDATE<SDATE1 S @SCLIST@(NUM,"PROV-U",ID)=DATA Q
  1. . ;
  1. . ;Set PCP and AP portions
  1. . ;
  1. . ;Set PCP portion
  1. . S ID=$P(DATA,U,11)_"-0-PCP"
  1. . S ADJSDATE=SDATE ;.....................Adjusted Start Date
  1. . S ADJEDATE=$$FMADD^XLFDT(SDATE1,-1) ;..Adjusted End Date
  1. . I ADJUSTDT S $P(DATA,U,10)=ADJEDATE ;..Adjust End Date
  1. . D ;After AP/PCP split, recheck Start/End Dates.
  1. . . I ADJSDATE,ADJSDATE>@SCDATES@("END") Q ;
  1. . . I ADJEDATE,ADJEDATE<@SCDATES@("BEGIN") Q ;
  1. . . S @SCLIST@(NUM,"PROV-U",ID)=DATA
  1. . ;
  1. . ;Set AP portion
  1. . S ID=$P(DATA,U,11)_"-0-AP"
  1. . S ADJSDATE=SDATE1 ;..Adjusted Start Date
  1. . I $P(DATA,U,15),$P(DATA,U,15)<EDATE S EDATE=$P(DATA,U,15)
  1. . S ADJEDATE=EDATE ;...Adjusted End Date
  1. . I ADJUSTDT D ;......Adjust Start/End dates
  1. . . S $P(DATA,U,9)=ADJSDATE
  1. . . S $P(DATA,U,10)=ADJEDATE
  1. . D ;After AP/PCP split, recheck Start/End Dates.
  1. . . I ADJSDATE,ADJSDATE>@SCDATES@("END") Q ;
  1. . . I ADJEDATE,ADJEDATE<@SCDATES@("BEGIN") Q ;
  1. . . S @SCLIST@(NUM,"PROV-P",ID)=DATA
  1. ;
  1. Q