DGROHLR1 ;GTS/PHH,TDM - ROM HL7 RECEIVE DRIVERS ; 10/20/10 2:47pm
;;5.3;PIMS;**572,622,647,1015,1016**;JUN 30, 2012;Build 20
;
CONVFDA(DFN,DGDATA) ; LOOP THROUGH DATA TO FILE
N DFNC,F,IEN,FIELD,DGROAR,FNUM,QVAR,INX,DGRONUPD
;
;*DGROAR: Indirect reference to DGROAYi where "i" is the ORDER INDEX
;* field value in 391.23. ORDER INDEX defines order for a group of
;* fields loaded into the LST.
;* DGROAYi defined for each group maintaining proper order.
;* DG*5.3*572
;* DGRONUPD flag used to suppress updating the 'CHANGE DT/TM' &
;* 'CHANGE SITE' fields for CONF & TEMP address data.
;
S DFNC=DFN_","
S INX=""
S DGRONUPD=1
F S INX=$O(^DGRO(391.23,"D",INX)) Q:INX="" D
. S DGROAR="DGROAY"_INX
. S QVAR=0
. S F=""
. F S F=$O(@DGDATA@(F)) Q:F="" D
. . S IEN=""
. . F S IEN=$O(@DGDATA@(F,IEN)) Q:IEN="" D
. . . S FIELD=""
. . . F S FIELD=$O(@DGDATA@(F,IEN,FIELD)) Q:FIELD="" D
. . . . Q:$$DIS(F,FIELD)
. . . . S ORDINX=$O(^DGRO(391.23,"E",F,FIELD,""))
. . . . D:(ORDINX=INX) SETARY
. . . . ;* Following line files Internal PEC, Rmv once Ext PEC is filed
. . . . I (ORDINX=INX)&(F=2) DO
. . . . .D:(FIELD=.1417) FILECSTD
. . . . .D:(FIELD=.361) FILEPEC
. . . . .D:((FIELD=.117)!(FIELD=.12111)!(FIELD=.14111)) FILECNTY
. . I (+$O(@DGROAR@(""))>0) S QVAR=1 D FILE
Q
;
FILECSTD ;File CONFIDENTIAL START DATE bypassing FM restrictions
;Called from CONVFDA^DGROHLR1
I $D(@DGROAR@(F,DFNC,FIELD)) D
. S X=@DGROAR@(F,DFNC,FIELD)
. S %DT="X" D ^%DT I Y D
. . S DGROCST(F,DFNC,FIELD)=Y
. . D FILE^DIE("U","DGROCST","ERR")
. K @DGROAR@(F,DFNC,FIELD)
. K DGROCST,X,%DT,Y
Q
;
FILECNTY ;*Retrieve county IEN and file county
;*Retrieve State IEN corresponding to Temp, Conf, or Perm State
I (FIELD=.117),($D(^DPT(DFN,.11))) S STATEIEN=$P(^DPT(DFN,.11),"^",5)
I (FIELD=.12111),($D(^DPT(DFN,.121))) S STATEIEN=$P(^DPT(DFN,.121),"^",5)
I (FIELD=.14111),($D(^DPT(DFN,.141))) S STATEIEN=$P(^DPT(DFN,.141),"^",5)
;
;*Retrieve County IEN for exact county returned from LST
; DG*647
I $G(STATEIEN)="" G NOCNTY
I '$D(@DGROAR@(F,DFNC,FIELD)) G NOCNTY
S DIC="^DIC(5,"_STATEIEN_",1,"
S DIC(0)="XS"
S X=@DGROAR@(F,DFNC,FIELD)
D ^DIC
S DGROCTY(F,DFNC,FIELD)=+Y
D FILE^DIE("","DGROCTY","ERR") ;File County IEN
NOCNTY K @DGROAR@(F,DFNC,FIELD)
K STATEIEN,DGROCTY
Q
;
FILEPEC ;File Internal value of Prim Elig Code
;Called from CONVFDA^DGROHLR1
;Remove this call when fields required by PEC are received
; from LST
I $D(@DGROAR@(F,DFNC,FIELD)) DO
. S DIC="^DIC(8,"
. S DIC(0)="MNSX"
. S X=@DGROAR@(F,DFNC,FIELD)
. D ^DIC
. S DGROPEC(F,DFNC,FIELD)=+Y
. D FILE^DIE("","DGROPEC","ERR")
. K @DGROAR@(F,DFNC,FIELD)
. K DGROPEC,DIC,X
Q
;
FILE ;*Execute FILE or UPDATE per FNUM (1st subscpt) for file # according
;* to file/multiple record add or adding existing Patient data add
S FNUM=$O(@DGROAR@(""))
K %DT ;* Clean up leaks from Input transforms that set %DT(0)
;
;* Patient file processing
I +FNUM=2 DO
. D FILE^DIE("E","@DGROAR","ERR") ;*Add to existing Patient entry
;
;* Patient file multiples processing
I (+FNUM=2.01)!(+FNUM=2.141)!(+FNUM=2.11) DO
. D UPDATE^DIE("E","@DGROAR","","ERR")
I +FNUM=2.3216 D
. D CONVERT ;Convert MSE fields to internal format
. D UPDATE^DIE("","@DGROAR","","ERR")
I (+FNUM=2.02)!(+FNUM=2.06) DO
. N DGRODNUM,DGIEN,DNUMDATA,DGIEN2,DGROIEN
. S DGRODNUM=0
. F S DGRODNUM=$O(@DGROAR@(+FNUM,DGRODNUM)) Q:DGRODNUM="" D
. . S DGIEN=$P(DGRODNUM,",")
. . I DGIEN S DGIEN2=$P(DGIEN,"+",2)
. . S DNUMDATA=$G(@DGROAR@(+FNUM,DGRODNUM,.01))
. . I DGIEN2 S DGROIEN(DGIEN2)=DNUMDATA D
. . . D UPDATE^DIE("","@DGROAR","DGROIEN","ERR") ;*Converted Ext to Int
;
;* Processing fields [indicated in 391.23] not part of Patient file.
;* Define IF section for each file not a Patient file field or
;* Multiple.
I (+$P(FNUM,".")'=2) DO
. I +FNUM=38.1 DO
. . N DGROARBI
. . S DGROARBI(1)=DFN ;*Set 38.1 IEN to DFN
. . D UPDATE^DIE("E","@DGROAR","DGROARBI","ERR")
;
K @DGROAR
Q
;
SETARY ;* Setup arrays of data to be filed
N U,D,DATA,NODE,NODE2,INENNUM
;
I '$D(^DGRO(391.23,"C",F,FIELD)) Q
;
S U="^"
;
;CHECK LOCAL PATIENT FILE FOR EXISTING DATA, DO NOT OVERWRITE
S D=$$GET1^DIQ(F,DFNC,FIELD)
I D'="" K @DGDATA@(F,IEN,FIELD) Q
;
S DATA=$G(@DGDATA@(F,IEN,FIELD,"E"))
Q:DATA=""
;
;* Design of this Subroutine:
;* Set array defining groups of date for Fileman filing in
;* a predefined order.
;* Indirection defined various array names for different ordered
;* data groups in CONVFDA.
;* File Ext. values returned from LST per ORDER INDEX.
;* DG*5.3*572
;
;* Get field entry IEN in ROM 391.23 file
S INENNUM=INX
;
I F=2 DO Q
. S @DGROAR@(F,DFNC,FIELD)=DATA ;*Indirection to Patient Array
. K @DGDATA@(F,IEN,FIELD)
;
;* Set array for all other files (not Patient or Security files)
;* This section is for new entries in files. Not for Multiples.
;* Code to process specific files needed in CONVFDA
I (+$P(F,".")'=2),(F'=38.1) DO Q
. S @DGROAR@(F,"+1,",FIELD)=DATA
. K @DGDATA@(F,IEN,FIELD)
;
;SET ALIAS, CONFIDENTIAL ADDRESS CAT. AND MILITARY SERVICE EPISODE
;SUBFILE ARRAYS
I (F=2.01)!(F=2.141)!(F=2.11)!(F=2.3216) D Q
. S NODE2="+"
. S NODE2=NODE2_$P(IEN,",")_","_DFNC
. S @DGROAR@(F,NODE2,FIELD)=DATA ;*Indirection to Patient Array
. K @DGDATA@(F,IEN,FIELD)
;
;SET RACE AND ETHNICITY ARRAYS
I (F=2.02)!(F=2.06) D Q
. N REFILE,REIEN,DATA30,QFL,DATACOMP,TEST,ERR,INACTIVE
. I (F=2.02),(FIELD=.01) S REFILE=10
. I (F=2.06),(FIELD=.01) S REFILE=10.2
. I FIELD=.02 S REFILE=10.3
. S DATA30=$E(DATA,1,30) D
. . S QFL=0,REIEN="",NODE=""
. . D FIND^DIC(REFILE,"","@;.01;200","",DATA30,,"B","","","TEST","ERR")
. . F S NODE=$O(TEST("DILIST",2,NODE)) Q:'NODE D Q:$G(QFL)=1
. . . S REIEN=$G(TEST("DILIST",2,NODE))
. . . S INACTIVE=$G(TEST("DILIST","ID",NODE,200))
. . . Q:INACTIVE="YES" ;* QUIT if Race or Eth Inact
. . . S DATACOMP=$G(TEST("DILIST","ID",NODE,.01))
. . . I DATACOMP=DATA S QFL=1
. Q:'QFL
. Q:$G(INACTIVE)="YES" ;* No entry for Inactive Race/Ethncty
. S DATA=REIEN ;*Race/Ethncty/MOC (10/10.2/10.3) IEN for data recvd
. ;
. S NODE2="+" ;*+ for all fields, All fields added in one UPDATE
. S NODE2=NODE2_$P(IEN,",")_","_DFNC ;*No + for DFNC, DPT record exists
. S @DGROAR@(F,NODE2,FIELD)=DATA ;*Indirection to Patient Array
. K @DGDATA@(F,IEN,FIELD)
;
;* Set all sensitive fields (38.1) in array
I F=38.1 D Q
. Q:('$D(@DGDATA@(F))) ;*Data already filed
. S FIELD=.01
. S @DGROAR@(F,"+1,",FIELD)=$$GET1^DIQ(2,DFN,.01)
. F S FIELD=$O(@DGDATA@(F,IEN,FIELD)) Q:'FIELD D
. . S @DGROAR@(F,"+1,",FIELD)=@DGDATA@(F,IEN,FIELD,"E")
. K @DGDATA@(F,IEN)
. S FIELD=999999 ;*Skip to end of 38.1 field list in @DGDATA
Q
;
DIS(F,FIELD) ;Check for disabled
N SUB S SUB=$O(^DGRO(391.23,"C",F,FIELD,0)) Q:'SUB 1
I $P($G(^DGRO(391.23,SUB,0)),"^",5)=1 Q 1
Q 0
;
CONVERT ;External to Internal Conversion (clears field if no match found)
N BOS,DATE,COMP,DISCH,F,INTERNAL,LOCK,SUB,X,Y
S F=2.3216,SUB=""
F S SUB=$O(@DGROAR@(F,SUB)) Q:SUB="" D
.;Convert Branch
.I $D(@DGROAR@(F,SUB,.03)) D
..S BOS=$G(@DGROAR@(F,SUB,.03)) Q:BOS=""
..S INTERNAL=$O(^DIC(23,"B",BOS,""))
..S @DGROAR@(F,SUB,.03)=INTERNAL
.;Convert Discharge
.I $D(@DGROAR@(F,SUB,.06)) D
..S DISCH=$G(@DGROAR@(F,SUB,.06)) Q:DISCH=""
..S INTERNAL=$O(^DIC(25,"B",DISCH,""))
..S @DGROAR@(F,SUB,.06)=INTERNAL
.;Convert Component
.I $D(@DGROAR@(F,SUB,.04)) D
..S COMP=$G(@DGROAR@(F,SUB,.04)) Q:COMP=""
..S INTERNAL=""
..S:COMP="REGULAR" INTERNAL="R"
..S:COMP="ACTIVATED NG" INTERNAL="G"
..S:COMP="ACTIVATED RESERVE" INTERNAL="V"
..S @DGROAR@(F,SUB,.04)=INTERNAL
.;Convert Lock flag
.I $D(@DGROAR@(F,SUB,.07)) D
..S LOCK=$G(@DGROAR@(F,SUB,.07)) Q:LOCK=""
..S INTERNAL=$S(LOCK="YES":1,LOCK="NO":0,1:"")
..S @DGROAR@(F,SUB,.07)=INTERNAL
.;Convert dates
.I $D(@DGROAR@(F,SUB,.01)) D
..S X=$G(@DGROAR@(F,SUB,.01)) Q:X=""
..D ^%DT
..S @DGROAR@(F,SUB,.01)=Y
.I $D(@DGROAR@(F,SUB,.02)) D
..S X=$G(@DGROAR@(F,SUB,.02)) Q:X=""
..D ^%DT
..S @DGROAR@(F,SUB,.02)=Y
Q
DGROHLR1 ;GTS/PHH,TDM - ROM HL7 RECEIVE DRIVERS ; 10/20/10 2:47pm
+1 ;;5.3;PIMS;**572,622,647,1015,1016**;JUN 30, 2012;Build 20
+2 ;
CONVFDA(DFN,DGDATA) ; LOOP THROUGH DATA TO FILE
+1 NEW DFNC,F,IEN,FIELD,DGROAR,FNUM,QVAR,INX,DGRONUPD
+2 ;
+3 ;*DGROAR: Indirect reference to DGROAYi where "i" is the ORDER INDEX
+4 ;* field value in 391.23. ORDER INDEX defines order for a group of
+5 ;* fields loaded into the LST.
+6 ;* DGROAYi defined for each group maintaining proper order.
+7 ;* DG*5.3*572
+8 ;* DGRONUPD flag used to suppress updating the 'CHANGE DT/TM' &
+9 ;* 'CHANGE SITE' fields for CONF & TEMP address data.
+10 ;
+11 SET DFNC=DFN_","
+12 SET INX=""
+13 SET DGRONUPD=1
+14 FOR
SET INX=$ORDER(^DGRO(391.23,"D",INX))
IF INX=""
QUIT
Begin DoDot:1
+15 SET DGROAR="DGROAY"_INX
+16 SET QVAR=0
+17 SET F=""
+18 FOR
SET F=$ORDER(@DGDATA@(F))
IF F=""
QUIT
Begin DoDot:2
+19 SET IEN=""
+20 FOR
SET IEN=$ORDER(@DGDATA@(F,IEN))
IF IEN=""
QUIT
Begin DoDot:3
+21 SET FIELD=""
+22 FOR
SET FIELD=$ORDER(@DGDATA@(F,IEN,FIELD))
IF FIELD=""
QUIT
Begin DoDot:4
+23 IF $$DIS(F,FIELD)
QUIT
+24 SET ORDINX=$ORDER(^DGRO(391.23,"E",F,FIELD,""))
+25 IF (ORDINX=INX)
DO SETARY
+26 ;* Following line files Internal PEC, Rmv once Ext PEC is filed
+27 IF (ORDINX=INX)&(F=2)
Begin DoDot:5
+28 IF (FIELD=.1417)
DO FILECSTD
+29 IF (FIELD=.361)
DO FILEPEC
+30 IF ((FIELD=.117)!(FIELD=.12111)!(FIELD=.14111))
DO FILECNTY
End DoDot:5
End DoDot:4
End DoDot:3
+31 IF (+$ORDER(@DGROAR@(""))>0)
SET QVAR=1
DO FILE
End DoDot:2
End DoDot:1
+32 QUIT
+33 ;
FILECSTD ;File CONFIDENTIAL START DATE bypassing FM restrictions
+1 ;Called from CONVFDA^DGROHLR1
+2 IF $DATA(@DGROAR@(F,DFNC,FIELD))
Begin DoDot:1
+3 SET X=@DGROAR@(F,DFNC,FIELD)
+4 SET %DT="X"
DO ^%DT
IF Y
Begin DoDot:2
+5 SET DGROCST(F,DFNC,FIELD)=Y
+6 DO FILE^DIE("U","DGROCST","ERR")
End DoDot:2
+7 KILL @DGROAR@(F,DFNC,FIELD)
+8 KILL DGROCST,X,%DT,Y
End DoDot:1
+9 QUIT
+10 ;
FILECNTY ;*Retrieve county IEN and file county
+1 ;*Retrieve State IEN corresponding to Temp, Conf, or Perm State
+2 IF (FIELD=.117)
IF ($DATA(^DPT(DFN,.11)))
SET STATEIEN=$PIECE(^DPT(DFN,.11),"^",5)
+3 IF (FIELD=.12111)
IF ($DATA(^DPT(DFN,.121)))
SET STATEIEN=$PIECE(^DPT(DFN,.121),"^",5)
+4 IF (FIELD=.14111)
IF ($DATA(^DPT(DFN,.141)))
SET STATEIEN=$PIECE(^DPT(DFN,.141),"^",5)
+5 ;
+6 ;*Retrieve County IEN for exact county returned from LST
+7 ; DG*647
+8 IF $GET(STATEIEN)=""
GOTO NOCNTY
+9 IF '$DATA(@DGROAR@(F,DFNC,FIELD))
GOTO NOCNTY
+10 SET DIC="^DIC(5,"_STATEIEN_",1,"
+11 SET DIC(0)="XS"
+12 SET X=@DGROAR@(F,DFNC,FIELD)
+13 DO ^DIC
+14 SET DGROCTY(F,DFNC,FIELD)=+Y
+15 ;File County IEN
DO FILE^DIE("","DGROCTY","ERR")
NOCNTY KILL @DGROAR@(F,DFNC,FIELD)
+1 KILL STATEIEN,DGROCTY
+2 QUIT
+3 ;
FILEPEC ;File Internal value of Prim Elig Code
+1 ;Called from CONVFDA^DGROHLR1
+2 ;Remove this call when fields required by PEC are received
+3 ; from LST
+4 IF $DATA(@DGROAR@(F,DFNC,FIELD))
Begin DoDot:1
+5 SET DIC="^DIC(8,"
+6 SET DIC(0)="MNSX"
+7 SET X=@DGROAR@(F,DFNC,FIELD)
+8 DO ^DIC
+9 SET DGROPEC(F,DFNC,FIELD)=+Y
+10 DO FILE^DIE("","DGROPEC","ERR")
+11 KILL @DGROAR@(F,DFNC,FIELD)
+12 KILL DGROPEC,DIC,X
End DoDot:1
+13 QUIT
+14 ;
FILE ;*Execute FILE or UPDATE per FNUM (1st subscpt) for file # according
+1 ;* to file/multiple record add or adding existing Patient data add
+2 SET FNUM=$ORDER(@DGROAR@(""))
+3 ;* Clean up leaks from Input transforms that set %DT(0)
KILL %DT
+4 ;
+5 ;* Patient file processing
+6 IF +FNUM=2
Begin DoDot:1
+7 ;*Add to existing Patient entry
DO FILE^DIE("E","@DGROAR","ERR")
End DoDot:1
+8 ;
+9 ;* Patient file multiples processing
+10 IF (+FNUM=2.01)!(+FNUM=2.141)!(+FNUM=2.11)
Begin DoDot:1
+11 DO UPDATE^DIE("E","@DGROAR","","ERR")
End DoDot:1
+12 IF +FNUM=2.3216
Begin DoDot:1
+13 ;Convert MSE fields to internal format
DO CONVERT
+14 DO UPDATE^DIE("","@DGROAR","","ERR")
End DoDot:1
+15 IF (+FNUM=2.02)!(+FNUM=2.06)
Begin DoDot:1
+16 NEW DGRODNUM,DGIEN,DNUMDATA,DGIEN2,DGROIEN
+17 SET DGRODNUM=0
+18 FOR
SET DGRODNUM=$ORDER(@DGROAR@(+FNUM,DGRODNUM))
IF DGRODNUM=""
QUIT
Begin DoDot:2
+19 SET DGIEN=$PIECE(DGRODNUM,",")
+20 IF DGIEN
SET DGIEN2=$PIECE(DGIEN,"+",2)
+21 SET DNUMDATA=$GET(@DGROAR@(+FNUM,DGRODNUM,.01))
+22 IF DGIEN2
SET DGROIEN(DGIEN2)=DNUMDATA
Begin DoDot:3
+23 ;*Converted Ext to Int
DO UPDATE^DIE("","@DGROAR","DGROIEN","ERR")
End DoDot:3
End DoDot:2
End DoDot:1
+24 ;
+25 ;* Processing fields [indicated in 391.23] not part of Patient file.
+26 ;* Define IF section for each file not a Patient file field or
+27 ;* Multiple.
+28 IF (+$PIECE(FNUM,".")'=2)
Begin DoDot:1
+29 IF +FNUM=38.1
Begin DoDot:2
+30 NEW DGROARBI
+31 ;*Set 38.1 IEN to DFN
SET DGROARBI(1)=DFN
+32 DO UPDATE^DIE("E","@DGROAR","DGROARBI","ERR")
End DoDot:2
End DoDot:1
+33 ;
+34 KILL @DGROAR
+35 QUIT
+36 ;
SETARY ;* Setup arrays of data to be filed
+1 NEW U,D,DATA,NODE,NODE2,INENNUM
+2 ;
+3 IF '$DATA(^DGRO(391.23,"C",F,FIELD))
QUIT
+4 ;
+5 SET U="^"
+6 ;
+7 ;CHECK LOCAL PATIENT FILE FOR EXISTING DATA, DO NOT OVERWRITE
+8 SET D=$$GET1^DIQ(F,DFNC,FIELD)
+9 IF D'=""
KILL @DGDATA@(F,IEN,FIELD)
QUIT
+10 ;
+11 SET DATA=$GET(@DGDATA@(F,IEN,FIELD,"E"))
+12 IF DATA=""
QUIT
+13 ;
+14 ;* Design of this Subroutine:
+15 ;* Set array defining groups of date for Fileman filing in
+16 ;* a predefined order.
+17 ;* Indirection defined various array names for different ordered
+18 ;* data groups in CONVFDA.
+19 ;* File Ext. values returned from LST per ORDER INDEX.
+20 ;* DG*5.3*572
+21 ;
+22 ;* Get field entry IEN in ROM 391.23 file
+23 SET INENNUM=INX
+24 ;
+25 IF F=2
Begin DoDot:1
+26 ;*Indirection to Patient Array
SET @DGROAR@(F,DFNC,FIELD)=DATA
+27 KILL @DGDATA@(F,IEN,FIELD)
End DoDot:1
QUIT
+28 ;
+29 ;* Set array for all other files (not Patient or Security files)
+30 ;* This section is for new entries in files. Not for Multiples.
+31 ;* Code to process specific files needed in CONVFDA
+32 IF (+$PIECE(F,".")'=2)
IF (F'=38.1)
Begin DoDot:1
+33 SET @DGROAR@(F,"+1,",FIELD)=DATA
+34 KILL @DGDATA@(F,IEN,FIELD)
End DoDot:1
QUIT
+35 ;
+36 ;SET ALIAS, CONFIDENTIAL ADDRESS CAT. AND MILITARY SERVICE EPISODE
+37 ;SUBFILE ARRAYS
+38 IF (F=2.01)!(F=2.141)!(F=2.11)!(F=2.3216)
Begin DoDot:1
+39 SET NODE2="+"
+40 SET NODE2=NODE2_$PIECE(IEN,",")_","_DFNC
+41 ;*Indirection to Patient Array
SET @DGROAR@(F,NODE2,FIELD)=DATA
+42 KILL @DGDATA@(F,IEN,FIELD)
End DoDot:1
QUIT
+43 ;
+44 ;SET RACE AND ETHNICITY ARRAYS
+45 IF (F=2.02)!(F=2.06)
Begin DoDot:1
+46 NEW REFILE,REIEN,DATA30,QFL,DATACOMP,TEST,ERR,INACTIVE
+47 IF (F=2.02)
IF (FIELD=.01)
SET REFILE=10
+48 IF (F=2.06)
IF (FIELD=.01)
SET REFILE=10.2
+49 IF FIELD=.02
SET REFILE=10.3
+50 SET DATA30=$EXTRACT(DATA,1,30)
Begin DoDot:2
+51 SET QFL=0
SET REIEN=""
SET NODE=""
+52 DO FIND^DIC(REFILE,"","@;.01;200","",DATA30,,"B","","","TEST","ERR")
+53 FOR
SET NODE=$ORDER(TEST("DILIST",2,NODE))
IF 'NODE
QUIT
Begin DoDot:3
+54 SET REIEN=$GET(TEST("DILIST",2,NODE))
+55 SET INACTIVE=$GET(TEST("DILIST","ID",NODE,200))
+56 ;* QUIT if Race or Eth Inact
IF INACTIVE="YES"
QUIT
+57 SET DATACOMP=$GET(TEST("DILIST","ID",NODE,.01))
+58 IF DATACOMP=DATA
SET QFL=1
End DoDot:3
IF $GET(QFL)=1
QUIT
End DoDot:2
+59 IF 'QFL
QUIT
+60 ;* No entry for Inactive Race/Ethncty
IF $GET(INACTIVE)="YES"
QUIT
+61 ;*Race/Ethncty/MOC (10/10.2/10.3) IEN for data recvd
SET DATA=REIEN
+62 ;
+63 ;*+ for all fields, All fields added in one UPDATE
SET NODE2="+"
+64 ;*No + for DFNC, DPT record exists
SET NODE2=NODE2_$PIECE(IEN,",")_","_DFNC
+65 ;*Indirection to Patient Array
SET @DGROAR@(F,NODE2,FIELD)=DATA
+66 KILL @DGDATA@(F,IEN,FIELD)
End DoDot:1
QUIT
+67 ;
+68 ;* Set all sensitive fields (38.1) in array
+69 IF F=38.1
Begin DoDot:1
+70 ;*Data already filed
IF ('$DATA(@DGDATA@(F)))
QUIT
+71 SET FIELD=.01
+72 SET @DGROAR@(F,"+1,",FIELD)=$$GET1^DIQ(2,DFN,.01)
+73 FOR
SET FIELD=$ORDER(@DGDATA@(F,IEN,FIELD))
IF 'FIELD
QUIT
Begin DoDot:2
+74 SET @DGROAR@(F,"+1,",FIELD)=@DGDATA@(F,IEN,FIELD,"E")
End DoDot:2
+75 KILL @DGDATA@(F,IEN)
+76 ;*Skip to end of 38.1 field list in @DGDATA
SET FIELD=999999
End DoDot:1
QUIT
+77 QUIT
+78 ;
DIS(F,FIELD) ;Check for disabled
+1 NEW SUB
SET SUB=$ORDER(^DGRO(391.23,"C",F,FIELD,0))
IF 'SUB
QUIT 1
+2 IF $PIECE($GET(^DGRO(391.23,SUB,0)),"^",5)=1
QUIT 1
+3 QUIT 0
+4 ;
CONVERT ;External to Internal Conversion (clears field if no match found)
+1 NEW BOS,DATE,COMP,DISCH,F,INTERNAL,LOCK,SUB,X,Y
+2 SET F=2.3216
SET SUB=""
+3 FOR
SET SUB=$ORDER(@DGROAR@(F,SUB))
IF SUB=""
QUIT
Begin DoDot:1
+4 ;Convert Branch
+5 IF $DATA(@DGROAR@(F,SUB,.03))
Begin DoDot:2
+6 SET BOS=$GET(@DGROAR@(F,SUB,.03))
IF BOS=""
QUIT
+7 SET INTERNAL=$ORDER(^DIC(23,"B",BOS,""))
+8 SET @DGROAR@(F,SUB,.03)=INTERNAL
End DoDot:2
+9 ;Convert Discharge
+10 IF $DATA(@DGROAR@(F,SUB,.06))
Begin DoDot:2
+11 SET DISCH=$GET(@DGROAR@(F,SUB,.06))
IF DISCH=""
QUIT
+12 SET INTERNAL=$ORDER(^DIC(25,"B",DISCH,""))
+13 SET @DGROAR@(F,SUB,.06)=INTERNAL
End DoDot:2
+14 ;Convert Component
+15 IF $DATA(@DGROAR@(F,SUB,.04))
Begin DoDot:2
+16 SET COMP=$GET(@DGROAR@(F,SUB,.04))
IF COMP=""
QUIT
+17 SET INTERNAL=""
+18 IF COMP="REGULAR"
SET INTERNAL="R"
+19 IF COMP="ACTIVATED NG"
SET INTERNAL="G"
+20 IF COMP="ACTIVATED RESERVE"
SET INTERNAL="V"
+21 SET @DGROAR@(F,SUB,.04)=INTERNAL
End DoDot:2
+22 ;Convert Lock flag
+23 IF $DATA(@DGROAR@(F,SUB,.07))
Begin DoDot:2
+24 SET LOCK=$GET(@DGROAR@(F,SUB,.07))
IF LOCK=""
QUIT
+25 SET INTERNAL=$SELECT(LOCK="YES":1,LOCK="NO":0,1:"")
+26 SET @DGROAR@(F,SUB,.07)=INTERNAL
End DoDot:2
+27 ;Convert dates
+28 IF $DATA(@DGROAR@(F,SUB,.01))
Begin DoDot:2
+29 SET X=$GET(@DGROAR@(F,SUB,.01))
IF X=""
QUIT
+30 DO ^%DT
+31 SET @DGROAR@(F,SUB,.01)=Y
End DoDot:2
+32 IF $DATA(@DGROAR@(F,SUB,.02))
Begin DoDot:2
+33 SET X=$GET(@DGROAR@(F,SUB,.02))
IF X=""
QUIT
+34 DO ^%DT
+35 SET @DGROAR@(F,SUB,.02)=Y
End DoDot:2
End DoDot:1
+36 QUIT