- DG53334A ;ALB/MRY - ALS EXTRACT; ; 11/16/00 1:15pm
- ;;5.3;Registration;**334,1015**;Aug 13, 1993;Build 21
- ;
- ;Description:
- ;Patient data will be extracted from the Patient file (#2) for all
- ;hospital sites. Station numbers and SSN's have been provided and
- ;stored in file^XTMP.
- ;
- ;
- EN ; -- Entry point for manually running extract.
- D EN^DG53334D
- Q
- ;
- ;
- START ; -- Called from POSTINST^DG53334C and EN^DG53334D
- I $D(DUZ)'=11 D Q
- . D BMES^XPDUTL(" Please set DUZ variables.")
- . S DGARY(1)=(" To set up the DUZ variables, type the command D ^XUP.")
- . S DGARY(2)=(" At prompt Select OPTION NAME: press the return key.")
- . S DGARY(3)=(" To restart the ALS Extract type D EN^DG53334A.")
- . D MES^XPDUTL(.DGARY)
- ;
- D BMES^XPDUTL()
- S DGARY(1)=(" >>> ALS Extract <<< ")
- S DGARY(2)=(" This extract will generate 2 mail messages to you.")
- S DGARY(3)=(" One of the messsages will contain the data extracted")
- S DGARY(4)=(" and the second message will contain any errors that")
- S DGARY(5)=(" may have occurred during the ALS extract.")
- D MES^XPDUTL(.DGARY)
- ;
- N DGARY
- S DGTATION=+$P($$SITE^VASITE(),U,3)
- S DGSTART=$$FMTE^XLFDT($$NOW^XLFDT)
- I '$D(^XTMP("DGALS","S",DGTATION))!$D(^XTMP("DGALS","S",DGTATION,"ERROR","NO DATA REQUESTED")) D Q
- . D BMES^XPDUTL(" ")
- . S DGARY(1)=(" Data was not requested from this site.")
- . S DGARY(2)=(" No mail messages will be generated.")
- . S DGARY(3)=(" No error has occurred.")
- . D MES^XPDUTL(.DGARY)
- . D BMES^XPDUTL(">>>...all done.")
- . D FMAIL^DG53334B(0)
- ;
- ;
- K ^XTMP("DGALS",$J,"DATA")
- K ^XTMP("DGALS",$J,"ERROR")
- K ^XTMP("DGALS","S",DGTATION,"DFN")
- ;
- I '$D(ZTQUEUED) D
- .D BMES^XPDUTL(">>> Looking up patients DFNs from SSNs <<<")
- D GETDFN(DGTATION)
- ;
- I '$D(ZTQUEUED) D
- .D BMES^XPDUTL(">>> Looking up patients data from DFNs <<<")
- D DIQLOOK(DGTATION)
- ;
- I '$D(ZTQUEUED) D
- .D BMES^XPDUTL(">>> Creating Mail message of patients data <<<")
- D SENDATA(DGTATION)
- ;
- ;mail summary
- D FMAIL^DG53334B(1)
- ;
- I '$D(ZTQUEUED) D
- .D BMES^XPDUTL(">>> ....ALS Extract has completed")
- ;
- ;
- K DGFIELD,DGN,DGP,DGPECE,DGSTART
- K DGZ,DGFLDS,DGDFN,DGTATION,DGSSN,DGLINE
- Q
- GETDFN(DGTATION) ;
- ;From array of SSNs get DFN's from DPT
- ; go down station array
- S DGSSN=0
- F S DGSSN=$O(^XTMP("DGALS","S",DGTATION,DGSSN)) Q:'DGSSN DO
- . S DGDFN=$$DFN(DGSSN)
- . I DGDFN S ^XTMP("DGALS","S",DGTATION,"DFN",DGDFN)=DGSSN
- . E S ^XTMP("DGALS",$J,"ERROR","SSN",DGSSN)=DGDFN
- .;
- . I (($P($H,",",2))#20) Q
- . I '$D(ZTQUEUED) W "."
- Q
- DIQLOOK(DGTATION) ;
- ;
- ; get array of fields to lookup
- D INIFLDS
- ; for each dfn call gets^diq
- S DGDFN=0
- F S DGDFN=$O(^XTMP("DGALS","S",DGTATION,"DFN",DGDFN)) Q:'DGDFN DO
- . D GETDGIQ(DGDFN)
- .;
- . I (($P($H,",",2))#3) Q
- . I '$D(ZTQUEUED) W "."
- .;
- Q
- GETDGIQ(DGDFN) ;
- K DGDATA,DGERR
- ;
- F DGFLDS=1:1:2 D
- . D GETS^DIQ(2,DGDFN,DGFLDS(DGFLDS),"E","DGDATA","DGERR")
- .;
- .; merge will set ,2,dfn_",",field,"E")=external value
- .;
- . M ^XTMP("DGALS",$J,"DATA")=DGDATA
- . K DGDATA
- . I $D(DGERR) D K DGERR
- . .;if a field has err whatodo
- . .;
- . .; check to see if each field was set in returned array
- . . F DGP=1:1 S DGFIELD=$P(DGFLDS(DGFLDS),";",DGP) Q:'DGFIELD D
- . . .;
- . . .; indicates fileman returned error
- . . . I '$D(^XTMP("DGALS",$J,"DATA",2,DGDFN_",",DGFIELD,"E")) D
- . . . .;
- . . . .; set it to null to keep the piece position in mail
- . . . . S ^XTMP("DGALS",$J,"DATA",2,DGDFN_",",DGFIELD,"E")=""
- . . . .;
- . . . .;the dgerr array is set by fm in order of missing fields
- . . . . S DGERR=$O(DGERR("DIERR",0)) I 'DGERR K DGERR Q
- . . . . M ^XTMP("DGALS",$J,"ERROR",DGDFN,DGFIELD)=DGERR("DIERR",DGERR)
- . . . . S ^XTMP("DGALS",$J,"ERROR",DGDFN,"SSN")=$P($G(^DPT(DGDFN,0)),"^",9)
- . . . .;pop the array
- . . . . K DGERR("DIERR",DGERR)
- . . .;
- ;
- Q
- DFN(SSN) ;function to lookup DFN from SSN x-ref
- ; input SSN
- ; output DFN or error code
- N DFN
- ; make sure dfn is numeric and not null
- I $O(^DPT("SSN",SSN,0))
- E Q "No SSN Index for "_SSN
- ;
- I $O(^DPT("SSN",SSN,0))=$O(^DPT("SSN",SSN,""),-1)
- E Q "Duplicate SSN in cross-ref "_SSN
- ;
- S DFN=$O(^DPT("SSN",SSN,0))
- ;
- I $G(^DPT(DFN,0))]""
- E Q "No Zero node in DPT for SSN "_SSN
- ;
- I $P($G(^DPT(DFN,0)),"^",9)=SSN
- E Q "Bad SSN cross-ref "_SSN
- Q DFN
- ;
- INIFLDS ; set up array of fields to be used in fm getsdiq call
- S DGFLDS(1)=$P($T(FLDS1),";;",2)
- S DGFLDS(2)=$P($T(FLDS2),";;",2)
- Q
- ;Retrieve:
- ; Name, Provider,Street Address [Line 1], Zip+4,
- ; Street Address [Line 2]
- ; Street Address [Line 3],City, State, Zip Code County,
- ; Temporary Address Active?,Temporary Street [Line 1],
- ; Temporary Address County, Temporary Zip+4,
- ; Temporary Street [Line 2], Temporary Street Address [Line 3], Temporary
- ; City, Temporary State, Temporary Zip Code, Temporary Address Start Date,
- ; Temporary Address End Date, Phone Number [Residence], Phone Number [Work]
- FLDS1 ;;.01;.104;.111;.1112;.112;.113;.114;.115;.116;.117;.12105;.1211;.12111;.12112;.1212;.1213
- FLDS2 ;;.1214;.1215;.1216;.1217;.1218;.1219;.131;.132;
- Q
- SENDATA(DGTATION) ;
- ; dgline is the message line
- S DGLINE=0
- S DGDFN=""
- ; (2,dfn, field set up from fileman data merge, dfn is dfn_","
- F S DGDFN=$O(^XTMP("DGALS",$J,"DATA",2,DGDFN)) Q:'DGDFN DO
- . D SETMAIL^DG53334B(DGTATION,DGDFN)
- .;
- . I (($P($H,",",2))#10) Q
- . I '$D(ZTQUEUED) W " ."
- .;
- ;final mailman set
- Q:'DGLINE
- D SMAIL^DG53334B(DGLINE)
- ;
- Q
- DG53334A ;ALB/MRY - ALS EXTRACT; ; 11/16/00 1:15pm
- +1 ;;5.3;Registration;**334,1015**;Aug 13, 1993;Build 21
- +2 ;
- +3 ;Description:
- +4 ;Patient data will be extracted from the Patient file (#2) for all
- +5 ;hospital sites. Station numbers and SSN's have been provided and
- +6 ;stored in file^XTMP.
- +7 ;
- +8 ;
- EN ; -- Entry point for manually running extract.
- +1 DO EN^DG53334D
- +2 QUIT
- +3 ;
- +4 ;
- START ; -- Called from POSTINST^DG53334C and EN^DG53334D
- +1 IF $DATA(DUZ)'=11
- Begin DoDot:1
- +2 DO BMES^XPDUTL(" Please set DUZ variables.")
- +3 SET DGARY(1)=(" To set up the DUZ variables, type the command D ^XUP.")
- +4 SET DGARY(2)=(" At prompt Select OPTION NAME: press the return key.")
- +5 SET DGARY(3)=(" To restart the ALS Extract type D EN^DG53334A.")
- +6 DO MES^XPDUTL(.DGARY)
- End DoDot:1
- QUIT
- +7 ;
- +8 DO BMES^XPDUTL()
- +9 SET DGARY(1)=(" >>> ALS Extract <<< ")
- +10 SET DGARY(2)=(" This extract will generate 2 mail messages to you.")
- +11 SET DGARY(3)=(" One of the messsages will contain the data extracted")
- +12 SET DGARY(4)=(" and the second message will contain any errors that")
- +13 SET DGARY(5)=(" may have occurred during the ALS extract.")
- +14 DO MES^XPDUTL(.DGARY)
- +15 ;
- +16 NEW DGARY
- +17 SET DGTATION=+$PIECE($$SITE^VASITE(),U,3)
- +18 SET DGSTART=$$FMTE^XLFDT($$NOW^XLFDT)
- +19 IF '$DATA(^XTMP("DGALS","S",DGTATION))!$DATA(^XTMP("DGALS","S",DGTATION,"ERROR","NO DATA REQUESTED"))
- Begin DoDot:1
- +20 DO BMES^XPDUTL(" ")
- +21 SET DGARY(1)=(" Data was not requested from this site.")
- +22 SET DGARY(2)=(" No mail messages will be generated.")
- +23 SET DGARY(3)=(" No error has occurred.")
- +24 DO MES^XPDUTL(.DGARY)
- +25 DO BMES^XPDUTL(">>>...all done.")
- +26 DO FMAIL^DG53334B(0)
- End DoDot:1
- QUIT
- +27 ;
- +28 ;
- +29 KILL ^XTMP("DGALS",$JOB,"DATA")
- +30 KILL ^XTMP("DGALS",$JOB,"ERROR")
- +31 KILL ^XTMP("DGALS","S",DGTATION,"DFN")
- +32 ;
- +33 IF '$DATA(ZTQUEUED)
- Begin DoDot:1
- +34 DO BMES^XPDUTL(">>> Looking up patients DFNs from SSNs <<<")
- End DoDot:1
- +35 DO GETDFN(DGTATION)
- +36 ;
- +37 IF '$DATA(ZTQUEUED)
- Begin DoDot:1
- +38 DO BMES^XPDUTL(">>> Looking up patients data from DFNs <<<")
- End DoDot:1
- +39 DO DIQLOOK(DGTATION)
- +40 ;
- +41 IF '$DATA(ZTQUEUED)
- Begin DoDot:1
- +42 DO BMES^XPDUTL(">>> Creating Mail message of patients data <<<")
- End DoDot:1
- +43 DO SENDATA(DGTATION)
- +44 ;
- +45 ;mail summary
- +46 DO FMAIL^DG53334B(1)
- +47 ;
- +48 IF '$DATA(ZTQUEUED)
- Begin DoDot:1
- +49 DO BMES^XPDUTL(">>> ....ALS Extract has completed")
- End DoDot:1
- +50 ;
- +51 ;
- +52 KILL DGFIELD,DGN,DGP,DGPECE,DGSTART
- +53 KILL DGZ,DGFLDS,DGDFN,DGTATION,DGSSN,DGLINE
- +54 QUIT
- GETDFN(DGTATION) ;
- +1 ;From array of SSNs get DFN's from DPT
- +2 ; go down station array
- +3 SET DGSSN=0
- +4 FOR
- SET DGSSN=$ORDER(^XTMP("DGALS","S",DGTATION,DGSSN))
- IF 'DGSSN
- QUIT
- Begin DoDot:1
- +5 SET DGDFN=$$DFN(DGSSN)
- +6 IF DGDFN
- SET ^XTMP("DGALS","S",DGTATION,"DFN",DGDFN)=DGSSN
- +7 IF '$TEST
- SET ^XTMP("DGALS",$JOB,"ERROR","SSN",DGSSN)=DGDFN
- +8 ;
- +9 IF (($PIECE($HOROLOG,",",2))#20)
- QUIT
- +10 IF '$DATA(ZTQUEUED)
- WRITE "."
- End DoDot:1
- +11 QUIT
- DIQLOOK(DGTATION) ;
- +1 ;
- +2 ; get array of fields to lookup
- +3 DO INIFLDS
- +4 ; for each dfn call gets^diq
- +5 SET DGDFN=0
- +6 FOR
- SET DGDFN=$ORDER(^XTMP("DGALS","S",DGTATION,"DFN",DGDFN))
- IF 'DGDFN
- QUIT
- Begin DoDot:1
- +7 DO GETDGIQ(DGDFN)
- +8 ;
- +9 IF (($PIECE($HOROLOG,",",2))#3)
- QUIT
- +10 IF '$DATA(ZTQUEUED)
- WRITE "."
- +11 ;
- End DoDot:1
- +12 QUIT
- GETDGIQ(DGDFN) ;
- +1 KILL DGDATA,DGERR
- +2 ;
- +3 FOR DGFLDS=1:1:2
- Begin DoDot:1
- +4 DO GETS^DIQ(2,DGDFN,DGFLDS(DGFLDS),"E","DGDATA","DGERR")
- +5 ;
- +6 ; merge will set ,2,dfn_",",field,"E")=external value
- +7 ;
- +8 MERGE ^XTMP("DGALS",$JOB,"DATA")=DGDATA
- +9 KILL DGDATA
- +10 IF $DATA(DGERR)
- Begin DoDot:2
- +11 ;if a field has err whatodo
- +12 ;
- +13 ; check to see if each field was set in returned array
- +14 FOR DGP=1:1
- SET DGFIELD=$PIECE(DGFLDS(DGFLDS),";",DGP)
- IF 'DGFIELD
- QUIT
- Begin DoDot:3
- +15 ;
- +16 ; indicates fileman returned error
- +17 IF '$DATA(^XTMP("DGALS",$JOB,"DATA",2,DGDFN_",",DGFIELD,"E"))
- Begin DoDot:4
- +18 ;
- +19 ; set it to null to keep the piece position in mail
- +20 SET ^XTMP("DGALS",$JOB,"DATA",2,DGDFN_",",DGFIELD,"E")=""
- +21 ;
- +22 ;the dgerr array is set by fm in order of missing fields
- +23 SET DGERR=$ORDER(DGERR("DIERR",0))
- IF 'DGERR
- KILL DGERR
- QUIT
- +24 MERGE ^XTMP("DGALS",$JOB,"ERROR",DGDFN,DGFIELD)=DGERR("DIERR",DGERR)
- +25 SET ^XTMP("DGALS",$JOB,"ERROR",DGDFN,"SSN")=$PIECE($GET(^DPT(DGDFN,0)),"^",9)
- +26 ;pop the array
- +27 KILL DGERR("DIERR",DGERR)
- End DoDot:4
- +28 ;
- End DoDot:3
- End DoDot:2
- KILL DGERR
- End DoDot:1
- +29 ;
- +30 QUIT
- DFN(SSN) ;function to lookup DFN from SSN x-ref
- +1 ; input SSN
- +2 ; output DFN or error code
- +3 NEW DFN
- +4 ; make sure dfn is numeric and not null
- +5 IF $ORDER(^DPT("SSN",SSN,0))
- +6 IF '$TEST
- QUIT "No SSN Index for "_SSN
- +7 ;
- +8 IF $ORDER(^DPT("SSN",SSN,0))=$ORDER(^DPT("SSN",SSN,""),-1)
- +9 IF '$TEST
- QUIT "Duplicate SSN in cross-ref "_SSN
- +10 ;
- +11 SET DFN=$ORDER(^DPT("SSN",SSN,0))
- +12 ;
- +13 IF $GET(^DPT(DFN,0))]""
- +14 IF '$TEST
- QUIT "No Zero node in DPT for SSN "_SSN
- +15 ;
- +16 IF $PIECE($GET(^DPT(DFN,0)),"^",9)=SSN
- +17 IF '$TEST
- QUIT "Bad SSN cross-ref "_SSN
- +18 QUIT DFN
- +19 ;
- INIFLDS ; set up array of fields to be used in fm getsdiq call
- +1 SET DGFLDS(1)=$PIECE($TEXT(FLDS1),";;",2)
- +2 SET DGFLDS(2)=$PIECE($TEXT(FLDS2),";;",2)
- +3 QUIT
- +4 ;Retrieve:
- +5 ; Name, Provider,Street Address [Line 1], Zip+4,
- +6 ; Street Address [Line 2]
- +7 ; Street Address [Line 3],City, State, Zip Code County,
- +8 ; Temporary Address Active?,Temporary Street [Line 1],
- +9 ; Temporary Address County, Temporary Zip+4,
- +10 ; Temporary Street [Line 2], Temporary Street Address [Line 3], Temporary
- +11 ; City, Temporary State, Temporary Zip Code, Temporary Address Start Date,
- +12 ; Temporary Address End Date, Phone Number [Residence], Phone Number [Work]
- FLDS1 ;;.01;.104;.111;.1112;.112;.113;.114;.115;.116;.117;.12105;.1211;.12111;.12112;.1212;.1213
- FLDS2 ;;.1214;.1215;.1216;.1217;.1218;.1219;.131;.132;
- +1 QUIT
- SENDATA(DGTATION) ;
- +1 ; dgline is the message line
- +2 SET DGLINE=0
- +3 SET DGDFN=""
- +4 ; (2,dfn, field set up from fileman data merge, dfn is dfn_","
- +5 FOR
- SET DGDFN=$ORDER(^XTMP("DGALS",$JOB,"DATA",2,DGDFN))
- IF 'DGDFN
- QUIT
- Begin DoDot:1
- +6 DO SETMAIL^DG53334B(DGTATION,DGDFN)
- +7 ;
- +8 IF (($PIECE($HOROLOG,",",2))#10)
- QUIT
- +9 IF '$DATA(ZTQUEUED)
- WRITE " ."
- +10 ;
- End DoDot:1
- +11 ;final mailman set
- +12 IF 'DGLINE
- QUIT
- +13 DO SMAIL^DG53334B(DGLINE)
- +14 ;
- +15 QUIT