Changeset 1404 for pharmacy-utils/drug-file-cleanup
- Timestamp:
- Apr 13, 2012, 3:52:07 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pharmacy-utils/drug-file-cleanup/VWPSSXPD.m
r1401 r1404 1 VWPSSXPD ; VW/SMH - Update the Drug File and friends... ; Wed Apr 12 2012 2 ;;WorldVista Modifications;1.0;;;Build 3 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 and ^PS(50.6) 13 ; On the Destination System: 14 ; 1. Call KILLDRUG to remove all Drug Data 15 ; 2. Restore a global containing a Drug File (^PSDRUG) and Pharmacy Orderable 16 ; Item file (^PS(50.6)) created on the origin system. 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 problem 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 ; 39 ; --- ()()() --- 40 ; 41 ; PEPs: KILLDRUG to remove all Drugs 42 ; RESTOCK to add the drugs back to CPRS 43 ; 44 ; KIDS EPs: 45 ; ENV -> Environment Check 46 ; TRAN -> Pre-Transport Routine (to get data from original system) 47 ; PRE -> Pre-Init for the Destination System 48 ; POST -> Post-Init for the Destination System 49 ; 50 ; KIDS EPs call PEPs to do their work. 51 ; 52 ; Environment Check falls through from the top 53 ; 54 ; -- START KIDS HOOKS -- 55 ; 56 ENV ; Environment Check Routine; KIDS EP; top fallthough 57 N VWPROD S VWPROD=$$PROD^XUPROD() ; Check if a production acc; +ve val is yes 58 W $$CJ^XLFSTR("------ WARNING WARNING WARNING -----",80),!! ; Center Justify 59 W "This package will delete your drug file and add a new drug file contained",! 60 W "in the distribution.",!! 61 W "If you have patient pharmacy data, this will CORRUPT your database.",!! 62 W "You are running in a "_$S(VWPROD:"Production",1:"Test")_" Environment.",!! 63 W "Are you sure you want to continue? Type a full YES/yes if you want to proceed)",! 64 N X R "ANSWER: ",X 65 S X=$$UP^XLFSTR(X) ; uppercase 66 I X'="YES" S XPDQUIT=1 ; Quit if the user doesn't say yes 67 QUIT 68 ; 69 TRAN ; Pre-Transport routine for KIDS to ship off the 50 and 50.7 globals 70 M @XPDGREF@("VWPSSXPD",50)=^PSDRUG 71 M @XPDGREF@("VWPSSXPD",50.7)=^PS(50.7) 72 QUIT 73 ; 74 PRE ; Pre-Init routine for KIDS 75 DO KILLDRUG ; Remove old drugs from system. 76 QUIT 77 ; 78 POST ; Post-Init routine for KIDS 79 ; Load new drugs into system 80 M ^PSDRUG=@XPDGREF@("VWPSSXPD",50) 81 M ^PS(50.7)=@XPDGREF@("VWPSSXPD",50.7) 82 ; Restock the CPRS files from the new drug files 83 DO RESTOCK 84 QUIT 85 ; 86 ; -- END KIDS HOOKS -- 87 ; 88 ; -- BEGIN Public Entry Points -- 89 KILLDRUG ; Remove all Drug Data. PEP. Use this to call the routine. 90 D DT^DICRW ; Min FM Vars 91 D MES^XPDUTL("Killing Drug File (50)") D DRUG 92 D MES^XPDUTL("Killing Pharmacy Orderable Item (OI) File (50.7)") D PO 93 D MES^XPDUTL("Removing Pharmacy OIs from the Orderable Item file (101.43)") D O 94 D MES^XPDUTL("Syncing the Order Quick View file (101.44)") D CPRS 95 QUIT 96 ; 97 RESTOCK ; Restock CPRS Orderable Items from new Drug & Pharmacy Orderable Item 98 ; File. Public Entry Point. 99 ; Call this after repopulating the drug file (50) and the pharmacy orderable 100 ; item file (50.7) 101 N PSOIEN ; Looper variable 102 D DT^DICRW ; Establish FM Basic Variables 103 ; 104 ; Loop through Orderable Item file and call the protocol file updater to CPRS 105 ; Files 106 S PSOIEN=0 F S PSOIEN=$O(^PS(50.7,PSOIEN)) Q:'PSOIEN D 107 . D MES^XPDUTL("Syncing Pharamcy Orderable Item "_PSOIEN) 108 . D EN^PSSPOIDT(PSOIEN),EN2^PSSHL1(PSOIEN,"MUP") 109 D CPRS ; Update Orderable Item View files 110 QUIT 111 ; 112 ; -- END Public Entry Points -- 113 ; 114 ; -- The rest is private -- 115 DRUG ; Kill Drug File; Private 116 N %1 S %1=^PSDRUG(0) 117 K ^PSDRUG 118 S ^PSDRUG(0)=%1 119 S $P(^PSDRUG(0),"^",3,4)="" 120 QUIT 121 ; 122 PO ; Kill Pharmacy Orderable Items; Private 123 N %1 S %1=^PS(50.7,0) 124 K ^PS(50.7) 125 S ^PS(50.7,0)=%1 126 S $P(^PS(50.7,0),"^",3,4)="" 127 QUIT 128 ; 129 O ; Kill off Pharamcy Order Items (Only!) in the Orderable Item file; Private 130 N DA ; Used in For loop below 131 N DIK S DIK="^ORD(101.43," 132 N I S I=0 133 FOR S I=$O(^ORD(101.43,"ID",I)) QUIT:I="" DO 134 . I I["PSP" S DA=$O(^ORD(101.43,"ID",I,"")) D ^DIK 135 QUIT 136 ; 137 CPRS ; Now, update the CPRS lists (sync with Orderable Item file) - 138 ; Uses a CPRS API to do this; Private 139 ; Next 3 variables are required as inputs 140 N ATTEMPT S ATTEMPT=0 ; Attempt to Update 141 N UPDTIME S UPDTIME=$HOROLOG ; Update Time 142 N DGNM ; Dialog Name 143 ; IVA RX -> Additives; IVB RX -> Solutions 144 ; IVM RX -> Inpatient Meds for Outpatients 145 ; NV RX -> Non-VA Meds ; O RX -> Outpatient 146 ; UD RX -> Unit Dose 147 FOR DGNM="IVA RX","IVB RX","IVM RX","NV RX","O RX","UD RX" DO 148 . D MES^XPDUTL(" --> Rebuilding "_DGNM) 149 . D FVBLD^ORWUL 150 QUIT 151 ; 1 VWPSSXPD ; VW/SMH - Update the Drug File and friends... ; Wed Apr 13 2012 2 ;;WorldVista Modifications;1.0;;;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 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 ; 106 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 ; 138 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 ;
Note:
See TracChangeset
for help on using the changeset viewer.