| 1 | AFJXVER ;FO-OAKLAND/GMB-VERIFY NHE DATA MESSAGE IS VALID ;1/09/01  13:51 | 
|---|
| 2 | ;;5.1;Network Health Exchange;**26,31**;Jan 23, 1996 | 
|---|
| 3 | ; Totally rewritten 11/2001.  (Previously CIOFO-SLC/RJS.) | 
|---|
| 4 | ; Entry point: | 
|---|
| 5 | ; ENTER - Invoked by option AFJX PATID REPORT | 
|---|
| 6 | ENTER ; | 
|---|
| 7 | D EN^XUTMDEVQ("ALL^AFJXVER","Network Health Exchange Data Message Report") | 
|---|
| 8 | Q | 
|---|
| 9 | ALL ; ALL MESSAGES | 
|---|
| 10 | N AXBSKT,AXCNT,AXMZ,AXDATA,AXDATE,AXLIST,AXMZ,AXSEG,AXSITE,AXNHEDUZ,AXBSKTN,AXTXT | 
|---|
| 11 | W !!,"Network Health Exchange Data Message report" | 
|---|
| 12 | W !,?20,"for ",^XMB("NETNAME"),!,?24,"on ",$$HTE^XLFDT($H) | 
|---|
| 13 | S AXNHEDUZ=$$FIND1^DIC(200,"","X","NETWORK,HEALTH EXCHANGE","B") | 
|---|
| 14 | I 'AXNHEDUZ W !,"NETWORK,HEALTH EXCHANGE user not in New Person file." Q | 
|---|
| 15 | W !!,"Checking NETWORK,HEALTH EXCHANGE messages..." | 
|---|
| 16 | I '$D(^XMB(3.7,AXNHEDUZ)) W !,"No Mail Box for this user defined..." Q | 
|---|
| 17 | S AXBSKT=.9 | 
|---|
| 18 | F  S AXBSKT=$O(^XMB(3.7,AXNHEDUZ,2,AXBSKT)) Q:'AXBSKT  D  ;  Loop through mail baskets. | 
|---|
| 19 | . S AXBSKTN=$$BSKTNAME^XMXUTIL(AXNHEDUZ,AXBSKT) | 
|---|
| 20 | . S AXLIST(2,AXBSKTN)=0 | 
|---|
| 21 | . W !,?3,"Checking ",AXBSKTN," basket..." | 
|---|
| 22 | . S (AXMZ,AXCNT)=0 | 
|---|
| 23 | . F  S AXMZ=$O(^XMB(3.7,AXNHEDUZ,2,AXBSKT,1,AXMZ)) Q:'AXMZ  D  ;  Check each message. | 
|---|
| 24 | . . S AXCNT=AXCNT+1 W:($X>50) ! W:'(AXCNT#100) "." | 
|---|
| 25 | . . S AXLIST(2,AXBSKTN)=AXLIST(2,AXBSKTN)+1  ;  Update basket Message Counter | 
|---|
| 26 | . . S AXDATA=$$MSG(AXMZ) Q:'$L(AXDATA) | 
|---|
| 27 | . . S AXLIST(1,$P(AXDATA,U,2),"T")=$G(AXLIST(1,$P(AXDATA,U,2),"T"))+1 | 
|---|
| 28 | . . S AXTXT=$$VALID(AXMZ) | 
|---|
| 29 | . . I AXTXT D  Q  ;  Message is valid. | 
|---|
| 30 | . . . S AXLIST(1,$P(AXDATA,U,2),"V")=$G(AXLIST(1,$P(AXDATA,U,2),"V"))+1 | 
|---|
| 31 | . . ;W !," Data discrepancy in message #",+AXMZ,"  ",$P(AXTXT,U,2) | 
|---|
| 32 | . . ;   Message has data discrepancies. | 
|---|
| 33 | . . S AXLIST(1,$P(AXDATA,U,2),+AXDATA)=$G(AXLIST(1,$P(AXDATA,U,2),+AXDATA))+1 | 
|---|
| 34 | . . S AXLIST(1,$P(AXDATA,U,2),+AXDATA,AXMZ)=$P(AXTXT,U,2) | 
|---|
| 35 | . . S AXLIST(1,$P(AXDATA,U,2),"N")=$G(AXLIST(1,$P(AXDATA,U,2),"N"))+1 | 
|---|
| 36 | W !!,"Message count" | 
|---|
| 37 | S AXBSKTN="" | 
|---|
| 38 | F  S AXBSKTN=$O(AXLIST(2,AXBSKTN)) Q:AXBSKTN=""  D | 
|---|
| 39 | . W !,?3,$J(+AXLIST(2,AXBSKTN),8) | 
|---|
| 40 | . W " message",$S((+AXLIST(2,AXBSKTN)=1):"",1:"s") | 
|---|
| 41 | . W " in the '",AXBSKTN,"' basket." | 
|---|
| 42 | W !!,"Site",?49,$J("Not Valid",10),$J("Valid",10),$J("Total",10),! | 
|---|
| 43 | S AXSITE="" | 
|---|
| 44 | F  S AXSITE=$O(AXLIST(1,AXSITE)) Q:AXSITE=""  D | 
|---|
| 45 | . W !,$E(AXSITE,1,48),?49 | 
|---|
| 46 | . F AXSEG="N","V","T" W $J(+$G(AXLIST(1,AXSITE,AXSEG)),10) | 
|---|
| 47 | . S AXDATE=0 | 
|---|
| 48 | . F  S AXDATE=$O(AXLIST(1,AXSITE,AXDATE)) Q:'AXDATE  D | 
|---|
| 49 | . . W !,?3,"Problems for ",$$FMTE^XLFDT(AXDATE,5),": ",$G(AXLIST(1,AXSITE,AXDATE)) | 
|---|
| 50 | . . S AXMZ=0 | 
|---|
| 51 | . . F  S AXMZ=$O(AXLIST(1,AXSITE,AXDATE,AXMZ)) Q:'AXMZ  D | 
|---|
| 52 | . . . W !,$J(AXMZ,15),"   ",AXLIST(1,AXSITE,AXDATE,AXMZ) | 
|---|
| 53 | Q | 
|---|
| 54 | VALID(AXMZ) ;  ONE MESSAGE | 
|---|
| 55 | N AXAGE,AXCHKAGE,AXDOB,AXLINE,AXDATE,AXTXT | 
|---|
| 56 | Q:'$O(^XMB(3.9,AXMZ,2,0)) 1  ;  No text in message? | 
|---|
| 57 | S (AXDATE,AXDOB,AXAGE,AXCHKAGE)=""  ;  Initialize key fields. | 
|---|
| 58 | S AXLINE=.99999999 | 
|---|
| 59 | F  S AXLINE=$O(^XMB(3.9,AXMZ,2,AXLINE)) Q:'AXLINE  D  Q:($L(AXDOB)&$L(AXAGE)&$L(AXDATE))  ; Look for key fields. | 
|---|
| 60 | . S AXTXT=$G(^XMB(3.9,AXMZ,2,AXLINE,0)) Q:$L(AXTXT)<5  ;  Get a line and Quit if not long enough. | 
|---|
| 61 | . S AXTXT=$$UP^XLFSTR(AXTXT) | 
|---|
| 62 | . I '$L(AXDOB),AXTXT["DOB: " S AXDOB=$$SPACES($P(AXTXT,"DOB: ",2)) Q | 
|---|
| 63 | . I '$L(AXAGE),AXTXT["AGE: " S AXAGE=$$SPACES($P(AXTXT,"AGE: ",2)) Q | 
|---|
| 64 | . I '$L(AXDATE),AXTXT["***CONFIDENTIAL PATIENT DATA FROM" S AXDATE=$$SPACES($P(AXTXT,"*",$L(AXTXT,"*"))) | 
|---|
| 65 | Q:'($L(AXAGE)&$L(AXDOB)&$L(AXDATE)) 1  ;  Quit if missing a key field. | 
|---|
| 66 | S AXDATE=$$DT2INT(AXDATE),AXDOB=$$DT2INT(AXDOB) | 
|---|
| 67 | I AXDATE=-1!(AXDOB=-1) Q 1  ;  Conversion problem in one of the dates. | 
|---|
| 68 | S AXCHKAGE=$$FMDIFF^XLFDT(AXDATE,AXDOB,1)\365.25  ; Calculate age of patient. | 
|---|
| 69 | Q:AXCHKAGE=AXAGE 1  ;  If calculated age equals displayed age then data is valid. | 
|---|
| 70 | Q "0^Age: "_AXAGE_"   DOB: "_$$FMTE^XLFDT(AXDOB,5)_"   DOR: "_$$FMTE^XLFDT(AXDATE,5)_"   Actual Age: "_AXCHKAGE  ;  If not then return reason. | 
|---|
| 71 | MSG(AXMZ) ; | 
|---|
| 72 | N AXREC,AXFROM,AXDATE,AXSITE | 
|---|
| 73 | Q:'$O(^XMB(3.9,AXMZ,2,0)) ""  ;  No text in message? | 
|---|
| 74 | S AXREC=$G(^XMB(3.9,AXMZ,0)) Q:AXREC="" "" | 
|---|
| 75 | S AXFROM=$P(AXREC,U,2) | 
|---|
| 76 | S AXSITE=$S(AXFROM["@":$P($P(AXFROM,"@",2),">"),1:^XMB("NETNAME")) | 
|---|
| 77 | S AXDATE=$P(AXREC,U,3) | 
|---|
| 78 | I AXDATE?7N1".".N S AXDATE=$P(AXDATE,".") | 
|---|
| 79 | E  D | 
|---|
| 80 | . S AXDATE=$$CONVERT^XMXUTIL1(AXDATE) | 
|---|
| 81 | . I AXDATE=-1 S AXDATE=0 | 
|---|
| 82 | Q AXDATE_U_AXSITE | 
|---|
| 83 | DT2INT(X) ; Convert date from external to internal fileman format. | 
|---|
| 84 | N Y,%DT S %DT="T" D ^%DT Q Y | 
|---|
| 85 | SPACES(X) ;   Get rid of leading and trailing spaces | 
|---|
| 86 | F  Q:'$L(X)  Q:$E(X,1)'=" "  S X=$E(X,2,$L(X)) ; Leading spaces | 
|---|
| 87 | F  Q:'$L(X)  Q:$E(X,$L(X))'=" "  S X=$E(X,1,$L(X)-1) ; Trailing spaces | 
|---|
| 88 | Q X | 
|---|