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

SDEC01A.m

Go to the documentation of this file.
  1. SDEC01A ;ALB/SAT,BLB - VISTA SCHEDULING RPCS ;MAR 14, 2022
  1. ;;5.3;Scheduling;**627,642,658,665,672,809**;Aug 13, 1993;Build 10
  1. ;
  1. Q
  1. ;
  1. RESOURCE(SDECY,SDECDUZ,SDACT,SDTYPE,MAXREC,LASTSUBI,SDIEN,SDECP) ;Returns ADO Recordset with ALL RESOURCE names
  1. ; SDECDUZ = (optional) pointer to NEW PERSON file
  1. ; Defaults to current user
  1. ; checks that overbook is allowed
  1. ; SDACT = (optional) 1 or YES will return only active resources
  1. ; 0, NO, or null will include inactive
  1. ; SDTYPE = (optional) null will return all resource types
  1. ; H will only return HOSPITAL LOCATION (clinic) resources
  1. ; P will only return NEW PERSON (Provider) resources
  1. ; A will only return SDEC ADDITIONAL RESOURCE resources
  1. ; PH will only return prohibited clinics
  1. ; MAXREC - (optional) Max records returned
  1. ; LASTSUBI - (optional) last subscripts from previous call
  1. ; SDIEN - (optional) pointer to SDEC RESOURCE file
  1. ; only 1 record will be returned if SDIEN is present
  1. ; SDECP - (optional) Partial name text
  1. ;RETURN:
  1. ; Successful Return:
  1. ; a global array in which each array entry contains data from the
  1. ; SDEC RESOURCE file
  1. ; 1. RESOURCEID - Pointer to the SDEC RESOURCE file
  1. ; 2. RESOURCE_NAME - NAME from SDEC RESOURCE file
  1. ; 3. INACTIVE - inactive Clinic - Returned values will be NO YES
  1. ; 4. TIMESCALE - Valid Values:
  1. ; 5, 10, 15, 20, 30, 60
  1. ; 5. HOSPITAL_LOCATION_ID
  1. ; 6. <NOT USED> LETTER_TEXT
  1. ; 7. <NOT USED> NO_SHOW_LETTER
  1. ; 8. <NOT USED> CLINIC_CANCELLATION_LETTER
  1. ; 9. VIEW - User can VIEW 1=YES; 0=NO
  1. ; 10. OVERBOOK - User can OVERBOOK 1=YES; 0=NO
  1. ; 11. MODIFY_SCHEDULE - User can Modify Schedule 1=YES; 0=NO
  1. ; 12. MODIFY_APPOINTMENTS User can modify appointments 1=YES; 0=NO
  1. ; 13. RESOURCETYPE - 3 pipe pieces:
  1. ; 1. type H, P, or A
  1. ; 2. IEN - pointer to [H] HOSPITAL LOCATION, [P] NEW PERSON,
  1. ; or [A] SDEC ADDITIONAL RESOURCE file
  1. ; 3. Name - name from the appropriate type file
  1. ; 14. DATE - Date/Time entered in external format
  1. ; 15. USERIEN - Entered By User ID pointer to NEW PERSON file 200
  1. ; 16. USERNAME - Entered By User name from NEW PERSON file
  1. ; 17. DATE1 - Inactive Date/Time in external format
  1. ; 18. USERIEN1 - Inactivating User ID pointer to NEW PERSON file
  1. ; 19. USERNAME1 - Inactivating User Name from NEW PERSON file
  1. ; 20. DATE2 - Reactivated Date/Time in external format
  1. ; 21. USERIEN2 - Reactivating User ID pointer to NEW PERSON file
  1. ; 22. USERNAME2 - Reactivating User Name from NEW PERSON file
  1. ; 23. CLINNAME - Clinic Name from HOSPITAL LOCATION file 44
  1. ; 24. PROVCLIN - Boolean indicating 'this' P type resource is a provider for a clinic
  1. ; 0 = not a provider (not found in the AVADPR index for file 44)
  1. ; 1 = is a provider
  1. ; 25. PRIVLOC - Boolean indicating presence of privileged users for hospital location
  1. ; 26. PRHBLOC - Boolean indicating if location is a Prohibit Access clinic
  1. ; 27. LASTSUB - Last subscript in return data. Used in next call to
  1. ; SDEC RESOURCE to get additional records
  1. ; 28. ABBR - Abbreviation
  1. ;
  1. ;
  1. N SDA,SDCL,SDDATA,SDMSG,SDECERR,SDECRET,SDECIEN,SDECRES,SDECDEP,SDECDDR,SDECDEPN,SDECRDAT,SDECRNOD,SDECI,SDEC,SDECLTR
  1. N ABBR,SDECNOS,SDECCAN,SDF,SDTYPR,SDX,SDPRO,PRO,SDH,SDK,SDRT,SDT,SDXT,TIMEZONE,CLINICIEN
  1. N SDARR,SDARR1,SDCNT,SDMORE,SDNAM,SDREF ;alb/sat 665 ;alb/sat 672 add SDARR1,SDREF
  1. N SDVW ;alb/sat 672
  1. S (SDRT,SDT,SDX)="",SDPRO=0
  1. S (SDCNT,SDF,SDMORE)=0
  1. S SDVW="" ;alb/sat 672
  1. S SDECY="^TMP(""SDEC01A"","_$J_",""RESOURCE"")"
  1. K @SDECY
  1. S SDECI=0
  1. S (SDECERR,SDTYPR)=""
  1. ; 1 2 3 4 5 6 7
  1. S @SDECY@(SDECI)="I00010RESOURCEID^T00030RESOURCE_NAME^T00010INACTIVE^I00010TIMESCALE^I00010HOSPITAL_LOCATION_ID^T00030LETTER_TEXT^T00030NO_SHOW_LETTER"
  1. ; 8 9 10 11 12
  1. S @SDECY@(SDECI)=^(SDECI)_"^T00030CLINIC_CANCELLATION_LETTER^I00010VIEW^I00010OVERBOOK^I00010MODIFY_SCHEDULE^I00010MODIFY_APPOINTMENTS"
  1. ; 13 14 15 16
  1. S @SDECY@(SDECI)=^(SDECI)_"^T00030RESOURCETYPE^T00030DATE^T00030USERIEN^T00030USERNAME"
  1. ; 17 18 19 20 21 22
  1. S @SDECY@(SDECI)=^(SDECI)_"^T00030DATE1^T00030USERIEN1^T00030USERNAME1^T00030DATE2^T00030USERIEN2^T00030USERNAME2"
  1. ; 23 24 25 26 27
  1. S @SDECY@(SDECI)=^(SDECI)_"^T00030CLINNAME^T00030PROVCLIN^T00030PRIVLOC^T00030PRHBLOC^T00030LASTSUB^T00030ABBR"
  1. S @SDECY@(SDECI)=^(SDECI)_"^T00030DEFAULT_VIEW^T00030TIMEZONE"_$C(30) ;alb/sat 672 - add DEFAULT_VIEW
  1. ;validate user
  1. S SDECDUZ=$G(SDECDUZ)
  1. I '+SDECDUZ S SDECDUZ=DUZ
  1. ;validate active
  1. S SDACT=$G(SDACT)
  1. S SDACT=$S(SDACT=1:1,SDACT="YES":1,1:0)
  1. ;validate type
  1. S SDTYPE=$G(SDTYPE)
  1. ;MGH added new type
  1. I SDTYPE="PH" S SDPRO=1
  1. S SDTYPE=$S(SDTYPE="H":"SC(",SDTYPE="P":"VA(200",SDTYPE="A":"SDEC",1:"")
  1. ;validate MAXREC
  1. S MAXREC=$G(MAXREC,9999999)
  1. ;validate LASTSUBI
  1. S LASTSUBI=$G(LASTSUBI)
  1. ;validate SDIEN
  1. ;MGH changed to allow multiple IENS
  1. ;S SDIEN=$G(SDIEN)
  1. ;I SDIEN'="",'$D(^SDEC(409.831,+SDIEN,0)) S SDIEN=""
  1. I $G(SDIEN) D G RESX
  1. .F SDK=1:1:$L(SDIEN,"|") D
  1. ..S SDECIEN=$P(SDIEN,"|",SDK)
  1. ..Q:'$D(^SDEC(409.831,+SDECIEN,0))
  1. ..S SDECRES=SDECIEN
  1. ..D RES1
  1. ;ien lookup
  1. ;I +SDIEN S SDECRES=+SDIEN D RES1 G RESX
  1. ;validate SDECP
  1. S SDECP=$G(SDECP)
  1. ;partial name lookup
  1. I SDECP'="" D
  1. .S SDF=$S($P(LASTSUBI,"|",1)'="":$P(LASTSUBI,"|",1),1:"")
  1. .;alb/sat 672 - begin modification; separate string and numeric lookup
  1. .S (SDX,SDXT)=$S($P(LASTSUBI,"|",2)'="":$$GETSUB^SDECU($P(LASTSUBI,"|",2)),1:$$GETSUB^SDECU(SDECP))
  1. .;abbreviation as string
  1. .I ($P(LASTSUBI,"|",1)="")!($P(LASTSUBI,"|",1)="ABBRSTR") S SDF="ABBRSTR" D
  1. ..S SDREF="C" D PART Q
  1. .;abbreviation as numeric
  1. .I ($P(LASTSUBI,"|",1)="")!($P(LASTSUBI,"|",1)="ABBRNUM"),(+SDXT=SDXT) S SDF="ABBRNUM",SDX=SDXT_" " D
  1. ..S SDREF="C" D PART Q
  1. .;name as string
  1. .I ($P(LASTSUBI,"|",1)="")!($P(LASTSUBI,"|",1)="FULLSTR") S SDF="FULLSTR",SDX=SDXT D
  1. ..S SDREF="B" D PART Q
  1. .;name as numeric
  1. .I ($P(LASTSUBI,"|",1)="")!($P(LASTSUBI,"|",1)="FULLNUM"),(+SDXT=SDXT) S SDF="FULLNUM",SDX=SDXT_" " D
  1. ..S SDREF="B" D PART Q
  1. .;alb/sat 672 - end modification; separate string and numeric lookup
  1. ;$O THRU SDEC RESOURCE File
  1. I SDECP="",'+SDIEN S SDECRES=$S($P(LASTSUBI,"|",2)'="":$P(LASTSUBI,"|",2),1:0) F S SDECRES=$O(^SDEC(409.831,SDECRES)) Q:'+SDECRES D I (+MAXREC)&(SDCNT'<MAXREC) S SDECRES=$O(^SDEC(409.831,SDECRES)) S SDMORE=$S(+SDECRES:1,1:0) Q
  1. .D RES1
  1. RESX ;
  1. S SDF=-1 F S SDF=$O(SDARR(SDF)) Q:SDF="" D
  1. .S SDNAM="" F S SDNAM=$O(SDARR(SDF,SDNAM)) Q:SDNAM="" D
  1. ..S SDECI=SDECI+1 S @SDECY@(SDECI)=SDARR(SDF,SDNAM)_$C(30)
  1. I SDECI>0,'+SDMORE S $P(@SDECY@(SDECI),U,27)=""
  1. S @SDECY@(SDECI)=@SDECY@(SDECI)_$C(31)
  1. Q
  1. PART ;partial name lookup ;alb/sat 672
  1. Q:SDREF=""
  1. F S SDX=$O(^SDEC(409.831,SDREF,SDX)) Q:SDX="" Q:SDX'[SDECP D I (+MAXREC)&(SDCNT'<MAXREC) S SDX=$O(^SDEC(409.831,SDREF,SDX)) S SDMORE=$S(+SDMORE:1,SDX[SDECP:1,1:0) Q
  1. .S (SDECRES,SDRT)=$S($P(LASTSUBI,"|",3)'="":$P(LASTSUBI,"|",3),1:0)
  1. .S LASTSUBI="" F S SDECRES=$O(^SDEC(409.831,SDREF,SDX,SDECRES)) Q:'+SDECRES D RES1 I (+MAXREC)&(SDCNT'<MAXREC) S SDMORE=+$O(^SDEC(409.831,SDREF,SDX,SDECRES)) Q
  1. Q
  1. RES1 ; get data for 1 resource
  1. N FND
  1. S FND=0
  1. Q:'$D(^SDEC(409.831,SDECRES,0))
  1. I SDECP'="" S SDH=0 F S SDH=$O(^SDEC(409.831,"C",SDECP,SDH)) Q:SDH="" S FND=SDH=SDECRES Q:FND
  1. S SDECRNOD=^SDEC(409.831,SDECRES,0)
  1. I SDTYPE'="" Q:$P(SDECRNOD,U,11)'[SDTYPE
  1. S SDTYPR=$P(SDECRNOD,U,11)
  1. S $P(SDTYPR,"|",1)=$S($P(SDTYPR,";",2)="SC(":"H",$P(SDTYPR,";",2)="VA(200,":"P",$P(SDTYPR,";",2)="SDEC(409.834,":"A",1:"")
  1. S $P(SDTYPR,"|",2)=$P($P(SDECRNOD,U,11),";",1)
  1. S $P(SDTYPR,"|",3)=$$GET1^DIQ(409.831,SDECRES_",",.012)
  1. I $P(SDTYPR,"|",1)="P" D RESPRV1^SDEC01B($P(SDTYPR,"|",2),$P(SDECRNOD,U,4)) ;do not include provider resource if NEW PERSON is not active
  1. I $P(SDTYPR,"|",1)="H" D CHKC^SDEC01B($P(SDTYPR,"|",2),SDECRES)
  1. I +SDACT,$$GET1^DIQ(409.831,SDECRES_",",.02)="YES" Q ;do not include inactive entries
  1. D GETACC(.SDECACC,SDECDUZ,SDECRES)
  1. ;I SDACT Q:$$GET1^DIQ(409.831,SDECRES_",",.02)'="YES" ;do not include inactive entries
  1. K SDECRDAT
  1. ;alb/sat 658 - begin mod
  1. S $P(SDECRDAT,U,1)=$P(SDECRNOD,U,1)
  1. S $P(SDECRDAT,U,2)=$P(SDECRNOD,U,2)
  1. S $P(SDECRDAT,U,3)=$P(SDECRNOD,U,3)
  1. S $P(SDECRDAT,U,4)=$P(SDECRNOD,U,4)
  1. ;F SDEC=1:1:4 S $P(SDECRDAT,U,SDEC)=$P(SDECRNOD,U,SDEC)
  1. ;alb/sat 658 - end mod
  1. S SDECRDAT=SDECRES_U_SDECRDAT ;1,2-5
  1. S SDCL=$P(SDECRDAT,U,5)
  1. Q:+$$GET1^DIQ(44,SDCL_",",50.01,"I")=1 ;OOS?
  1. S PRO=0
  1. ;MGH code for new type to only contain prohibited clinics
  1. Q:$G(SDCL)=""&(SDPRO=1)
  1. Q:$G(SDCL)&(SDPRO=1)&($$GET1^DIQ(44,SDCL_",",2500)'="YES")
  1. Q:$D(SDARR1(SDECRES)) ;alb/sat 672 - checking for duplicates
  1. S SDARR1(SDECRES)="" ;alb/sat 672 - checking for duplicates
  1. S $P(SDECRDAT,U,3)=$$GET1^DIQ(409.831,SDECRES_",",.02)
  1. ;Get letter text from wp field
  1. S SDECLTR=""
  1. I 0,$D(^SDEC(409.831,SDECRES,1)) D
  1. . S SDECIEN=0
  1. . F S SDECIEN=$O(^SDEC(409.831,SDECRES,1,SDECIEN)) Q:'+SDECIEN D
  1. . . S SDECLTR=SDECLTR_$G(^SDEC(409.831,SDECRES,1,SDECIEN,0))
  1. . . S SDECLTR=SDECLTR_$C(13)_$C(10)
  1. S SDECNOS=""
  1. I 0,$D(^SDEC(409.831,SDECRES,12)) D
  1. . S SDECIEN=0 F S SDECIEN=$O(^SDEC(409.831,SDECRES,12,SDECIEN)) Q:'+SDECIEN D
  1. . . S SDECNOS=SDECNOS_$G(^SDEC(409.831,SDECRES,12,SDECIEN,0))
  1. . . S SDECNOS=SDECNOS_$C(13)_$C(10)
  1. S SDECCAN=""
  1. I 0,$D(^SDEC(409.831,SDECRES,13)) D
  1. . S SDECIEN=0 F S SDECIEN=$O(^SDEC(409.831,SDECRES,13,SDECIEN)) Q:'+SDECIEN D
  1. . . S SDECCAN=SDECCAN_$G(^SDEC(409.831,SDECRES,13,SDECIEN,0))
  1. . . S SDECCAN=SDECCAN_$C(13)_$C(10)
  1. N SDECACC,SDECMGR
  1. S SDECACC="0^0^0^0"
  1. S SDECMGR=$O(^DIC(19.1,"B","SDECZMGR",0))
  1. I +SDECMGR,$D(^VA(200,SDECDUZ,51,SDECMGR)) S SDECACC="1^1^1^1"
  1. I SDECACC="0^0^0^0" D
  1. . N SDECNOD,SDECRUID
  1. . S SDECRUID=0
  1. . ;Get entry for this user and resource
  1. . F S SDECRUID=$O(^SDEC(409.833,"AC",SDECDUZ,SDECRUID)) Q:'+SDECRUID I $D(^SDEC(409.833,SDECRUID,0)),$P(^(0),U)=SDECRES Q
  1. . Q:'+SDECRUID
  1. . S $P(SDECACC,U)=1
  1. . S SDECNOD=$G(^SDEC(409.833,SDECRUID,0))
  1. . S $P(SDECACC,U,2)=+$P(SDECNOD,U,3)
  1. . S $P(SDECACC,U,3)=+$P(SDECNOD,U,4)
  1. . S $P(SDECACC,U,4)=+$P(SDECNOD,U,5)
  1. ; 6 7 8 9-12
  1. S SDECRDAT=SDECRDAT_U_SDECLTR_U_SDECNOS_U_SDECCAN_U_SDECACC_U_SDTYPR
  1. ;D GETS^DIQ(409.831,SDECRES_",","**","IE","SDDATA","SDMSG")
  1. K SDDATA D GETS^DIQ(409.831,SDECRES_",",".01:.04","IE","SDDATA","SDMSG")
  1. S SDA="SDDATA(409.831,"""_SDECRES_","")"
  1. S $P(SDECRDAT,U,14)=@SDA@(.015,"E") ;date/time entered
  1. S $P(SDECRDAT,U,15)=@SDA@(.016,"I") ;entered by user id
  1. S $P(SDECRDAT,U,16)=@SDA@(.016,"E") ;entered by user name
  1. S $P(SDECRDAT,U,17)=@SDA@(.021,"E") ;inactive date/time
  1. S $P(SDECRDAT,U,18)=@SDA@(.022,"I") ;inactivated by user ID
  1. S $P(SDECRDAT,U,19)=@SDA@(.022,"E") ;inactivated by user name
  1. S $P(SDECRDAT,U,20)=@SDA@(.025,"E") ;reactivated date/time
  1. S $P(SDECRDAT,U,21)=@SDA@(.026,"I") ;reactivating user ID
  1. S $P(SDECRDAT,U,22)=@SDA@(.026,"E") ;reactivating user name
  1. S $P(SDECRDAT,U,23)=$$GET1^DIQ(44,SDCL_",",.01) ;clinic name
  1. S $P(SDECRDAT,U,24)=$S($P(SDTYPR,"|",1)="P":''$O(^SC("AVADPR",+$P(SDTYPR,"|",2),0)),1:0)
  1. S:$G(SDCL) $P(SDECRDAT,U,25)=$S($G(SDCL):$P($G(^SC(SDCL,"SDPRIV",0)),U,4)>0,1:0) ;contains privileged users
  1. S:$G(SDCL) $P(SDECRDAT,U,26)=$$GET1^DIQ(44,SDCL_",",2500)["Y" ;prohibited clinic
  1. S $P(SDECRDAT,U,27)=SDF_"|"_SDX_"|"_SDECRES ;LASTSUB
  1. S $P(SDECRDAT,U,28)=@SDA@(.011,"E") ;abbreviation
  1. S:$P(SDECRDAT,U,23)'="" SDVW=$$GET^XPAR("PKG.SCHEDULING","SDEC VS GUI CLINIC VIEW",$P(SDECRDAT,U,23),"B") ;alb/sat 672
  1. S $P(SDECRDAT,U,29)=$S(SDVW'="":$P(SDVW,U,1),1:"W") ;alb/sat 672
  1. S $P(SDECRDAT,U,2)=$S(($G(SDF)["ABBR")&(@SDA@(.011,"E")'=""):@SDA@(.011,"E")_" ",1:"")_$P(SDECRDAT,U,2) ;alb/sat 658 - include abbr in name if found by C xref
  1. S CLINICIEN=$$GET1^DIQ(409.831,SDECRES,.04,"I")
  1. S TIMEZONE=$$TIMEZONEDATA^SDESUTIL(CLINICIEN)
  1. S $P(SDECRDAT,U,30)=$P($G(TIMEZONE),U)
  1. S SDARR(SDF["FULL",$P(SDECRDAT,U,2))=SDECRDAT,SDCNT=SDCNT+1
  1. Q
  1. ;
  1. GETACC(SDECACC,SDECDUZ,SDECRES) ;get view, overbook, modify appt, and modify schedule abilities
  1. ;INPUT:
  1. ; SDECDUZ = user ID pointer to NEW PERSON file
  1. ; SDECRES = resource ID pointer to SDEC RESOURCE file
  1. ;RETURN:
  1. ; .SDECACC = access separated by ^:
  1. ; 1. VIEW - User can VIEW 1=YES; 0=NO
  1. ; 2. OVERBOOK - User can OVERBOOK 1=YES; 0=NO
  1. ; 3. MODIFY SCHEDULE - User can Modify Schedule 1=YES; 0=NO
  1. ; 4. MODIFY APPOINTMENTS User can modify appointments 1=YES; 0=NO
  1. N SDECMGR
  1. S SDECACC="0^0^0^0"
  1. S SDECMGR=$O(^DIC(19.1,"B","SDECZMGR",0))
  1. I +SDECMGR,$D(^VA(200,SDECDUZ,51,SDECMGR)) S SDECACC="1^1^1^1"
  1. I SDECACC="0^0^0^0" D
  1. . N SDECNOD,SDECRUID
  1. . S SDECRUID=0
  1. . ;Get entry for this user and resource
  1. . F S SDECRUID=$O(^SDEC(409.833,"AC",SDECDUZ,SDECRUID)) Q:'+SDECRUID I $D(^SDEC(409.833,SDECRUID,0)),$P(^(0),U)=SDECRES Q
  1. . Q:'+SDECRUID
  1. . S $P(SDECACC,U)=1
  1. . S SDECNOD=$G(^SDEC(409.833,SDECRUID,0))
  1. . S $P(SDECACC,U,2)=+$P(SDECNOD,U,3)
  1. . S $P(SDECACC,U,3)=+$P(SDECNOD,U,4)
  1. . S $P(SDECACC,U,4)=+$P(SDECNOD,U,5)
  1. Q
  1. ;
  1. GETLTRS(SDECLTR,SDECNOS,SDECCAN,SDECRES,SDCL) ;get resource letters
  1. ;INPUT:
  1. ; SDECRES = resource ID pointer to SDEC RESOURCE file
  1. ; SDCL = clinic ID pointer to HOSPITAL LOCATION file
  1. ;RETURN:
  1. ; .SDECLTR = LETTER TEXT
  1. ; .SDECNOS = NO SHOW LETTER
  1. ; .SDECCAN = CLINIC CANCELLATION LETTER
  1. ; .Get letter text from wp field
  1. N SDECIEN
  1. S SDECLTR=""
  1. I $D(^SDEC(409.831,SDECRES,2,SDCL,1)) D
  1. . S SDECIEN=0 F S SDECIEN=$O(^SDEC(409.831,SDECRES,2,SDCL,1,SDECIEN)) Q:'+SDECIEN D
  1. . . S SDECLTR=SDECLTR_$G(^SDEC(409.831,SDECRES,2,SDCL,1,SDECIEN,0))
  1. . . S SDECLTR=SDECLTR_$C(13)_$C(10)
  1. S SDECNOS=""
  1. I $D(^SDEC(409.831,SDECRES,2,SDCL,12)) D
  1. . S SDECIEN=0 F S SDECIEN=$O(^SDEC(409.831,SDECRES,2,SDCL,12,SDECIEN)) Q:'+SDECIEN D
  1. . . S SDECNOS=SDECNOS_$G(^SDEC(409.831,SDECRES,2,SDCL,12,SDECIEN,0))
  1. . . S SDECNOS=SDECNOS_$C(13)_$C(10)
  1. S SDECCAN=""
  1. I $D(^SDEC(409.831,SDECRES,13)) D
  1. . S SDECIEN=0 F S SDECIEN=$O(^SDEC(409.831,SDECRES,2,SDCL,13,SDECIEN)) Q:'+SDECIEN D
  1. . . S SDECCAN=SDECCAN_$G(^SDEC(409.831,SDECRES,2,SDCL,13,SDECIEN,0))
  1. . . S SDECCAN=SDECCAN_$C(13)_$C(10)
  1. Q