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

VENPCCKB.m

Go to the documentation of this file.
  1. VENPCCKB ; IHS/OIT/GIS - KNOWLEDGEBASE UTILITIES ;
  1. ;;2.6;PCC+;**1,4**;APR 03, 2012;Build 24
  1. ;
  1. ;
  1. ;
  1. PARSE(PATH,FILE) ; EP - PARSE A KB DEFINITION DOCUMENT AND STORE KB GROUPS AND ITEMS
  1. N TMP,POP,MN
  1. I '$L($G(FILE)) Q
  1. S FILE=$$UP^XLFSTR(FILE)
  1. S MN=$E($P(FILE,".TXT"),1,4) I '$L(MN) Q
  1. S TMP=$NA(^TMP("VEN AG",$J)) K @TMP
  1. S POP=$$OPN^VENPCCP(PATH,FILE,"R","D GET^VENPCCKB") ; CAPTURE TXT FILE AS A GLOBAL ARRAY
  1. I POP Q
  1. D PASS1 ; GET KB GROUPS
  1. D PASS2 ; GET KB ITEMS
  1. K @TMP,^TMP("VEN AG GROUP",$J)
  1. Q
  1. ;
  1. GET ; EP - CAPTURE CONTENT
  1. N LINE,X,STOP
  1. S X="",STOP=0
  1. F LINE=1:1 D I STOP Q
  1. . R X:1 E Q
  1. . I X["***END***" S STOP=1 Q
  1. . I X="" Q
  1. . S @TMP@(LINE)=X
  1. . Q
  1. Q
  1. ;
  1. PASS1 ; EP - GET KB GROUPS
  1. N LINE,NAME,Y,%,X,DIC,DIE,DR,DA,HDR,CAT
  1. S X="",LINE=0 K ^TMP("VEN AG GROUP",$J)
  1. F S LINE=$O(@TMP@(LINE)) Q:'LINE D I X="***END***" Q
  1. . S X=$G(@TMP@(LINE))
  1. . I $E(X)=$C(9),$E(X,2)?1A S ^TMP("VEN AG GROUP",$J,$E(X,2,99))=""
  1. . Q
  1. S NAME="",%=" and "
  1. S DIC="^VEN(7.11,",DIC(0)="L",DLAYGO=19707.11,DIE=DIC
  1. S DR=".03////1;.05////1;.09///^S X=HDR;.1////M"
  1. F S NAME=$O(^TMP("VEN AG GROUP",$J,NAME)) Q:NAME="" D
  1. . S X=NAME
  1. . I X[% S X=$P(X,%)_"/"_$P(X,%,2,99)
  1. . S X=$$UP^XLFSTR(X),HDR="PT ED - "_X,HDR=$E(HDR,1,30),CAT=X
  1. . S X=MN_" "_X
  1. . D ^DIC I Y=-1 Q
  1. . S DA=+Y
  1. . L +^VEN(7.11,DA):1 I D ^DIE L -^VEN(7.11,DA)
  1. . S ^VEN(7.11,DA,2,0)="^^1^1^"_DT_U
  1. . S ^VEN(7.11,DA,2,1,0)="NATL. ANTICIPETORY GUIDANCE STANDARDS FOR "_CAT
  1. . S ^TMP("VEN AG GROUP",$J,NAME)=DA
  1. . Q
  1. D ^XBFMK
  1. Q
  1. ;
  1. PASS2 ; EP - GET KB ITEMS
  1. N LINE,X,M1,M2,DAY1,DAY2,GROUP,M,W,Y,Z,DIC,DIE,DR,DA,ITEM,TXT,GIEN
  1. S LINE=0,(DAY1,DAY2)="",GROUP="",GIEN=""
  1. S (DIC,DIE)="^VEN(7.12,",DIC(0)="L",DLAYGO=19707.12
  1. S DR=".02///^S X=ITEM;.05///^S X=DAY1;.06///^S X=DAY2;.13///^S X=M1;.14///^S X=M2"
  1. F S LINE=$O(@TMP@(LINE)) Q:'LINE S TXT=@TMP@(LINE) I $L(TXT) D
  1. BRACKET . I TXT["{" D Q ; GET THE CURRENT SET OF AGE BRACKETS (IN DAYS AND MONTHS)
  1. .. S (DAY1,DAY2)="" ; RESET THE AGE RANGE
  1. .. S Y=$P(TXT,"{",2) S Y=$P(Y,"}")
  1. .. S M1=+Y,M2=$P(Y,"-",2)
  1. .. I M1!(M1=0),M2
  1. .. E Q
  1. .. I M1=0 S DAY1=0
  1. .. E S DAY1=(30.4375*M1\1)+1
  1. .. S DAY2=30.4375*M2\1
  1. .. Q
  1. GRP . I $E(TXT)=$C(9),$E(TXT,2)?1A S GROUP=$E(TXT,2,99),GIEN=$G(^TMP("VEN AG GROUP",$J,GROUP)) Q
  1. ITEM . I (DAY1!(DAY1=0)),DAY2,M2,$L(GROUP),GIEN
  1. . E Q ; AT THIS STAGE DAYS, MONTHS AND GROUP MUST BE DEFINED
  1. . I $E(TXT,1,2)'=$C(9,9) Q ; SCREEN OUT ANYTHING THAT IS NOT AN ITEM
  1. . S ITEM=$E(TXT,3,82) I '$L(ITEM) Q
  1. . S ITEM=$TR(ITEM,$C(9),"") ; CLEAN OUT ANY TRAILING TABS
  1. . S X="""`"_GIEN_""""
  1. . D ^DIC I Y=-1 Q
  1. . S DA=+Y
  1. . L +^VEN(7.12,DA):1 I D ^DIE L -^VEN(7.12,DA)
  1. . Q
  1. D ^XBFMK
  1. Q
  1. ;
  1. PEC ; EP - AUTOMATICALLY ASSIGN PATIENT ED CODES TO ITEMS
  1. N IIEN,ITEM,X,Y,Z,CIEN,PRE,CODE,GRP
  1. S IIEN=0
  1. F S IIEN=$O(^VEN(7.12,IIEN)) Q:'IIEN D ; CHECK EACH ITEM
  1. . S X=$G(^VEN(7.12,IIEN,0)) I '$L(X) Q
  1. . S CIEN=+X S Y=$G(^VEN(7.11,CIEN,0)) I '$L(Y) Q
  1. . S PRE=$P(Y,U,12) I '$L(PRE) Q
  1. . S CODE=$P(Y,U,13) I '$L(CODE) Q
  1. . S Z=$P(X,U,6),GRP=$S(Z<62:"N",Z<366:"I",Z<1096:"T",Z<1827:"P",Z<4384:"S",Z<7686:"A",1:"")
  1. . S $P(X,U,4)=PRE_GRP_"-"_CODE,^VEN(7.12,IIEN,0)=X
  1. . Q
  1. Q
  1. ;
  1. TOPIC ; EP - IF ENTRIES ARE MISSING FROM THE EDUCATION TOPIC FILE, ADD THEM NOW
  1. N TIEN,STOPIC,MN,X,Y,Z,%,TMP,CNT,FULL,STG,NAME,MAJ,EIEN,TNAME,KGBL
  1. S TMP=$NA(^TMP("VEN EDU",$J)) K @TMP
  1. I '$G(KIEN) S KIEN=0
  1. TARR ; MAKE TEMP ARRAY OF ALL MNEMONICS AND THEIR SUB-TOPICS IN THE KB ITEM FILE
  1. S KGBL=$NA(^VEN(7.12))
  1. F S KIEN=$O(@KGBL@(KIEN)) Q:'KIEN D
  1. . S MN=$P($G(@KGBL@(KIEN,2)),U,3) I MN="" Q ; TOPIC MNEMONIC
  1. . S MAJ=$P(MN,"-") I MAJ="" Q ; MAJOR TOPIC. BY DEFAULT, ALL WCM MAJOR TOPICS WILL BE THE 1ST PIECE OF THE MN
  1. . S TNAME=$P(@KGBL@(KIEN,2),U,6) I TNAME="" S TNAME=MN,$P(@KGBL@(KIEN,2),U,6)=MN ; FULL TOPIC NAME
  1. . S EIEN=$O(^AUTTEDT("C",MN,99999999),-1) ; GIVEN A MN FROM THE KB ITEM FILE, FIND THE IEN OF THE NEWEST TOPIC TOPIC IN EDU TOPIC FILE WITH THAT EXACT MN
  1. . I EIEN D Q ; THE MNEMONIC IS ALREADY IN THERE. CLEAN IT UP AND QUIT
  1. .. S %=$NA(^AUTTEDT(EIEN))
  1. .. S $P(@%@(0),U,3)="",$P(@%@(0),U,5)="" ; MAKE SURE IT'S ACTIIVE
  1. .. S $P(@%@(0),U,6)=MAJ ; MAKE SUR MAJOR TOPIC IS SYNC'D
  1. .. Q
  1. . S Y=$P(MN,"-",2,99) ; FIRST VALIDATE THE MNEMONIC STORED IN THE KB ITEM FILE
  1. . I '$L(Y) Q
  1. . I $L(Y)>3 Q
  1. . I Y?.E1.N.E Q
  1. . S @TMP@(MN)=TNAME ; FULL TOPIC NAME
  1. . S STOPIC=$P(^VEN(7.12,KIEN,0),U,2) I '$L(STOPIC) Q ; SUB-TOPIC NAME
  1. . S %=$O(@TMP@(MN,999999),-1)+1
  1. . S @TMP@(MN,%)=STOPIC ; SUB TOPIC ARRAY
  1. . Q
  1. TENT ; FOR EACH ITEM IN THE ARRAY, MAKE NEW ENTRY IN THE EDUCATION TOPIC FILE - IF NECESSARY
  1. S MN=""
  1. F S MN=$O(@TMP@(MN)) Q:'$L(MN) D ; LOOP THROUGH THE MENOMIC ARRAY OF UN-ENTERED TOPICS
  1. . S TNAME=@TMP@(MN)
  1. . S MAJ=$P(MN,"-")
  1. . S STG="",CNT=0
  1. . F S CNT=$O(@TMP@(MN,CNT)) Q:'CNT D ; FOR EA TOPIC, BUILD A LONG TEXT STRING WITH ALL SUBTOPICS IN IT
  1. .. S X=@TMP@(MN,CNT) I '$L(X) Q
  1. .. S X=CNT_". "_X
  1. .. I $L(STG) S STG=STG_". "
  1. .. S STG=STG_X
  1. .. Q
  1. WPARR .; CONVERT THE SUBTOPIC STG TO AN ARRAY THAT CAN BE GRAFTED INTO THE WP (SUBTOPIC) FIELD OT EDU TOPIC FILE
  1. . K ARR S CNT=0
  1. . F D I '$L(STG) Q
  1. .. S CNT=CNT+1
  1. .. I $L(STG)<61 S ARR(CNT)=STG,STG="" Q
  1. .. S X=$E(STG,1,60),Y=$E(STG,61,9999),Z=$P(Y," ")
  1. .. S ARR(CNT)=X_Z_" ",%=$L(ARR(CNT))+1
  1. .. S STG=$E(STG,%,9999)
  1. .. Q
  1. . D TDIC(MN,MAJ,TNAME,.ARR) ; FILL OUT THE NEW TOPIC ENTRY
  1. . Q
  1. K @TMP
  1. Q
  1. ;
  1. TDIC(MN,MAJ,TNAME,ARR) ; EP - MAKE NEW EDUCATION TOPIC ENTRY
  1. N DIC,DIE,DA,DR,X,Y,%,CNT,GBL
  1. S DIC="^AUTTEDT(",DIC(0)="L",DLAYGO=9999999.09
  1. S X=TNAME
  1. D ^DIC I Y=-1 Q
  1. S DIE=DIC,DA=+Y,DR=".06///^S X=MAJ;1///^S X=MN"
  1. S GBL=$NA(^AUTTEDT(DA))
  1. L +@GBL:1 I D ^DIE L -@GBL
  1. S CNT=$O(ARR(9999),-1)
  1. S @GBL@(2,0)="^^"_CNT_U_CNT_U_DT ; STUFF STANDARDS FIELD WITH WP ARRAY - BASED ON SUBTOPICS IN KB ITEM FILE
  1. F X=1:1:CNT S @GBL@(2,X,0)=ARR(X)
  1. D ^XBFMK K ARR
  1. W !?10,TNAME," (",MN,") <-Added"
  1. Q
  1. ;
  1. CONVERT ; EP - CONVERT ENTRIES TO NEW NATL STDS
  1. N X,DIC,Y,%,CAT,IIEN,STG,Z
  1. S IIEN=0,DIC="^VEN(7.12,",DLAYGO=19707.12,DIC(0)="L"
  1. F S IIEN=$O(^VEN(7.12,IIEN)) Q:'IIEN D I IIEN>1964 Q
  1. . S STG=$G(^VEN(7.12,IIEN,0)),%=+STG
  1. . S X=$S(%=1:34,%=3:35,%=4:36,%=5:37,1:0) I 'X Q
  1. . S $P(STG,U,1)=X
  1. . S X="""`"_X_""""
  1. . D ^DIC I Y=-1 Q
  1. . S ^VEN(7.12,+Y,0)=STG
  1. . Q
  1. D ^XBFMK
  1. Q
  1. ;
  1. PTED ; EP - PATIENT ED CODES
  1. N DA
  1. S DA=0
  1. F S DA=$O(^VEN(7.12,DA)) Q:'DA D
  1. . S X=$P($G(^VEN(7.12,DA,0)),U,4)
  1. . I $E(X,1,2)'="CH" Q
  1. . I X?.E1.N.E Q ; MUST BE A NATL CODE
  1. . S $P(^VEN(7.12,DA,2),U,3)=X
  1. . Q
  1. Q
  1. ;
  1. CHA ; EP - CONVERT CH TO CHA
  1. N KIEN,X,Y,%
  1. S KIEN=0
  1. F S KIEN=$O(^VEN(7.12,KIEN)) Q:'KIEN S X=$P($G(^VEN(7.12,KIEN,0)),U,4) I $E(X,1,3)="CH-" D
  1. . S X="CHA-"_$P(X,"-",2)
  1. . S $P(^VEN(7.12,KIEN,0),U,4)=X
  1. . Q
  1. Q
  1. ;
  1. NAME(MN) ; EP - TRIGGER: GIVEN A ED TOPIC MNEMONIC, RETURN THE NAME FROM THE PT ED FILE
  1. I '$L($G(MN)) Q
  1. N EIEN,NAME,X,Y,Z
  1. S EIEN=0,NAME=""
  1. F S EIEN=$O(^AUTTEDT("C",MN,EIEN)) Q:'EIEN D I NAME Q
  1. . I $P($G(^AUTTEDT(EIEN,0)),U,3) Q ; INACTIVE
  1. . S NAME=$P($G(^AUTTEDT(EIEN,0)),U)
  1. . Q
  1. ; I NAME="" W !,MN
  1. Q NAME
  1. ;