Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: AMERPCC2

AMERPCC2.m

Go to the documentation of this file.
  1. AMERPCC2 ; IHS/OIT/SCR - SUPPORTING ROUTINES FOR V POV SYNCHING ;
  1. ;;3.0;ER VISIT SYSTEM;**1,3,6**;MAR 03, 2009;Build 30
  1. ;
  1. SYNCHPOV(AMERDA,AMERPCC,AMERPAT,AMERTIME,AMERDOC,AMERCLN) ; EP from SYNCHPCC^AMERPCC
  1. ;AMER*3.0*6;AMER no longer storing DX information directly to AMER
  1. ; ;Information now gets updated using SYNC^AMERPOV
  1. Q
  1. ; Q ; DX SYNCHRONIZATION VALIDATION BETWEEN ER VISIT FILE AND V POV NOW MANAGED ELSEWHERE
  1. ; This routine LOOKS AT EACH V POV entry and tries to find it in ERS for comparison
  1. ; IF differences exist will prompt user to identify which data to save
  1. ; When each V POV entry has been looked at, each ERS entry is examined in VPOVUPDT
  1. ; IF DX codes exist in the ERS entry that aren't in V POV user is prompted to identify which data to save
  1. ; INPUT:
  1. ; AMERDA - IEN OF ER VISIT FILE
  1. ; AMERPCC - IEN OF VISIT FILE
  1. ; AMERPAT -IEN OF PATIENT FILE
  1. ; AMERTIME - DATE TIME OF VISIT
  1. ; AMERDOC - PROVIDER IEN
  1. ; AMERCLN - NAME OF CLINIC STOP (EMERGENCY OR URGENT CARE)
  1. N AMERVERR,AMEREPOV,AMERENAR,AMERVNAR,AMERVPOV,AMER9999,AMERPDX,AMERDX,AMERPNAR,AMERICD9,AMERPOV,AMERNXT,AMERANS,AMERDONE,AMERFND
  1. ;N AMERSLNT,AMER9999,AMERV999,AMERE999,AMERVICD,AMERNDXI
  1. N AMER9999,AMERV999,AMERE999,AMERVICD,AMERNDXI
  1. ; This routine updates V POV entires with DX information in ER VISIT file
  1. ; First get any CODES that are in V POV
  1. ;S AMERDONE=0,AMERSLNT=0
  1. S AMERDONE=0
  1. S AMERV999=0 ;COUNTS HOW MANY 999 CODES ARE IN V POV ENTRIES
  1. S AMERE999=0 ; COUNTS HOW MANY 9999 CODES WERE MATCHED IN ERS
  1. S AMER9999=$P($$ICDDX^ICDCODE(".9999",,,1),U,1) ;POINTER TO .9999 CODE IN ICD9 CODE - THIS CODE CAN BE ENTERED MORE THAN ONCE
  1. S AMERPDX=$P($G(^AMERVSIT(AMERDA,5.1)),U,2) ; PRIMARY DX POINTER
  1. S AMERPNAR=$P($G(^AMERVSIT(AMERDA,5.1)),U,3) ; PRIMARY NARRATIVE
  1. K APCLV
  1. S AMERVERR=$$PCCVF^APCLV(AMERPCC,"POV","5;7;11;12;14;17")
  1. ; This will return:
  1. ; APCLV(x)=^^^^internal value of V POV^^ ICD9 code^^^^Cause of injury^place of injury^provider narrative^date of injury
  1. ; for each V POV x in the file for this visit
  1. S AMERVPOV=0,AMERVIEN=""
  1. F S AMERVPOV=$O(APCLV(AMERVPOV)) Q:AMERVPOV="" D
  1. .S AMERVIEN=$P(APCLV(AMERVPOV),U,5)
  1. .S AMERVICD=$P(APCLV(AMERVPOV),U,7)
  1. .;IHS/OIT/SCR 2/4/09 try to deal with VA LOCAL CODE PROBLEM start changes
  1. .;I AMER9999=$P($$ICDDX^ICDCODE(AMERVICD,,,1),U,1) S AMERV999=AMERV999+1 ;THIS IS THE NUMBER OF .9999 CODES SO FAR
  1. .S AMERVDXI=$P($$ICDDX^ICDCODE(AMERVICD,,,1),U,1)
  1. .I AMERVDXI<1 D
  1. ..S AMERVDXI=$P($$ICDDX^ICDCODE(".9999",,,1),U,1) ;start by setting it to 'uncoded'
  1. ..I AMERVICD="VA LOCAL CODE SELECTED" D
  1. ...;LOOK IT UP THROUGH FILEMAN
  1. ...S DIC="^AUPNVPOV(",DIC(0)="NX",X="`"_$P(APCLV(AMERVPOV),"^",5)
  1. ...D ^DIC
  1. ...I Y'=-1 S AMERVDXI=$P(Y,"^",2) ;brings back the ICD ien
  1. ...S AMERVICD=$P($$ICDDX^ICDCODE(AMERVDXI,,,1),U,2) ;brings back the code
  1. ..Q
  1. ..;I AMER9999=AMERVDXI S AMERV999=AMERV999+1 ;THIS IS THE NUMBER OF PCC .9999 CODES SO FAR
  1. .;IHS/OIT/SCR 2/4/09 try to deal with VA LOCAL CODE PROBLEM end changes
  1. .I AMERVPOV=1 D ; IF THIS IS THE FIRST V POV RETURNED
  1. ..;I $P($$ICDDX^ICDCODE(+AMERPDX,,,1),U,2)'=$P(APCLV(AMERVPOV),U,7) D
  1. ..I $P($$ICDDX^ICDCODE(+AMERPDX,,,1),U,2)'=AMERVICD D
  1. ...;IHS/OIT/SCR 12/19 - if the values are different, user needs to choose
  1. ...D EN^DDIOL("**The PRIMARY DX in the PCC VISIT file is different from ERS PRIMARY DX**","","!!?3")
  1. ...D EN^DDIOL("PCC VISIT VALUE: "_AMERVICD_" - "_$P(APCLV(AMERVPOV),U,14),"","!?3")
  1. ...D EN^DDIOL("ERS ENTERED VALUE: "_$P($$ICDDX^ICDCODE(+AMERPDX,,,1),U,2)_" - "_AMERPNAR,"","!?3")
  1. ...S DIR(0)="SO^1:Correct PCC data using ERS data;2:Correct ERS data using PCC data"
  1. ...S DIR("A")="Which would you like to do"
  1. ...D ^DIR K DIR
  1. ...S AMERANS=+Y
  1. ...I Y=""!(Y="^")!(AMERANS=2) D ;if user selects to or up-hats out, keep PCC info
  1. ....D SYNCHERX^AMERERS(AMERDA,AMERPCC) ;REPLACE ANY ER VISIT DX INFO WITH INFO THAT IS IN PCC AND STOP
  1. ....S AMERDONE=1
  1. ....Q
  1. ...I AMERANS=1 D
  1. ....; UPDATE THE PCC VISIT WITH THE PRIMARY DX THE USER JUST ENTERED - START BY DELETING WHAT IS THERE
  1. ....I $$DELETPOV^AMERVSIT(AMERPCC)=0 D EN^DDIOL("THERE WAS A PROBLEM DELETING V POV ENTRIES","","!!")
  1. ....K APCLV ; ALL V POVS WERE DELETED, SO GET RID OF THIS ARRAY, AND BUILD IT AGAIN
  1. ....S AMERVPOV=0 ; RESET LOOP VARIABLE to get out of loop
  1. ....S AMERVERR=$$PCCVF^APCLV(AMERPCC,"POV","5;7;11;12;14;17")
  1. ....;S AMERSLNT=1
  1. ....Q
  1. ...Q
  1. ..Q:((AMERVPOV<1)!AMERDONE)
  1. ..S AMERVNAR=$P(APCLV(AMERVPOV),U,14) ;IHS/OIT/SCR patch 1
  1. ..S AMERVNAR=$$STRIPNAR(AMERVNAR) ;IHS/OIT/SCR - remove ";" from narrative
  1. ..;I (AMERPNAR'=$P(APCLV(AMERVPOV),U,14)) D
  1. ..I (AMERPNAR'=AMERVNAR) D ;IHS/OIT/SCR patch 1
  1. ...D EN^DDIOL("**The value for PRIMARY NARRATIVE in the PCC visit file is different from ERS NARRATIVE**","","!!?3")
  1. ...;D EN^DDIOL("PCC VISIT VALUE: "_AMERVICD_" - "_$P(APCLV(AMERVPOV),U,14),"","!?3")
  1. ...D EN^DDIOL("PCC VISIT VALUE: "_AMERVICD_" - "_AMERVNAR,"","!?3")
  1. ...D EN^DDIOL("ERS ENTERED VALUE: "_$P($$ICDDX^ICDCODE(+AMERPDX,,,1),U,2)_" - "_AMERPNAR,"","!?3")
  1. ...S DIR(0)="SO^1:Correct PCC data using ERS data;2:Correct ERS data using PCC data"
  1. ...S DIR("A")="Which would you like to do"
  1. ...D ^DIR K DIR
  1. ...S AMERANS=+Y
  1. ...;I Y=""!(Y="^")!(AMERANS=2) D
  1. ...I (AMERANS=0)!(AMERANS=2) D Q ;IHS/OIT/GIS 8/23/11 patch 3
  1. ....;UPDATE ERS PRIMARY NARRATIVE WITH THE NARRATIVE FOR THIS PCC DX
  1. ....;IHS/OIT/SCR 05/14/09 ...But this means updating in PRIMARY and in DX MULTIPLE...
  1. ....;S DR=$S(DR'="":DR_";",1:""),DR=DR_"5.3////"_AMERVNAR
  1. ....;S DIE="^AMERVSIT(DA(1),5,",DA(1)=AMERDA,DA=AMERINDX,DR=""
  1. ....;S DR="1////"_$P(APCLV(AMERVPOV),U,14)
  1. ....;S DR="1////"_AMERVNAR ;IHS/OIT/SCR 05/05/09
  1. ....;D MULTDIE^AMEREDIT(DIE,DA,DA(1),DR)
  1. ....S DR="5.3////"_AMERVNAR
  1. ....D DIE^AMEREDIT(AMERDA,DR)
  1. ....;K DIE
  1. ....;now you have to find the old narrative in the multiple DX file; check code and replace
  1. ....S AMERINDX=0
  1. ....S AMERINDX=0,AMERFND=0
  1. ....I AMER9999=AMERVDXI S AMERV999=AMERV999+1 ;THIS IS THE NUMBER OF PCC .9999 CODES THAT AREN'T PRIMARY SO FAR
  1. ....F S AMERINDX=$O(^AMERVSIT(AMERDA,5,AMERINDX)) Q:AMERINDX="B"!AMERFND D
  1. .....I AMERINDX="" S AMERINDX="B" ;if we have no DX info for some reason, get out of loop
  1. .....I (AMERPNAR=$G(^AMERVSIT(AMERDA,5,AMERINDX,1)))&(AMERPDX=$G(^AMERVSIT(AMERDA,5,AMERINDX,0))) D Q
  1. ......S DIE="^AMERVSIT(DA(1),5,",DA(1)=AMERDA,DA=AMERINDX,DR=""
  1. ......D MULTDIE^AMEREDIT(DIE,DA,DA(1),DR)
  1. ......S AMERFND=1
  1. ......Q
  1. .....Q
  1. ....Q
  1. ....I AMERFND=0 D ;This primary DX was not found in the ERS record...synch with PCC now
  1. .....D EN^DDIOL("Corrupted ERS DX record found","","!!")
  1. .....D EN^DDIOL("Replacing with PCC V POV entries","","!!")
  1. .....D SYNCHERX^AMERERS(AMERDA,AMERPCC) ;REPLACE ANY ER VISIT DX INFO WITH INFO THAT IS IN PCC AND STOP
  1. .....S AMERDONE=1
  1. .....Q
  1. ....Q
  1. ...I AMERANS=1 D UPDTNAR^AMERVSIT(AMERVIEN,AMERPNAR) ;IHS/OIT/GIS 8/23/11 patch 3
  1. ...Q ;IF AMERENAR'=$P(APCLV(AMERVPOV),U,14)
  1. ..Q
  1. .I AMERVPOV>1 D
  1. ..;THIS IS NOT THE PRIMARY DX IN PCC, LOOK FOR IT IN THE ER VISIT FILE DIAGNOSIS SUB-ENTRIES
  1. ..;IF IT IS THERE COMPARE THE TWO NARRATIVES AND GIVE USER A CHANCE TO UPDATE WITH CHOOSEN VERSION
  1. ..;IF IT IS NOT THERE ASK THE USER IF THEY WANT TO ADD THE CODE TO ERS, OR REMOVE IT FROM PCC
  1. ..S AMERINDX=0,AMERFND=0,AMERNXT=0,AMERE999=0
  1. ..I AMER9999=AMERVDXI S AMERV999=AMERV999+1 ;THIS IS THE NUMBER OF PCC .9999 CODES THAT AREN'T PRIMARY SO FAR
  1. ..F S AMERINDX=$O(^AMERVSIT(AMERDA,5,AMERINDX)) Q:AMERINDX="B"!AMERFND D
  1. ...S AMERDX=^AMERVSIT(AMERDA,5,AMERINDX,0)
  1. ...;S AMERNAR=$G(^AMERVSIT(AMERDA,5,AMERINDX,1))
  1. ...S AMERENAR=$G(^AMERVSIT(AMERDA,5,AMERINDX,1))
  1. ...;Q:(AMERDX=AMERPDX)&(AMERNAR=AMERPNAR) ;IHS/OIT/SCR 01/13/08 - if this is the primary DX, don't mess with it
  1. ...Q:(AMERDX=AMERPDX)&(AMERENAR=AMERPNAR) ;IHS/OIT/SCR 01/13/08 - if this is the primary DX, don't mess with it
  1. ...I AMERDX=AMER9999 S AMERE999=AMERE999+1
  1. ...Q:(AMERDX=AMER9999)&(AMERE999<AMERV999) ;if this is a .9999 code and we've already considered it, move on
  1. ...I $P($$ICDDX^ICDCODE(+AMERDX,,,1),U,2)=AMERVICD D
  1. ....S AMERFND=1
  1. ....;I AMERNAR'=$P(APCLV(AMERVPOV),U,14) D
  1. ....I AMERENAR'=$P(APCLV(AMERVPOV),U,14) D
  1. .....S AMERVNAR=$$STRIPNAR(AMERVNAR) ;IHS/OIT/SCR 5/5/09 patch 1
  1. .....D EN^DDIOL("**The value for NARRATIVE in the PCC visit file is different from ERS NARRATIVE**","","!!?3")
  1. .....D EN^DDIOL("PCC VISIT VALUE: "_AMERVICD_" - "_$P(APCLV(AMERVPOV),U,14),"","!?3")
  1. .....;D EN^DDIOL("PCC VISIT VALUE: "_AMERVICD_" - "_AMERVNAR,"","!?3") ;IHS/OIT/SCR 5/5/09 patch 1
  1. .....;D EN^DDIOL("ERS ENTERED VALUE: "_$P($$ICDDX^ICDCODE(+AMERDX,,,1),U,2)_" - "_AMERNAR,"","!?3")
  1. .....D EN^DDIOL("ERS ENTERED VALUE: "_$P($$ICDDX^ICDCODE(+AMERDX,,,1),U,2)_" - "_AMERENAR,"","!?3") ;IHS/OIT/SCR 5/5/09 patch 1
  1. .....S DIR(0)="SO^1:Correct PCC data using ERS data;2:Correct ERS data using PCC data"
  1. .....S DIR("A")="Which would you like to do"
  1. .....D ^DIR K DIR
  1. .....S AMERANS=+Y
  1. .....;I Y=""!(Y="^")!(AMERANS=2) D ;IHS/OIT/SCR 5/5/09 patch 1
  1. .....I (AMERANS=0)!(AMERANS=2) D ;IHS/OIT/GIS 8/23/11 patch 3
  1. ......;UPDATE ERS NARRATIVE WITH THE NARRATIVE FOR THIS PCC DX
  1. ......S DIE="^AMERVSIT(DA(1),5,",DA(1)=AMERDA,DA=AMERINDX,DR=""
  1. ......;IHS/OIT/SCR 5/5/09 first strip ";"
  1. ......;S DR="1////"_$P(APCLV(AMERVPOV),U,14)
  1. ......S DR="1////"_AMERVNAR ;IHS/OIT/SCR 05/05/09
  1. ......D MULTDIE^AMEREDIT(DIE,DA,DA(1),DR)
  1. ......K DIE
  1. ......Q
  1. .....I Y=1 D UPDTNAR^AMERVSIT(AMERVIEN,AMERENAR)
  1. .....Q
  1. ....Q ;IF AMERENAR'=$P(APCLV(AMERVPOV),U,14)
  1. ...Q
  1. ..I 'AMERFND D
  1. ...D EN^DDIOL("**There is no ERS DIAGNOSIS CODE CORRESPONDING TO V POV ENTRY**","","!!?3")
  1. ...D EN^DDIOL("PCC VISIT VALUE: "_AMERVICD_" - "_$P(APCLV(AMERVPOV),U,14),"","!?3")
  1. ...S DIR(0)="SO^1:Correct ERS data by adding this diagnosis;2:Correct PCC data by removing this V POV entry"
  1. ...S DIR("A")="Which would you like to do"
  1. ...D ^DIR K DIR
  1. ...S AMERANS=+Y
  1. ...;I Y=""!(Y="^")!(AMERANS=1) D
  1. ...I (AMERANS=0)!(AMERANS=1) D
  1. ....;ADD THIS V POV DX TO ERS VISIT
  1. ....;S AMERNDXI=$P($$ICDDX^ICDCODE(AMERVICD,,,1),U,1)
  1. ....S AMERVNAR=$P(APCLV(AMERVPOV),U,14)
  1. ....S AMERVNAR=$$STRIPNAR(AMERVNAR) ;IHS/OIT/SCR 05/05/09 - remove ";" from narrative
  1. ....;CAN'T USE DIE TO ADD A SUBENTRY...WE WANT TO USE DIC
  1. ....;S DIE="^AMERVSIT(DA(1),5,",DA(1)=AMERDA,DA=AMERNXT,DR=""
  1. ....;S DR=".01////"_AMERVDXI
  1. ....;S DR=DR_";1////"_AMERNNAR
  1. ....;D MULTDIE^AMEREDIT(DIE,DA,DA(1),DR)
  1. ....;K DIE
  1. ....S DA(1)=AMERDA,DIC="^AMERVSIT("_DA(1)_",5,",DIC(0)="" ; DIAGNOSES
  1. ....S X=AMERVDXI
  1. ....D FILE^DICN
  1. ....Q:+Y<0
  1. ....S DIE=DIC,DA(1)=AMERDA,DA=+Y,DR="1////"_AMERVNAR
  1. ....D ^DIE
  1. ....K DIC,DIE,DA,Y,DR
  1. ....Q
  1. ...I AMERANS=2 D
  1. ....;REMOVE THE V POV ENTRY
  1. ....L +^AUPNVPOV:3 E Q
  1. ....S DA=AMERVIEN,DIK="^AUPNVPOV(" D ^DIK,EN^DIK
  1. ....L -^AUPNVPOV
  1. ....Q
  1. ....;K APCLV(AMERVPOV) ;
  1. ..Q
  1. .Q
  1. Q:AMERPDX="" ; Don't try to update AUPNVPOV if no primary DX has been identified in ERS
  1. Q:AMERDONE ;If the routine has just updated ERS to match PCC its done
  1. D VPOVUPDT^AMERPCC3(AMERPAT,AMERPCC,AMERTIME,AMERDOC)
  1. Q
  1. STRIPNAR(AMERSTG) ;IHS/OIT/SCR 050709
  1. S AMERSTG=$TR(AMERSTG,";","~")
  1. Q AMERSTG