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

ABSPOSII.m

Go to the documentation of this file.
  1. ABSPOSII ; IHS/SD/RLT - DIAGNOSIS CODES form ; [ 06/21/2007 9:30 AM ]
  1. ;;1.0;PHARMACY POINT OF SALE;**23,45,48**;JUN 21, 2007;Build 38
  1. ;
  1. Q
  1. PREINIT ;EP - check for existing record
  1. ; This is the pre-init routine tied to ScreenMan form ABSP INPUT 1
  1. ; page 25 DIAGNOSIS CODE 5.1 ENTRY.
  1. ; This is used during the creation of the "NEW" claim from
  1. ; within POS (called from the "USER" screen) to capture
  1. ; DIAGNOSIS CODE values.
  1. ;
  1. ;OIT/CAS/RCS 06072012 Patch 45 - Use Diagnosis lookup for ICD9/ICD10 Implementation
  1. ;
  1. N RXI,RXR,DIAG,FDA,STRING
  1. ;
  1. ; get the prescription information
  1. S RXI=$$GET^DDSVAL(DIE,.DA,1.01) ;RX IEN
  1. S RXR=$$GET^DDSVAL(DIE,.DA,1.02) ;RX Refill IEN
  1. S DIAG=""
  1. ;
  1. Q:$G(RXI)="" ;no pres - get out
  1. ;
  1. S DIAG=$$GETDIAG^ABSPOSO(RXI,RXR) ;get DIAGNOSIS CODE pointer
  1. ;
  1. I $G(DIAG)'="" D ;DIANOSIS CODE exists
  1. . S STRING(1)="Will add diagnosis code from IEN RX "_RXI ;msg on scrn
  1. . S:+RXR STRING(1)=STRING(1)_" IEN Refill "_RXR
  1. . D HLP^DDSUTL(.STRING) ;displays what is happening
  1. . ;
  1. I $G(DIAG)="" D ;diagnosis code doesn't exist yet
  1. . S DIAG=$$NEW^ABSPOSD3
  1. . S STRING(1)="Will add new diagnosis code "_DIAG
  1. . D HLP^DDSUTL(.STRING)
  1. ;
  1. ; create empty entries for adding new data
  1. D NEWSUB^ABSPOSD3(DIAG)
  1. ;
  1. ; now- update the input data file and the prescription
  1. ;POINTERS REMOVED FROM PRESCRIPTION FILE
  1. ;D UPDRX(RXI,RXR,DIAG)
  1. D PUT^DDSVAL(DIE,.DA,1.15,DIAG,,"I")
  1. ;
  1. ; theres a chance they won't file the claim - hold on to the
  1. ; DIAG so we can clean up empty records if its not filed
  1. ;
  1. S ^TMP("ABSPOSII",$J,DIAG)=RXI_"^"_RXR
  1. ;
  1. N VMED
  1. Q
  1. ;
  1. CLNDIAG(IEN,ENTRY) ;EP from ABSPOSIZ
  1. ; clean up the DIAG file of empty entries
  1. ; and update the RX file when no override information
  1. ; was actually entered for the 5.1 DIAG segment.
  1. ; This routine called from ABSPOSIZ - subroutine FILE
  1. ;
  1. N DIAG,DATAREC
  1. ;
  1. S DATAREC=$G(^ABSP(9002313.51,IEN,2,ENTRY,1))
  1. ;
  1. S DIAG=$P(DATAREC,"^",12)
  1. Q:DIAG="" ;just quit
  1. ;
  1. S RXI=$P(DATAREC,"^")
  1. S RXR=$P(DATAREC,"^",2)
  1. ;
  1. S DIAG=$$CHKDIAG^ABSPOSD3(DIAG) ;good data input?
  1. ;
  1. I $G(DIAG)="" D ;nothing input - delete it
  1. . ;POINTERS REMOVED FROM PRESCRIPTION FILE
  1. . ;D UPDRX(RXI,RXR,DIAG)
  1. . N FDA,ZERR ; /IHS/OIT/RAM ; 12 JUN 17 ; ADD DBS CALL ERROR RETURN VARIABLE
  1. . S FDA(9002313.51,ENTRY_","_IEN_",",1.15)=DIAG
  1. . D FILE^DIE("","FDA","ZERR") ; /IHS/OIT/RAM ; 12 JUN 17 ; UPDATE DBS CALL TO ALLOW FOR ERROR RETURN.
  1. . I $D(ZERR) D LOG^ABSPOSL2("CLNDIAG^ABSPOSII",.ZERR) ; /IHS/OIT/RAM ; 12 JUN 17 ; AND LOG IT IF AN ERROR OCCURS.
  1. ;
  1. D DIAGCNT(DIAG) ;update DIAG count after cleaning
  1. ;
  1. Q
  1. ;
  1. UPDRX(RXI,RXR,DIAG) ;POINTERS REMOVED FROM PRESCRIPTION FILE
  1. ; update the prescription with the DIAG 5.1 information
  1. ; and the ABSP Data Input file with the appropriate value
  1. ;
  1. ; N FDA,ZERR ; /IHS/OIT/RAM ; 12 JUN 17 ; ADD DBS CALL ERROR RETURN VARIABLE
  1. ;
  1. ; DIAG set within POSTINIT
  1. ; RXR - rx refill IEN
  1. ; RXI - rx IEN
  1. ; DIAG - NCPDP 5.1 DIAG segment pointer
  1. ;
  1. ;I '+$G(RXR) D ;NOT a refill
  1. ;. S FDA(52,RXI_",",9999999.17)=DIAG
  1. ;. D FILE^DIE("","FDA","ZERR") ; /IHS/OIT/RAM ; 12 JUN 17 ; UPDATE DBS CALL TO ALLOW FOR ERROR RETURN.
  1. ;. I $D(ZERR) D LOG^ABSPOSL2("UPDRX+13^ABSPOSII",.ZERR) ; /IHS/OIT/RAM ; 12 JUN 17 ; AND LOG IT IF AN ERROR OCCURS.
  1. ;
  1. ;I +$G(RXR) D ;refill
  1. ;. S FDA(52.1,RXR_","_RXI_",",9999999.17)=DIAG
  1. ;. D FILE^DIE("","FDA","ZERR") ; /IHS/OIT/RAM ; 12 JUN 17 ; UPDATE DBS CALL TO ALLOW FOR ERROR RETURN.
  1. ;. I $D(ZERR) D LOG^ABSPOSL2("UPDRX+18^ABSPOSII",.ZERR) ; /IHS/OIT/RAM ; 12 JUN 17 ; AND LOG IT IF AN ERROR OCCURS.
  1. ;
  1. Q
  1. ;
  1. NOCLM ;EP - called from ABSPOSI when the claims are NOT filed - we
  1. ; still must clean up the empty records if they called upon
  1. ; the DIAGNOSIS CODES entry
  1. ;
  1. N DIAGIEN,CLNDIAG,DIAGREC,RXI,RXR
  1. ;
  1. S DIAGIEN=0
  1. F S DIAGIEN=$O(^TMP("ABSPOSII",$J,DIAGIEN)) Q:DIAGIEN="" D
  1. . S DIAGREC=$G(^TMP("ABSPOSII",$J,DIAGIEN))
  1. . S RXI=$P(DIAGREC,"^") ;internal RX number
  1. . S RXR=$P(DIAGREC,"^",2) ;refill number
  1. . S CLNDIAG=$$CHKDIAG^ABSPOSD3(DIAGIEN)
  1. . ;POINTERS REMOVED FROM PRESCRIPTION FILE
  1. . ;D:$G(CLNDIAG)="" UPDRX(RXI,RXR,CLNDIAG)
  1. ;
  1. Q
  1. DIAGCNT(DIAG) ;
  1. ;
  1. Q:DIAG=""
  1. ;
  1. N DIAGIEN,DIAGCNT,DIAGCNTR
  1. ;
  1. S (DIAGIEN,DIAGCNT,DIAGCNTR)=0
  1. F S DIAGIEN=$O(^ABSP(9002313.491,DIAG,1,DIAGIEN)) Q:'+DIAGIEN D
  1. . S DIAGCNT=DIAGCNT+1
  1. . S DIAGCNTR=$P($G(^ABSP(9002313.491,DIAG,1,DIAGIEN,0)),U)
  1. . I DIAGCNTR'=DIAGCNT D
  1. . . D CNTFIX(9002313.4911,DIAG,DIAGIEN,DIAGCNT)
  1. ;
  1. S $P(^ABSP(9002313.491,DIAG,0),U,5)=DIAGCNT
  1. Q
  1. CNTFIX(FILE,REC,SUB,CNT) ;
  1. ;
  1. N FDA
  1. S FDA(FILE,SUB_","_REC_",",.01)=CNT
  1. CNTFILE ;
  1. D FILE^DIE("","FDA","MSG")
  1. I $D(MSG) D LOG^ABSPOSL2("CNTFILE^ABSPOSII",.MSG) ; /IHS/OIT/RAM ; 12 JUN 17 ; AND LOG IT IF AN ERROR OCCURS.
  1. G:$D(MSG) CNTFILE:$$IMPOSS^ABSPOSUE("FM","TRI","FILE^DIE failed",,"CNTFILE",$T(+0))
  1. ;
  1. Q
  1. HELP492 ;EP - Help code for file #9002313.491 - ABSP DIAGNOSIS
  1. ; field #492 - DIAGNOSIS CODE QUALIFIER
  1. N EFFDT,X,ICDFL,FILDT
  1. S ICDFL=0
  1. S EFFDT=$$ICD10DT()
  1. S FILDT=$P(EFFDT,U,2),EFFDT=$P(EFFDT,U)
  1. I EFFDT D
  1. . D NOW^%DTC I FILDT S X=FILDT
  1. . I EFFDT,X'<EFFDT S ICDFL=1
  1. I '$D(^ROUTINE("ICDXCODE")) S ICDFL=0 ;ICD10 NOT INSTALLED AT SITE
  1. ;W !,"00 - Not Specified"
  1. I 'ICDFL W !,"01 - International Classification of Diseases (ICD9)"
  1. ;OIT/CAS/RCS 06072012 Patch 45 - The following line is now uncommented
  1. I ICDFL W !,"02 - International Classification of Diseases (ICD10)"
  1. ;W !,"03 - National Criteria Care Institute (NCCI)"
  1. ;W !,"04 - The Systematized Nomenclature of Human and"
  1. ;W !," Veterinary Medicine (SNOMED)"
  1. ;W !,"05 - Common Dental Terminology (CDT)"
  1. ;W !,"06 - Medi-Span Diagnosis Code (MSDC)"
  1. ;W !,"07 - American Psychiatric Association Diagnostic"
  1. ; !," Statistical Manual of Mental Disorders (DSM IV)"
  1. ;W !,"99 - Other"
  1. Q
  1. HELP424 ;EP - FM help code for file #9002313.491 - ABSP DIAGNOSIS
  1. ; field #424 - DIAGNOSIS CODE
  1. ;OIT/CAS/RCS 06072012 Patch 45 - Rewritten to allow ICD9 and ICD10 based on Implementation date
  1. N RXI,RXVMED,VIS,POVS,PROB,EFFDT,X,ICDFL,FILDT
  1. S RXI=+$P($G(^ABSP(9002313.491,DA(1),0)),U,3)
  1. Q:'RXI
  1. S RXVMED=+$$GETVMED(RXI)
  1. S VIS=+$$GET1^DIQ(9000010.14,RXVMED,.03,"I")
  1. ; Build list of valid ICD9 codes that can be entered for
  1. ; diagnosis override from purpose of visit (V POV) and
  1. ; active problem list (PROBLEM).
  1. ; Get and display V POV list.
  1. ;OIT/CAS/RCS 06072012 Patch 45 - Refer to ICD9 and ICD10 appropriately
  1. S ICDFL=0
  1. S EFFDT=$$ICD10DT()
  1. S FILDT=$P(EFFDT,U,2),EFFDT=$P(EFFDT,U)
  1. I EFFDT D
  1. . D NOW^%DTC I FILDT S X=FILDT
  1. . I EFFDT,X'<EFFDT S ICDFL=1
  1. I '$D(^ROUTINE("ICDXCODE")) S (EFFDT,ICDFL)=0 ;ICD10 NOT INSTALLED AT SITE
  1. I ICDFL W !,"Valid ICD10 codes entered by provider:"
  1. E W !,"Valid ICD9 codes entered by provider:"
  1. D:VIS GETPOVS(VIS,EFFDT,ICDFL)
  1. D DISPPOVS
  1. ; Get and display PROBLEM list.
  1. D GETPROB(RXI,EFFDT,ICDFL)
  1. D DISPPROB
  1. Q
  1. GETVMED(RXI) ;
  1. N RXVMED
  1. ; First try to return the VMED for the first refill.
  1. S RXVMED=+$$GET1^DIQ(52.1,"1,"_RXI_",",9999999.11,"I")
  1. Q:RXVMED RXVMED
  1. ; Otherwise return VMED for the prescription
  1. Q +$$GET1^DIQ(52,RXI,9999999.11,"I")
  1. GETPOVS(VIS,EFFDT,X) ;#9000010.07 - V POV file
  1. N PIEN,CODE,NARR,MES,IMPDT
  1. I EFFDT D
  1. . S IMPDT=$P($G(^ICDS(30,0)),"^",4) I 'IMPDT S X=0
  1. . I X S IMPDT=IMPDT+1
  1. . E S IMPDT=IMPDT-1
  1. S PIEN=0
  1. F S PIEN=$O(^AUPNVPOV("AD",VIS,PIEN)) Q:'PIEN D
  1. . S CODE=$$GET1^DIQ(9000010.07,PIEN,.01)
  1. . Q:CODE=""
  1. . ;OIT/CAS/RCS 06072012 Patch 45 - CHECK FOR VALID ICD9/ICD10 CODE ON DATE
  1. . I EFFDT S MES=$$ICDDATA^ICDXCODE("DIAG",CODE,IMPDT,"E") I $P(MES,"^")=-1 Q ;Invalid ICD code on date
  1. . S NARR=$$GET1^DIQ(9000010.07,PIEN,.04)
  1. . S POVS(CODE)=NARR
  1. Q
  1. DISPPOVS ;
  1. N CODE,NARR
  1. W !,"VISIT POV List:"
  1. I '$D(POVS) D
  1. . W !,?3,"No V POVS found."
  1. I $D(POVS) D
  1. . S CODE=""
  1. . F S CODE=$O(POVS(CODE)) Q:CODE="" D
  1. .. S NARR=$G(POVS(CODE))
  1. .. W !,?3,CODE,?15,NARR
  1. Q
  1. GETPROB(RXI,EFFDT,X) ;#9000011 - PROBLEM file
  1. N DFN,PIEN,CODE,NARR,MES,IMPDT
  1. I EFFDT D
  1. . S IMPDT=$P($G(^ICDS(30,0)),"^",4) I 'IMPDT S X=0
  1. . I X S IMPDT=IMPDT+1
  1. . E S IMPDT=IMPDT-1
  1. S DFN=+$$GET1^DIQ(52,RXI,2,"I")
  1. I $D(^AUPNPROB("AC",DFN)) D
  1. . S PIEN=0
  1. . F S PIEN=$O(^AUPNPROB("AC",DFN,PIEN)) Q:'PIEN D
  1. .. S CODE=$$GET1^DIQ(9000011,PIEN,.01)
  1. .. Q:CODE=""
  1. .. ;OIT/CAS/RCS 06072012 Patch 45 - CHECK FOR VALID ICD9/ICD10 CODE ON DATE
  1. .. I EFFDT S MES=$$ICDDATA^ICDXCODE("DIAG",CODE,IMPDT,"E") I $P(MES,"^")=-1 Q ;Invalid ICD code on date
  1. .. S NARR=$$GET1^DIQ(9000011,PIEN,.05)
  1. .. S PROB(CODE)=NARR
  1. Q
  1. DISPPROB ;
  1. N CODE,NARR
  1. W !,"PROBLEM List:"
  1. I '$D(PROB) D
  1. . W !,?3,"No PROBLEM entry found."
  1. I $D(PROB) D
  1. . S CODE=""
  1. . F S CODE=$O(PROB(CODE)) Q:CODE="" D
  1. .. S NARR=$G(PROB(CODE))
  1. .. W !,?3,CODE,?15,NARR
  1. Q
  1. ; Not sure which input transform to use yet, CHK424 or CHK424B.
  1. ; It was decided (Mike Danielson) to just check for valid entry in
  1. ; the ICD9 file (tag CHK424) to accommodate outside providers and
  1. ; the delay in getting the data entered. Keeping tag CHK424B just
  1. ; in case they change their minds.
  1. CHK424(CODE) ;EP - FM input code for file #9002313.491 - ABSP DIAGNOSIS
  1. ; field #424 - DIAGNOSIS CODE
  1. ; This input transform just checks for a valid ICD9 code.
  1. Q:$TR(CODE," ")="" 1 ;invalid ICD9 code, all spaces
  1. N CODELKUP,CODEIEN,CODESTAT,MES,ICDFL,EFFDT,X,IMPDT,FILDT
  1. S EFFDT=$$ICD10DT()
  1. S FILDT=$P(EFFDT,U,2),EFFDT=$P(EFFDT,U)
  1. I '$D(^ROUTINE("ICDXCODE")) S EFFDT=0 ;ICD10 NOT INSTALLED
  1. I EFFDT D
  1. . D NOW^%DTC I FILDT S X=FILDT
  1. . I EFFDT,X'<EFFDT S ICDFL=1
  1. . E S ICDFL=0
  1. . S IMPDT=$P($G(^ICDS(30,0)),"^",4) I 'IMPDT S EFFDT=0 Q
  1. . I ICDFL S IMPDT=IMPDT+1
  1. . E S IMPDT=IMPDT-1
  1. ; Try lookup with code as is.
  1. ;OIT/CAS/RCS 06072012 Patch 45 - Add ICD9/ICD10 lookup
  1. I EFFDT S MES=$$ICDDATA^ICDXCODE("DIAG",CODE,IMPDT,"E") I $P(MES,U,2)=CODE Q 0 ;valid ICD code for date
  1. I 'EFFDT D Q:ICDCODE=CODE 0 ;valid ICD9 code
  1. . S CODEIEN=$O(^ICD9("BA",CODE,""),-1)
  1. . S ICDCODE=$P($$ICDDX^ICDCODE(CODEIEN),U,2)
  1. ; Try looking up with trailing space.
  1. S CODELKUP=CODE_" "
  1. ;OIT/CAS/RCS 06072012 Patch 45 - Add ICD9/ICD10 lookup
  1. I EFFDT S MES=$$ICDDATA^ICDXCODE("DIAG",CODELKUP,IMPDT,"E") I $P(MES,U,2)=CODE Q 0 ;valid ICD code for date
  1. I 'EFFDT D Q:ICDCODE=CODE 0 ;valid ICD9 code
  1. . S CODEIEN=$O(^ICD9("BA",CODELKUP,""),-1)
  1. . S ICDCODE=$P($$ICDDX^ICDCODE(CODEIEN),U,2)
  1. ; Try looking up without trailing zeros and periods.
  1. S CODELKUP=CODE
  1. F D Q:$E(CODELKUP,$L(CODELKUP))'=0
  1. . I $E(CODELKUP,$L(CODELKUP))=0 S CODELKUP=$E(CODELKUP,1,$L(CODELKUP)-1)
  1. I $E(CODELKUP,$L(CODELKUP))="." S CODELKUP=$P(CODELKUP,".")
  1. Q:CODELKUP="" 1 ;invalid ICD9 code, all zeros
  1. ;OIT/CAS/RCS 06072012 Patch 45 - Add ICD9/ICD10 lookup
  1. I EFFDT S MES=$$ICDDATA^ICDXCODE("DIAG",CODELKUP,IMPDT,"E") I $P(MES,U,2)=CODE Q 0 ;valid ICD code for date
  1. I 'EFFDT D Q:ICDCODE=CODE 0 ;valid ICD9 code
  1. . S CODEIEN=$O(^ICD9("BA",CODELKUP,""),-1)
  1. . S ICDCODE=$P($$ICDDX^ICDCODE(CODEIEN),U,2)
  1. Q 1 ;invalid ICD9 code
  1. ;
  1. CHK492 ;;OIT/CAS/RCS 06072012 Patch 45 - Field 492 default value, assumes todays date
  1. ;FROM SCREEN 25
  1. N EFFDT,X,FILDT
  1. S Y="01" ;DEFAULT
  1. I '$D(^ROUTINE("ICDXCODE")) Q ;ICD10 NOT INSTALLED AT SITE
  1. S EFFDT=$$ICD10DT()
  1. S FILDT=$P(EFFDT,U,2),EFFDT=$P(EFFDT,U)
  1. D NOW^%DTC I FILDT S X=FILDT
  1. I EFFDT,X'<EFFDT S Y="02"
  1. E S Y="01"
  1. Q
  1. CHK424B(X) ;EP - FM input code for file #9002313.491 - ABSP DIAGNOSIS
  1. ; field #424 - DIAGNOSIS CODE
  1. ; This input transform limits the valid ICD9 codes to those found
  1. ; in V POV and PROBLEM lists.
  1. N RXI,RXVMED,VIS,POVS,PROB,CODE
  1. S RXI=+$P($G(^ABSP(9002313.491,DA(1),0)),U,3)
  1. Q:'RXI 0
  1. S RXVMED=+$$GETVMED(RXI)
  1. S VIS=+$$GET1^DIQ(9000010.14,RXVMED,.03,"I")
  1. ; Build list of valid ICD9 codes that can be entered for
  1. ; diagnosis override from purpose of visit (V POV) and
  1. ; active problem list (PROBLEM).
  1. ; Get V POV list.
  1. D:VIS GETPOVS(VIS)
  1. ; Get PROBLEM list.
  1. D GETPROB(RXI)
  1. ; Look for code match in V POV list
  1. Q:$D(POVS(X)) 0 ;found in V POV list - valid code
  1. ; Look for code match in PROBLEM list
  1. Q:$D(PROB(X)) 0 ;found in PROBLEM list - valid code
  1. Q 1 ;not found in either list - invalid code
  1. ;
  1. ICD10DT(X) ;OIT/CAS/RCS 06072012 Patch 45 - Find ICD10 Effective date to use for interface
  1. ;Return ICD10 Effective date and Fill/Refill date
  1. N GENDT,RXI,RXR,Y,IEN59,INSIEN,INSDT,FDT
  1. ;Find POS General ICD10 effective date
  1. S GENDT=$P($G(^ABSP(9002313.99,1,"ICD10")),U) I 'GENDT Q "0^0"
  1. ;Find Insurer ICD10 effective date
  1. S RXI=$G(^TMP("DDS",$J,$P(DDS,U),"F9002313.512",DDSDAORG_","_DDSDAORG(1)_",",1.01,"D"))
  1. S RXR=$G(^TMP("DDS",$J,$P(DDS,U),"F9002313.512",DDSDAORG_","_DDSDAORG(1)_",",1.02,"D"))
  1. I 'RXI Q GENDT_"^0" ;Cannot find Rx
  1. ;Find Fill Date
  1. I 'RXR S FDT=$P($G(^PSRX(RXI,2)),U,2) ;Fill date
  1. E S FDT=$P($G(^PSRX(RXI,1,RXR,0)),U) ;Refill date
  1. S Y=(RXR*10)+1,Y=$E("00000",1,5-$L(Y))_Y,IEN59=RXI_"."_Y
  1. I $G(^ABSPT(IEN59,1))="" Q GENDT_"^"_FDT ;Cannot find Rx transaction
  1. S INSIEN=$P($G(^ABSPT(IEN59,1)),U,6) I 'INSIEN Q GENDT
  1. S INSDT=$P($G(^ABSPEI(INSIEN,"ICD10")),U) I 'INSDT Q GENDT_"^"_FDT
  1. Q INSDT_"^"_FDT