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

BHLXAC.m

Go to the documentation of this file.
  1. BHLXAC ; cmi/flag/maw - BHL Autocreate X12 fields, segs, msgs ;
  1. ;;3.01;BHL IHS Interfaces with GIS;**2**;OCT 15, 2002
  1. ;
  1. ;
  1. ;
  1. ;this routine will read in a spreadsheet of an X12 message spec
  1. ;create the fields with data locations, add the fields to the
  1. ;appropriate segment, then add the appropriate segment to the
  1. ;appropriate message.
  1. ;
  1. MAIN ;-- this is the main routine driver
  1. S C=","
  1. S BHLXFNM=$$FASK
  1. Q:$G(BHLXFNM)=""
  1. S BHLXMSG=$E($P(BHLXFNM,U,2),4,6)
  1. Q:BHLXMSG'?.N
  1. S BHLXIN=$$IN
  1. D READ($P(BHLXFNM,U),$P(BHLXFNM,U,2),BHLXMSG)
  1. Q:$G(BHLXNF)
  1. D EOJ
  1. Q
  1. ;
  1. ASK() ;-- ask the type of message
  1. S DIR(0)="F^3:3",DIR("A")="What is the X12 message type "
  1. D ^DIR
  1. K DIR
  1. I $D(DIRUT) Q ""
  1. Q Y
  1. ;
  1. FASK() ;-- file name
  1. S DIR(0)="F",DIR("A")="What is the directory to load from"
  1. D ^DIR
  1. K DIR
  1. I $D(DIRUT) Q ""
  1. S BHLXDIR=Y
  1. K Y
  1. S DIR(0)="F",DIR("A")="What is the filename to load from"
  1. D ^DIR
  1. K DIR
  1. I $D(DIRUT) Q ""
  1. Q BHLXDIR_U_Y
  1. ;
  1. IN() ;-- ask if this is an inbound message
  1. S DIR(0)="Y",DIR("A")="Is this an inbound message "
  1. D ^DIR
  1. K DIR
  1. I $D(DIRUT) Q ""
  1. Q Y
  1. ;
  1. READ(DIR,FNM,MSG) ;-- read in the file and start creating
  1. S BHLXP="X1 IHS "_MSG
  1. N Y
  1. S BHLXY=$$OPEN^%ZISH(DIR,FNM,"R")
  1. I +$G(Y) S BHLXNF=1 Q
  1. S BHLXMI=$O(^INTHL7M("B",BHLXP,0))
  1. I 'BHLXMI S BHLXMI=$$MADD(BHLXP)
  1. F BHLI=1:1 U IO R BHLX:DTIME D Q:BHLX=""
  1. . Q:BHLX=""
  1. . S LOOP=$P(BHLX,C)
  1. . I LOOP="" S LOOP="HF"
  1. . S SEG=$P(BHLX,C,2)
  1. . S FLDS=$P(BHLX,C,5)
  1. . S RPT=$S($P(BHLX,C,6)'="":1,1:0)
  1. . S SEQ=$P(BHLX,C,7)
  1. . S BHLXSEG=$$SADD(BHLXP,LOOP,SEG,SEQ)
  1. . S BHLXMG=$$MSGADD(BHLXMI,BHLXSEG,SEQ,RPT,BHLXIN)
  1. . F BHLJ=1:1:FLDS D Q:BHLJ=""
  1. .. Q:BHLJ=""
  1. .. S BHLAFLD=$$FLDADD(BHLXP,LOOP,SEG,BHLJ,BHLXSEG,MSG)
  1. .. S BHLXSEGE=$$SEGADD(BHLXSEG,BHLJ,BHLAFLD)
  1. Q
  1. ;
  1. SADD(XP,LP,SG,SQ) ;-- add the segment
  1. S X=XP_" "_LP_" "_SG_" "_SQ
  1. I $O(^INTHL7S("B",X,0)) Q $O(^INTHL7S("B",X,0))
  1. K DD,DO
  1. S DIC="^INTHL7S(",DIC(0)="L"
  1. S DIC("DR")=".02///"_$E(SG,1,3)
  1. D FILE^DICN
  1. Q +Y
  1. ;
  1. FLDADD(XP,LP,SG,LJ,XSG,MG) ;-- add the field
  1. S X=XP_" "_LP_" "_SG_" "_LJ
  1. I $O(^INTHL7F("B",X,0)) Q $O(^INTHL7F("B",X,0))
  1. K DD,DO,DIC
  1. S DIC(0)="AEMLQZ",DIC="^INTHL7F("
  1. S DTL="@"_MG_LP_SG_LJ
  1. S DIC("DR")=".02///STRING;.03///999;3///"_DTL
  1. D FILE^DICN
  1. Q +$G(Y)
  1. ;
  1. MADD(MSG) ;-- add the message
  1. K DD,DO,DIC
  1. S DIC="^INTHL7M(",DIC(0)="L",X=MSG
  1. S DIC("DR")=".12///X12"
  1. D FILE^DICN
  1. Q +Y
  1. ;
  1. SEGADD(ASEG,ASEQ,AFLD) ;-- add the field to the segment
  1. S X=AFLD
  1. I $O(^INTHL7S("FIELD",AFLD,ASEG,0)) Q $O(^INTHL7S("FIELD",AFLD,ASEG,0))
  1. K DD,DO,DIC
  1. S DA(1)=ASEG
  1. S DIC="^INTHL7S("_ASEG_",1,",DIC(0)="L"
  1. S DIC("P")=$P(^DD(4010,1,0),"^",2)
  1. S DIC("DR")=".02///"_ASEQ
  1. D FILE^DICN
  1. Q +$G(Y)
  1. ;
  1. MSGADD(MMSG,MSEG,MSEQ,MRPT,IN) ;-- add the segment to the message
  1. I $O(^INTHL7M("SEG",MSEG,MMSG,0)) Q $O(^INTHL7M("SEG",MSEG,MMSG,0))
  1. K DD,DO,DIC
  1. S DA(1)=MMSG
  1. S DIC="^INTHL7M("_MMSG_",1,",DIC(0)="L"
  1. S DIC("P")=$P(^DD(4011,1,0),"^",2)
  1. S X=MSEG
  1. S DIC("DR")=".02///"_MSEQ_";.03///"_MRPT
  1. I $G(IN) S DIC("DR")=DIC("DR")_";.07///PARSE;.12///FILLER"
  1. D FILE^DICN
  1. Q +$G(Y)
  1. ;
  1. EOJ ;-- kill variables and quit
  1. D ^%ZISC
  1. D EN^XBVK("BHL")
  1. Q
  1. ;