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

APCDTWC.m

Go to the documentation of this file.
  1. APCDTWC ; IHS/CMI/LAB - GENERATED FROM 'APCD WCE (ADD)' INPUT TEMPLATE(#XXX), FILE 9000010 ;
  1. ;;2.0;IHS PCC SUITE;;MAY 14, 2009
  1. ; WELL CHILD EXAM INPUT TEMPLATE FOR PCC AND PCC+
  1. ;
  1. ;
  1. DATA I '$D(^DPT(+$G(AUPNPAT),0)) Q ; DFN MUST BE DEFINED
  1. I '$G(^AUPNVSIT(+$G(APCDVSIT),0)) Q ; VISIT MUST BE DEFINED
  1. I $O(^VEN(7.12)),$O(^VEN(7.13))
  1. E D Q
  1. . W !,"Sorry, if you want to use this Mnemonic,"
  1. . W !,"the PCC+ Knowledgebase must be installed."
  1. . W !,"Request cancelled..."
  1. . H 1
  1. . Q
  1. W !!!,?15,"*** DATA ENTRY - WELL CHILD EXAM ***"
  1. K Y ; PREVENT THE "An error has occurred, I think" message.
  1. NEW N DIR,DIC,DIE,DA,X,Y,%,%T,%,%Y,%DT,VDATE
  1. S VDATE=^AUPNVSIT(APCDVSIT,0)\1 I 'VDATE Q ; VISIT DATE MUST EXIST
  1. S DIR("B")="A" ; ONLY SET DEFAULT TO "A" ON THE FIRST PASS
  1. S DIR(0)="S^1:Clinic;2:Provider;3:POV;4:Development/Autism Screen comments;5:Patient education;6:Nutrition;7:Screening exams;8:ASQ score;A:ALL items;Q:QUIT THIS MNEMONIC"
  1. S DIR("A")="Your choice" D ^DIR K DIR
  1. I Y="A" D ALL G MENU ; EDIT THE V OB RECORD
  1. I '$G(Y) G FIN ; BAIL OUT
  1. D @$P("CLN^PRV^POV^DEV^PTED^NUT^EXAM^ASQ",U,Y) W !! G MENU
  1. FIN D ^XBFMK
  1. Q
  1. ;
  1. TEST N AUPNPAT,APCDVSIT S AUPNPAT=1,AUPNVSIT=71262 D APCDTWC Q
  1. ;
  1. ALL ; EDIT ALL SECTIONS
  1. D CLN,PRV,POV,DEV,PTED,NUT,EXAM,ASQ
  1. Q
  1. ;
  1. CLN ; EDIT CLINIC
  1. N CIEN,CLN,DA,DIE,DR,%,DIC,X,Y
  1. S CIEN=$O(^DIC(40.7,"C",24,0)),CLN=""
  1. I 'CIEN S CLN="GENERAL"
  1. I CIEN S CLN=$P($G(^DIC(40.7,CIEN,0)),U)
  1. S %=$P($G(^AUPNVSIT(APCDVSIT,0)),U,8) I % S CLN=$P($G(^DIC(40.7,%,0)),U)
  1. S DIE="^AUPNVSIT(",DA=APCDVSIT,DR=".08//"_CLN
  1. L +^AUPNVSIT(APCDVSIT):1 I D ^DIE L -^AUPNVSIT(APCDVSIT)
  1. Q
  1. ;
  1. PRV ; ENTER THE PROVIDERS
  1. N DIC,DA,DR,DIE,X,Y,%,PS
  1. S %=0,X=0
  1. F S X=$O(^AUPNVPRV("AD",APCDVSIT,X)) Q:'X I $E($P($G(^AUPNVPRV(X,0)),U,4))="P" S %=1 Q
  1. I %=1 W !,"A primary provider has already been entered for this visit..." G PRV2
  1. S DIC("A")="Provider: "
  1. S PS="PRIMARY"
  1. PRVQ S DIC=200,DIC(0)="AEQM"
  1. I $P($G(^DD(9000010.06,.01,0)),U,2)[6 S DIC=6
  1. D ^DIC I Y=-1 D ^XBFMK Q
  1. S %=0,X=0
  1. F S X=$O(^AUPNVPRV("AD",APCDVSIT,X)) Q:'X I +$G(^AUPNVPRV(X,0))=+Y S %=1 Q
  1. I %=1 W !,"This provider has already been entered for this visit..." G PRV2
  1. PRV1 S DIC="^AUPNVPRV(",DIC(0)="L",DLAYGO=9000010.06,X="""`"_+Y_""""
  1. D ^DIC I Y=-1 D ^XBFMK Q
  1. S DA=+Y,DIE=DIC,DR=".02////^S X=AUPNPAT;.03////^S X=APCDVSIT;.04//"_PS
  1. L +^AUPNVPRV(DA):1 I D ^DIE L -^AUPNVPRV(DA)
  1. PRV2 S PS="SECONDARY"
  1. S DIC("A")="Another provider: "
  1. G PRVQ ; GET MORE
  1. ;
  1. POV ; PURPOSE OF VISIT
  1. N DA
  1. S DA=APCDVSIT
  1. I $D(^AUPNVPOV("AD",DA)) G POV1 ; THERE IS ALREADY A POV FOR THIS VISIT
  1. N DIC,DIE,DR,X,Y,%,DIR,NIEN,IIEN
  1. S DIC="^AUTNPOV(",DIC(0)="L",DLAYGO=9999999.27,X="WELL CHILD EXAM"
  1. D ^DIC I Y=-1 G POVX
  1. S NIEN=+Y ; GET IEN FOR 'WELL CHILD EXAM' PROVIDER NARRATIVE
  1. S X=$O(^ICD9("AB","V20.2",0)) I 'X S X=$O(^ICD9("AB","V20.2 ",0)) I 'X G POVX ; GET THE ICD9 IEN FOR A WELL CHILD EXAM
  1. S DIC="^AUPNVPOV(",DIC(0)="L",DLAYGO=9000010.07,X="""`"_X_""""
  1. D ^DIC I Y=-1 G POVX ; CREATE NEW POV ENTRY
  1. S DA=+Y,DIE=DIC,DR=".02////^S X=AUPNPAT;.03////^S X=APCDVSIT;.04////^S X=NIEN;.12////P"
  1. L +^AUPNVPOV(DA):1 I D ^DIE L -^AUPNVPOV(DA)
  1. POV1 W !!,"*** WELL CHILD EXAM (V20.2) has been automatically added as a POV ***"
  1. W !,"Add additional POV's using the PV mnemonic",! Q
  1. POVX W !,"Unable to automatically add WELL CHILD EXAM as a POV!!!"
  1. Q
  1. ;
  1. DEV ; ENTER DEVELOPMENT ASSESSMENT
  1. N DEV,DA,DIR,DIE,DR,VAL1,VAL2,VAL3,VAL4,FNO,TOT,X,Y,VWCIEN,%,%Y
  1. S X=$O(^VEN(7.13,"B","WELL CHILD NATL DEV STDS 9999"),-1) Q:X="" S Y=$O(^(X,0)) I 'Y Q
  1. I '$P($G(^VEN(7.13,Y,0)),U,7) W !,"No DEV guidelines available..." Q ; DEV DOMAIN IS INACIVE
  1. S VWCIEN=$O(^AUPNVWC("AD",APCDVSIT,999999999),-1)
  1. W !!,"Want to enter Development or Autism screen comments" S %=2
  1. D YN^DICN I %'=1 Q
  1. S DIR(0)="FO^1:60",DIR("A")="Fine motor"
  1. S DIR("B")="OK"
  1. I VWCIEN S %=$P($G(^AUPNVWC(VWCIEN,3)),U,1) I $L(%) S DIR("B")=%
  1. D ^DIR K DIR I Y?1."^" G DEVX
  1. I $L(Y) S DEV(3.01)=Y
  1. S DIR(0)="FO^1:60",DIR("A")="Gross motor"
  1. S DIR("B")="OK"
  1. I VWCIEN S %=$P($G(^AUPNVWC(VWCIEN,3)),U,2) I $L(%) S DIR("B")=%
  1. D ^DIR K DIR I Y?1."^" G DEVX
  1. I $L(Y) S DEV(3.02)=Y
  1. S DIR(0)="FO^1:60",DIR("A")="Language"
  1. S DIR("B")="OK"
  1. I VWCIEN S %=$P($G(^AUPNVWC(VWCIEN,3)),U,3) I $L(%) S DIR("B")=%
  1. D ^DIR K DIR I Y?1."^" G DEVX
  1. I $L(Y) S DEV(3.03)=Y
  1. S DIR(0)="FO^1:60",DIR("A")="Social"
  1. S DIR("B")="OK"
  1. I VWCIEN S %=$P($G(^AUPNVWC(VWCIEN,3)),U,4) I $L(%) S DIR("B")=%
  1. D ^DIR K DIR I Y?1."^" G DEVX
  1. I $L(Y) S DEV(3.04)=Y
  1. S DIR(0)="FO^1:60",DIR("A")="Autism screen"
  1. S DIR("B")="OK"
  1. I VWCIEN S %=$P($G(^AUPNVWC(VWCIEN,9)),U,1) I $L(%) S DIR("B")=%
  1. D ^DIR K DIR I Y?1."^" G DEVX
  1. I $L(Y) S DEV(9.01)=Y
  1. DEV1 ; FILE RESULTS
  1. I '$D(DEV) G DEVX
  1. S DA=$$VWC^APCDTWC1(AUPNPAT,APCDVSIT) I 'DA G DEVX ; CREATE A NEW V WELL CHILD RECORD IF NECESSARY
  1. S DIE="^AUPNVWC(",DR="",FNO=0,TOT=0
  1. F S FNO=$O(DEV(FNO)) Q:'FNO D ; MAKE THE DR STRING
  1. . I $L(DR) S DR=DR_";"
  1. . S TOT=TOT+1,@("VAL"_TOT)=DEV(FNO)
  1. . S DR=DR_FNO_"///^S X=VAL"_TOT
  1. . Q
  1. L +^AUPNVWC(DA):1 I D ^DIE L -^AUPNVWC(DA)
  1. DEVX D ^XBFMK
  1. Q
  1. ;
  1. ARR(DFN,TYPE,DOM,ARR) ;EP - GIVEN A PATIENT DFN AND A KB CATEGORY TYPE, BUILD AN ARRAY OF ITEMS
  1. ; TYPE = KB CATEGORY TYPE (e.g., PT ED, DEVEL, etc.), DOMAIN = WELL CHILD CARE
  1. N SEX,DAYS,X,Y,Z,%,TOT,DOB,CIEN,KIEN,CAT,ORD,CODE,MOD,START,STOP,STG,TITLE
  1. S TOT=0 K ARR
  1. S %=$G(^DPT(+$G(DFN),0)) I '$L(%) Q
  1. S SEX=$P(%,U,2),DOB=$P(%,U,3) I '$L(SEX)!('DOB) Q
  1. S DAYS=$$FMDIFF^XLFDT(DT,DOB,1)
  1. S CAT=0
  1. F S CAT=$O(^VEN(7.13,DOM,1,CAT)) Q:'CAT D ; CREATE THE ORDINAL ARRAY OF KB CATEGORIES OF THIS TYPE.
  1. . S CIEN=+$G(^VEN(7.13,DOM,1,CAT,0)) I 'CIEN Q
  1. . I $P($G(^VEN(7.11,CIEN,0)),U,11)'=TYPE Q ; TYPE MUST MATCH SELECTION
  1. . S ORD=$P(^VEN(7.13,DOM,1,CAT,0),U,2)
  1. . I 'ORD S ORD=100+CAT ; MAKE SURE EVERY CAT HAS AN ORDER - EVEN IF ONE IS NOT OFFICIALLY ASSIGNED
  1. . S ORD(ORD)=CIEN ; TYPICALLY THE ORD ARRAY WILL ONLY HAVE ONE NODE
  1. . Q
  1. ; NOW CHECK ALL ENTRIES IN THE KNOWLEDGE CATEGORY AND BUILD THE DATA ENTRY ARRAY (ARR)
  1. ; LOOP USING THE ORD ARRAY (ORD)
  1. S (TOT,ORD)=0
  1. F S ORD=$O(ORD(ORD)) Q:'ORD S CIEN=ORD(ORD) S KIEN=0 F S KIEN=$O(^VEN(7.12,"B",CIEN,KIEN)) Q:'KIEN D
  1. . S STG=$G(^VEN(7.12,KIEN,0)) I '$L(STG) Q
  1. . I $P(STG,U,11) Q ; INACTIVE ITEM !!!
  1. . S START=$P(STG,U,5) I DAYS<START Q
  1. . S STOP=$P(STG,U,6) I DAYS>STOP Q
  1. . S CODE=$P(STG,U,4)
  1. . S %=$P(STG,U,10) I $L(%),%'=SEX Q
  1. . S TITLE=$P(STG,U,2) I '$L(TITLE) Q
  1. . S MOD=$P(STG,U,12)
  1. . I $L(MOD) S TITLE=TITLE_" ("_MOD_")"
  1. . S TOT=TOT+1
  1. . S ARR(TOT)=TOT_". "_TITLE
  1. . S ARR(TOT,0)=KIEN,ARR("X",KIEN)=TOT
  1. . I $L(CODE) S ARR("CODE",CODE,TOT)=TITLE
  1. . Q
  1. Q
  1. ;
  1. RANGE(ARR) ;EP - MANAGE A RANGE OF ARRAY NUMBERS
  1. N CNT,MAX,DIR,DEL,PCE,A,B,X,MORE,RFLG,%
  1. PRE ; CHECK V FILE TO SEE IF ANYTHING HAS ALREADY BEEN SELECTED
  1. S MORE=0
  1. R1 S CNT=0,MAX=$O(ARR(999),-1)
  1. F S CNT=$O(ARR(CNT)) Q:'CNT W !,?3,ARR(CNT) I $D(ARR(CNT,1)) W " [SELECTED]"
  1. I MORE W !,"Want to make any additional changes" S %=2 D YN^DICN I %'=1 G RANGEX
  1. S DIR(0)="FO^1:7",DIR("A")="Select ITEMS by number"
  1. S DIR("?")="Sample: 1,2,4-6,-9,-12-15,16"
  1. D ^DIR
  1. I $E(Y)'="-",'Y G RANGEX
  1. S DEL=$L(Y,",")
  1. F PCE=1:1:DEL D
  1. . S X=$P(Y,",",PCE),RFLG=0
  1. . I $E(X)="-" S RFLG=1,X=$E(X,2,99)
  1. . S A=+X I 'A W !,"The expression '",$P(Y,",",PCE),"' is invalid" Q
  1. . S B=$P(X,"-",2) I B="" S B=A
  1. . S B=+B
  1. . I A>B W !,"The expression '",$P(Y,",",PCE),"' is invalid" Q
  1. . F X=A:1:B D
  1. .. I '$D(ARR(X)) W !,"Item number ",X," does not exist" Q
  1. .. I RFLG,'$D(ARR(X,1)) W !,"Item number ",X," has not been selected - can't remove it" Q
  1. .. I RFLG K ARR(X,1) Q
  1. .. I $D(ARR(X,1)) W !,"Item "_X_" has already been selected" Q
  1. .. S ARR(X,1)=""
  1. .. Q
  1. . Q
  1. S MORE=1 W ! G R1
  1. RANGEX K DIRUT,DIRDT,DUOUT,DIROUT,DTOUT
  1. S (%,X)=0 F S X=$O(ARR(X)) Q:'X I $D(ARR(X,1)) S %=1 Q
  1. I '% K ARR ; NOTHING SELECTED, SO KILL OFF THE ARRAY
  1. Q
  1. ;
  1. NUT ; ENTER NUTRITION TOPICS
  1. D FEED^APCDTWC1(APCDVSIT) ; INFANT FEEDING PRACTICES
  1. N ARR,AGIEN,%,X,Y,TOT,LOU,TIME,FTIME,GRP,WVCIEN,TYPE,TITLE,DOM
  1. S X=$O(^VEN(7.13,"B","WELL CHILD NATL NUTR STDS 9999"),-1) Q:X="" S Y=$O(^(X,0)) I 'Y Q
  1. I '$P($G(^VEN(7.13,Y,0)),U,7) W !,"No NUTRITION guidelines available..." Q ; NUTRITION DOMAIN IS INACIVE
  1. S TITLE="nutrition counseling ",TYPE=6,DOM=6
  1. D ARR(AUPNPAT,TYPE,DOM,.ARR) ; BUILD THE PRE-SELECTION ARRAY
  1. I '$D(ARR) W !!,"No nutrition topics are required for this visit!!",!! H 1 G NUTX
  1. S VWCIEN=$O(^AUPNVWC("AD",APCDVSIT,999999999),-1)
  1. I VWCIEN D ; CHECK FOR EXISTING SELECTIONS AND UPDATE THE ARRAY
  1. . S TOT=0 F S TOT=$O(ARR(TOT)) Q:'TOT D
  1. .. S X=ARR(TOT)
  1. .. S X=$P(X,". ",2)
  1. .. S X=$E(X,1,30)
  1. .. I $D(^AUPNVWC(VWCIEN,5,"B",X)) S ARR(TOT,1)="" ; IF ITS ALREADY IN V WC, SET THE ARR NODE TO 'SELECTED'
  1. .. Q
  1. . Q
  1. I '$D(ARR) G NUTX
  1. W !!,"Select from the list of standard ",TITLE,"topics: "
  1. D RANGE(.ARR) I '$D(ARR) Q ; GET FINAL SELECTION ARRAY
  1. NUTFILE ; MAKE ENTRIES IN V WC AND V PATIENT ED
  1. S (LOU,TIME,FTIME)="",GRP="I"
  1. D LOU^APCDTWC1(TITLE,.LOU,.TIME,.FTIME) ; GET LEVEL OF UNDERSTANDING AND NUT ED TIME
  1. D NVWCFILE^APCDTWC1(LOU,TIME) ; FILE RESULTS IN V WELL CHILD ; REQUIRES THE SELECTION ARRAY
  1. D VPEFILE^APCDTWC1(LOU,FTIME,GRP) ; FILE RESULTS IN V PATIENT ED ; REQUIRES THE SELECTION ARRAY
  1. NUTX K ARR ; CLEANUP ARRAY
  1. Q
  1. ;
  1. PTED ; ENTER PATIENT EDUCATION TOPICS
  1. ; RESULTS ARE FILE IN BOTH V PATIENT ED AND V WELL CHILD AS FREE TEXT SUBTOPICS
  1. S X=$O(^VEN(7.13,"B","WELL CHILD NATL AG STDS 9999"),-1) Q:X="" S Y=$O(^(X,0)) I 'Y Q
  1. I '$P($G(^VEN(7.13,Y,0)),U,7) W !,"No PATIENT EDUCATION guidelines available..." Q ; AG DOMAIN IS INACIVE
  1. N ARR,AGIEN,%,X,TOT,LOU,TIME,FTIME,GRP,WVCIEN,TYPE,TITLE,DOM
  1. S TITLE="patient education ",TYPE=1,DOM=5
  1. D ARR(AUPNPAT,TYPE,DOM,.ARR) ; BUILD THE PRE-SELECTION ARRAY
  1. S VWCIEN=$O(^AUPNVWC("AD",APCDVSIT,999999999),-1)
  1. I VWCIEN D ; CHECK FOR EXISTING SELECTIONS AND UPDATE THE ARRAY
  1. . S TOT=0 F S TOT=$O(ARR(TOT)) Q:'TOT D
  1. .. S X=ARR(TOT)
  1. .. S X=$P(X,". ",2)
  1. .. S X=$E(X,1,30)
  1. .. I $D(^AUPNVWC(VWCIEN,1,"B",X)) S ARR(TOT,1)="" ; IF ITS ALREADY IN V WC, SET THE ARR NODE TO 'SELECTED'
  1. .. Q
  1. . Q
  1. I '$D(ARR) Q
  1. W !!,"Select from the list of standard ",TITLE,"topics: "
  1. D RANGE(.ARR) I '$D(ARR) Q ; GET FINAL SELECTION ARRAY
  1. PEFILE ; AT THIS POINT WE HAVE THE FINAL SELECTION ARRAY AND ARE READY TO MAKE ENTRIES IN V WELL CHILD AND V PATIENT ED
  1. S (LOU,TIME,FTIME)="",GRP="I"
  1. D LOU^APCDTWC1(TITLE,.LOU,.TIME,.FTIME,.EDU) ; GET LEVEL OF UNDERSTANDING AND PT ED TIME
  1. D PEWCFILE^APCDTWC1(LOU,TIME,EDU) ; FILE RESULTS IN V WELL CHILD ; REQUIRES THE SELECTION ARRAY
  1. D VPEFILE^APCDTWC1(LOU,FTIME,GRP) ; FILE RESULTS IN V PATIENT ED ; REQUIRES THE SELECTION ARRAY
  1. K ARR ; CLEANUP ARRAY
  1. Q
  1. ;
  1. EXAM ; ENTER SPECIAL EXAMS AND SCREENING PROCEDURES
  1. S X=$O(^VEN(7.13,"B","WELL CHILD NATL EXAM STDS 9999"),-1) Q:X="" S Y=$O(^(X,0)) I 'Y Q
  1. I '$P($G(^VEN(7.13,Y,0)),U,7) W !,"No EXAM guidelines available..." Q ; EXAM DOMAIN IS INACIVE
  1. D EXAM^APCDTWC2
  1. Q
  1. ;
  1. ASQ ; ENTER ASQ SCORES
  1. D ASQFILE^APCDTWC1
  1. Q
  1. ;