| 1 | RGRSDYN1 ;ALB/RJS-BUILD DYNAMIC LINK LIST FOR A TFU ;06/09/97
 | 
|---|
| 2 |  ;;1.0;CLINICAL INFO RESOURCE NETWORK;**1,3,8,23,27**;30 Apr 99
 | 
|---|
| 3 |  ;Reference to ^DGCN(391.91 supported by IA #2911
 | 
|---|
| 4 |  ;Reference to $$SEND2^VAFCUTL1 supported by IA #2779
 | 
|---|
| 5 | EN(CLIENT,CLASS) ;
 | 
|---|
| 6 |  ;CLIENT=HL7 CLIENT PROTOCOL AT TARGET SYSTEM
 | 
|---|
| 7 |  ;DATA CLASS (Opt.) = Pull from Subs. Registry ONLY
 | 
|---|
| 8 |  ;For now, anything else is both DESCRIPTIVE AND CLINICAL
 | 
|---|
| 9 |  S CLASS=$G(CLASS),CLIENT=$G(CLIENT)
 | 
|---|
| 10 |  Q:CLIENT=""  ;No receiver
 | 
|---|
| 11 |  N PPF,DFN,HERE,RGRS,PPFIEN,ICN,MPI
 | 
|---|
| 12 | PARS ;Parse local outbound message
 | 
|---|
| 13 |  N RGDC
 | 
|---|
| 14 |  D INITIZE^RGRSUTIL,EN^RGRSPAR1("RGRS")
 | 
|---|
| 15 |  ;Get DFN
 | 
|---|
| 16 |  S ICN=$G(RGRS("ICN")) Q:$G(ICN)']""
 | 
|---|
| 17 |  S DFN=$$GETDFN^MPIF001(ICN) Q:+DFN'>0
 | 
|---|
| 18 |  Q:+$$SEND2^VAFCUTL1(DFN,"T")  ;don't broadcast test patients
 | 
|---|
| 19 |  Q:$$IFLOCAL^MPIF001(DFN)
 | 
|---|
| 20 |  S PPF=$$GETVCCI^MPIF001(DFN)\1 Q:+PPF'>0
 | 
|---|
| 21 |  S PPFIEN=$$LKUP^XUAF4(PPF)
 | 
|---|
| 22 |  S HERE=$P($$SITE^VASITE,"^",3)\1
 | 
|---|
| 23 | NOTPPF ; if not ppf send only to ppf
 | 
|---|
| 24 |  I PPF'=HERE D  Q
 | 
|---|
| 25 |  . N PPFLINK,INDEX
 | 
|---|
| 26 |  . D LINK^HLUTIL3(PPFIEN,.PPFLINK)
 | 
|---|
| 27 |  . S INDEX=$O(PPFLINK(0))
 | 
|---|
| 28 |  . I INDEX]"" S HLL("LINKS",1)=CLIENT_"^"_PPFLINK(INDEX)
 | 
|---|
| 29 | ISPPF ;
 | 
|---|
| 30 |  I PPF=HERE D  Q
 | 
|---|
| 31 |  . N PARENT,INDEX,SUBCONTL,CHILDREN,INDEX1,NODE
 | 
|---|
| 32 |  . S NODE=$$MPINODE^MPIFAPI(DFN)
 | 
|---|
| 33 |  . S SUBCONTL=$P($G(NODE),"^",5)
 | 
|---|
| 34 |  . ;Get subscribers, return updated HLL array
 | 
|---|
| 35 |  . ;replaced with GET line tag: I SUBCONTL]"" D GET^HLSUB(SUBCONTL,+CLASS,CLIENT,.HLL)
 | 
|---|
| 36 |  . ;D GET(DFN,SUBCONTL,+CLASS,CLIENT,.HLL)
 | 
|---|
| 37 |  . D GETLINKS(.HLL)
 | 
|---|
| 38 |  . ;Get MPI link from SITE PARAMETER
 | 
|---|
| 39 |  . S MPI=$$MPILINK^MPIFAPI() D
 | 
|---|
| 40 |  . . I $P($G(MPI),U)'=-1 S HLL("LINKS",9999999999)=CLIENT_"^"_MPI
 | 
|---|
| 41 |  . . I $P($G(MPI),U)=-1 D
 | 
|---|
| 42 |  . . . N RGLOG,RGMTXT
 | 
|---|
| 43 |  . . . S RGMTXT=""
 | 
|---|
| 44 |  . . . D START^RGHLLOG(HLMTIEN,"","") D EXC^RGHLLOG(224,"No MPI link identified"_RGMTXT,DFN) D STOP^RGHLLOG(0)
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  Q
 | 
|---|
| 47 | GETLINKS(HLL) ;
 | 
|---|
| 48 |  N RGTF,RGHL,X
 | 
|---|
| 49 |  S X=$$QUERYTF^VAFCTFU1($G(ICN),"RGTF")
 | 
|---|
| 50 |  ;LOOP THOUGH TF LIST AND GET LINK FOR EACH
 | 
|---|
| 51 |  N LP,CNT,STN,STNIEN,RGHL S CNT=1,LP=0 K ERROR
 | 
|---|
| 52 |  F  S LP=$O(RGTF(LP)) Q:LP=""  D
 | 
|---|
| 53 |  .S STN=$$STA^XUAF4($G(RGTF(LP)))
 | 
|---|
| 54 |  .S STNIEN=$$IEN^XUAF4(STN)
 | 
|---|
| 55 |  .Q:$P($$SITE^VASITE(),"^",3)=STN
 | 
|---|
| 56 |  .K RGHL D LINK^HLUTIL3(STNIEN,.RGHL)
 | 
|---|
| 57 |  .I '$O(RGHL(0)) S ERROR="-1^Unknown Logical Link for Station # "_STN_" Unable to send msg for patient "_DFN
 | 
|---|
| 58 |  .I $D(ERROR) D EXC^RGHLLOG(224,ERROR,DFN) K ERROR Q
 | 
|---|
| 59 |  .S HLL("LINKS",CNT)=CLIENT_"^"_$P(RGHL($O(RGHL(0))),"^"),CNT=CNT+1
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 | GET(RGDFN,RGSCN,RGTP,RGCLP,RGLL) ;GET Subscribers
 | 
|---|
| 62 |  ;RGDFN - Patient IEN from FILE (#2)
 | 
|---|
| 63 |  ;RGSCN - Subcription Control Number
 | 
|---|
| 64 |  ;RGTP  - SUBSCRIBER TYPE (0,1,2)/Null=all
 | 
|---|
| 65 |  ;RGCLP - HL7 CLIENT PROTOCOL (required)
 | 
|---|
| 66 |  ;RGLL  - HLL("LINKS",x)=CLIENT PROTOCOL^LOGICAL LINK (passed by reference)
 | 
|---|
| 67 |  N RG,RGI,RGLLIEN,RGLLI,RGLLS,RGLLN,RGLLZ,RGTF,RGTFF,RGTFI,RGX,HLER
 | 
|---|
| 68 |  S U="^"
 | 
|---|
| 69 |  ;get subscribers
 | 
|---|
| 70 |  I RGSCN'="" D GET^HLSUB(RGSCN,RGTP,RGCLP,.RGLL)
 | 
|---|
| 71 |  ;check for a treating facility that is not a subscriber
 | 
|---|
| 72 |  S RGI=0 F  S RGI=$O(^DGCN(391.91,"B",RGDFN,RGI)) Q:'RGI  I $D(^DGCN(391.91,RGI,0)) S RGTF=$G(^DGCN(391.91,RGI,0)),RGTFI=$P(RGTF,U,2) D:RGTFI'=+$$SITE^VASITE
 | 
|---|
| 73 |  .;checking INSTITUTION of links to the TREATING FACILITY INSTITUTION
 | 
|---|
| 74 |  .;RGTFF=1 - Flag for adding Treating Facility to Subcription Control
 | 
|---|
| 75 |  .S RGTFF=1
 | 
|---|
| 76 |  .S RGX=0 F  S RGX=$O(RGLL("LINKS",RGX)) Q:'RGX!(RGTFF=0)  D
 | 
|---|
| 77 |  ..S RGLLIEN=$P(RGLL("LINKS",RGX),U,6)
 | 
|---|
| 78 |  ..I $G(RGLL)="" S RGLL("ERR",RGX)="No logical link defined for "_$P(RGLL("LINKS",RGX),U)_"." Q
 | 
|---|
| 79 |  ..S RGLLI=RGTFI,RGLLN=$P(RGLL("LINKS",RGX),U,2)
 | 
|---|
| 80 |  ..I '$L(RGLLI),'$D(RGLL("ERR",RGX)) S RGLL("ERR",RGX)="Link "_$P(RGLL("LINKS",RGX),U,2)_" does not contain a link to the INSTUTUTION (#4) file." Q
 | 
|---|
| 81 |  ..I $L(RGLLI) S:RGLLI'=RGTFI RGTFF=1 I RGLLI=RGTFI S RGTFF=0 Q
 | 
|---|
| 82 |  .;If TF not in Subscriber list, kill list, add to subscription control file then get new list 
 | 
|---|
| 83 |  .I RGTFF=1 D LINK^HLUTIL3("`"_RGTFI,.RG,"I") S RGLLI=$O(RG(0)) D
 | 
|---|
| 84 |  ..I +$G(RGLLI)>0 S RGLLN=$P(RG(RGLLI),U),RGLLI=RGTFI
 | 
|---|
| 85 |  ..I +$G(RGLLI)>0 S:RGSCN="" RGSCN=$$GETSCN^RGJCREC(RGDFN) D UPD^HLSUB(RGSCN,RGLLN,RGTP,$$NOW^XLFDT,,,.HLER) K RGLL("LINKS") D GET^HLSUB(RGSCN,RGTP,RGCLP,.RGLL)
 | 
|---|
| 86 |  ..I +$G(RGLLI)'>0 W !,"Unable to find Logical link for "_$$GET1^DIQ(4,+RGTFI_",",.01)
 | 
|---|
| 87 |  Q
 | 
|---|