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

VENPCCKT.m

Go to the documentation of this file.
  1. VENPCCKT ; IHS/OIT/GIS - GUI TRANSACTION MANAGER - PT ED, NUTR AND EXAMS ;
  1. ;;2.6;PCC+;**1,3**;APR 03, 2012;Build 24
  1. ;
  1. ;
  1. ;
  1. EXPOP(IN) ; EP - POPULATE THE EXAM TOPICS
  1. N DFN,LINE,CNT,VIEN,DIK,DA,KEY,TYPE,STOP,SS
  1. K LINE D VAR I '$D(LINE) Q
  1. S (LINE,CNT)=0
  1. EX1 I LINE="" G EX2
  1. S STOP=0
  1. F S LINE=$O(LINE(LINE)) Q:'LINE D I STOP Q ; GET STARTING LINE FOR EXAM SUBCATEGORY
  1. . S SS=""
  1. . I LINE(LINE)="AGE-SPECIFIC EXAMS" S STOP=1,SS=6 Q
  1. . I LINE(LINE)="GENERAL HEALTH SCREEN" S STOP=1,SS=8 Q
  1. . I LINE(LINE)="SPECIAL RISK SCREEN" S STOP=1,SS=4 Q
  1. . I LINE(LINE)="BEHAVIORAL HEALTH SCREEN" S STOP=1,SS=7 Q
  1. . Q
  1. EX2 I 'LINE!('$G(SS)) D Q ; QUIT IF NO MORE EXAM ITEMS EXIST
  1. . I CNT S OUT="BMX ADO SS^VEN WCM TX^^AC~"_KEY_"~"_KEY_"~9999"
  1. . D ^XBFMK
  1. . Q
  1. D CAT(.LINE,.CNT,3,SS) ; PROCESS EXAM SUBCATEGORY
  1. G EX1 ; GET NEXT EXAM SUBCATEGORY
  1. ;
  1. PEPOP(IN) ; EP - POPULATE NUTR TOPICS OR PT ED TOPICS
  1. N DFN,LINE,CNT,VIEN,DIK,DA,KEY,TYPE
  1. D VAR
  1. S LINE=0,CNT=0
  1. PE1 I LINE="" G PE2
  1. F S LINE=$O(LINE(LINE)) Q:'LINE I $E(LINE(LINE),1,8)="PT ED - " Q ; GET STARTING LINE FOR A PT ED SUBCATEGORY
  1. PE2 I 'LINE D Q ; QUIT IF NO MORE PT ED ITEMS EXIST
  1. . I CNT S OUT="BMX ADO SS^VEN WCM TX^^AC~"_KEY_"~"_KEY_"~9999"
  1. . D ^XBFMK
  1. . Q
  1. D CAT(.LINE,.CNT,TYPE) ; PROCESS SUBCATEGORY
  1. G PE1 ; GET NEXT SUB-CATEGORY OF PT ED TOPICS
  1. ;
  1. VAR ; EP - SET UP MAIN VARIABLES, CLEANUP TRANSACTION FILE AND CREATE THE RAW DATA ARRAY
  1. D STALE ; FIRST, CLEAN UP TX FILE BY REMOVING STALE ENTRIES
  1. S OUT=""
  1. S VIEN=+$G(IN) I '$D(^AUPNVSIT(VIEN,0)) Q
  1. S TYPE=$P(IN,"|",2) I '$L(TYPE) Q
  1. S DFN=+$P($G(^AUPNVSIT(VIEN,0)),U,5) I '$D(^DPT(DFN,0)) Q
  1. S KEY=VIEN_"_"_TYPE,DIK="^VEN(7.16,",DA=0
  1. F S DA=$O(^VEN(7.16,"AC",KEY,DA)) Q:'DA D ^DIK ; CLEANUP ALL TXS RELATED TO THIS VISIT
  1. D ARR(DFN,.LINE) ; GET THE RAW ARRAY IN LINE()
  1. Q
  1. ;
  1. CAT(LINE,CNT,TYPE,SS) ; EP - PROCESS A PT ED SUB-CATEGORY AND POPULATE THE TX FILE
  1. N %,CAT,CIEN,ITEM,DIC,DA,DR,X,Y,Z,%,EDATE,VAL,STG,STOP,CODE,DIK,GBL,IIEN,LAST,KIEN,SEL,RES,IX
  1. VARS I 16[TYPE D
  1. . S %=$E(LINE(LINE),9,99)
  1. . S %=$E(%,1,$L(%)-1) I '$L(%) Q
  1. . S %="WCAG "_%
  1. . Q
  1. I TYPE=3 S %="WCEX "_LINE(LINE),%=$E(%,1,$L(%)-1) I '$L(%) Q
  1. S CAT=$O(^VEN(7.11,"B",%)) I CAT'[% Q
  1. S CIEN=$O(^VEN(7.11,"B",CAT,0)) I 'CIEN Q
  1. S STOP=0
  1. S DIC="^VEN(7.16,",DLAYGO=19707.16,DIC(0)="L"
  1. S SS=$S(16[TYPE:1,$G(SS):SS,1:"") I 'SS Q ; SUBSCRIPT FOR FILING RESULTS
  1. LINE F S LINE=$O(LINE(LINE)) Q:LINE="" D I STOP Q ; PROCESS EACH LINE IN THE ARRAY
  1. IVARS . S STG=LINE(LINE)
  1. . I $E(STG,1,3)'="__ " S LINE=LINE-1,STOP=1 Q
  1. . S (IX,ITEM)=$P(STG,". ",2,99) I '$L(ITEM) Q
  1. . S IIEN=$P(ITEM,"|",2),ITEM=$P(ITEM,"|")
  1. . S KIEN=+$G(^VEN(7.12,IIEN,0)) I 'KIEN Q
  1. . I TYPE'=3,$P($G(^VEN(7.11,KIEN,0)),U,11)'=TYPE Q ; PT ED CATEGORY TYPE MUST MATCH
  1. INIT . S (CODE,SEL,RES,LAST)="" ; INITIALIZE OPTIONAL VARS
  1. CODE . I 16[TYPE S CODE=$P($G(^VEN(7.12,IIEN,2)),U,3) ; PT ED CODE
  1. PAST . S %=$RE(ITEM) ; PARSE LAST DATE/RESULT
  1. . I TYPE=3,$E(%,1,7)=")LAMRON" D ; FOR EXAMS, PEEL OFF THE RESULT VALUE
  1. .. S RES=$P(ITEM," ",$L(ITEM," ")) ; GET DATE OF LAST INSTANCE
  1. .. S RES=$E(RES)
  1. .. S %=")"_$P(%," ",2,99)
  1. .. Q
  1. . I $E(%,1,4)?1")"2N1"/" D ; FOR PT ED AND EXAMS, STRIP OFF DATE
  1. .. S X=$P(%,"( ",2,99),ITEM=$RE(X),IX=$E(ITEM,1,30) ; IX IS THE LOOKUP NAME, ITEM IS THE FULL TEXT
  1. .. S Y=$P(%,"( "),Y=$E(Y,2,999),LAST=$RE(Y) ; DATE OF LAST ENTRY
  1. .. Q
  1. . I $L(LAST) S X=LAST D ^%DT I Y=DT S (LAST,RES)="" ; TODAY'S RESULTS SHOULD ARE "CURRENT", NOT "LAST"
  1. CURRENT . S SEL=$$SEL(DFN,IX,TYPE,$G(SS)) ; GET TODAY'S SELECTION, IF IT EXISTS
  1. DIC . S X=""""_CIEN_""""
  1. . D ^DIC I Y=-1 Q
  1. . S DA=+Y,GBL=$NA(^VEN(7.16))
  1. . S @GBL@(DA,0)=CIEN_U_CAT_U_IIEN_U_ITEM_U_CODE_U_LAST_U_SEL_U_VIEN_U_TYPE_U_KEY_U_RES_U_DT_U_SS ; TX RECORD
  1. . S @GBL@("AC",KEY,DA)="",@GBL@("AD",DT,DA)="" ; INDEXES
  1. . S CNT=CNT+1
  1. . Q
  1. D ^XBFMK
  1. Q
  1. ;
  1. SEL(DFN,ITEM,TYPE,SS) ; EP - SEE IF THIS ITEM IS ALREADY IN TODAY'S V WELL CHILD RECORD
  1. N SEL,DA,X,%,IDT
  1. S SEL="",IDT=9999999-DT
  1. I $G(ITEM)="" Q ""
  1. S DA=$O(^AUPNVWC("AA",DFN,IDT,0)) I 'DA Q ""
  1. I 16[$G(TYPE),$D(^AUPNVWC(DA,1,"B",ITEM)) S SEL=1 Q SEL ; TODAY'S PT ED
  1. I TYPE=3,$G(SS) D ; TODAY'S EXAM RESULT
  1. . S %=$O(^AUPNVWC(DA,SS,"B",ITEM,0)) I '% Q
  1. . S SEL=$P($G(^AUPNVWC(DA,SS,%,0)),U,2)
  1. . Q
  1. Q SEL
  1. ;
  1. ARR(DFN,LINE) ; EP - RETURN THE LINE ARRAY USED IN GENERATING THE HEALTH SUMMARY SEGMENT ;
  1. N DOB,DAYS,SEX,GUIFLAG
  1. S LINE=0
  1. S GUIFLAG=1 ; TELLS THE ARRAY GENERATOR TO PREVENT TODAY'S RESULTS FROM BEING RETURNED AS A "LAST" RESULT
  1. S DOB=$P($G(^DPT(+DFN,0)),U,3) I 'DOB Q
  1. S SEX=$P($G(^DPT(+DFN,0)),U,2) I '$L(SEX) Q
  1. S DAYS=$$FMDIFF^XLFDT(DT,DOB,1) I 'DAYS Q
  1. D REM^APCHS6B(DFN,-1,SEX,DAYS) ; GET REMINDER LIST FOR EA KB CATEGORY
  1. Q
  1. ;
  1. EXFLUSH(IN) ; EP - FLUSH EXAM TXS TO V WELL CHILD
  1. ; IN = VIEN
  1. I '$D(^AUPNVSIT(+$G(IN),0)) Q ; A VALID VISIT MUST EXIST
  1. N APCDVSIT,AUPNPAT,KEY,TXIEN,STG,X,Y,Z,%,TOT,SS,RES,ARR
  1. S OUT=""
  1. S APCDVSIT=+IN ; VISIT IEN
  1. S KEY=APCDVSIT_"_3" ; LOOKUP KEY
  1. S AUPNPAT=+$P($G(^AUPNVSIT(APCDVSIT,0)),U,5) I '$D(^DPT(AUPNPAT,0)) Q ; PATIENT DFN
  1. S TXIEN=0,TOT=0
  1. F S TXIEN=$O(^VEN(7.16,"AC",KEY,TXIEN)) Q:'TXIEN D ; BUILD THE RESULTS ARRAY
  1. . S STG=$G(^VEN(7.16,TXIEN,0))
  1. . S RES=$P(STG,U,7) I RES="" Q ; ITEM MUST HAVE A RESULT
  1. . S SS=$P(STG,U,13) I 'SS Q ; ITEM MUST HAVE A FILING SUBSCRIPT
  1. . S TITLE=$P(STG,U,4) I '$L(TITLE) Q ; MUST HAVE A VALID TITLE
  1. . S TOT=TOT+1 ; KEEP TRACK OF THE TOT NUMBER OF VALID TITLES ENTERED
  1. . S ARR(TOT)=TITLE,ARR(TOT,1)=RES
  1. . Q
  1. I 'TOT D TXCLEAN Q ; NOTHING SELECTED, SO CLEAN UP AND QUIT
  1. EXVF D EVWCFILE^VENPCCQC(SS,1) ; FILE EXAMS IN V WC
  1. D TXCLEAN
  1. S OUT="OK"
  1. Q
  1. ;
  1. PEFLUSH(IN) ; EP - FLUSH DATA FOR PT ED AND NUTR TRANSACTIONS TO V FILES
  1. ; IN = TYPE|VISIT IEN|LOU|TIME|EDUCATOR IEN|INFANT FEEDING CHOICE
  1. I '$L($G(IN)) Q
  1. N APCDVSIT,AUPNPAT,DA,TXIEN,STG,X,Y,Z,%,TOT,TITLE,CODE,LOU,TIME,EDU,ARR,FTIME,CNT,OK,CIEN,KEY,TYPE,IFC
  1. FVAR ; GET FLUSH VARIABLES
  1. S OUT=""
  1. S TYPE=$P(IN,"|") I 'TYPE Q ; TYPE
  1. S APCDVSIT=+$P(IN,"|",2) I '$D(^AUPNVSIT(APCDVSIT,0)) Q ; VISIT IEN
  1. S KEY=APCDVSIT_"_"_TYPE ; LOOKUP KEY
  1. S AUPNPAT=+$P($G(^AUPNVSIT(APCDVSIT,0)),U,5) I '$D(^DPT(AUPNPAT,0)) Q ; PATIENT DFN
  1. S LOU=$P(IN,"|",3) ; LEVEL OF UNDERSTANDING
  1. I $L(LOU)>1,"POORFAIRGOODNAREFUSED"[LOU
  1. E S LOU=""
  1. S EDU=$P(IN,"|",5) I '$D(^VA(200,EDU,0)) S EDU="" ; EDUCATOR
  1. FARR ; BUILD THE FLUSH ARRAY
  1. S TXIEN=0,TOT=0
  1. F S TXIEN=$O(^VEN(7.16,"AC",KEY,TXIEN)) Q:'TXIEN D
  1. . S STG=$G(^VEN(7.16,TXIEN,0))
  1. . I '$P(STG,U,7) Q ; ITEM MUST BE SELECTED
  1. . S TITLE=$P(STG,U,4) I '$L(TITLE) Q ; MUST HAVE A VALID TITLE
  1. . S CODE=$P(STG,U,5) I '$L(CODE) Q
  1. . S CIEN=$$CODE^VENPCCQC(CODE) I 'CIEN Q ; CAN'TY FIND A VALID INSTANCE OF THE PT ED CODE, SO QUIT
  1. . S TOT=TOT+1 ; KEEP TRACK OF THE TOT NUMBER OF VALID TITLES ENTERED
  1. . S ARR(TOT)=TITLE,ARR(TOT,1)="",ARR("CODE",CODE,TOT)=TITLE,ARR("CAT",CIEN)=""
  1. . Q
  1. I 'TOT G TXCLEAN ; NOTHING SELECTED
  1. TIME ; GET EDU TIME AND FRACTIONAL TIME
  1. S TIME=$P(IN,"|",4) ; TOTAL PATIENT ED TIME
  1. I TIME=+TIME,TIME=TIME\1,TIME>0,TIME<999 D I 1 ; VALIDATE TIME
  1. . I TYPE=6 S FTIME=TIME Q
  1. . S CIEN=0 F CNT=0:1 S CIEN=$O(ARR("CAT",CIEN)) Q:'CIEN ; COUNT THE NUMBER OF KB CATEGORIES
  1. . I CNT S FTIME=TIME\CNT ; FRACTONAL TIME (AVERAGED ACROSS ALL PT ED CATEGORIES)
  1. . Q
  1. E S (FTIME,TIME)=""
  1. VPED ; UPDATE V PAT ED
  1. D VPEFILE^VENPCCQC(LOU,FTIME,EDU)
  1. VWC ; UPDATE V WELL CHILD
  1. I TYPE=1 D PEWCFILE^VENPCCQC(LOU,TIME,EDU) S OUT="OK" G TXCLEAN
  1. I TYPE=6 D NVWCFILE^VENPCCQC(LOU,TIME,EDU)
  1. VIFC S IFC=$P(IN,"|",6) I $L(IFC) D ; UPDATE V INFANT FEEDING CHOICE
  1. . S IFC=$$UP^XLFSTR(IFC)
  1. . S IFC=$S(IFC["EXCLU":1,IFC["LY BR":2,IFC["1/2":3,IFC["LY FO":4,IFC["LA ON":5,1:"")
  1. . I 'IFC Q
  1. . S DIC="^AUPNVIF(",DIC(0)="L",DLAYGO=9000010.44,X="""`"_IFC_""""
  1. . D ^DIC I Y=-1 Q
  1. . S DIE=DIC,DA=+Y,DR=".02////^S X=AUPNPAT;.03////^S X=APCDVSIT"
  1. . L +^AUPNVIF(DA):1 I D ^DIE L -^AUPNVIF(DA)
  1. . Q
  1. S OUT="OK"
  1. TXCLEAN S DA=0,DIK="^VEN(7.16," F S DA=$O(^VEN(7.16,"AC",KEY,DA)) Q:'DA D ^DIK ; EP - CLEAN UP THE TX FILE
  1. D ^XBFMK
  1. Q
  1. ;
  1. TODAY(DFN,TYPE) ; EP - RETURNS TODAY'S PT ED/NURT RESULTS - IF THERE ARE ANY
  1. S TYPE=$G(TYPE) I TYPE'="P",TYPE'="N" Q
  1. I '$D(^DPT(+$G(DFN,0))) Q
  1. N VIEN,PRV,PRVIEN,LOU,TIME,IFC,X,Y,%,VWCIEN,STOP,VDATE,B,IFCIEN
  1. S (OUT,PRV,PRVIEN,LOU,TIME,IFC)="",B="|"
  1. S VWCIEN=99999999,STOP=0
  1. F S VWCIEN=$O(^AUPNVWC("AC",DFN,VWCIEN),-1) Q:'VWCIEN D I STOP Q
  1. . S X=$G(^AUPNVWC(VWCIEN,0)) I '$L(X) Q
  1. . S VIEN=$P(X,U,3) I 'VIEN Q
  1. . S VDATE=+$G(^AUPNVSIT(VIEN,0)) I 'VDATE Q
  1. . I VDATE<DT S STOP=1 Q
  1. . S STOP=1,OUT=VIEN
  1. . I TYPE="P",'$D(^AUPNVWC(VWCIEN,1)) Q
  1. . I TYPE="N",'$D(^AUPNVWC(VWCIEN,5)) Q
  1. . I TYPE="P" S PRVIEN=$P(X,U,4),TIME=$P(X,U,5),LOU=$P(X,U,6)
  1. . I TYPE="N" D
  1. .. S PRVIEN=$P(X,U,9),TIME=$P(X,U,7),LOU=$P(X,U,8)
  1. .. S IFCIEN=$O(^AUPNVIF("AD",VIEN,0))
  1. .. I IFCIEN S IFC=+$G(^AUPNVIF(IFCIEN,0))
  1. .. Q
  1. . I PRVIEN S PRV=$P($G(^VA(200,PRVIEN,0)),U)
  1. . I LOU S LOU=$P("GOOD^FAIR^POOR^NA^REFUSED",U,LOU)
  1. . I $G(IFC) S IFC=$P("EXCLUSIVE BREASTFEEDING^MOSTLY BREASTFEEDING^1/2 & 1/2 BREAST AND FORMULA^MOSTLY FORMULA^FORMULA ONLY",U,IFC)
  1. . S OUT=VIEN_B_PRV_B_PRVIEN_B_LOU_B_TIME
  1. . I TYPE="N" S OUT=OUT_B_IFC
  1. . Q
  1. Q
  1. ;
  1. STALE ; EP - REMOVE STALE ENTRIES FROM TX FILE ; TRANSACTION FROM EARLIER DATES ARE, BY DEFINITION, ORPHANS
  1. N DATE,DIK,DA
  1. S DATE=DT,DIK="^VEN(7.16,"
  1. F S DATE=$O(^VEN(7.16,"AD",DATE),-1) Q:'DATE D
  1. . S DA=0
  1. . F S DA=$O(^VEN(7.16,"AD",DATE,DA)) Q:'DA D ^DIK
  1. . Q
  1. D ^XBFMK
  1. Q
  1. ;