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

PXCOMPACTAPI.m

Go to the documentation of this file.
PXCOMPACTAPI ;ALB/BPA,CMC - API to extract COMPACT Act Episode of Care file (818);05/03/2024@10:58
 ;;1.0;PCE PATIENT CARE ENCOUNTER;**241**;Aug 12, 1996;Build 31
 ; API will meet the needs / approved by VistA Scheduling May 1, 2023 and will meet the 
 ; needs of data sharing with VA Enrollment System for Episode of Care Start and End Dates
 ; 
 Q
 ;
BATCH(DFNARRAY,ARRAY) ;
 ; Input: DFNARARY array
 ; Output: ARRAY array
 ; ARRAY(DFN,"EPISODE",episodeSequence,"INFO")=Episode Start Date^Episode End Date^Administrative Eligibility^EOC OPEN/CLOSE Y/N
 ; ARRAY(DFN,"EPISODE",episodeSequence,"VISIT",visitSequence)="Visit^Treatment Related to Compact"
 ; ARRAY(DFN,"EPISODE",episodeSequence,"PTF",ptfSequence)="PTF^Treatment Related to Compact"
 ; accept an array of DFNs to get COMPACT status
 N ADMIN,ASC,DFN,ENDDT,PTF,PXEOCNUM,PXIEN,PXPTFSQ,PXSEQ,PXVSTSQ,STARTDT,VISIT
 S DFN=""
 F  S DFN=$O(DFNARRAY(DFN)) Q:DFN=""  D
 . ;verify if they're in the COMPACT file first
 . I '$D(^PXCOMP(818,"B",DFN)) S ARRAY(DFN,"NOEPISODES")="" Q
 . S PXEOCNUM=$$GETEOC^PXCOMPACT(DFN)
 . S PXIEN=$O(^PXCOMP(818,"B",DFN,""))
 . S ASC=$$GET1^DIQ(818,PXIEN,2)
 . I $D(^PXCOMP(818,PXEOCNUM,10,0)) D
 . . ;start gathering all episode data
 . . S PXIEN="",PXSEQ=0
 . . F  S PXSEQ=$O(^PXCOMP(818,PXEOCNUM,10,PXSEQ)) Q:(PXSEQ="B")!(PXSEQ="")  D
 . . . S PXIEN=PXSEQ_","_PXEOCNUM
 . . . S STARTDT=$$GET1^DIQ(818.01,PXIEN,.01)
 . . . S ENDDT=$$GET1^DIQ(818.01,PXIEN,2)
 . . . S ADMIN=$$GET1^DIQ(818.01,PXIEN,8)
 . . . S PXIEN=PXSEQ_","_PXEOCNUM
 . . . I $D(^PXCOMP(818,PXEOCNUM,10,PXSEQ,40,0)) D
 . . . . S PXPTFSQ=0
 . . . . F  S PXPTFSQ=$O(^PXCOMP(818,PXEOCNUM,10,PXSEQ,40,PXPTFSQ)) Q:(PXPTFSQ="")!(PXPTFSQ="B")  D
 . . . . . S PTF=$P(^PXCOMP(818,PXEOCNUM,10,PXSEQ,40,PXPTFSQ,0),"^"),ARRAY(DFN,"EPISODE",PXSEQ,"PTF",PXPTFSQ)=PTF_"^"_$P($G(^DGPT(PTF,70)),"^",33)
 . . . I $D(^PXCOMP(818,PXEOCNUM,10,PXSEQ,41,0)) D
 . . . . S PXVSTSQ=0
 . . . . F  S PXVSTSQ=$O(^PXCOMP(818,PXEOCNUM,10,PXSEQ,41,PXVSTSQ)) Q:(PXVSTSQ="")!(PXVSTSQ="B")  D
 . . . . . S VISIT=$P(^PXCOMP(818,PXEOCNUM,10,PXSEQ,41,PXVSTSQ,0),"^"),ARRAY(DFN,"EPISODE",PXSEQ,"VISIT",PXVSTSQ)=VISIT_"^"_$P($G(^AUPNVSIT(VISIT,800)),"^",19)
 . . . S ARRAY(DFN,"EPISODE",PXSEQ,"INFO")=STARTDT_"^"_ENDDT_"^"_ADMIN_"^"_ASC
 Q
 ;
EXTRACT(DFN,PXCOMPACT) ;
 N PXEOCNUM,PXEOCSEQ,PXIENS,PXIPXSQ,PXMOVSEQ,PXNMEP,PXNUMIPX,PXNUMOPX,PXNUMPTF,PXNUMVST,PXPTFSQ,PXOPXSQ,PXVSTSQ
 S (PXEOCNUM,PXEOCSEQ)=""
 I $G(DFN)="" S PXCOMPACT("COMPACTMSG")="DFN cannot be null" Q
 I '$D(^PXCOMP(818,"B",DFN)) S PXCOMPACT("COMPACTMSG")="Patient is not in the COMPACT Episode of Care file" Q
 ;
 K PXCOMPACT
 S PXEOCNUM=$$GETEOC^PXCOMPACT(DFN)
 S PXCOMPACT("PATIENT ID")=DFN
 S PXCOMPACT("PATIENT NAME")=$P(^DPT(DFN,0),"^")
 I PXEOCNUM="" S PXCOMPACT("NOEPISODES")=""
 S PXCOMPACT("EOC OPEN/CLOSE FLAG")=$P(^PXCOMP(818,PXEOCNUM,0),"^",2)
 S PXCOMPACT("BENEFIT TYPE")=$P(^PXCOMP(818,PXEOCNUM,0),"^",3)
 S PXCOMPACT("EPISODE OF CARE NUMBER")=PXEOCNUM
 I $D(^PXCOMP(818,PXEOCNUM,10,0)) D
 . S (PXIENS,PXIPXSQ,PXNMEP,PXNUMPTF,PXNUMIPX,PXNUMOPX,PXNUMVST,PXPTFSQ,PXOPXSQ,PXVSTSQ)=""
 . ;S PXNMEP=$$GETEOCSEQ^PXCOMPACT(DFN)
 . S PXEOCSEQ=""
 . F  S PXEOCSEQ=$O(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ)) Q:PXEOCSEQ="B"  D
 . . I PXEOCSEQ=0 Q
 . . ;F PXEOCSEQ=1:1:PXNMEP D
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"EPISODE START DATE")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^")
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"EPISODE END DATE")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^",2)
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"SOURCE OF CRISIS END")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^",3)
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"INPATIENT BENEFIT END DATE")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^",4)
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OUTPATIENT BENEFIT END DATE")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^",5)
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"EPISODE FINAL STATUS")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^",6)
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"EPISODE SOURCE")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^",7)
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"LAST COMPACT ACT ADMIN ELIG")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,0),"^",8)
 . . ; Gather information from the 10,PXEOCSEQ,1 node
 . . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,1)) D
 . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"CRISIS END AUTHORIZED BY")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,1),"^")
 . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"CRISIS END OTHER COMMENT")=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,1),"^",2)
 . . ; Get calculated fields
 . . S PXIENS=PXEOCSEQ_","_PXEOCNUM_","
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"REMAINING INPATIENT DAYS")=$$GET1^DIQ(818.01,PXIENS,42)
 . . S PXCOMPACT("EPISODE",PXEOCSEQ,"REMAINING OUTPATIENT DAYS")=$$GET1^DIQ(818.01,PXIENS,43)
 . . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,40,0)) D
 . . . S PXNUMPTF=$O(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,40,"B"),-1)
 . . . F PXPTFSQ=1:1:PXNUMPTF D
 . . . . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,40,PXPTFSQ)) D
 . . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"PTF",PXPTFSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,40,PXPTFSQ,0),"^")
 . . . . . S PXMOVSEQ=0
 . . . . . F  S PXMOVSEQ=$O(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,40,PXPTFSQ,1,PXMOVSEQ)) Q:(PXMOVSEQ="")!(PXMOVSEQ'?.N)  D
 . . . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"PTF",PXPTFSQ,"MOVEMENT",PXMOVSEQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,40,PXPTFSQ,1,PXMOVSEQ,0),"^")
 . . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,41,0)) D
 . . . S PXNUMVST=$O(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,41,"B"),-1)
 . . . F PXVSTSQ=1:1:PXNUMVST D
 . . . . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,41,PXVSTSQ)) D
 . . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"VISIT",PXVSTSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,41,PXVSTSQ,0),"^")
 . . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"VISIT TREATMENT FOR FLAG",PXVSTSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,41,PXVSTSQ,0),"^",2)
 . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,0)) D
 . . ;Logic for IP extension
 . . S PXNUMIPX=$O(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,"B"),-1)
 . . F PXIPXSQ=1:1:PXNUMIPX D 
 . . . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0)) D 
 . . . . S PXIENS=PXIPXSQ_","_PXEOCSEQ_","_PXEOCNUM
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN START DATE",PXIPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0),"^")
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN BENEFIT END DATE",PXIPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0),"^",4)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN REMAINING DAYS",PXIPXSQ)=$$GET1^DIQ(818.02,PXIENS,5)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN DATE TIME CREATED",PXIPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0),"^",5)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN START CREATED BY",PXIPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0),"^",6)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN START AUTHORIZED BY",PXIPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0),"^",7)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN TYPE OF CARE",PXIPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0),"^",8)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"IP EXTN COMMENT",PXIPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,20,PXIPXSQ,0),"^",9)
 . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,0)) D
 . . ;Logic for OP extension
 . . S PXNUMOPX=$O(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,"B"),-1)
 . . F PXOPXSQ=1:1:PXNUMOPX D 
 . . . I $D(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0)) D 
 . . . . S PXIENS=PXOPXSQ_","_PXEOCSEQ_","_PXEOCNUM
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN START DATE",PXOPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0),"^")
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN BENEFIT END DATE",PXOPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0),"^",4)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN REMAINING DAYS",PXOPXSQ)=$$GET1^DIQ(818.03,PXIENS,5)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN DATE TIME CREATED",PXOPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0),"^",5)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN START CREATED BY",PXOPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0),"^",6)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN START AUTHORIZED BY",PXOPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0),"^",7)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN TYPE OF CARE",PXOPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0),"^",8)
 . . . . S PXCOMPACT("EPISODE",PXEOCSEQ,"OP EXTN COMMENT",PXOPXSQ)=$P(^PXCOMP(818,PXEOCNUM,10,PXEOCSEQ,30,PXOPXSQ,0),"^",9)
 Q