VAFHCDG ;ALB/CM OUTPATIENT DG1 SEGMENT GENERATOR ;3/30/95
;;5.3;Registration;**91,151,606**;Jun 06, 1996
;
;This routine generates the Outpatient DG1 segment
;for the Philly project
;
ODG1(DFN,EVENT,EVDT,VPTR,PSTR,PNUM) ;
;
;DFN - Patient File
;EVENT - event number from pivot file
;EVDT - event date/time FileMan
;VPTR - variable pointer
;PSTSR - string of fields
;(if null - required fields, if "A" - supported
;fields, or string of fields seperated by commas")
;PNUM - ID # (optional)
;
I '$D(DFN)!('$D(EVENT))!('$D(EVDT))!('$D(VPTR)) Q "-1^Missing parameters, unable to generate DG1 segment"
I $D(EVENT) I EVENT'="" S NODE=$$PIVX^VAFHPIVT(EVENT,DFN,EVDT)
I $D(EVENT) I EVENT="" K EVENT
I '$D(EVENT) S NODE=$$PIVNW^VAFHPIVT(DFN,EVDT,2,VPTR),EVENT=$P(NODE,":")
I EVENT<1 Q "-1^Bad event number, unable to generate DG1 segment"
S NODE=$P(NODE,":",2)
;
EN1 ;
N HLD,DG1,TD,CODMET,CODE,LOOP,ICD
S (CODE,ICD,DG1,ICD,TD,CODMET)=""
S QUOT=""""""
I '$D(PNUM) S PNUM=1
I '$D(PSTR) S PSTR=",2,6,"
;I PSTR="A" S PSTR=$$GETF^VAFHUTL("DG1")
I PSTR="A" S PSTR=",2,3,4,5,6,"
I PSTR="" S PSTR=",2,6,"
I +PSTR=-1 Q "-1^Unable to get fields, can't generate DG1 segment"
;S LOOP=0
;F S LOOP=LOOP+1,HLD=$P(PSTR,",",LOOP) Q:HLD="" D
;.I HLD=2 S CODMET="I9-ICD9"
;.I HLD=3 S CODE=$$COD(NODE) I CODE="" S CODE=QUOT
;.I HLD=4 D
;..I '$D(CODE) S CODE=$$COD(NODE)
;..I +CODE>0 S ICD=$$DES(CODE) I ICD="" S ICD=QUOT
;..I +CODE=0 S ICD=QUOT
;.I HLD=5 S TD=$$HLDATE^HLFNC(EVDT) I TD="" S TD=QUOT
;
I PSTR[",2," S CODMET="I9-ICD9"
I PSTR[",3," S CODE=$$COD(NODE) I CODE="" S CODE=QUOT
I PSTR[",4," DO
. I '$D(CODE) S CODE=$$COD(NODE)
. I +CODE>0 S ICD=$$DES(CODE) I ICD="" S ICD=QUOT
. I +CODE=0 S ICD=QUOT
I PSTR[",5," S TD=$$HLDATE^HLFNC(EVDT) I TD="" S TD=QUOT
;
S DG1=HLFS_CODE_HLFS_ICD_HLFS_TD
I DG1?1"^"."^" Q "-1^Unable to populate fields "_PSTR_" - can't generate DG1 segment"
S DG1="DG1"_HLFS_PNUM_HLFS_CODMET_DG1
K NODE,QUOT
Q DG1
;
COD(ZNODE) ;
N OPTR,CDX,PTR,FILE
;
S OPTR=$P(ZNODE,"^",5),PTR=+OPTR,FILE=$P(OPTR,";",2)
I PTR=""!(FILE'="SCE(") Q QUOT
;
;try get primary dx first
S CDX=$$GETPDX(PTR) I CDX DO Q CDX
. S CDX=+$P($G(^ICD9(CDX,0)),"^")
. I 'CDX S CDX=QUOT
;
Q QUOT
;
DES(CDX) ;
;Get description/name of diagnosis from diagnostic code
;
I CDX="" Q QUOT
I CDX'?.N1".".N S CDX=CDX_"."
I '$D(^ICD9("AB",CDX)) D
.I $D(^ICD9("AB",CDX_" ")) S CDX=CDX_" " Q
.I $D(^ICD9("AB",CDX_"0")) S CDX=CDX_"0" Q
.I $D(^ICD9("AB",CDX_"0 ")) S CDX=CDX_"0 " Q
.I $D(^ICD9("AB",CDX_"00")) S CDX=CDX_"00" Q
.I $D(^ICD9("AB",CDX_"00 ")) S CDX=CDX_"00 " Q
I '$D(^ICD9("AB",CDX)) Q QUOT
S CDX=$O(^ICD9("AB",CDX,""))
I CDX="" Q QUOT
I '$D(^ICD9(CDX,0)) Q QUOT
S CDX=$$ICDDX^ICDCODE(CDX,$G(EVDT))
S CDX=$S(+CDX<1:QUOT,1:$P(CDX,"^",4))
Q CDX
;
GETPDX(PTR) ;returns first primary diagnois or 0
N VAENC0,VADX
S VAENC0=$$SCE^DGSDU(PTR)
I PTR,+VAENC0,$$DATE^SCDXUTL(+VAENC0)
E Q 0
S CDX=0
D GETDX^SDOE(PTR,"VADX")
S VADX=0
F S VADX=$O(VADX(VADX)) Q:'VADX DO Q:CDX["^P"
. I $P(VADX(VADX),"^",12)="P" S CDX=+VADX(VADX)_"^P"
Q +CDX
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HVAFHCDG 3193 printed Oct 16, 2024@19:03:20 Page 2
VAFHCDG ;ALB/CM OUTPATIENT DG1 SEGMENT GENERATOR ;3/30/95
+1 ;;5.3;Registration;**91,151,606**;Jun 06, 1996
+2 ;
+3 ;This routine generates the Outpatient DG1 segment
+4 ;for the Philly project
+5 ;
ODG1(DFN,EVENT,EVDT,VPTR,PSTR,PNUM) ;
+1 ;
+2 ;DFN - Patient File
+3 ;EVENT - event number from pivot file
+4 ;EVDT - event date/time FileMan
+5 ;VPTR - variable pointer
+6 ;PSTSR - string of fields
+7 ;(if null - required fields, if "A" - supported
+8 ;fields, or string of fields seperated by commas")
+9 ;PNUM - ID # (optional)
+10 ;
+11 IF '$DATA(DFN)!('$DATA(EVENT))!('$DATA(EVDT))!('$DATA(VPTR))
QUIT "-1^Missing parameters, unable to generate DG1 segment"
+12 IF $DATA(EVENT)
IF EVENT'=""
SET NODE=$$PIVX^VAFHPIVT(EVENT,DFN,EVDT)
+13 IF $DATA(EVENT)
IF EVENT=""
KILL EVENT
+14 IF '$DATA(EVENT)
SET NODE=$$PIVNW^VAFHPIVT(DFN,EVDT,2,VPTR)
SET EVENT=$PIECE(NODE,":")
+15 IF EVENT<1
QUIT "-1^Bad event number, unable to generate DG1 segment"
+16 SET NODE=$PIECE(NODE,":",2)
+17 ;
EN1 ;
+1 NEW HLD,DG1,TD,CODMET,CODE,LOOP,ICD
+2 SET (CODE,ICD,DG1,ICD,TD,CODMET)=""
+3 SET QUOT=""""""
+4 IF '$DATA(PNUM)
SET PNUM=1
+5 IF '$DATA(PSTR)
SET PSTR=",2,6,"
+6 ;I PSTR="A" S PSTR=$$GETF^VAFHUTL("DG1")
+7 IF PSTR="A"
SET PSTR=",2,3,4,5,6,"
+8 IF PSTR=""
SET PSTR=",2,6,"
+9 IF +PSTR=-1
QUIT "-1^Unable to get fields, can't generate DG1 segment"
+10 ;S LOOP=0
+11 ;F S LOOP=LOOP+1,HLD=$P(PSTR,",",LOOP) Q:HLD="" D
+12 ;.I HLD=2 S CODMET="I9-ICD9"
+13 ;.I HLD=3 S CODE=$$COD(NODE) I CODE="" S CODE=QUOT
+14 ;.I HLD=4 D
+15 ;..I '$D(CODE) S CODE=$$COD(NODE)
+16 ;..I +CODE>0 S ICD=$$DES(CODE) I ICD="" S ICD=QUOT
+17 ;..I +CODE=0 S ICD=QUOT
+18 ;.I HLD=5 S TD=$$HLDATE^HLFNC(EVDT) I TD="" S TD=QUOT
+19 ;
+20 IF PSTR[",2,"
SET CODMET="I9-ICD9"
+21 IF PSTR[",3,"
SET CODE=$$COD(NODE)
IF CODE=""
SET CODE=QUOT
+22 IF PSTR[",4,"
Begin DoDot:1
+23 IF '$DATA(CODE)
SET CODE=$$COD(NODE)
+24 IF +CODE>0
SET ICD=$$DES(CODE)
IF ICD=""
SET ICD=QUOT
+25 IF +CODE=0
SET ICD=QUOT
End DoDot:1
+26 IF PSTR[",5,"
SET TD=$$HLDATE^HLFNC(EVDT)
IF TD=""
SET TD=QUOT
+27 ;
+28 SET DG1=HLFS_CODE_HLFS_ICD_HLFS_TD
+29 IF DG1?1"^"."^"
QUIT "-1^Unable to populate fields "_PSTR_" - can't generate DG1 segment"
+30 SET DG1="DG1"_HLFS_PNUM_HLFS_CODMET_DG1
+31 KILL NODE,QUOT
+32 QUIT DG1
+33 ;
COD(ZNODE) ;
+1 NEW OPTR,CDX,PTR,FILE
+2 ;
+3 SET OPTR=$PIECE(ZNODE,"^",5)
SET PTR=+OPTR
SET FILE=$PIECE(OPTR,";",2)
+4 IF PTR=""!(FILE'="SCE(")
QUIT QUOT
+5 ;
+6 ;try get primary dx first
+7 SET CDX=$$GETPDX(PTR)
IF CDX
Begin DoDot:1
+8 SET CDX=+$PIECE($GET(^ICD9(CDX,0)),"^")
+9 IF 'CDX
SET CDX=QUOT
End DoDot:1
QUIT CDX
+10 ;
+11 QUIT QUOT
+12 ;
DES(CDX) ;
+1 ;Get description/name of diagnosis from diagnostic code
+2 ;
+3 IF CDX=""
QUIT QUOT
+4 IF CDX'?.N1".".N
SET CDX=CDX_"."
+5 IF '$DATA(^ICD9("AB",CDX))
Begin DoDot:1
+6 IF $DATA(^ICD9("AB",CDX_" "))
SET CDX=CDX_" "
QUIT
+7 IF $DATA(^ICD9("AB",CDX_"0"))
SET CDX=CDX_"0"
QUIT
+8 IF $DATA(^ICD9("AB",CDX_"0 "))
SET CDX=CDX_"0 "
QUIT
+9 IF $DATA(^ICD9("AB",CDX_"00"))
SET CDX=CDX_"00"
QUIT
+10 IF $DATA(^ICD9("AB",CDX_"00 "))
SET CDX=CDX_"00 "
QUIT
End DoDot:1
+11 IF '$DATA(^ICD9("AB",CDX))
QUIT QUOT
+12 SET CDX=$ORDER(^ICD9("AB",CDX,""))
+13 IF CDX=""
QUIT QUOT
+14 IF '$DATA(^ICD9(CDX,0))
QUIT QUOT
+15 SET CDX=$$ICDDX^ICDCODE(CDX,$GET(EVDT))
+16 SET CDX=$SELECT(+CDX<1:QUOT,1:$PIECE(CDX,"^",4))
+17 QUIT CDX
+18 ;
GETPDX(PTR) ;returns first primary diagnois or 0
+1 NEW VAENC0,VADX
+2 SET VAENC0=$$SCE^DGSDU(PTR)
+3 IF PTR
IF +VAENC0
IF $$DATE^SCDXUTL(+VAENC0)
+4 IF '$TEST
QUIT 0
+5 SET CDX=0
+6 DO GETDX^SDOE(PTR,"VADX")
+7 SET VADX=0
+8 FOR
SET VADX=$ORDER(VADX(VADX))
if 'VADX
QUIT
Begin DoDot:1
+9 IF $PIECE(VADX(VADX),"^",12)="P"
SET CDX=+VADX(VADX)_"^P"
End DoDot:1
if CDX["^P"
QUIT
+10 QUIT +CDX