Changeset 1409 for pharmacy-utils/drug-file-cleanup
- Timestamp:
- Apr 16, 2012, 1:40:04 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pharmacy-utils/drug-file-cleanup/VWPSSXPD.m
r1406 r1409 1 VWPSSXPD ; VW/SMH - Update the Drug File and friends... ; Wed Apr 13 2012 2 ;;1.0;WorldVista Modifications;;;Build 4 3 ; (C) Sam Habiel 4 ; Licensed under AGPL 5 ; 6 ; This routine contains utilities to remove a drug file and install a new drug 7 ; file in VISTA originating in another system. As of Build 3, you can use KIDS 8 ; to transport the file. 9 ; 10 ; Workflow (Manual, without using KIDS) 11 ; On the Origin System: 12 ; - Create a Global Output containing ^PSDRUG, ^PS(50.7), AND ^PS(51.7) 13 ; On the Destination System: 14 ; 1. Call KILLDRUG to remove all Drug Data 15 ; 2. Restore a global containing a Drug File (^PSDRUG), Pharmacy Orderable 16 ; Item file (^PS(50.7)), and Drug Text (^PS(51.7)). 17 ; 3. Call RESTOCK to sync CPRS files back with drug files. 18 ; 19 ; Workflow (using KIDS): 20 ; On the Origin System: 21 ; - Create a KIDS build that calls the follwing: 22 ; 1. ENV is the Environment Check for the Build 23 ; 2. TRAN is the Pre-Transport Routine for your originating system drug data 24 ; 3. PRE is the Pre-Init for the Destination System 25 ; 4. POST is the Post-Init for the Destination System 26 ; - Generate the KIDS Build 27 ; On the Destination System: 28 ; - Install the KIDS Build 29 ; 30 ; Limitations: 31 ; - If the Administration Schedules from the originating system and destination 32 ; system don't match, you need to either change the schedules on the orderable 33 ; items, or make the schedules on the destination system the same as the 34 ; ones from incoming drug file, otherwise, the problems you run into is this: 35 ; - Orders do not calculate frequency correctly if the schedule is not present 36 ; in the destination system. This means that the proper number of pills cannot 37 ; be calculated. 38 ; - In Outpatient Pharmacy, Schedules do not expand into patient readable 39 ; instructions 40 ; - If the National Drug Files are not up to date in the destination system, there 41 ; will be some broken pointers. All you have to do is update them. 42 ; - If some drugs are linked with lab tests, these need to be re-linked. Preferably, 43 ; these should be removed prior to transporting the drug file. 44 ; 45 ; --- ()()() --- 46 ; 47 ; PEPs: KILLDRUG to remove all Drugs 48 ; RESTOCK to add the drugs back to CPRS 49 ; 50 ; KIDS EPs: 51 ; ENV -> Environment Check 52 ; TRAN -> Pre-Transport Routine (to get data from original system) 53 ; PRE -> Pre-Init for the Destination System 54 ; POST -> Post-Init for the Destination System 55 ; 56 ; KIDS EPs call PEPs to do their work. 57 ; 58 ; Environment Check falls through from the top 59 ; 60 ; -- START KIDS HOOKS -- 61 ; 62 ENV ; Environment Check Routine; KIDS EP; top fallthough 63 W $$CJ^XLFSTR("------ WARNING WARNING WARNING -----",80),!! ; Center Justify 64 W "This package will delete your drug file and add a new drug file contained",! 65 W "in the distribution.",!! 66 W "If you have patient pharmacy data, this will CORRUPT your database.",!! 67 N VWPROD S VWPROD=$$PROD^XUPROD() ; Check if a production acc; +ve val is yes 68 W "You are running in a "_$S(VWPROD:"Production",1:"Test")_" Environment.",!! 69 W "Are you sure you want to continue? Type a full YES/yes if you want to proceed)",! 70 N X R "ANSWER: ",X:30 71 S X=$$UP^XLFSTR(X) ; uppercase 72 I X'="YES" S XPDQUIT=1 ; Quit if the user doesn't say yes 73 QUIT 74 ; 75 TRAN ; Pre-Transport routine for KIDS to ship off the 50, 50.7, 51.7 globals 76 M @XPDGREF@("VWPSSXPD",50)=^PSDRUG ; DRUG 77 M @XPDGREF@("VWPSSXPD",50.7)=^PS(50.7) ; PHARMACY ORDERABLE ITEM 78 M @XPDGREF@("VWPSSXPD",51.7)=^PS(51.7) ; DRUG TEXT 79 QUIT 80 ; 81 PRE ; Pre-Init routine for KIDS 82 DO KILLDRUG ; Remove old drugs from system. 83 QUIT 84 ; 85 POST ; Post-Init routine for KIDS 86 ; Load new drugs into system 87 M ^PSDRUG=@XPDGREF@("VWPSSXPD",50) 88 M ^PS(50.7)=@XPDGREF@("VWPSSXPD",50.7) 89 M ^PS(51.7)=@XPDGREF@("VWPSSXPD",51.7) 90 ; Restock the CPRS files from the new drug files 91 DO RESTOCK 92 QUIT 93 ; 94 ; -- END KIDS HOOKS -- 95 ; 96 ; -- BEGIN Public Entry Points -- 97 KILLDRUG ; Remove all Drug Data. PEP. Use this to call the routine. 98 D DT^DICRW ; Min FM Vars 99 D MES^XPDUTL("Killing Drug File (50)") D DRUG 100 D MES^XPDUTL("Killing Pharmacy Orderable Item (OI) File (50.7)") D PO 101 D MES^XPDUTL("Killing Drug Text File (51.7)") D DRUGTEXT 102 D MES^XPDUTL("Removing Pharmacy OIs from the Orderable Item file (101.43)") D O 103 D MES^XPDUTL("Syncing the Order Quick View file (101.44)") D CPRS 104 QUIT 105 ; 1 VWPSSXPD ; VW/SMH - Update the Drug File and friends... ; Wed Apr 13 2012 ; 4/16/12 11:02am 2 ;;1.0;WorldVista Modifications;;;Build 5 3 ; (C) Sam Habiel 4 ; Licensed under AGPL 5 ; 6 ; This routine contains utilities to remove a drug file and install a new drug 7 ; file in VISTA originating in another system. As of Build 3, you can use KIDS 8 ; to transport the file. 9 ; 10 ; Workflow (Manual, without using KIDS) 11 ; On the Origin System: 12 ; - Create a Global Output containing: 13 ; ^PSDRUG DRUG 14 ; ^PS(50.7) PHARMACY ORDERABLE ITEM 15 ; ^PS(51.7) DRUG TEXT 16 ; ^PS(52.6) IV ADDITIVES 17 ; ^PS(52.7) IV SOLUTIONS 18 ; ^PS(50.4) DRUG ELECTROLYTES 19 ; 20 ; On the Destination System: 21 ; 1. Call KILLDRUG to remove all Drug Data 22 ; 2. Restore the global created above. 23 ; 3. Call RESTOCK to sync CPRS files back with drug files. 24 ; 25 ; Workflow (using KIDS): 26 ; On the Origin System: 27 ; - Create a KIDS build that calls the follwing: 28 ; 1. ENV is the Environment Check for the Build 29 ; 2. TRAN is the Pre-Transport Routine for your originating system drug data 30 ; 3. PRE is the Pre-Init for the Destination System 31 ; 4. POST is the Post-Init for the Destination System 32 ; - Generate the KIDS Build 33 ; On the Destination System: 34 ; - Install the KIDS Build 35 ; 36 ; Limitations: 37 ; - If the Administration Schedules from the originating system and destination 38 ; system don't match, you need to either change the schedules on the orderable 39 ; items, or make the schedules on the destination system the same as the 40 ; ones from incoming drug file, otherwise, the problems you run into is this: 41 ; - Orders do not calculate frequency correctly if the schedule is not present 42 ; in the destination system. This means that the proper number of pills cannot 43 ; be calculated. 44 ; - In Outpatient Pharmacy, Schedules do not expand into patient readable 45 ; instructions 46 ; - If the National Drug Files are not up to date in the destination system, there 47 ; will be some broken pointers. All you have to do is update them. 48 ; - If some drugs are linked with lab tests, these need to be re-linked. Preferably, 49 ; these should be removed prior to transporting the drug file. 50 ; 51 ; --- ()()() --- 52 ; 53 ; PEPs: KILLDRUG to remove all Drugs 54 ; RESTOCK to add the drugs back to CPRS 55 ; 56 ; KIDS EPs: 57 ; ENV -> Environment Check (call the routine from the top) 58 ; TRAN -> Pre-Transport Routine (to get data from original system) 59 ; PRE -> Pre-Init for the Destination System 60 ; POST -> Post-Init for the Destination System 61 ; 62 ; KIDS EPs call PEPs to do their work. 63 ; 64 ; Environment Check falls through from the top 65 ; 66 ; -- START KIDS HOOKS -- 67 ; 68 ENV ; Environment Check Routine; KIDS EP; top fallthough 69 W $$CJ^XLFSTR("------ WARNING WARNING WARNING -----",80),!! ; Center Justify 70 W "This package will delete your drug file and add a new drug file contained",! 71 W "in the distribution.",!! 72 W "If you have patient pharmacy data, this will CORRUPT your database.",!! 73 N VWPROD S VWPROD=$$PROD^XUPROD() ; Check if a production acc; +ve val is yes 74 W "You are running in a "_$S(VWPROD:"Production",1:"Test")_" Environment.",!! 75 W "Are you sure you want to continue? Type a full YES/yes if you want to proceed)",! 76 N X R "ANSWER: ",X:60 77 S X=$$UP^XLFSTR(X) ; uppercase 78 I X'="YES" S XPDQUIT=1 ; Quit if the user doesn't say yes 79 QUIT 80 ; 81 TRAN ; Pre-Transport routine for KIDS to ship off the 50, 50.7, 51.7 globals 82 M @XPDGREF@("VWPSSXPD",50)=^PSDRUG ; DRUG 83 M @XPDGREF@("VWPSSXPD",50.7)=^PS(50.7) ; PHARMACY ORDERABLE ITEM 84 M @XPDGREF@("VWPSSXPD",51.7)=^PS(51.7) ; DRUG TEXT 85 M @XPDGREF@("VWPSSXPD",52.6)=^PS(52.6) ; IV ADDITIVES 86 M @XPDGREF@("VWPSSXPD",52.7)=^PS(52.7) ; IV SOLUTIONS 87 M @XPDGREF@("VWPSSXPD",50.4)=^PS(50.4) ; DRUG ELECTROLYTES 88 QUIT 89 ; 90 PRE ; Pre-Init routine for KIDS 91 DO KILLDRUG ; Remove old drugs from system. 92 QUIT 93 ; 94 POST ; Post-Init routine for KIDS 95 ; Load new drugs into system 96 M ^PSDRUG=@XPDGREF@("VWPSSXPD",50) ; DRUG 97 M ^PS(50.7)=@XPDGREF@("VWPSSXPD",50.7) ; PHARMACY ORDERABLE ITEM 98 M ^PS(51.7)=@XPDGREF@("VWPSSXPD",51.7) ; DRUG TEXT 99 M ^PS(52.6)=@XPDGREF@("VWPSSXPD",52.6) ; IV ADDITIVES 100 M ^PS(52.7)=@XPDGREF@("VWPSSXPD",52.7) ; IV SOLUTIONS 101 M ^PS(50.4)=@XPDGREF@("VWPSSXPD",50.4) ; DRUG ELECTROLYTES 102 ; Restock the CPRS files from the new drug files 103 DO RESTOCK 104 QUIT 105 ; 106 ; -- END KIDS HOOKS -- 107 ; 108 ; -- BEGIN Public Entry Points -- 109 KILLDRUG ; Remove all Drug Data. PEP. Use this to call the routine. 110 D DT^DICRW ; Min FM Vars 111 D MES^XPDUTL("Killing Drug (50)") D DRUG 112 D MES^XPDUTL("Killing Pharmacy Orderable Item (OI) (50.7)") D PO 113 D MES^XPDUTL("Killing Drug Text (51.7)") D DRUGTEXT 114 D MES^XPDUTL("Killing IV Additives (52.6)") D IVADD 115 D MES^XPDUTL("Killing IV Solutions (52.7)") D IVSOL 116 D MES^XPDUTL("Killing Drug Electrolytes (50.4)") D DRUGELEC 117 D MES^XPDUTL("Removing Pharmacy OIs from the Orderable Item (101.43)") D O 118 D MES^XPDUTL("Syncing the Order Quick View (101.44)") D CPRS 119 QUIT 120 ; 106 121 RESTOCK ; Restock CPRS Orderable Items from new Drug & Pharmacy Orderable Item 107 ; File. Public Entry Point. 108 ; Call this after repopulating the drug file (50) and the pharmacy orderable 109 ; item file (50.7) 110 N PSOIEN ; Looper variable 111 D DT^DICRW ; Establish FM Basic Variables 112 ; 113 ; Loop through Orderable Item file and call the protocol file updater to CPRS 114 ; Files 115 S PSOIEN=0 F S PSOIEN=$O(^PS(50.7,PSOIEN)) Q:'PSOIEN D 116 . D MES^XPDUTL("Syncing Pharamcy Orderable Item "_PSOIEN) 117 . D EN^PSSPOIDT(PSOIEN),EN2^PSSHL1(PSOIEN,"MUP") 118 D CPRS ; Update Orderable Item View files 119 QUIT 120 ; 121 ; -- END Public Entry Points -- 122 ; 123 ; -- The rest is private -- 124 DRUG ; Kill Drug File; Private 125 N %1 S %1=^PSDRUG(0) 126 K ^PSDRUG 127 S ^PSDRUG(0)=%1 128 S $P(^PSDRUG(0),"^",3,4)="" 129 QUIT 130 ; 131 PO ; Kill Pharmacy Orderable Items; Private 132 N %1 S %1=^PS(50.7,0) 133 K ^PS(50.7) 134 S ^PS(50.7,0)=%1 135 S $P(^PS(50.7,0),"^",3,4)="" 136 QUIT 137 ; 122 ; File. Public Entry Point. 123 ; Call this after repopulating the drug file (50) and the pharmacy orderable 124 ; item file (50.7) 125 N PSOIEN ; Looper variable 126 D DT^DICRW ; Establish FM Basic Variables 127 ; 128 ; Loop through Orderable Item file and call 129 ; 1. The Active/Inactive Updater for the Orderable Item 130 ; 2. the protocol file updater to CPRS Files 131 S PSOIEN=0 F S PSOIEN=$O(^PS(50.7,PSOIEN)) Q:'PSOIEN D 132 . D MES^XPDUTL("Syncing Pharamcy Orderable Item "_PSOIEN) 133 . D EN^PSSPOIDT(PSOIEN),EN2^PSSHL1(PSOIEN,"MUP") 134 D CPRS ; Update Orderable Item View files 135 QUIT 136 ; 137 ; -- END Public Entry Points -- 138 ; 139 ; -- The rest is private -- 140 DRUG ; Kill Drug File; Private 141 N %1 S %1=^PSDRUG(0) 142 K ^PSDRUG 143 S ^PSDRUG(0)=%1 144 S $P(^PSDRUG(0),"^",3,4)="" 145 QUIT 146 ; 147 PO ; Kill Pharmacy Orderable Items; Private 148 N %1 S %1=^PS(50.7,0) 149 K ^PS(50.7) 150 S ^PS(50.7,0)=%1 151 S $P(^PS(50.7,0),"^",3,4)="" 152 QUIT 153 ; 138 154 DRUGTEXT ; Kill Drug Text Entries ; Private 139 N %1 S %1=^PS(51.7,0) 140 K ^PS(51.7) 141 S ^PS(51.7,0)=%1 142 S $P(^PS(51.7,0),"^",3,4)="" 143 QUIT 144 ; 145 O ; Kill off Pharamcy Order Items (Only!) in the Orderable Item file; Private 146 N DA ; Used in For loop below 147 N DIK S DIK="^ORD(101.43," 148 N I S I=0 149 FOR S I=$O(^ORD(101.43,"ID",I)) QUIT:I="" DO 150 . I I["PSP" S DA=$O(^ORD(101.43,"ID",I,"")) D ^DIK 151 QUIT 152 ; 153 CPRS ; Now, update the CPRS lists (sync with Orderable Item file) - 154 ; Uses a CPRS API to do this; Private 155 ; Next 3 variables are required as inputs 156 N ATTEMPT S ATTEMPT=0 ; Attempt to Update 157 N UPDTIME S UPDTIME=$HOROLOG ; Update Time 158 N DGNM ; Dialog Name 159 ; IVA RX -> Additives; IVB RX -> Solutions 160 ; IVM RX -> Inpatient Meds for Outpatients 161 ; NV RX -> Non-VA Meds ; O RX -> Outpatient 162 ; UD RX -> Unit Dose 163 FOR DGNM="IVA RX","IVB RX","IVM RX","NV RX","O RX","UD RX" DO 164 . D MES^XPDUTL(" --> Rebuilding "_DGNM) 165 . D FVBLD^ORWUL 166 QUIT 167 ; 155 N %1 S %1=^PS(51.7,0) 156 K ^PS(51.7) 157 S ^PS(51.7,0)=%1 158 S $P(^PS(51.7,0),"^",3,4)="" 159 QUIT 160 ; 161 IVADD ; Kill IV Additives ; Private 162 N %1 S %1=^PS(52.6,0) 163 K ^PS(52.6) 164 S ^PS(52.6,0)=%1 165 S $P(^PS(52.6,0),"^",3,4)="" 166 QUIT 167 ; 168 IVSOL ; Kill IV Solutions ; Private 169 N %1 S %1=^PS(52.7,0) 170 K ^PS(52.7) 171 S ^PS(52.7,0)=%1 172 S $P(^PS(52.7,0),"^",3,4)="" 173 QUIT 174 ; 175 DRUGELEC ; Kill Drug Electrolytes ; Private 176 N %1 S %1=^PS(50.4,0) 177 K ^PS(50.4) 178 S ^PS(50.4,0)=%1 179 S $P(^PS(50.4,0),"^",3,4)="" 180 QUIT 181 ; 182 O ; Kill off Pharamcy Order Items (Only!) in the Orderable Item file; Private 183 N DA ; Used in For loop below 184 N DIK S DIK="^ORD(101.43," 185 N I S I=0 186 FOR S I=$O(^ORD(101.43,"ID",I)) QUIT:I="" DO 187 . I I["PSP" S DA=$O(^ORD(101.43,"ID",I,"")) D ^DIK 188 QUIT 189 ; 190 CPRS ; Now, update the CPRS lists (sync with Orderable Item file) - 191 ; Uses a CPRS API to do this; Private 192 ; Next 3 variables are required as inputs 193 N ATTEMPT S ATTEMPT=0 ; Attempt to Update 194 N UPDTIME S UPDTIME=$HOROLOG ; Update Time 195 N DGNM ; Dialog Name 196 ; IVA RX -> Additives; IVB RX -> Solutions 197 ; IVM RX -> Inpatient Meds for Outpatients 198 ; NV RX -> Non-VA Meds ; O RX -> Outpatient 199 ; UD RX -> Unit Dose 200 FOR DGNM="IVA RX","IVB RX","IVM RX","NV RX","O RX","UD RX" DO 201 . D MES^XPDUTL(" --> Rebuilding "_DGNM) 202 . D FVBLD^ORWUL 203 QUIT 204 ;
Note:
See TracChangeset
for help on using the changeset viewer.