- PXUACM ; ISA/KWP - Convert PCE Mapping File and Immunization file ;3/3/1999
- ;;1.0;PCE PATIENT CARE ENCOUNTER;**66**;AUG 12, 1996
- ; CONVERT(CHANGE,REPORT)
- ; CHANGE = 0: don't change anything.default.
- ; 1: make changes.
- ; REPORT = 0: no feedback.default.
- ; 1 = errors only.
- ; 2 = errors, warnings.
- ; 3 = errors, warnings, diagnostics.
- ; Return value: 1 = success.
- ; 0 = failure.
- W !,"Incorrect entry point. This program must be utilized through"
- W !,"the Extrinsic Function. For example: SET RESULT=$$CONVERT(1,2)"
- W !,"See program comments for parameter definitions."
- Q
- CONVERT(CHANGE,REPORT) ;see comments above
- N U,S,ERROR S U="^",S=";",ERROR=0
- S CHANGE=$G(CHANGE,0),REPORT=$G(REPORT,0)
- I REPORT=3 W !,"Building INACT and NEW arrays."
- D BUILD("IA",.INACT)
- D BUILD("NW",.NEW)
- I REPORT=3 W !,"Processing Inactive Codes:"
- D INACT I ERROR G CQ
- I REPORT=3 W !!,"Processing New Codes:"
- D NEW
- CQ Q $S(ERROR:0,1:1)
- BUILD(TYPE,ARR) ;TYPE-IA or NW, ARR-INACT or NEW
- N I,T
- F I=2:1 S T=$P($T(@TYPE+I),";",2) Q:T["//" S ARR($P(T,U))=$S(TYPE="IA":"",1:$P(T,U,2,3))
- Q
- INACT ;Inactivate subroutine
- N CPIECE,INO,MAP,DIE,DA,DR,IMM S INO=0 F S INO=$O(^PXD(811.1,INO)) Q:'INO S MAP=$G(^PXD(811.1,INO,0)) D:MAP="" NODE I 'ERROR W:REPORT=3 !,?5,MAP D
- .;check new entry to see if already added
- .I $D(NEW($P(MAP,S)))!($D(NEW($P($P(MAP,U,2),S)))) D
- ..S CPIECE=$S($P(MAP,U)["ICPT":1,1:2),IMM=$P($P(MAP,U,$S(CPIECE=1:2,1:1)),S),$P(NEW($P($P(MAP,U,CPIECE),S)),U,(2+CPIECE))=IMM
- .;do inactivate
- .I $D(INACT($P(MAP,S)))!($D(INACT($P($P(MAP,U,2),S)))) D
- ..S CPIECE=$S($P(MAP,U)["ICPT":1,1:2)
- ..I '$P(MAP,U,5) W:REPORT>1 !," WARNING: Map already Turned Off." S $P(INACT($P($P(MAP,U,CPIECE),S)),U,CPIECE)=1 Q
- ..I CHANGE S DIE=811.1,DA=INO,DR=".05////0",DUZ(0)="" D ^DIE
- ..I REPORT=3 W " Map Code Inactivated."
- ..I CHANGE S DIE="^AUTTIMM(",DA=$P($P(MAP,U,$S(CPIECE=1:2,1:1)),S),DR=".07////1",DUZ(0)="" D ^DIE
- ..I REPORT=3 W " IMM Inactivated."
- ..S $P(INACT($P($P(MAP,U,CPIECE),S)),U,CPIECE)=1
- I REPORT>1 S INO="" F S INO=$O(INACT(INO)) Q:INO="" S MAP=INACT(INO) I $P(MAP,U)'=1!($P(MAP,U,2)'=1) W !,"WARNING: Code "_INO_" does not contain a from/to entry to turn off in the map."
- Q
- NODE ;0 node of the map entry missing
- S ERROR=1
- I REPORT W !," ERROR: Map 0 Node Missing." I REPORT=3 W "(^PXD(811.1,"_INO_",0)"
- Q
- NEW ;New codes subroutine
- N CODE,DIC,DIE,DA,DR,SNAME,LNAME,X,Y,INO,IMINO,CERRFR,CERRTO
- ;remove new codes that have been added
- S CODE="" F S CODE=$O(NEW(CODE)) Q:CODE="" D NEW1 Q:ERROR
- Q
- NEW1 S LNAME=$P(NEW(CODE),U),SNAME=$P(NEW(CODE),U,2),CERRFR=$P(NEW(CODE),U,3),CERRTO=$P(NEW(CODE),U,4),IMINO=0
- ;check immunization on file
- I CERRFR!CERRTO D Q:ERROR
- .N LNAME2
- .S LNAME2=$P(^AUTTIMM($S(CERRFR:CERRFR,1:CERRTO),0),U)
- .I LNAME'=LNAME2 S ERROR=1 I REPORT W !,?5,"ERROR: Immunization for code "_CODE_" doesn't match update file."
- I CERRFR&CERRTO W:REPORT>1 !,"WARNING: Code "_CODE_" not added because from and to entries exist" Q
- I REPORT=3 W !,?5,"Adding: "_CODE_"."
- ;see PXTTU1 to see AUTTIMM numbering system.
- ;add new immunization
- I CERRTO!CERRFR I REPORT=3 W " IMM exist."
- I CHANGE I +CERRFR=0&(+CERRTO=0) D Q:ERROR
- .S $P(^AUTTIMM(0),"^",3)=0
- .S DIC="^AUTTIMM(",DIC(0)="",X=LNAME K DD,DO D FILE^DICN I Y<0 W:REPORT !,?5,"ERROR: Fileman error saving immunization" W:REPORT=3 "-"_LNAME S ERROR=1 Q
- .S IMINO=$P(Y,U),$P(^AUTTIMM(IMINO,0),U,2)=SNAME,DIK="^AUTTIMM(",DA=IMINO D IX1^DIK
- .I REPORT=3 W " IMM added."
- ;add imm-cpt map entry
- I CERRTO,REPORT=3 W " IMM-CPT map exist."
- I CHANGE,'CERRTO D Q:ERROR
- .I CERRFR S IMINO=CERRFR
- .S DIC="^PXD(811.1,",DIC(0)="",X=IMINO_";AUTTIMM(" K DD,DO D FILE^DICN I Y<0 W:REPORT !,?5,"ERROR: Fileman error saving imm-cpt map entry" W:REPORT=3 "-"_X S ERROR=1 Q
- .S INO=$P(Y,U),$P(^PXD(811.1,INO,0),U,2)=CODE_";ICPT(^IMM^CPT^1",DIK="^PXD(811.1,",DA=INO D IX1^DIK
- .I REPORT=3 W " IMM-CPT map added."
- ;add cpt-imm map entry
- I CERRFR,REPORT=3 W " CPT-IMM map exist."
- I CHANGE,'CERRFR D Q:ERROR
- .I CERRFR S IMINO=CERRTO
- .S DIC="^PXD(811.1,",DIC(0)="",X=CODE_";ICPT(" K DD,DO D FILE^DICN I Y<0 W:REPORT !,?5,"ERROR: Fileman error saving cpt-imm map entry" W:REPORT=3 "-"_X S ERROR=1 Q
- .S INO=$P(Y,U),$P(^PXD(811.1,INO,0),U,2)=IMINO_";AUTTIMM(^CPT^IMM^1",DIK="^PXD(811.1,",DA=INO D IX1^DIK
- .I REPORT=3 W " CPT-IMM map added."
- Q
- IA ;These codes will be deleted from the map. The corresponding
- ;immunization will be inactivated.
- ;90711^COMBINED VACCINE
- ;90714^TYPHOID IMMUNIZATION
- ;90724^INFLUENZA IMMUNIZATION
- ;90726^RABIES IMMUNIZATION
- ;90728^BCG IMMUNIZATION
- ;90730^HEPATITIS A VACCINE
- ;90737^INFLUENZA B IMMUNIZATION
- ;//
- NW ;These codes will be added to the map. The second and third
- ;piece will be added to the immunization file.
- ;90476^ADENOVIRUS,TYPE 4^ADEN TYP4^
- ;90477^ADENOVIRUS,TYPE 7^ADEN TYP7^
- ;90581^ANTHRAX,SC^ANT SC^
- ;90585^BCG,PERCUT^BCG P^
- ;90586^BCG,INTRAVESICAL^BCG I^
- ;90592^CHOLERA, ORAL^CHOL ORAL^
- ;90632^HEPA ADULT^HEPA AD^
- ;90633^HEPA,PED/ADOL-2^HEPA PED/ADOL-2^
- ;90634^HEPA,PED/ADOL-3 DOSE^HEPA PED/ADOL-3^
- ;90636^HEPA/HEPB ADULT^HEPA/HEPB AD^
- ;90645^HIB,HBOC^HIB,HBOC^
- ;90646^HIB,PRP-D^HIB PRP-D^
- ;90647^HIB,PRP-OMP^HIB PRP-OMP^
- ;90648^HIB,PRP-T^HIB PRP-T^
- ;90658^FLU,3 YRS^FLU 3YRS^
- ;90659^FLU,WHOLE^FLU WHOLE^
- ;90660^FLU,NASAL^FLU NAS^
- ;90665^LYME DISEASE^LYME
- ;90669^PNEUMOCOCCAL,PED^PNEUMO-PED
- ;90675^RABIES,IM^RAB
- ;90676^RABIES,ID^RAB ID
- ;90680^ROTOVIRUS,ORAL^ROTO ORAL
- ;90690^TYPHOID,ORAL^TYP ORAL
- ;90691^TYPHOID^TYP
- ;90692^TYPHOID,H-P,SC/ID^TYP H-P-SC/ID
- ;90693^TYPHOID,AKD,SC^TYP AKD-SC
- ;90747^HEPB, ILL PAT^HEPB ILL
- ;90748^HEPB/HIB^HEPB/HIB
- ;//
- R S RESULT=$$CONVERT(1,3)
- Q
- PXUACM ; ISA/KWP - Convert PCE Mapping File and Immunization file ;3/3/1999
- +1 ;;1.0;PCE PATIENT CARE ENCOUNTER;**66**;AUG 12, 1996
- +2 ; CONVERT(CHANGE,REPORT)
- +3 ; CHANGE = 0: don't change anything.default.
- +4 ; 1: make changes.
- +5 ; REPORT = 0: no feedback.default.
- +6 ; 1 = errors only.
- +7 ; 2 = errors, warnings.
- +8 ; 3 = errors, warnings, diagnostics.
- +9 ; Return value: 1 = success.
- +10 ; 0 = failure.
- +11 WRITE !,"Incorrect entry point. This program must be utilized through"
- +12 WRITE !,"the Extrinsic Function. For example: SET RESULT=$$CONVERT(1,2)"
- +13 WRITE !,"See program comments for parameter definitions."
- +14 QUIT
- CONVERT(CHANGE,REPORT) ;see comments above
- +1 NEW U,S,ERROR
- SET U="^"
- SET S=";"
- SET ERROR=0
- +2 SET CHANGE=$GET(CHANGE,0)
- SET REPORT=$GET(REPORT,0)
- +3 IF REPORT=3
- WRITE !,"Building INACT and NEW arrays."
- +4 DO BUILD("IA",.INACT)
- +5 DO BUILD("NW",.NEW)
- +6 IF REPORT=3
- WRITE !,"Processing Inactive Codes:"
- +7 DO INACT
- IF ERROR
- GOTO CQ
- +8 IF REPORT=3
- WRITE !!,"Processing New Codes:"
- +9 DO NEW
- CQ QUIT $SELECT(ERROR:0,1:1)
- BUILD(TYPE,ARR) ;TYPE-IA or NW, ARR-INACT or NEW
- +1 NEW I,T
- +2 FOR I=2:1
- SET T=$PIECE($TEXT(@TYPE+I),";",2)
- IF T["//"
- QUIT
- SET ARR($PIECE(T,U))=$SELECT(TYPE="IA":"",1:$PIECE(T,U,2,3))
- +3 QUIT
- INACT ;Inactivate subroutine
- +1 NEW CPIECE,INO,MAP,DIE,DA,DR,IMM
- SET INO=0
- FOR
- SET INO=$ORDER(^PXD(811.1,INO))
- IF 'INO
- QUIT
- SET MAP=$GET(^PXD(811.1,INO,0))
- IF MAP=""
- DO NODE
- IF 'ERROR
- IF REPORT=3
- WRITE !,?5,MAP
- Begin DoDot:1
- +2 ;check new entry to see if already added
- +3 IF $DATA(NEW($PIECE(MAP,S)))!($DATA(NEW($PIECE($PIECE(MAP,U,2),S))))
- Begin DoDot:2
- +4 SET CPIECE=$SELECT($PIECE(MAP,U)["ICPT":1,1:2)
- SET IMM=$PIECE($PIECE(MAP,U,$SELECT(CPIECE=1:2,1:1)),S)
- SET $PIECE(NEW($PIECE($PIECE(MAP,U,CPIECE),S)),U,(2+CPIECE))=IMM
- End DoDot:2
- +5 ;do inactivate
- +6 IF $DATA(INACT($PIECE(MAP,S)))!($DATA(INACT($PIECE($PIECE(MAP,U,2),S))))
- Begin DoDot:2
- +7 SET CPIECE=$SELECT($PIECE(MAP,U)["ICPT":1,1:2)
- +8 IF '$PIECE(MAP,U,5)
- IF REPORT>1
- WRITE !," WARNING: Map already Turned Off."
- SET $PIECE(INACT($PIECE($PIECE(MAP,U,CPIECE),S)),U,CPIECE)=1
- QUIT
- +9 IF CHANGE
- SET DIE=811.1
- SET DA=INO
- SET DR=".05////0"
- SET DUZ(0)=""
- DO ^DIE
- +10 IF REPORT=3
- WRITE " Map Code Inactivated."
- +11 IF CHANGE
- SET DIE="^AUTTIMM("
- SET DA=$PIECE($PIECE(MAP,U,$SELECT(CPIECE=1:2,1:1)),S)
- SET DR=".07////1"
- SET DUZ(0)=""
- DO ^DIE
- +12 IF REPORT=3
- WRITE " IMM Inactivated."
- +13 SET $PIECE(INACT($PIECE($PIECE(MAP,U,CPIECE),S)),U,CPIECE)=1
- End DoDot:2
- End DoDot:1
- +14 IF REPORT>1
- SET INO=""
- FOR
- SET INO=$ORDER(INACT(INO))
- IF INO=""
- QUIT
- SET MAP=INACT(INO)
- IF $PIECE(MAP,U)'=1!($PIECE(MAP,U,2)'=1)
- WRITE !,"WARNING: Code "_INO_" does not contain a from/to entry to turn off in the map."
- +15 QUIT
- NODE ;0 node of the map entry missing
- +1 SET ERROR=1
- +2 IF REPORT
- WRITE !," ERROR: Map 0 Node Missing."
- IF REPORT=3
- WRITE "(^PXD(811.1,"_INO_",0)"
- +3 QUIT
- NEW ;New codes subroutine
- +1 NEW CODE,DIC,DIE,DA,DR,SNAME,LNAME,X,Y,INO,IMINO,CERRFR,CERRTO
- +2 ;remove new codes that have been added
- +3 SET CODE=""
- FOR
- SET CODE=$ORDER(NEW(CODE))
- IF CODE=""
- QUIT
- DO NEW1
- IF ERROR
- QUIT
- +4 QUIT
- NEW1 SET LNAME=$PIECE(NEW(CODE),U)
- SET SNAME=$PIECE(NEW(CODE),U,2)
- SET CERRFR=$PIECE(NEW(CODE),U,3)
- SET CERRTO=$PIECE(NEW(CODE),U,4)
- SET IMINO=0
- +1 ;check immunization on file
- +2 IF CERRFR!CERRTO
- Begin DoDot:1
- +3 NEW LNAME2
- +4 SET LNAME2=$PIECE(^AUTTIMM($SELECT(CERRFR:CERRFR,1:CERRTO),0),U)
- +5 IF LNAME'=LNAME2
- SET ERROR=1
- IF REPORT
- WRITE !,?5,"ERROR: Immunization for code "_CODE_" doesn't match update file."
- End DoDot:1
- IF ERROR
- QUIT
- +6 IF CERRFR&CERRTO
- IF REPORT>1
- WRITE !,"WARNING: Code "_CODE_" not added because from and to entries exist"
- QUIT
- +7 IF REPORT=3
- WRITE !,?5,"Adding: "_CODE_"."
- +8 ;see PXTTU1 to see AUTTIMM numbering system.
- +9 ;add new immunization
- +10 IF CERRTO!CERRFR
- IF REPORT=3
- WRITE " IMM exist."
- +11 IF CHANGE
- IF +CERRFR=0&(+CERRTO=0)
- Begin DoDot:1
- +12 SET $PIECE(^AUTTIMM(0),"^",3)=0
- +13 SET DIC="^AUTTIMM("
- SET DIC(0)=""
- SET X=LNAME
- KILL DD,DO
- DO FILE^DICN
- IF Y<0
- IF REPORT
- WRITE !,?5,"ERROR: Fileman error saving immunization"
- IF REPORT=3
- WRITE "-"_LNAME
- SET ERROR=1
- QUIT
- +14 SET IMINO=$PIECE(Y,U)
- SET $PIECE(^AUTTIMM(IMINO,0),U,2)=SNAME
- SET DIK="^AUTTIMM("
- SET DA=IMINO
- DO IX1^DIK
- +15 IF REPORT=3
- WRITE " IMM added."
- End DoDot:1
- IF ERROR
- QUIT
- +16 ;add imm-cpt map entry
- +17 IF CERRTO
- IF REPORT=3
- WRITE " IMM-CPT map exist."
- +18 IF CHANGE
- IF 'CERRTO
- Begin DoDot:1
- +19 IF CERRFR
- SET IMINO=CERRFR
- +20 SET DIC="^PXD(811.1,"
- SET DIC(0)=""
- SET X=IMINO_";AUTTIMM("
- KILL DD,DO
- DO FILE^DICN
- IF Y<0
- IF REPORT
- WRITE !,?5,"ERROR: Fileman error saving imm-cpt map entry"
- IF REPORT=3
- WRITE "-"_X
- SET ERROR=1
- QUIT
- +21 SET INO=$PIECE(Y,U)
- SET $PIECE(^PXD(811.1,INO,0),U,2)=CODE_";ICPT(^IMM^CPT^1"
- SET DIK="^PXD(811.1,"
- SET DA=INO
- DO IX1^DIK
- +22 IF REPORT=3
- WRITE " IMM-CPT map added."
- End DoDot:1
- IF ERROR
- QUIT
- +23 ;add cpt-imm map entry
- +24 IF CERRFR
- IF REPORT=3
- WRITE " CPT-IMM map exist."
- +25 IF CHANGE
- IF 'CERRFR
- Begin DoDot:1
- +26 IF CERRFR
- SET IMINO=CERRTO
- +27 SET DIC="^PXD(811.1,"
- SET DIC(0)=""
- SET X=CODE_";ICPT("
- KILL DD,DO
- DO FILE^DICN
- IF Y<0
- IF REPORT
- WRITE !,?5,"ERROR: Fileman error saving cpt-imm map entry"
- IF REPORT=3
- WRITE "-"_X
- SET ERROR=1
- QUIT
- +28 SET INO=$PIECE(Y,U)
- SET $PIECE(^PXD(811.1,INO,0),U,2)=IMINO_";AUTTIMM(^CPT^IMM^1"
- SET DIK="^PXD(811.1,"
- SET DA=INO
- DO IX1^DIK
- +29 IF REPORT=3
- WRITE " CPT-IMM map added."
- End DoDot:1
- IF ERROR
- QUIT
- +30 QUIT
- IA ;These codes will be deleted from the map. The corresponding
- +1 ;immunization will be inactivated.
- +2 ;90711^COMBINED VACCINE
- +3 ;90714^TYPHOID IMMUNIZATION
- +4 ;90724^INFLUENZA IMMUNIZATION
- +5 ;90726^RABIES IMMUNIZATION
- +6 ;90728^BCG IMMUNIZATION
- +7 ;90730^HEPATITIS A VACCINE
- +8 ;90737^INFLUENZA B IMMUNIZATION
- +9 ;//
- NW ;These codes will be added to the map. The second and third
- +1 ;piece will be added to the immunization file.
- +2 ;90476^ADENOVIRUS,TYPE 4^ADEN TYP4^
- +3 ;90477^ADENOVIRUS,TYPE 7^ADEN TYP7^
- +4 ;90581^ANTHRAX,SC^ANT SC^
- +5 ;90585^BCG,PERCUT^BCG P^
- +6 ;90586^BCG,INTRAVESICAL^BCG I^
- +7 ;90592^CHOLERA, ORAL^CHOL ORAL^
- +8 ;90632^HEPA ADULT^HEPA AD^
- +9 ;90633^HEPA,PED/ADOL-2^HEPA PED/ADOL-2^
- +10 ;90634^HEPA,PED/ADOL-3 DOSE^HEPA PED/ADOL-3^
- +11 ;90636^HEPA/HEPB ADULT^HEPA/HEPB AD^
- +12 ;90645^HIB,HBOC^HIB,HBOC^
- +13 ;90646^HIB,PRP-D^HIB PRP-D^
- +14 ;90647^HIB,PRP-OMP^HIB PRP-OMP^
- +15 ;90648^HIB,PRP-T^HIB PRP-T^
- +16 ;90658^FLU,3 YRS^FLU 3YRS^
- +17 ;90659^FLU,WHOLE^FLU WHOLE^
- +18 ;90660^FLU,NASAL^FLU NAS^
- +19 ;90665^LYME DISEASE^LYME
- +20 ;90669^PNEUMOCOCCAL,PED^PNEUMO-PED
- +21 ;90675^RABIES,IM^RAB
- +22 ;90676^RABIES,ID^RAB ID
- +23 ;90680^ROTOVIRUS,ORAL^ROTO ORAL
- +24 ;90690^TYPHOID,ORAL^TYP ORAL
- +25 ;90691^TYPHOID^TYP
- +26 ;90692^TYPHOID,H-P,SC/ID^TYP H-P-SC/ID
- +27 ;90693^TYPHOID,AKD,SC^TYP AKD-SC
- +28 ;90747^HEPB, ILL PAT^HEPB ILL
- +29 ;90748^HEPB/HIB^HEPB/HIB
- +30 ;//
- R SET RESULT=$$CONVERT(1,3)
- +1 QUIT