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

BCSVUT.m

Go to the documentation of this file.
  1. BCSVUT ;IHS/MSC/BWF - CSV Utility ;20-Mar-2008 13:34;AA
  1. ;;1.0;BCSV;;APR 23, 2010
  1. ;=================================================================
  1. ; Utility Routine
  1. Q
  1. LCKFILES ;
  1. N DD
  1. F DD=80.3,80.2,81.11,80.1,80,81,81.3,9999999.88 D
  1. .S $P(^DD(DD,0,"DI"),"^",2)="Y"
  1. Q
  1. UNLCKFLS ;
  1. N DD
  1. F DD=80.3,80.2,81.11,80.1,80,81,81.3,9999999.88 D
  1. .S $P(^DD(DD,0,"DI"),"^",2)="N"
  1. Q
  1. UPDFWT ; Update IENS for Fiscal Weights and Trims on file 80.2
  1. N ICDIEN,FYIEN,NEWFYIEN,LASTITEM
  1. S ICDIEN=0
  1. F S ICDIEN=$O(^ICD(ICDIEN)) Q:'ICDIEN D
  1. .S FYIEN=0 F S FYIEN=$O(^ICD(ICDIEN,"FY",FYIEN)) Q:'FYIEN D
  1. ..S NEWFYIEN=$$CONVERT(FYIEN)
  1. ..I NEWFYIEN'?7N Q
  1. ..M ^ICD(ICDIEN,"FY",NEWFYIEN)=^ICD(ICDIEN,"FY",FYIEN)
  1. ..K ^ICD(ICDIEN,"FY",FYIEN)
  1. ..S LASTITEM=$O(^ICD(ICDIEN,"FY",9999999),-1)
  1. ..S $P(^ICD(ICDIEN,"FY",0),U,2)=LASTITEM
  1. Q
  1. CONVERT(IEN) ;
  1. ; Convert IEN from IHS format into VA format.
  1. I IEN<100&(IEN>7) S IEN=2_IEN_0000 Q IEN
  1. I (IEN=0)!((IEN>0)&(IEN<8)) S IEN=3_IEN_0000 Q IEN
  1. Q
  1. ; Input
  1. ; AGE - Value passed in to be converted into days (passed in value is in years)
  1. AGECON(AGE) ;
  1. I 'AGE Q ""
  1. Q (AGE*365)
  1. ; Input
  1. ; AGE - Value passed in to be converted into days (passed in value is in years)
  1. ; IEN - IEN of the entry being evaluated
  1. ; FLD - Field Number for file 80. This will be used to determine which IHS field the data should come from.
  1. AGECON80(AGE,IEN,FLD) ;
  1. N IHSFLD,IHSAGE
  1. S IHSFLD=$S(FLD=14:9999999.01,FLD=15:9999999.02,1:0)
  1. Q:'IHSFLD ""
  1. S IHSAGE=$$GET1^DIQ(80,IEN,IHSFLD,"I")
  1. I IHSAGE Q IHSAGE
  1. Q:'AGE ""
  1. S IHSAGE=$$AGECON(AGE)
  1. Q IHSAGE
  1. UPDBEFY ; Update Breakeven Fiscal Year/Quarter IEN'S in file 80.2
  1. N ICDIEN,BEFYIEN,NEWBEIEN,LASTITEM
  1. S ICDIEN=0
  1. F S ICDIEN=$O(^ICD(ICDIEN)) Q:'ICDIEN D
  1. .S BEFYIEN=0 F S BEFYIEN=$O(^ICD(ICDIEN,"BE",BEFYIEN)) Q:'BEFYIEN D
  1. ..S NEWBEIEN=$$NEWBEIEN(BEFYIEN)
  1. ..I NEWBEIEN'?5N Q
  1. ..M ^ICD(ICDIEN,"BE",NEWBEIEN)=^ICD(ICDIEN,"BE",BEFYIEN)
  1. ..K ^ICD(ICDIEN,"BE",BEFYIEN)
  1. ..S LASTITEM=$O(^ICD(ICDIEN,"BE",9999999),-1)
  1. ..S $P(^ICD(ICDIEN,"BE",0),U,2)=LASTITEM
  1. Q
  1. NEWBEIEN(BEIEN) ;
  1. N NEWBEIEN,NEWFYIEN,NEWIEN
  1. I BEIEN>799 S NEWIEN=19_BEIEN
  1. I BEIEN<800 S NEWIEN=10_BEIEN
  1. Q BEIEN
  1. ;
  1. ; Input FILE - File number for moving data into the versioning multiple
  1. ; DAT - Data indicating which fields need to be pulled, and where they will be placed.
  1. ; INACT - Inactivate this entry?
  1. ; 0 or "" - Inactivate
  1. ; 1 - Skip inactivation
  1. ;
  1. VERSION(IEN,FUNC,INACT) ; Place information into versioning mutiples for unmapped entries.
  1. ; Entries that are not mapped will be inactivated.
  1. I FUNC="" Q
  1. S INACT=+$G(INACT)
  1. S FUNC=FUNC_"("_IEN_","_INACT_")"
  1. D @FUNC
  1. Q
  1. ; INPUT IEN - IEN to entry in target file
  1. ; INACT - Inactive this entry?
  1. ; 0 or "" - Inactive
  1. ; 1 - skip inactivation
  1. VER801(IEN,INACT) ;
  1. N PROC,DESC,ACTDT,FDA,NEWIEN
  1. ; Get procedure name and activation date for versioned information.
  1. S PROC=$$GET1^DIQ(80.1,IEN,4,"E")
  1. S DESC=$$GET1^DIQ(80.1,IEN,10,"E")
  1. S ACTDT=$$GET1^DIQ(80.1,IEN,12,"I")
  1. I 'ACTDT S ACTDT=DT
  1. S FDA(80.167,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN") K FDA
  1. I $D(NEWIEN) D
  1. .S FDA(80.167,NEWIEN(1)_IEN_",",1)=PROC
  1. .D FILE^DIE(,"FDA")
  1. K FDA,NEWIEN
  1. S FDA(80.168,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN")
  1. I $D(NEWIEN) D
  1. .S FDA(80.168,NEWIEN(1)_","_IEN_",",1)=DESC
  1. .D UPDATE^DIE(,"FDA")
  1. K FDA,NEWIEN
  1. I $G(INACT)!($D(^XCSV("ICD0","MAP","Z",IEN))) D FILE^DIE(,"FDA") Q
  1. S FDA(80.1,IEN_",",100)=1
  1. I '$$GET1^DIQ(80.1,IEN,102,"I") S FDA(80.1,IEN_",",102)=DT
  1. D FILE^DIE(,"FDA")
  1. Q
  1. ; INPUT IEN - IEN to entry in target file
  1. ; INACT - Inactive this entry?
  1. ; 0 or "" - Inactive
  1. ; 1 - skip inactivation
  1. VER80(IEN,INACT) ;
  1. N DIAG,DESC,ACTDT,FDA,NEWIEN,EFFDT
  1. S DIAG=$$GET1^DIQ(80,IEN,3,"E")
  1. S DESC=$$GET1^DIQ(80,IEN,10,"E")
  1. S (ACTDT,EFFDT)=$$GET1^DIQ(80,IEN,16,"I")
  1. I 'ACTDT S ACTDT=DT,EFFDT=2700101
  1. S FDA(80.066,"+1,"_IEN_",",.01)=EFFDT
  1. D UPDATE^DIE(,"FDA","NEWIEN") K FDA
  1. I $D(NEWIEN) D
  1. .S FDA(80.066,NEWIEN(1)_","_IEN_",",.02)=$S(INACT=1:1,1:0)
  1. S FDA(80.067,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN") K FDA
  1. I $D(NEWIEN) D
  1. .S FDA(80.067,NEWIEN(1)_","_IEN_",",1)=DIAG
  1. .D FILE^DIE(,"FDA")
  1. K FDA,NEWIEN
  1. S FDA(80.068,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN") K FDA
  1. I $D(NEWIEN) D
  1. .S FDA(80.068,NEWIEN(1)_","_IEN_",",1)=DESC
  1. .D UPDATE^DIE(,"FDA")
  1. K FDA,NEWIEN
  1. I $G(INACT)!($D(^XCSV("ICD9","MAP","Z",IEN))) D FILE^DIE(,"FDA") Q
  1. S FDA(80,IEN_",",100)=1
  1. I '$$GET1^DIQ(80,IEN,102,"I") S FDA(80,IEN_",",102)=DT
  1. D FILE^DIE(,"FDA")
  1. Q
  1. ; INPUT IEN (required) - IEN to entry in target file
  1. ; INACT (optional) - Inactive this entry?
  1. ; 0 or "" - Inactive
  1. ; 1 - skip inactivation
  1. VER802(IEN,INACT) ;
  1. N DESC,FDA,ACTDT,NEWIEN,DNODE,LOOP
  1. S DNODE=0 F S DNODE=$O(^ICD(IEN,1,DNODE)) Q:'DNODE D
  1. .S DESCARY(DNODE)=$G(^ICD(IEN,1,DNODE,0))
  1. S ACTDT=$$GET1^DIQ(80.2,IEN,14,"I")
  1. I 'ACTDT S ACTDT=DT
  1. S FDA(80.268,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN")
  1. I $D(NEWIEN) D
  1. .S LOOP=0
  1. .F S LOOP=$O(DESCARY(LOOP)) Q:'LOOP D
  1. ..S FDA(80.2681,"+"_LOOP_","_NEWIEN(1)_","_IEN_",",.01)=$G(DESCARY(LOOP))
  1. .D UPDATE^DIE(,"FDA")
  1. K FDA,NEWIEN
  1. I $G(INACT)!($D(^XCSV("ICD","MAP","Z",IEN))) D FILE^DIE(,"FDA") Q
  1. S FDA(80.2,IEN_",",15)=1
  1. I '$$GET1^DIQ(80.2,IEN,16,"I") S FDA(80.2,IEN_",",16)=DT
  1. D FILE^DIE(,"FDA")
  1. Q
  1. VER803(IEN,INACT) ;
  1. ; Nothing to do here.
  1. Q
  1. ; INPUT IEN (required) - IEN to entry in target file
  1. ; INACT (optional) - Inactive this entry?
  1. ; 0 or "" - Inactive
  1. ; 1 - skip inactivation
  1. VER81(IEN,INACT) ;
  1. N SHNAME,DESCARY,ACTDT,FDA,NEWIEN,LOOP,DNODE,NEWIEN
  1. S SHNAME=$$GET1^DIQ(81,IEN,2,"E")
  1. S DNODE=0 F S DNODE=$O(^ICPT(IEN,"D",DNODE)) Q:'DNODE D
  1. .S DESCARY(DNODE)=$G(^ICPT(IEN,"D",DNODE,0))
  1. S ACTDT=$$GET1^DIQ(81,IEN,8,"I")
  1. I 'ACTDT S ACTDT=DT
  1. S FDA(81.061,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN")
  1. I $D(NEWIEN) D
  1. .S FDA(81.061,NEWIEN(1)_IEN_",",1)=SHNAME
  1. .D FILE^DIE(,"FDA")
  1. K FDA,NEWIEN
  1. S FDA(81.062,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN") K FDA
  1. I $D(NEWIEN) D
  1. .S LOOP=0
  1. .F S LOOP=$O(DESCARY(LOOP)) Q:'LOOP D
  1. ..S FDA(81.621,"+"_LOOP_","_NEWIEN(1)_","_IEN_",",.01)=$G(DESCARY(LOOP))
  1. D UPDATE^DIE(,"FDA") K FDA
  1. I $G(INACT)!($D(^XCSV("ICPT","MAP","Z",IEN))) D FILE^DIE(,"FDA") Q
  1. S FDA(81,IEN_",",5)=1
  1. I '$$GET1^DIQ(81,IEN,7,"I") S FDA(81,IEN_",",7)=DT
  1. D FILE^DIE(,"FDA")
  1. Q
  1. VER811(IEN,INACT) ;
  1. ; Nothing to do.
  1. Q
  1. ; INPUT IEN (required) - IEN to entry in target file
  1. ; INACT (optional) - Inactive this entry?
  1. ; 0 or "" - Inactive
  1. ; 1 - skip inactivation
  1. VER813(IEN,INACT) ;
  1. N NAME,DESC,ACTDT,FDA,NEWIEN
  1. S NAME=$$GET1^DIQ(81.3,IEN,.02,"E")
  1. S DNODE=0 F S DNODE=$O(^DIC(81.3,IEN,"D",DNODE)) Q:'DNODE D
  1. .S ^TMP($J,DNODE,0)=$G(^DIC(81.3,IEN,"D",DNODE,0))
  1. S ACTDT=$$GET1^DIQ(81.3,IEN,8,"I")
  1. I 'ACTDT S ACTDT=DT
  1. S FDA(81.361,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN")
  1. I $D(NEWIEN) D
  1. .S FDA(81.361,NEWIEN(1)_IEN_",",1)=NAME
  1. .D FILE^DIE(,"FDA",)
  1. K FDA,NEWIEN
  1. S FDA(81.362,"+1,"_IEN_",",.01)=ACTDT
  1. D UPDATE^DIE(,"FDA","NEWIEN") K FDA
  1. ; set up wp field using WP^DIE
  1. I '$D(NEWIEN) Q
  1. D WP^DIE(81.362,NEWIEN(1)_","_IEN_",",1,"","^TMP($J)")
  1. Q
  1. ;
  1. UPDCODES ;
  1. N FIL,QUIT,LINE,DAT,FILDAT,VADAT,VAXLOC,FDA,VAXFIL,NEWIEN,J,VAIEN,DA,DIK,FLD
  1. N GLOBPATH,AGELOW,AGEHI
  1. S QUIT=0
  1. F J=1:1 D Q:QUIT
  1. .S LINE=$T(FILES+J^BCSVMP)
  1. .S DAT=$P(LINE,";;",2)
  1. .I DAT="" S QUIT=1 Q
  1. .S FILDAT=$P(DAT,"||"),VADAT=$P(FILDAT,"/",2)
  1. .S VAXLOC=$P(VADAT,";"),VAXFIL=$P(VADAT,";",2)
  1. .I VAXLOC["|" S GLOBPATH="^"_$TR(VAXLOC,"|","(")_")"
  1. .E S GLOBPATH="^"_VAXLOC
  1. .S VAIEN=0
  1. .F S VAIEN=$O(^XCSV(VAXLOC,"DATA",VAIEN)) Q:'VAIEN D
  1. ..; If the VAIEN has an entry that has been mapped to it (i.e, the "B" x-ref exists), quit.
  1. ..K NEWIEN
  1. ..S FLD=$P($G(^XCSV(VAXLOC,"DATA",VAIEN,0)),"^")
  1. ..I $D(^XCSV(VAXLOC,"MAP","B",VAIEN)) Q
  1. ..; Add the new entry
  1. ..S FDA(VAXFIL,"+1,",.01)=FLD
  1. ..I VAXFIL=80 S FDA(VAXFIL,"+1,",3)="HOLD TEXT"
  1. ..I VAXFIL=81.3 S FDA(VAXFIL,"+1,",.02)="HOLD TEXT"
  1. ..I VAXFIL=80.2 S NEWIEN(1)=$P(FLD,"DRG",2)
  1. ..I VAXFIL=81 D
  1. ...S NEWIEN(1)=$S(FLD?5N:+FLD,FLD?1U4N:$A($E(FLD))_$E(FLD,2,5),1:1000000)
  1. ...I $G(NEWIEN(1))=1000000 N I S I=999999 F S I=$O(^ICPT(I)) Q:I<999999 S NEWIEN(1)=I+1
  1. ..D UPDATE^DIE(,"FDA","NEWIEN") K FDA
  1. ..; Use the new IEN value to merge data
  1. ..Q:'$G(NEWIEN(1))
  1. ..M @GLOBPATH@(NEWIEN(1))=^XCSV(VAXLOC,"DATA",VAIEN)
  1. ..S ^XCSV(VAXLOC,"MAP","B",VAIEN)=NEWIEN(1),^XCSV(VAXLOC,"NEW",NEWIEN(1))=""
  1. ..; Set the "Z" x-ref to hold a list of entries that are new.
  1. ..; Used to resolve pointers in the next step.
  1. ..S ^XCSV(VAXLOC,"MAP","Z",NEWIEN(1))=""
  1. ..; Reset the ptr value for fld 3 in 81.1
  1. ..S (AGELOW,AGEHI)=0
  1. ..I VAXFIL=80 D
  1. ...S AGELOW=$P($G(^ICD9(NEWIEN(1),0)),U,14) I AGELOW S $P(^ICD9(NEWIEN(1),0),U,14)=$$AGECON(AGELOW)
  1. ...S AGEHI=$P($G(^ICD9(NEWIEN(1),0)),U,15) I AGEHI S $P(^ICD9(NEWIEN(1),0),U,15)=$$AGECON(AGEHI)
  1. ..I VAXFIL=81 D
  1. ...S AGELOW=$P($G(^ICPT(NEWIEN(1),10)),U) I AGELOW S $P(^ICPT(NEWIEN(1),10),U)=$$AGECON(AGELOW)
  1. ...S AGEHI=$P($G(^ICPT(NEWIEN(1),10)),U,2) I AGEHI S $P(^ICPT(NEWIEN(1),10),U,2)=$$AGECON(AGEHI)
  1. ..I VAXFIL=81.1 D
  1. ...S CURPTR=$$GET1^DIQ(81.1,NEWIEN(1),.01,"I")
  1. ...S FDA(VAXFIL,NEWIEN(1),3)=$G(^XCSV(VAXLOC,"MAP",CURPTR)) D FILE^DIE(,"FDA") K FDA
  1. ..I GLOBPATH[")" S DIK=$P(GLOBPATH,")")_","
  1. ..E S DIK=GLOBPATH_"("
  1. ..S DA=NEWIEN(1) D IX1^DIK
  1. ..K NEWIEN,DA,DIK
  1. Q
  1. RPALL ;
  1. D RP802,RP801,RP80
  1. Q
  1. RP802 ;
  1. N IEN,SUBIEN,OVAL,NVAL
  1. S IEN=0 F S IEN=$O(^ICD(IEN)) Q:'IEN D
  1. .S SUBIEN=0 F S SUBIEN=$O(^ICD(IEN,66,SUBIEN)) Q:'SUBIEN D
  1. ..S OVAL=$$GET1^DIQ(80.266,SUBIEN_","_IEN,.05,"I")
  1. ..Q:'OVAL
  1. ..S NVAL=$G(^XCSV("ICD","MAP","B",OVAL))
  1. ..S FDA(80.266,SUBIEN_","_IEN_",",.05)=NVAL D FILE^DIE(,"FDA") K FDA
  1. Q
  1. RP801 ;
  1. N IEN,DATA,LOOP,MDCPTR,NEWPTR,NEWDAT,VAL,NVAL,SIEN1,SIEN2,SIEN3,SIEN2PTR,SIEN3PTR,NIEN2PTR,NIEN3PTR,CNT
  1. S IEN=0 F S IEN=$O(^ICD0(IEN)) Q:'IEN D
  1. .; Correct pointers in field 7 multiple
  1. .K DATA,DATA71,NEWDAT
  1. .M DATA71=^ICD0(IEN,2)
  1. .M DATA=^ICD0(IEN,"MDC")
  1. .S LOOP=0 F S LOOP=$O(DATA(LOOP)) Q:'LOOP D
  1. ..S MDCPTR=$G(DATA(LOOP,0)),NEWPTR=$G(^XCSV("ICM","MAP","B",LOOP))
  1. ..S NEWDAT(0)=DATA(0)
  1. ..Q:'NEWPTR
  1. ..S NEWDAT(NEWPTR,0)=NEWPTR
  1. ..F I=1:1:6 D
  1. ...I '$D(DATA(LOOP,"DRG")) Q
  1. ...S VAL=$P(DATA(LOOP,"DRG"),U,I) Q:VAL=""
  1. ...S NVAL=$G(^XCSV("ICD","MAP","B",VAL))
  1. ...Q:NVAL=""
  1. ...S $P(NEWDAT(NEWPTR,"DRG"),U,I)=NVAL
  1. .S Z2=$O(^ICD0(IEN,"MDC",""),-1)
  1. .S CNT=0
  1. .S CNTLP=0 F S CNTLP=$O(^ICD0(IEN,"MDC",CNTLP)) Q:'CNTLP D
  1. ..S CNT=CNT+1
  1. .S:$D(^ICD0(IEN,"MDC")) $P(NEWDAT(0),U,4)=CNT
  1. .; Now handle field 66
  1. .S SIEN=0 F S SIEN=$O(^ICD0(IEN,66,SIEN)) Q:'SIEN D
  1. ..F I=1:1:5 D
  1. ...Q:'$D(^ICD0(IEN,66,SIEN,"DRG"))
  1. ...S VAL=$P(^ICD0(IEN,66,SIEN,"DRG"),U,I) Q:VAL=""
  1. ...S NVAL=$G(^XCSV("ICD","MAP","B",VAL))
  1. ...S $P(^ICD0(IEN,66,SIEN,"DRG"),U,I)=NVAL
  1. ..; Now handle field 71 and all subfiles
  1. .S SIEN1=0 F S SIEN1=$O(DATA71(SIEN1)) Q:'SIEN1 D
  1. ..S SIEN2=0 F S SIEN2=$O(DATA71(SIEN1,1,SIEN2)) Q:'SIEN2 D
  1. ...S SIEN2PTR=$G(DATA71(SIEN1,1,SIEN2,0))
  1. ...S NIEN2PTR=$G(^XCSV("ICM","MAP","B",SIEN2PTR))
  1. ...; If the pointer values are the same, do not change anything.
  1. ...;Q:NIEN2PTR=SIEN2PTR
  1. ...K DATA71(SIEN1,1,"B",SIEN2PTR,SIEN2)
  1. ...I 'NIEN2PTR K DATA71(SIEN1,1,SIEN2) Q
  1. ...S DATA71(SIEN1,1,SIEN2,0)=NIEN2PTR
  1. ...S DATA71(SIEN1,1,"B",NIEN2PTR,SIEN2)=""
  1. ...S SIEN3=0 F S SIEN3=$O(DATA71(SIEN1,1,SIEN2,1,SIEN3)) Q:'SIEN3 D
  1. ....S SIEN3PTR=$G(DATA71(SIEN1,1,SIEN2,1,SIEN3,0))
  1. ....S NIEN3PTR=$G(^XCSV("ICD","MAP","B",SIEN3PTR))
  1. ....I 'NIEN3PTR K DATA71(SIEN1,1,SIEN2,1,SIEN3) Q
  1. ....I SIEN3PTR=NIEN3PTR Q
  1. ....S DATA71(SIEN1,1,SIEN2,1,SIEN3,0)=NIEN3PTR
  1. ....K DATA71(SIEN1,1,SIEN2,1,"B",SIEN3PTR,SIEN3)
  1. ....S DATA71(SIEN1,1,SIEN2,1,"B",NIEN3PTR,SIEN3)=""
  1. .S:$D(^ICD0(IEN,"MDC")) ($P(NEWDAT(0),U,2),$P(NEWDAT(0),U,3))=$O(NEWDAT(""),-1)
  1. .; Merge updated array back into multiple.
  1. .K ^ICD0(IEN,"MDC") M ^ICD0(IEN,"MDC")=NEWDAT
  1. .K ^ICD0(IEN,2) M ^ICD0(IEN,2)=DATA71
  1. Q
  1. RP80 ;
  1. N IEN,ZNODE,CNT,NPTR,P3,I,J,SIEN,NIEN,DATA,ODAT,NPTR,OPTR,SIEN2,VAL,NVAL,SSCNT
  1. S IEN=0 F S IEN=$O(^ICD9(IEN)) Q:'IEN D
  1. .F J="N","R" D
  1. ..I '$D(^ICD9(IEN,J)) Q
  1. ..I '$O(^ICD9(IEN,J,0)) Q
  1. ..S ZNODE=$G(^ICD9(IEN,J,0))
  1. ..S ^TMP("BCSVUT",$J,0)=ZNODE
  1. ..S (SIEN,CNT)=0 F S SIEN=$O(^ICD9(IEN,J,SIEN)) Q:'SIEN D
  1. ...S NPTR=$G(^XCSV("ICD9","MAP","B",SIEN)) Q:'NPTR
  1. ...S CNT=CNT+1
  1. ...S ^TMP("BCSVUT",$J,NPTR,0)=NPTR,^TMP("BCSVUT",$J,"B",NPTR,NPTR)=""
  1. ..S P3=$O(^TMP("BCSVUT",$J,"B"),-1)
  1. ..S:$D(^ICD9(IEN,J)) $P(^TMP("BCSVUT",$J,0),U,3)=P3,$P(^TMP("BCSVUT",$J,0),U,4)=CNT
  1. ..K ^ICD9(IEN,J)
  1. ..M ^ICD9(IEN,J)=^TMP("BCSVUT",$J)
  1. ..K ^TMP("BCSVUT",$J)
  1. .S SIEN=0 F S SIEN=$O(^ICD9(IEN,2,SIEN)) Q:'SIEN D
  1. ..S OPTR=$G(^ICD9(IEN,2,SIEN,0))
  1. ..S NPTR=$G(^XCSV("ICD9","MAP","B",OPTR))
  1. ..I NPTR=OPTR Q
  1. ..I NPTR="" K ^ICD9(IEN,2,SIEN),^ICD9("ACC",IEN,OPTR) Q
  1. ..S ^ICD9(IEN,2,SIEN,0)=NPTR
  1. ..K ^ICD9("ACC",IEN,OPTR) S ^ICD9("ACC",IEN,NPTR)=""
  1. .S SSCNT=0
  1. .S SIEN=0 F S SIEN=$O(^ICD9(IEN,2,SIEN)) Q:'SIEN D
  1. ..S SSCNT=SSCNT+1
  1. .S:$D(^ICD9(IEN,2)) $P(^ICD9(IEN,2,0),U,3)=-$O(^ICD9(IEN,2,"")),$P(^ICD9(IEN,2,0),U,4)=$G(SSCNT)
  1. .S SIEN=0 F S SIEN=$O(^ICD9("ACC",IEN,SIEN)) Q:'SIEN D ; codes not CC with
  1. ..S NIEN="",NIEN=$G(^XCSV("ICD9","MAP","B",SIEN)) I 'NIEN K ^ICD9("ACC",IEN,SIEN)
  1. ..I SIEN=NIEN Q
  1. ..K ^ICD9("ACC",IEN,SIEN)
  1. ..I NIEN S ^ICD9("ACC",IEN,NIEN)=""
  1. .S SIEN=0 F S SIEN=$O(^ICD9(IEN,66,SIEN)) Q:'SIEN D ; Now handle field 66 - Effective Date multiple
  1. ..F I=1:1:5 D
  1. ...S VAL=$P($G(^ICD9(IEN,66,SIEN,"DRG")),U,I) Q:VAL=""
  1. ...S NVAL=$G(^XCSV("ICD","MAP","B",VAL))
  1. ...S $P(^ICD9(IEN,66,SIEN,"DRG"),U,I)=NVAL
  1. .S SIEN=0 F S SIEN=$O(^ICD9(IEN,3,SIEN)) Q:'SIEN D ; Next we do the DRG GROUPER multiple #71
  1. ..S ZNODE=$G(^ICD9(IEN,3,SIEN,0))
  1. ..S SIEN2=0 F S SIEN2=$O(^ICD9(IEN,3,SIEN,1,SIEN2)) Q:'SIEN2 D
  1. ...S OPTR=$G(^ICD9(IEN,3,SIEN,1,SIEN2,0)) Q:'OPTR
  1. ...S NPTR=$G(^XCSV("ICD","MAP","B",OPTR))
  1. ...I OPTR=NPTR Q
  1. ...I 'NPTR K ^ICD9(IEN,3,SIEN,1,"B",OPTR,SIEN2) Q
  1. ...S ^ICD9(IEN,3,SIEN,1,SIEN2,0)=NPTR
  1. ...K ^ICD9(IEN,3,SIEN,1,"B",OPTR,SIEN2)
  1. ...S ^ICD9(IEN,3,SIEN,1,"B",NPTR,SIEN2)=""
  1. .S SIEN=0 F S SIEN=$O(^ICD9(IEN,4,SIEN)) Q:'SIEN ; Now do the DRG GROUPER multiple #72
  1. ..S ODAT=$G(^ICD9(IEN,4,SIEN,0))
  1. ..S OPTR=$P(ODAT,U,2)
  1. ..S NPTR=$G(^XCSV("ICM","MAP","B",OPTR))
  1. ..S $P(^ICD9(IEN,4,SIEN,0),U,2)=NPTR
  1. Q