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

RCXVDC4.m

Go to the documentation of this file.
  1. RCXVDC4 ;DAOU/ALA-AR Data Extraction Data Creation ;02-JUL-03
  1. ;;4.5;Accounts Receivable;**201,227,228,248,251,256,262,281**;Mar 20, 1995;Build 6
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ; Procedures
  1. Q
  1. D399PC ;
  1. I RCXVD0="" Q
  1. N RCXVD,RCXVDA,RCXVB,RCXVPC,RCXVP1,RCXVP2,RCXVP3,RCXVMULT
  1. N RCXVDT3,RCXVCP,RCXVPCDT,RCXVPS1,RCXVPS2,RCXVPS,RCXVPSER,RCXVNPI,RCXVCNT,RCXVMH
  1. ;RCXVPC=PROC. CODE IEN, RCXVCP=CPT CODE IEN
  1. ; LOOP THRU PROC.
  1. S (RCXVPC,RCXVCNT)=0
  1. K ^TMP($J,"MTCH")
  1. F S RCXVPC=$O(^DGCR(399,RCXVD0,"CP",RCXVPC)) Q:'RCXVPC D D399PCA
  1. S RCXVPC=0
  1. F S RCXVPC=$O(^DGCR(399,RCXVD0,"RC",RCXVPC)) Q:'RCXVPC D D39942
  1. K ^TMP($J,"MTCH")
  1. Q
  1. D399PCA ;
  1. S RCXVD=$G(^DGCR(399,RCXVD0,"CP",RCXVPC,0)) Q:RCXVD=""
  1. S RCXVP1=$P(RCXVD,U,1),RCXVVP="",RCXVVP1=""
  1. ;
  1. I RCXVP1'="",$P(RCXVP1,";",2)'="ICD0(" D
  1. . S RCXVVP="^"_$P(RCXVP1,";",2)_$P(RCXVP1,";",1)_",0)"
  1. . I RCXVVP'="" S RCXVVP1=$P($G(@RCXVVP),U,1)_RCXVU ; ICD10 in *281 - CPT code will not have a ICD code qualifier, so delimiter is added to account for qualifier field.
  1. ;
  1. ; ICD10 in *281 - procedure code by calling API #5747 (80.1,ien)
  1. I RCXVP1'="",$P(RCXVP1,";",2)="ICD0(" D
  1. . S RCXVVP1=$P($$CODEC^ICDEX(80.1,$P(RCXVP1,";")),U)
  1. . S:RCXVVP1=-1 RCXVVP1=""
  1. . ; ICD10 in *281 - determine procedure code qualifier by calling API #5747
  1. . ; $$CODECS^ICDEX(CODE/IEN,FILE,CDT) coding system for code ien/file.
  1. . ; Procedure code qualifiers ICD-9, ICD-10, etc.
  1. . I RCXVVP1'="" S RCXVVP1=RCXVVP1_RCXVU_$P($$CODECS^ICDEX(RCXVP1,80.1,$P(RCXVD,U,2)),U,1) ; procedure code and qualifier.
  1. ;
  1. I RCXVVP1="" D S RCXVVP1=RCXVU ; ICD10 in *281 - need to add delimiter for ICD proc code qualifier if no proc.
  1. . NEW CT
  1. . S CT=$G(^TMP("RCXVBREC",$J,0))+1,^TMP("RCXVBREC",$J,0)=CT
  1. . S ^TMP("RCXVBREC",$J,CT,0)="Bill # "_$P($G(^DGCR(399,RCXVD0,0)),"^",1)_" has a bad CPT code at IEN # "_RCXVPC_" check ^DGCR(399,"_RCXVD0_",""CP"","_RCXVPC_",0)"
  1. S RCXVDA=RCXVBLNA_RCXVU_RCXVVP1 ; PROC. ICD10 in *281 - RCXVVP1 contains the record for the PROC and ICD code qualifier (PROC_DELIMITER_QUALIFIER). Qualifier can be NULL.
  1. S RCXVDT=$P(RCXVD,U,2)
  1. S RCXVPCDT=$E($$HLDATE^HLFNC(RCXVDT),1,8)
  1. S RCXVDA=RCXVDA_RCXVU_RCXVPCDT ; DT
  1. S RCXVP1=$P(RCXVD,U,11),RCXVP2=""
  1. ;
  1. ; ICD10 in *281 - diagnosis code by calling API #5747 (80,ien)
  1. I RCXVP1'="" D
  1. . S RCXVP1=$P($G(^IBA(362.3,RCXVP1,0)),U,1)
  1. . S RCXVP2=$P($$CODEC^ICDEX(80,RCXVP1),U)
  1. . S:RCXVP2=-1 RCXVP2=""
  1. . ; ICD10 in *281 - determine diagnosis code qualifier by calling API #5747
  1. . ; $$CODECS^ICDEX(CODE/IEN,FILE,CDT) coding system for code ien/file.
  1. . ; Diagnosis code qualifiers ICD-9, ICD-10, etc.
  1. . I RCXVP2'="" S RCXVP2=RCXVP2_RCXVU_$P($$CODECS^ICDEX(RCXVP1,80,$P(RCXVD,U,2)),U,1) ; diagnosis code and qualifier.
  1. ;
  1. S:RCXVP2="" RCXVP2=RCXVU ; ICD10 in *281 - need to add delimiter for ICD ASSOC DXN (1) code qualifier if no ASSOC DXN (1).
  1. S RCXVDA=RCXVDA_RCXVU_RCXVP2 ; ASSOC DXN (1)
  1. S RCXVP1=$P(RCXVD,U,7),RCXVP2=""
  1. I RCXVP1'="" S RCXVP2=$P($G(^SC(RCXVP1,0)),U,1)
  1. S RCXVDA=RCXVDA_RCXVU_RCXVP2 ; ASSC. CLNC (P)
  1. S RCXVP1=$P(RCXVD,U,18),(RCXVP2,RCXVPS,RCXVPSER,RCXVNPI)=""
  1. I RCXVP1'="" S RCXVP2=$$GET1^DIQ(200,RCXVP1_",",.01,"E"),RCXVNPI=$P($$NPI^XUSNPI("Individual_ID",RCXVP1),RCXVU,1) S:+RCXVNPI<1 RCXVNPI="" D
  1. . S RCXVPS=$$GET^XUA4A72(RCXVP1,RCXVDT)
  1. . S RCXVPS=$P(RCXVPS,U,3)
  1. . S RCXVPSER=$$GET1^DIQ(200,RCXVP1_",",29,"E")
  1. . Q
  1. ;provider^provider npi^specialty^service/section
  1. S RCXVDA=RCXVDA_RCXVU_RCXVP2_RCXVU_RCXVNPI_RCXVU_RCXVPS_RCXVU_RCXVPSER
  1. S RCXVCNT=RCXVCNT+1,^TMP($J,RCXVBLN,"4-399A",RCXVCNT)=RCXVDA
  1. ; LOOP THRU CPT
  1. S RCXVCP=0,RCXVMULT=0
  1. F S RCXVCP=$O(^DGCR(399,RCXVD0,"CP",RCXVPC,"MOD",RCXVCP)) Q:'RCXVCP D
  1. . Q:'($D(^DGCR(399,RCXVD0,"CP",RCXVPC,"MOD",RCXVCP,0)))
  1. . ; ^DGCR(399,D0,CP,D1,MOD,D2,0)= (#.01) CPT MODIFIER SEQUENCE [1N]
  1. . ; (#.02) CPT ==>MODIFIER [2P:81.3]
  1. . S RCXVP1=$P($G(^DGCR(399,RCXVD0,"CP",RCXVPC,"MOD",RCXVCP,0)),U,2)
  1. . Q:RCXVP1=""
  1. . S RCXVMULT=RCXVMULT+1
  1. . S RCXVP2=$P($G(^DIC(81.3,RCXVP1,0)),U,1)
  1. . S ^TMP($J,RCXVBLN,"4-399A",RCXVCNT,RCXVMULT)=RCXVP2
  1. . Q
  1. ;
  1. ; *256 - loop through 399.042 to find CPT procedure
  1. MATCH N RCXVCPT1,RCXVFND,X
  1. S RCXVCPT1=$P(RCXVD,";",1) ;proc
  1. S (RCXVFND,RCXVCP)=0
  1. F S RCXVCP=$O(^DGCR(399,RCXVD0,"RC",RCXVCP)) Q:'RCXVCP!RCXVFND D
  1. . Q:$D(^TMP($J,"MTCH",RCXVCP)) ;quit if CPT proc match
  1. . S RCXVD1=$G(^DGCR(399,RCXVD0,"RC",RCXVCP,0))
  1. . Q:RCXVD1=""
  1. . S X=$P(RCXVD1,U,6) ;CPT proc
  1. . I RCXVCPT1'="",X'="",RCXVCPT1=X D
  1. .. S RCXVFND=1
  1. .. S X=$P(RCXVD1,U)
  1. .. S RCXVDB=RCXVBLNA_RCXVU_$$GET1^DIQ(399.2,X_",",.01,"E") ; Revenue Code
  1. .. S X=$P(RCXVD1,U,6)
  1. .. S RCXVDB=RCXVDB_RCXVU_$$GET1^DIQ(81,X_",",.01,"E") ; Procedures [P]
  1. .. S RCXVDB=RCXVDB_RCXVU_RCXVPCDT ; PROC. DT
  1. .. S RCXVDB=RCXVDB_RCXVU_$P(RCXVD1,U,2) ; Charges
  1. .. S ^TMP($J,RCXVBLN,"4-399B",RCXVCNT)=RCXVDB
  1. .. S ^TMP($J,"MTCH",RCXVCP)=""
  1. I 'RCXVFND S ^TMP($J,RCXVBLN,"4-399B",RCXVCNT)=""
  1. Q
  1. ;
  1. D39942 ; charge
  1. N X
  1. Q:$D(^TMP($J,"MTCH",RCXVPC))
  1. S RCXVD1=$G(^DGCR(399,RCXVD0,"RC",RCXVPC,0))
  1. Q:RCXVD1=""
  1. S X=$P(RCXVD1,U)
  1. S RCXVDB=RCXVBLNA_RCXVU_$$GET1^DIQ(399.2,X_",",.01,"E") ; Revenue Code
  1. S RCXVDB=RCXVDB_RCXVU_"" ;No CPT proc
  1. S RCXVDB=RCXVDB_RCXVU_"" ; No proc dt
  1. S RCXVDB=RCXVDB_RCXVU_$P(RCXVD1,U,2) ; Charges
  1. S RCXVCNT=RCXVCNT+1
  1. S ^TMP($J,RCXVBLN,"4-399A",RCXVCNT)=""
  1. S ^TMP($J,RCXVBLN,"4-399B",RCXVCNT)=RCXVDB
  1. Q
  1. ;