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

VENPCCKX.m

Go to the documentation of this file.
  1. VENPCCKX ; IHS/OIT/GIS - KNOWLEDGE BASE POPULATE THE HOLDING FILE FOR A KB CATEGORY ;
  1. ;;2.6;PCC+;**1,3**;APR 03, 2012;Build 24
  1. ;
  1. ;
  1. ;
  1. HFPOP(KBCIEN,VIEN) ; EP - GIVEN A KNOWLEDGEBASE CATEGORY IEN, POPULATE THE HOLDING FILE
  1. I '$D(^VEN(7.11,+$G(KBCIEN))) Q ; MUST BE A VALID KB CATEGORY
  1. I '$D(^AUPNVSIT(+$G(VIEN),0)) Q ; MUST BE ASSOCIATED WITH A VALID VISIT
  1. N TID,IIEN,CODE1,CODE2,NAME,LASTDT,LASTRES,MAND,ORD,STATUS,FCODE,X,Y,Z,%,DIC,DIK,DA,DFN
  1. S DFN=$P(^AUPNVSIT(VIEN,0),U,5) I '$D(^DPT(+$G(DFN))) Q ; MUST BE A VALID PATIENT
  1. S TID=KBCIEN_"_"_VIEN ; TRANSACTION ID FOR HOLDING FILE
  1. S DA=0,DIK="^VEN(7.64," F S DA=$O(^VEN(7.64,"AC",TID,0)) Q:'DA D ^DIK ; INITIAL CLEANUP OF HOLDING FILES
  1. D PASS1(KBCIEN,DFN,.KB) I '$D(KB) Q ; BUILD THE RAW DATA ARRAY
  1. D PASS2(TID,.KB) ; GET LAST VALUES AND FILE ITEMS IN KB ITEM TRANSACTION FILE
  1. Q
  1. ;
  1. PASS1(KBCIEN,DFN,KB) ; EP - GET KB ARRAY
  1. N K,CAT,HDT,CNT,AGE,AGEFLAG,GESTFLAG,KIEN,LAGFLAG,MOD,SEXFLAG,START,STG,STOP,TITLE,TMP,TOT,HDR
  1. S CNT=0,TMP="KB"
  1. D GETKBI^VENPCCK(KBCIEN)
  1. Q
  1. ;
  1. PASS2(TID,KB) ; EP - STORE THE KB ITEMS IN THE TRANSACTION FILE AND KB ITEM MODIFIER TRANSACTION FILE
  1. N DIC,DIE,DA,X,Y,CAT,%,DR,KBCIEN,VIEN,DFN,FLD,IIEN,STG,TXT,INT,EXT,FILE,FIELD
  1. N LASTDT,LASTRES,MAXIDT,TS,PATIENT,CNT,TITLE,MOD
  1. N AUPNDAYS,AUPNDOB,AUPNDOD,AUPNPAT,AUPNSEX
  1. S KBCIEN=+TID,VIEN=$P(TID,"_",2),DFN=$P($G(^AUPNVSIT(VIEN,0)),U,5)
  1. S TS=$$HTE^XLFDT($H),CNT=0
  1. S PATIENT=$P($G(^DPT(DFN,0)),U) I '$L(PATIENT) Q
  1. S CAT=$P($G(^VEN(7.11,KBCIEN,0)),U,1) I '$L(CAT) Q
  1. S MAXIDT=9999999-(DT-20000) ; GO BACK UP TO 2 YEARS
  1. S DR=".02///^S X=KBCIEN;.03///^S X=TID;.04///^S X=TS;.05///^S X=IIEN;"
  1. S DR=DR_".06///^S X=PATIENT;.07///^S X=CAT;.08////^S X=VIEN;"
  1. S DR=DR_"1.01///^S X=TITLE;1.02///^S X=INT;1.03///^S X=EXT;"
  1. S DR=DR_"2.01////0;2.02///^S X=CNT;2.03////0"
  1. S FLD="" F S FLD=$O(KB(FLD)) Q:FLD="" D
  1. . S IIEN=$G(KB(FLD,"IX")) I 'IIEN Q
  1. . S STG=$G(^VEN(7.12,IIEN,0)) I '$L(STG) Q
  1. . S INT=$P(STG,U,3),EXT=$P(STG,U,4) ; CODES
  1. . S CNT=CNT+1
  1. . S (TITLE,TXT)=KB(FLD)
  1. . I $E(TXT,1,3)="__ " S (TITLE,TXT)=$E(TXT,4,999)
  1. . S KB(FLD)=TXT ; ITEM TITLE
  1. GETLAST . ; GET LAST DATE/RESULT IF POSSIBLE
  1. . D LAST(IIEN,KBCIEN,TXT,DFN,MAXIDT,.LASTDT,.LASTRES)
  1. . I $G(LASTDT) D ; APPEND LAST DATE & RESULT TO THE ITEM
  1. .. S %=$$FMTE^XLFDT(LASTDT,"2D")
  1. .. I $L($G(LASTRES)) S %=%_" "_LASTRES
  1. .. S TITLE=TITLE_" ("_%_")"
  1. .. Q
  1. KBFILE . ; FILE RESULTS IN TRANSACTION FILE: VEN EHP OBJ KB
  1. . S DIC="^VEN(7.64,",DIC(0)="L",DIE=DIC,DLAYGO=19707.64
  1. . S X="""`"_DFN_""""
  1. . D ^DIC I Y=-1 Q
  1. . S DA=+Y
  1. . L +^VEN(7.64,DA):1 I D ^DIE L -^VEN(7.64,DA)
  1. . Q
  1. K KB
  1. D ^XBFMK ; CLEANUP
  1. Q
  1. ;
  1. TXSTUB(OUT,IN) ; EP - RPC (VEN GUI TX) ; IN=SCHEMA NAME_VISIT IEN_USER IEN ; OUT = TX FILE IEN
  1. ; CREATE THE TRANSACTION FILE STUB
  1. N TFILE,DIC,DIE,DA,DR,X,Y,DFN,PATIENT,TS,VIEN,USER,UIEN,TXID,SIEN,SCHEMA
  1. S OUT=""
  1. I $P($G(IN),"_")="VEN WELL CHILD PT ED" S TFILE=9000010.16 G STUB ; GENERIC PATIENT ED MODIFIERS
  1. I $P($G(IN),"_")="VEN WELL CHILD ASQ" S TFILE=9000010.16 G STUB ; ASQ SCORES
  1. ;
  1. STUB I '$D(^DD(+$G(TFILE),.01,0)) Q ; A VALID TARGET FILE MUST BE DEFINED
  1. S VIEN=+$P($G(IN),"_",2) I '$D(^AUPNVSIT(VIEN,0)) Q
  1. S DFN=$P($G(^AUPNVSIT(+$G(VIEN),0)),U,5) I 'DFN Q
  1. S PATIENT=$P($G(^DPT(DFN,0)),U) I '$L(PATIENT) Q
  1. S UIEN=$P(IN,"_",3) I 'UIEN Q
  1. S USER=$P($G(^VA(200,UIEN,0)),U) I '$L(USER) Q
  1. S TS=$$HTE^XLFDT($H,2)
  1. S SCHEMA=$P(IN,"_") I '$L(SCHEMA) Q
  1. S SIEN=$O(^BMXADO("B",SCHEMA,0)) I 'SIEN Q
  1. S TXID=SIEN_"_"_VIEN
  1. S DIC="^VEN(7.65,",DIC(0)="L",DLAYGO=19707.65
  1. S X=TXID ; TRANSACTION ID
  1. D ^DIC I Y=-1 Q
  1. S DA=+Y,DIE=DIC
  1. S DR=".02////^S X=TFILE;.03////^S X=VIEN;.04///^S X=TS;.05///^S X=PATIENT;.06////^S X=DFN;"
  1. S DR=DR_".07////^S X=USER;.08///^S X=UIEN;.09///^S X=SCHEMA;.1////^S X=SIEN"
  1. I TFILE=9000010.16 S DR=DR_";1.01////^S X=UIEN;1.02////^S X=USER"
  1. L +^VEN(7.65,DA):1 I D ^DIE L -^VEN(7.65,DA)
  1. S OUT=TXID
  1. D ^XBFMK,KILL^AUPNPAT
  1. Q
  1. ;
  1. GEN(OUT,TXID) ; EP - FILE INFO FOR THIS TRANSACTION
  1. N TFIEN,TXIEN,VIEN
  1. S OUT=""
  1. S VIEN=+$P($G(TXID),"_",2) I '$D(^AUPNVSIT(VIEN,0)) Q ; VISIT IEN
  1. S TXIEN=$O(^VEN(7.65,"B",TXID,0)) I 'TXIEN Q ; TRANSACTION IEN
  1. S TFIEN=$P($G(^VEN(7.65,TXIEN,0)),U,2) I 'TFIEN Q ; TARGET FILE
  1. I TFIEN=9000010.16 D GPTED Q ; PT ED
  1. Q
  1. ;
  1. GPTED ; EP - FILE THE GENERIC PT ED INFO
  1. ; ONLY TO BE RUN AFTER ALL PT ED CATEGORIES AND TOPICS HAVE BEEN ENTERED
  1. N PRV,PRVIEN,IG,LOU,TT,AT,CNT,PEIEN,DIE,DA,DR
  1. S %=$G(^VEN(7.65,TXIEN,1)) I '$L(%) Q ; MUST HAVE DATA TO FILE, OR QUIT NOW
  1. S PRVIEN=+%,TT=$P(%,U,3),IG=$P(%,U,4),LOU=$P(%,U,5)
  1. S CNT=0,PEIEN=0
  1. F S PEIEN=$O(^AUPNVPED("AD",VIEN,PEIEN)) Q:'PEIEN S CNT=CNT+1
  1. I 'CNT Q
  1. S AT=TT\CNT
  1. S DIE="^AUPNVPED(",DR=".05////^S X=PRVIEN;.06///^S X=LOU;.07///^S X=IG;.08///^S X=AT"
  1. S DA=0 F S DA=$O(^AUPNVPED("AD",VIEN,DA)) Q:'DA L ^AUPNVPED(DA):1 I D ^DIE L -^AUPNVPED(DA)
  1. S DA=$O(^AUPNVWC("AD",VIEN,0)) I 'DA Q
  1. S DIE="^AUPNVWC(",DR=".05///^S X=TT;.06///^S X=LOU;.04////^S X=PRVIEN"
  1. L ^AUPNVWC(DA):1 I D ^DIE L -^AUPNVWC(DA)
  1. S OUT=DA
  1. S DA=TXIEN,DIK="^VEN(7.65," D ^DIK,^XBFMK,KILL^AUPNPAT ; CLEANUP
  1. Q
  1. ;
  1. LAST(IIEN,CIEN,TXT,DFN,MAXIDT,LASTDT,LASTRES) ; EP - GET LAST VALUE
  1. N %,FILE,FIELD,RFILE,FREF,AAREF,FCREF,AACREF,SUBFILE,IDT,IEN,REFIEN
  1. N SFREF,SFCREF,SFIEN,TREF,TCREF,INTITEM,INTIEN,ITEM,SS,PCE,RFIELD,RESSS,RESPC
  1. S (LASTDT,LASTRES)="" ; INITIALIZE THE OUTPUT VALUES
  1. S %=$G(^VEN(7.11,CIEN,4)) I '$L(%) Q ; GET FILING PARAMETERS
  1. S FILE=$P(%,U),FIELD=$P(%,U,2),RFILE=$P(%,U,3),RFIELD=$P(%,U,4)
  1. I FILE,FIELD
  1. E Q
  1. S FREF=$$ROOT^DILFD(FILE,"1,") I '$L(FREF) Q
  1. S FCREF=$$CREF^DILF(FREF)
  1. S AAREF=FREF_"""AA"","_DFN_","
  1. SUB S SUBFILE=$P($G(^DD(FILE,FIELD,0)),U,2)
  1. I SUBFILE D SUBFILE Q ; ITEM IS STORED IN A SUBFILE
  1. S RFIEN=$P($G(^VEN(7.12,IIEN,2)),U) ; ITEM'S IEN IN THE REFERENCE FILE
  1. I RFIEN,RFILE,RFIELD S TXT=RFIEN,AAREF=AAREF_TXT_"," ; EXTEND "AA" INDEX AND CHANGE TEXT TO POINTER VALUE
  1. TOPFILE ; DATA IS STORED AT THE TOP LEVEL OF A FILE (E.G., V MEASUREMENT)
  1. S AACREF=$$CREF^DILF(AAREF)
  1. S %=$P($G(^DD(FILE,FIELD,0)),U,4) I '$L(%) Q ; INVALID FILE DEFINITION
  1. S SS=$P(%,";"),PCE=$P(%,";",2),IDT=0
  1. I $G(GUIFLAG) S IDT=9999999-DT ; FOR GUI, EXCLUDE TODAY'S RESULTS: THEY ARE "CURRENT" - NOT "LAST"
  1. F S IDT=$O(@AACREF@(IDT)) Q:'IDT Q:IDT>MAXIDT D I $G(LASTDT) Q ; FIND V-FILE ENTRIES IN THE DATE RANGE
  1. . S IEN=0
  1. . F S IEN=$O(@AACREF@(IDT,IEN)) Q:'IEN D I $G(LASTDT) Q ; FIND EVERY V-FILE ENTRY ON THAT DATE
  1. .. S ITEM=$P($G(@FCREF@(IEN,SS)),U,PCE)
  1. .. I ITEM'=TXT Q ; V-FILE VALUE MUST MATCH KB ITEM
  1. .. S LASTDT=9999999-IDT ; DATE: LAST TIME ITEM WAS ENTERED IN V-FILE
  1. .. I RFIELD S LASTRES=$$GET1^DIQ(FILE,(IEN_","),RFIELD)
  1. .. Q
  1. . Q
  1. Q
  1. ;
  1. SUBFILE ; EP - DATA IS STORED IN THE FIRST NODE OF A SUBFILE (E.G., PATIENT ED)
  1. I $O(^DD(FILE,"SB",SUBFILE,0))'=FIELD Q ; INVALID SUBFILE
  1. S IDT=0
  1. S AACREF=$$CREF^DILF(AAREF)
  1. F S IDT=$O(@AACREF@(IDT)) Q:'IDT Q:IDT>MAXIDT D I $G(LASTDT) Q ; FIND PT'S V-FILE DATES IN TIMEFRAME
  1. . S IEN=0
  1. . F S IEN=$O(@AACREF@(IDT,IEN)) Q:'IEN D I $G(LASTDT) Q ; FIND ALL THE PT'S V-FILE ENTRIES ON EA. DATE
  1. .. S SFREF=$$ROOT^DILFD(SUBFILE,"1,"_IEN_",")
  1. .. S SFCREF=$$CREF^DILF(SFREF)
  1. .. S SFIEN=0
  1. .. F S SFIEN=$O(@SFCREF@(SFIEN)) Q:'SFIEN D I $G(LASTDT) Q ; LOOP THROUGH THE SUBFILE OT CHECK ITEMS
  1. ... S ITEM=$P($G(@SFCREF@(SFIEN,0)),U)
  1. ... I TXT,ITEM'=TXT Q ; V-FILE VALUE MUST MATCH KB ITEM
  1. ... I 'TXT,$$UP^XLFSTR(ITEM)'=$$UP^XLFSTR(TXT) Q ; V-FILE VALUE MUST MATCH KB ITEM
  1. ... S LASTDT=9999999-IDT ; DATE: LAST TIME ITEM WAS ENTERED IN V-FILE
  1. ... I $G(RFIELD) S LASTRES=$$GET1^DIQ(SUBFILE,(SFIEN_","_IEN_","),RFIELD)
  1. ... Q
  1. .. Q
  1. . Q
  1. Q
  1. ;
  1. VFILE(OUT,TID) ; EP - RPC: VEN PCC+ FILE KB ITEMS
  1. ; FILE A SET OF TRANSACTION FILE ENTRIES IN V-FILES AND RETURN A CONFIRMATION MSG IN "OUT"
  1. S OUT=""
  1. N KBIEN,VIEN,DFN,VFILE,VFIELD,REFILE,REFIELD,VFILE2,VFIELD2,SUB,CODE,CIEN,TIEN,%
  1. I '$L($G(TID)) Q
  1. I '$D(^VEN(7.64,"AC",TID)) G VX ; MUST HAVE AT LEAST ONE ENTRY IN THE TRANSACTION FILE
  1. S KBIEN=+TID I '$D(^VEN(7.11,+$G(KBCIEN))) G VX ; MUST BE A VALID KB CATEGORY
  1. S VIEN=+$P(TID,"_",2) I '$D(^AUPNVSIT(VIEN,0)) G VX ; MUST BE A VALID VISIT
  1. S DFN=+$P(^AUPNVSIT(VIEN,0),U,5) I '$D(^DPT(DFN,0)) G VX ; MUST BE A VALID PATIENT
  1. S %=$G(^VEN(7.11,KBIEN,4)) I '$L(%) G VX
  1. S VFILE=+% I 'VFILE G VX
  1. S VFIELD=$P(%,U,2) I 'VFIELD G VX
  1. S REFILE=$P(%,U,3),REFIELD=$P(%,U,4)
  1. S %=$P($G(^DD(VFILE,VFIELD,0)),U,2)
  1. I %,$D(^DD(VFILE,"SB",%,VFIELD)) D VSUB G SEC ; RESULTS ARE STORED IN A SUBFILE
  1. SEC ; POPULATE SECONDARY FILE, IF NECESSARY
  1. S VFILE2=$P($G(^VEN(7.11,KBIEN,5)),U,1) I 'VFILE2 G VX
  1. I VFILE2 S VFIELD2=$P(^VEN(7.11,KBIEN,5),U,2) I 'VFIELD G VX
  1. D V2(VIEN,VFILE2,VFIELD2)
  1. VX ; CLEANUP TRANSACTION ENTRIES FOR THIS TID
  1. S DIK="^VEN(7.64,",DA=0
  1. F S DA=$O(^VEN(7.64,"AC",TID,DA)) Q:'DA D ^DIK
  1. D ^XBFMK
  1. Q
  1. ;
  1. VSUB ; EP - MANAGE RESULTS STORED IN A VFILE SUBFILE
  1. I VFILE=9000010.16 D PTED Q ; PT ED IS STORED IN A SUBFILE
  1. Q
  1. ;
  1. V2(VIEN,VFILE2,VFIELD2) ; EP - SECONDARY V FILE ENTRY
  1. ; CURRENTLY ONLY WELL CHILD PT ED TOPIC ARE STORED IN 2 PLACES.
  1. I VFILE2=9000010.46 D VWB(VIEN,VFIELD2)
  1. Q
  1. ;
  1. VWB(VIEN,FLD) ; EP - POPULATE V WELL CHILD FILE
  1. N WIEN,DIC,IEN,DA,X,Y,%
  1. I '$D(^AUPNVSIT(+$G(VIEN),0)) Q
  1. I '$D(^DD(9000010.46,+$G(FLD),0)) Q
  1. S WIEN=$O(^AUPNVWC("AD",VIEN,0))
  1. I 'WIEN D I '$G(WIEN) Q ; NEED TO MAKE THE V WELL CHILD STUB BEFORE APPENDING DATA
  1. . S DIC="^AUPNVWC(",DIC(0)="L",DLAYGO=9000010.46,X=""""_0_""""
  1. . D ^DIC I Y=-1 Q
  1. . S WIEN=+Y
  1. . S DIE="^AUPNVWC(",DA=WIEN,DR=".02////^S X=DFN;.03////^S X=VIEN"
  1. . L +^AUPNVWC(DA):1 I D ^DIE L -^AUPNVWC(DA)
  1. . Q
  1. S DA(1)=WIEN,DIC="^AUPNVWC("_DA(1)_","_FLD_",",DIC(0)="L"
  1. S (DLAYGO,DIC("P"))=$P($G(^DD(9000010.46,FLD,0)),U,2)
  1. S IEN=0
  1. F S IEN=$O(^VEN(7.64,"AC",TID,IEN)) Q:'IEN D ; ENTER EACH TOPIC AS FREE TEXT
  1. . I '$P($G(^VEN(7.64,IEN,2)),U) Q ; ITEM MUST BE SELECTED
  1. . S X=$P($G(^VEN(7.64,IEN,1)),U) I '$L(X) Q
  1. . D ^DIC
  1. . Q
  1. D ^XBFMK
  1. Q
  1. ;
  1. VPE(VIEN,DFN,RFIEN) ; EP - GET PARENT IEN IN V PATEINT ED
  1. N IEN,DIC,DIE,DR,DA,PFIEN,X,Y,%
  1. S PFIEN="",IEN=0
  1. F S IEN=$O(^AUPNVPED("AD",VIEN,IEN)) Q:'IEN D I PFIEN Q ; DOES PARENT FILE ALREADY EXIST?
  1. . S %=+$G(^AUPNVPED(IEN,0)) I '% Q ; GET EDU TOPIC
  1. . I %=RFIEN S PFIEN=IEN
  1. . Q
  1. I PFIEN Q PFIEN ; PCODE ALREADY EXISTS
  1. ; CREATE A NEW PARENT ENTRY IN V PATIENT ED
  1. S DIC="^AUPNVPED(",DLAYGO=900010.01,DIC(0)="L",X="""`"_RFIEN_""""
  1. D ^DIC I Y=-1 Q "" ; MAKE PARENT FILE ENTRY
  1. S DIE=DIC,(PFIEN,DA)=+Y,DR=".02////^S X=DFN;.03////^S X=VIEN"
  1. L ^AUPNVPED(DA):1 I D ^DIE L -^AUPNVPED(DA)
  1. D ^XBFMK
  1. Q PFIEN
  1. ;
  1. PTED ; EP - FILE PATIENT ED RESULTS IN V PATIENT ED
  1. N PCODE,PFIEN,DIC,DIE,DA,DR,X,Y,%,TIEN,RFIEN,PRV,TIME,IG,LOU,TXT,IEN
  1. S PFIEN="",TIEN=0
  1. F S TIEN=$O(^VEN(7.64,"AC",TID,TIEN)) Q:'TIEN D ; SUBFILE ENTRIES
  1. . I '$P($G(^VEN(7.64,TIEN,2)),U) Q ; ITEM MUST BE SELECTED
  1. . S X=$G(^VEN(7.64,TIEN,1)) I '$L(X) Q ; TEXT OF PT ED ITEM
  1. . S TXT=$P(X,U,1) I '$L(TXT) Q
  1. . S PCODE=$P(X,U,3) I '$L(PCODE) Q
  1. . S RFIEN=$O(^AUTTEDT("C",PCODE,0)) I 'RFIEN Q ; GET EDUCATION TOPIC IEN
  1. . I 'PFIEN S PFIEN=$$VPE(VIEN,DFN,RFIEN) I 'PFIEN Q ; FIND/MAKE PRIMARY ENTRY IN THE PARENT FILE
  1. . K DA S DA(1)=PFIEN,DIC="^AUPNVPED("_DA(1)_",1,",DIC(0)="L",DLAYGO=9000010.161,X=TXT
  1. . S DIC("P")=$P(^DD(9000010.16,1,0),U,2)
  1. . D ^DIC ; MAKE SUBFILE ENTRY
  1. . Q
  1. Q
  1. ;