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

BGOREP.m

Go to the documentation of this file.
  1. BGOREP ; IHS/BAO/TMD - Manage REPRODUCTIVE FACTORS ;21-Mar-2016 11:12;DU
  1. ;;1.1;BGO COMPONENTS;**1,3,5,6,10,11,14,15,20**;Mar 20, 2007;Build 6
  1. ; Returns reproductive history as a single string
  1. ; Patch 5 updates the expanded history logic to prevent error on an empty element.
  1. ; Patch 6 updates to use new field formats for repro history
  1. ; Patch 20 fix for deleting EDD field
  1. TIUSTR() ;EP
  1. N X
  1. Q:'$G(DFN) ""
  1. D GET(.X,DFN)
  1. Q X
  1. ; Get reproductive factors on patient
  1. ; Returned as a list of data elements
  1. ; INP = Patient IEN [1] ^ Date Obtained (opt) [2] ^ Expand History (opt) [3]
  1. ; .RET =
  1. ; "L" [1] ^ LMP Date [2] ^ Date Changed [3]
  1. ; "C" [1] ^ Contraception Method;Contraception Begun [2]^....(MULTIPLE)
  1. ; "P" [1] ^ Pregnant [2] ^ Preg Provider [3] ^Date updated [4]
  1. ; "R" [1] ^ Gravida[2] ^ Date[3] ^ Multiple Births[4] ^ Date[5] ^ Full term[6] ^ Date[7] ^ Premature[8]
  1. ; ^ Date[9] ^ Ectopics[10] ^ Date[11] ^ Living Children[12] ^ Date[13] ^ Spontaneous abortions[14] ^ Date[15]^Theraputic abortions[16]^Date[17]
  1. ; "B" [1] ^ Lactation Status [2] ^ Provider [3] ^ Date changed [4]
  1. ; "M" [1] ^ Menarche Age [2] ^ Coitarche Age [3] ^ Menopause age [4]
  1. ; "D" [1] ^ DES Daugher [2] ^ Date updated [3]
  1. ; "E" [1] ^ EDD def [2] ^ EDD Def prov [3] ^ EDD Def Dt [4] ^ EDD Def Comment [5] ^ EDD LMP [6] ^ EDD LMP prov [7] ^ EDD LMP Date [8]^ EDD LMP Comment [9]
  1. ; ^ EDD ult [10] ^EDD Ult Prov [11] ^EDD ult Date [12] ^ EDD Ult Comment [13]
  1. ; ^ EDD Clin [14] ^ EDD Clin prov [15] ^ EDD Clin Date [16] ^EDD Clin Comment [17] ^ EDD unknown [18] ^EDD Unknown prov [19] ^EDD unknown date [20] ^ EDD unknown comment [21]
  1. GET(RET,INP) ;EP
  1. N DFN,REC,HX,LMP,LMPDT,BEG,REPC,CONT,DELDT,METHOD,DAT,FNUM,EXP,CNT,REP,PREG,STR
  1. N X,Y,Z,G,M,F,P,E,L,T,S,GD,MD,FD,PD,ED,LD,TD,SD,REPDT,ARRAY
  1. S RET=$$TMPGBL^BGOUTL
  1. S FNUM=$$FNUM
  1. S CNT=0
  1. S DFN=+INP
  1. Q:'DFN
  1. Q:'$D(^AUPNREP(DFN))
  1. S DAT=$P(INP,U,2)
  1. S EXP=$P(INP,U,3)
  1. S REC=$G(^AUPNREP(DFN,0))
  1. D GETDATA
  1. S CNT=CNT+1
  1. S @RET@(CNT)="L"_U_LMP_U_LMPDT
  1. S CNT=CNT+1
  1. I EXP=1 D
  1. . S STR="Total # of pregnancies="_G_U_GD_U_"Multiple Births="_M_U_MD_U_"Full Term="_F_U_FD_U_"Premature="_P_U_PD_U
  1. . S STR=STR_"Ectopic Pregnancies="_E_U_ED_U_"Living Children="_L_U_LD_U_"Spontaneous Abortions (Miscarriages)="_S_U_SD_U_"Induced Abortions="_T_U_TD
  1. . S @RET@(CNT)="R"_U_STR
  1. E S @RET@(CNT)="R"_U_G_U_GD_U_M_U_MD_U_F_U_FD_U_P_U_PD_U_E_U_ED_U_L_U_LD_U_S_U_SD_U_T_U_TD
  1. D LAC^BGOREP1(.RET,.CNT,DFN) ;Get lactation data
  1. D CONT^BGOREP1(.RET,.CNT,DFN) ;Get contraceptive data
  1. D MEN^BGOREP1(.RET,.CNT,DFN) ;Get menstrual data
  1. D EDD^BGOREP1(.RET,.CNT,DFN) ;Get EDD data
  1. ;I DAT,$P(REC,U,3)'=DAT S HX=""
  1. GETDATA ;Get the data needed for the repro history
  1. S LMP=$P(REC,U,4)
  1. I DAT'="",$P(REC,U,5)'=DAT S LMP=""
  1. S LMP=$$FMTDATE^BGOUTL(LMP)
  1. S LMPDT=$P(REC,U,5)
  1. S LMPDT=$$FMTDATE^BGOUTL(LMPDT)
  1. S REC=$G(^AUPNREP(DFN,11))
  1. D CHECK(REC)
  1. Q
  1. ; Add/edit reproductive factor
  1. ;INP=dfn of patient
  1. ;DATA is an array
  1. ;DATA(1)=L [1] ^ LMP [2] ^ DATE updated [3]
  1. ;DATA(2)=R [1] ^ Gravida [2]^ Date Updated [3] ^Multiple Births [4] ^ Date Updated [5] ^Full term [6] ^ Date Updated [7] ^Premature [8]
  1. ;^ Date Updated [9] ^Ectopics [10] ^ Date Updated [11] ^Living Children [12] ^ Date Updated [13] ^ Spontaneous abortions [14] ^ SA dt update[15]
  1. ;^ Induced abortions [16] ^ TA dt updated [17]
  1. ;DATA(3)=M [1] ^ Menarche age [2] ^Dte updated [3] ^coitarche age [4] ^date updated [5] ^menopause age [6] ^date updated [7] ^DES [8] ^Des updated [9]
  1. ;DATA(4)=E [1]^ PREGNANT [2]^ Dt updated [3] ^ Pregnant updated prov [4]
  1. ;^EDD LMP [5] ^ EDD LMP DT [6] ^ EDD LMP Prov [7] ^ EDD LMP COMMENT [8]
  1. ;^EDD ult [9] ^EDD ul dte [10] ^EDD ult prov [11] ^ EDD ult comment [12]
  1. ;^EDD Clin [13] ^ EDD Clin dte [14] ^ EDD Clin Prov [15] ^ EDD clin Comment [16
  1. ;^EDD unknown [17] ^EDD Unk dte [18] ^ EDD unk prv [19] ^ EDD unk comment [20]
  1. ;^EDD Def [21] ^ EDD Def Dte [22] ^EDD Def prov [23] ^ EDD Def Comment [24]
  1. ;DATA(5)="B [1] ^lac status [2] ^dt updated [3] ^prov update [4]
  1. SET(RET,INP,DATA) ;EP
  1. N DFN,FNUM,REPHX,LMP,TXT,FP,ARRAY,FPDATE,IDX,PREG,DELIVDT,DELMETH,FDA,IENS,NEW,EDDTX
  1. N EDC,EDCBY,GRAV,GRAVDT,MB,MBDT,FT,FTDT,PRE,PREDT,EC,ECDT,LC,LCDT,SA,SADT,TA,TADT
  1. N DEDD,DEDDP,DEDDT,TODAY,TYPE,PRV
  1. S PRV=$P($G(^VA(200,DUZ,0)),U,1)
  1. S RET="",FNUM=$$FNUM
  1. S TODAY=$$DT^XLFDT
  1. S DFN=+INP
  1. I '$D(^DPT(DFN,0)) S RET=$$ERR^BGOUTL(1001) Q
  1. I $P(^DPT(DFN,0),U,2)'="F" S RET=$$ERR^BGOUTL(1052) Q
  1. S NEW='$D(^AUPNREP(DFN))
  1. S IENS=$S('NEW:DFN_",",1:"+1,")
  1. S FDA=$NA(FDA(FNUM,IENS))
  1. S:NEW @FDA@(.01)="`"_DFN
  1. S @FDA@(1.1)=TODAY
  1. S (IDX,EDDTX)=""
  1. F S IDX=$O(DATA(IDX)) Q:'IDX D
  1. .S TYPE=$P(DATA(IDX),U,1)
  1. .S TXT=$G(DATA(IDX))
  1. .I TYPE="B" D LAC(TXT)
  1. .I TYPE="L" D LMP(TXT)
  1. .I TYPE="R" D REP(TXT)
  1. .I TYPE="M" D MEN(TXT)
  1. .I TYPE="E" D EDD(TXT)
  1. I NEW D
  1. .S RET=$$UPDATE^BGOUTL(.FDA,"E")
  1. E D
  1. .N ERR
  1. .D FILE^DIE("E","FDA","ERR")
  1. .I $D(ERR("DIERR")) S RET=ERR("DIERR")
  1. D:'RET EVT(DFN,'NEW)
  1. ;I 'RET D STORE(EDDTX)
  1. K ERR
  1. D STORE(EDDTX)
  1. S:'RET RET=DFN
  1. Q
  1. LMP(TXT) ;Store LMP data
  1. N LMP,LMPUP
  1. S LMP=$P(TXT,U,2)
  1. S LMPUP=$P(TXT,U,3)
  1. I LMPUP="" S LMPUP=$$EXTERNAL^DILFD(TODAY)
  1. I LMP'="" D
  1. .S @FDA@(2)=LMP
  1. .S @FDA@(2.1)=LMPUP
  1. Q
  1. LAC(TXT) ;Store lactation data
  1. N LAC,LACUP,LACPR
  1. S LAC=$$UP^XLFSTR($P(TXT,U,2))
  1. S LACUP=$P(TXT,U,3)
  1. I LACUP="" S LACUP=$$EXTERNAL^DILFD(TODAY)
  1. S LACPR=$P(TXT,U,4)
  1. I LACPR="" S LACPR=PRV
  1. I $L(LAC) D
  1. .S @FDA@(2.01)=LAC
  1. .S:$L(LACPR) @FDA@(2.03)=LACPR
  1. .S:$L(LACUP) @FDA@(2.02)=LACUP
  1. Q
  1. REP(INP) ;Store reproductive history data
  1. S GRAV=$P(INP,U,2),GRAVDT=$P(INP,U,3)
  1. I GRAV'="" D
  1. .S:$L(GRAV) @FDA@(1103)=GRAV
  1. .I $L(GRAVDT) S @FDA@(1104)=GRAVDT
  1. .E S @FDA@(1104)=$$EXTERNAL^DILFD(TODAY)
  1. S MB=$P(INP,U,4),MBDT=$P(INP,U,5)
  1. I MB'="" D
  1. .S:$L(MB) @FDA@(1105)=MB
  1. .I $L(MBDT) S @FDA@(1106)=MBDT
  1. .E S @FDA@(1106)=$$EXTERNAL^DILFD(TODAY)
  1. S FT=$P(INP,U,6),FTDT=$P(INP,U,7)
  1. I FT'="" D
  1. .S:$L(FT) @FDA@(1107)=FT
  1. .I $L(FTDT) S @FDA@(1108)=FTDT
  1. .E S @FDA@(1108)=$$EXTERNAL^DILFD(TODAY)
  1. S PRE=$P(INP,U,8),PREDT=$P(INP,U,9)
  1. I PRE'="" D
  1. .S:$L(PRE) @FDA@(1109)=PRE
  1. .I $L(PREDT) S @FDA@(1110)=PREDT
  1. .E S @FDA@(1110)=$$EXTERNAL^DILFD(TODAY)
  1. S EC=$P(INP,U,10),ECDT=$P(INP,U,11)
  1. I EC'="" D
  1. .S:$L(EC) @FDA@(1111)=EC
  1. .I $L(ECDT) S @FDA@(1112)=ECDT
  1. .E S @FDA@(1112)=$$EXTERNAL^DILFD(TODAY)
  1. S LC=$P(INP,U,12),LCDT=$P(INP,U,13)
  1. I LC'="" D
  1. .S:$L(LC) @FDA@(1113)=LC
  1. .I $L(LCDT) S @FDA@(1114)=LCDT
  1. .E S @FDA@(1114)=$$EXTERNAL^DILFD(TODAY)
  1. S SA=$P(INP,U,14),SADT=$P(INP,U,15)
  1. I SA'="" D
  1. .S:$L(SA) @FDA@(1133)=SA
  1. .I $L(SADT) S @FDA@(1134)=SADT
  1. .E S @FDA@(1134)=$$EXTERNAL^DILFD(TODAY)
  1. S TA=$P(INP,U,16),TADT=$P(INP,U,17)
  1. I TA'="" D
  1. .S:$L(TA) @FDA@(1131)=TA
  1. .I $L(TADT) S @FDA@(1132)=TADT
  1. .E S @FDA@(1132)=$$EXTERNAL^DILFD(TODAY)
  1. Q
  1. MEN(TXT) ;Store menstrual history data
  1. N MAGE,CAGE,MENO,DES,MDT,CDT,MENODT,DESDT
  1. S MAGE=$P(TXT,U,2),MDT=$P(TXT,U,3)
  1. I MAGE="" S MAGE="@"
  1. S:$L(MAGE) @FDA@(1117)=MAGE
  1. I $L(MDT) S @FDA@(1118)=MDT
  1. E S @FDA@(1118)=$$EXTERNAL^DILFD(TODAY)
  1. S CAGE=$P(TXT,U,4),CDT=$P(TXT,U,5)
  1. I CAGE="" S CAGE="@"
  1. S:$L(CAGE) @FDA@(1119)=CAGE
  1. I $L(CDT) S @FDA@(1120)=CDT
  1. E S @FDA@(1120)=$$EXTERNAL^DILFD(TODAY)
  1. S MENO=$P(TXT,U,6),MENODT=$P(TXT,U,7)
  1. I MENO="" S MENO="@"
  1. S:$L(MENO) @FDA@(1121)=MENO
  1. I $L(MENODT) S @FDA@(1122)=MENODT
  1. E S @FDA@(1122)=$$EXTERNAL^DILFD(TODAY)
  1. S DES=$P(TXT,U,8),DESDT=$P(TXT,U,9)
  1. I DES'="" D
  1. .S:$L(DES) @FDA@(1127)=DES
  1. .I $L(DESDT) S @FDA@(1128)=DESDT
  1. .E S @FDA@(1128)=$$EXTERNAL^DILFD(TODAY)
  1. Q
  1. EDD(TXT) ;Get EDD data string and save
  1. S EDDTX=TXT
  1. Q
  1. STORE(TXT) ;Store EDD data string
  1. N EDD,EDDP,EDDT,PREG,PREGPR,PREGDT,FDA,IENS,FNUM,EDDCO
  1. K FDA
  1. Q:TXT=""
  1. S FNUM=$$FNUM
  1. S IENS=DFN_","
  1. S FDA=$NA(FDA(FNUM,IENS))
  1. S PREG=$P(TXT,U,2),PREGPR=$P(TXT,U,3),PREGDT=$P(TXT,U,4) ;Pregnancy data
  1. S PREG=$$UPPER(PREG)
  1. I PREGPR="" S PREGPR=PRV
  1. I PREG'="" D
  1. .S:$L(PREG) @FDA@(1101)=PREG
  1. .S:$L(PREGPR) @FDA@(1135)=PREGPR
  1. .I $L(PREGDT) S @FDA@(1102)=PREGDT
  1. .E S @FDA@(1102)=$$EXTERNAL^DILFD(TODAY)
  1. S EDD=$P(TXT,U,5),EDDP=$P(TXT,U,7),EDDT=$P(TXT,U,6),EDDCO=$P(TXT,U,8) ;EDD by LMP data
  1. I EDDP="" S EDDP=PRV
  1. I PREG="NO"!(PREG="No") S (EDD,EDDP,EDDT,EDDCO)="@"
  1. I EDD'="" D
  1. .S:$L(EDD) @FDA@(1302)=EDD
  1. .S:$L(EDDP) @FDA@(1304)=EDDP
  1. .I $L(EDDT) S @FDA@(1303)=EDDT
  1. .E S @FDA@(1303)=$$EXTERNAL^DILFD(TODAY)
  1. .I $L(EDDCO) S @FDA@(1401)=EDDCO
  1. D FILE^DIE("E","FDA","ERR")
  1. I $D(ERR("DIERR")) S RET=ERR("DIERR")
  1. K FDA,ERR
  1. S FDA=$NA(FDA(FNUM,IENS))
  1. S EDD=$P(TXT,U,9),EDDP=$P(TXT,U,11),EDDT=$P(TXT,U,10),EDDCO=$P(TXT,U,12) ;EDD by ultrasound data
  1. I PREG="NO"!(PREG="No") S (EDD,EDDP,EDDT,EDDCO)="@"
  1. I EDDP="" S EDDP=PRV
  1. I EDD'="" D
  1. .S:$L(EDD) @FDA@(1305)=EDD
  1. .S:$L(EDD) @FDA@(1307)=EDDP
  1. .I $L(EDDT) S @FDA@(1306)=EDDT
  1. .E S @FDA@(1306)=$$EXTERNAL^DILFD(TODAY)
  1. .I $L(EDDCO) S @FDA@(1402)=EDDCO
  1. .D FILE^DIE("E","FDA","ERR")
  1. I $D(ERR("DIERR")) S RET=ERR("DIERR")
  1. K FDA,ERR
  1. S FDA=$NA(FDA(FNUM,IENS))
  1. S EDD=$P(TXT,U,13),EDDP=$P(TXT,U,15),EDDT=$P(TXT,U,14),EDDCO=$P(TXT,U,16) ;EDD by clinical parameters data
  1. I PREG="NO"!(PREG="No") S (EDD,EDDP,EDDT,EDDCO)="@"
  1. I EDDP="" S EDDP=PRV
  1. I EDD'="" D
  1. .S:$L(EDD) @FDA@(1308)=EDD
  1. .S:$L(EDD) @FDA@(1310)=EDDP
  1. .I $L(EDDT) S @FDA@(1309)=EDDT
  1. .E S @FDA@(1309)=$$EXTERNAL^DILFD(TODAY)
  1. .I $L(EDDCO) S @FDA@(1501)=EDDCO
  1. .D FILE^DIE("E","FDA","ERR")
  1. I $D(ERR("DIERR")) S RET=ERR("DIERR")
  1. K FDA,ERR
  1. S FDA=$NA(FDA(FNUM,IENS))
  1. S EDD=$P(TXT,U,17),EDDP=$P(TXT,U,19),EDDT=$P(TXT,U,18),EDDCO=$P(TXT,U,20) ;EDD by known method data
  1. I PREG="NO"!(PREG="No") S (EDD,EDDP,EDDT,EDDCO)="@"
  1. I EDDP="" S EDDP=PRV
  1. I EDD'="" D
  1. .S:$L(EDD) @FDA@(1314)=EDD
  1. .S:$L(EDD) @FDA@(1316)=EDDP
  1. .I $L(EDDT) S @FDA@(1315)=EDDT
  1. .E S @FDA@(1315)=$$EXTERNAL^DILFD(TODAY)
  1. .I $L(EDDCO) S @FDA@(1601)=EDDCO
  1. .D FILE^DIE("E","FDA","ERR")
  1. I $D(ERR("DIERR")) S RET=ERR("DIERR")
  1. S DEDD=$P(TXT,U,21),DEDDP=$P(TXT,U,23),DEDDT=$P(TXT,U,22),EDDCO=$P(TXT,U,24)
  1. K FDA,ERR
  1. S FDA=$NA(FDA(FNUM,IENS))
  1. I PREG="NO"!(PREG="No") S (DEDD,DEDDP,DEDDT,EDDCO)="@"
  1. I DEDDP="" S DEDDP=PRV
  1. I DEDD'="" D
  1. .S:$L(DEDD) @FDA@(1311)=DEDD
  1. .S:$L(DEDD) @FDA@(1313)=DEDDP
  1. .I $L(DEDDT) S @FDA@(1312)=DEDDT
  1. .E S @FDA@(1312)=$$EXTERNAL^DILFD(TODAY)
  1. .I $L(EDDCO) S @FDA@(1502)=EDDCO
  1. .D FILE^DIE("E","FDA","ERR")
  1. I $D(ERR("DIERR")) S RET=ERR("DIERR")
  1. Q
  1. ; Delete reproductive history
  1. ; DFN = Patient IEN
  1. DEL(RET,DFN) ;EP
  1. S RET=$$DELETE^BGOUTL("^AUPNREP(",DFN)
  1. D:'RET EVT(DFN,2)
  1. Q
  1. ; Fire file update events
  1. ; IEN = File IEN ( = patient IEN)
  1. ; OPR = Operation (0 = add, 1 = edit, 2 = delete)
  1. EVT(IEN,OPR) ;EP
  1. N DATA
  1. S DATA=IEN_U_$G(CIA("UID"))_U_OPR_U_IEN
  1. D BRDCAST^CIANBEVT("PCC."_IEN_".REP",DATA)
  1. Q
  1. ; Expand reproductive history
  1. EXPHX(DFN) ;
  1. N REC,HX,LMP,BEG,REPC,CONT,DELDT,METHOD,FNUM,EXP,CNT,REP,PREG,STR
  1. N X,Y,Z,G,M,F,P,E,L,T,S,GD,MD,FD,PD,ED,LD,TD,SD,REPDT,X2,TRGSTR
  1. S TRGSTR=""
  1. Q:'DFN
  1. Q:'$D(^AUPNREP(DFN))
  1. S FNUM=$$FNUM
  1. S REC=$G(^AUPNREP(DFN,0))
  1. D GETDATA
  1. S STR="Total Preg="_G_";Multiple Births="_M_";Full Term="_F_";Premature="_P
  1. S STR=STR_";Ectopics="_E_";Living="_L_";SponAb="_S_";TxAb="_T
  1. S TRGSTR=STR
  1. Q TRGSTR
  1. CHECK(REP) ;Get the different reproductive elements
  1. S REPDT=$P(REP,U,30)
  1. S REPDT=$$FMTDATE^BGOUTL(REPDT)
  1. S G=$P(REP,U,3),GD=$$FMTDATE^BGOUTL($P(REP,U,4))
  1. I G="" S G=0
  1. S M=$P(REP,U,5),MD=$$FMTDATE^BGOUTL($P(REP,U,6))
  1. S F=$P(REP,U,7),FD=$$FMTDATE^BGOUTL($P(REP,U,8))
  1. S P=$P(REP,U,9),PD=$$FMTDATE^BGOUTL($P(REP,U,10))
  1. S E=$P(REP,U,11),ED=$$FMTDATE^BGOUTL($P(REP,U,12))
  1. S L=$P(REP,U,13),LD=$$FMTDATE^BGOUTL($P(REP,U,14))
  1. S T=$P(REP,U,31),TD=$$FMTDATE^BGOUTL($P(REP,U,32))
  1. S S=$P(REP,U,33),SD=$$FMTDATE^BGOUTL($P(REP,U,34))
  1. Q
  1. UPPER(X) ;Turn value to upper case
  1. Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  1. ; Return file number
  1. FNUM() Q 9000017