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

HMPD.m

Go to the documentation of this file.
  1. HMPD ;SLC/MKB,ASMR/RRB,CK - Serve VistA data as XML via RPC ;Aug 29, 2016 20:06:27
  1. ;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**3**;Sep 01, 2011;Build 15
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ; External References DBIA#
  1. ; ------------------- -----
  1. ; ^DPT 10035
  1. ; ^SC 10040
  1. ; DIQ 2056
  1. ; MPIF001 2701
  1. ; VASITE 10112
  1. ; XLFDT 10103
  1. ; XLFSTR 10104
  1. ; XUAF4 2171
  1. ;
  1. Q
  1. ;
  1. GET(HMP,DFN,TYPE,START,STOP,MAX,ID,FILTER) ; -- Return search results as XML in @HMP@(n)
  1. ; RPC = HMP GET PATIENT DATA
  1. N ICN,HMPI,HMPTOTL,HMPTEXT
  1. S HMP=$NA(^TMP("HMP",$J)) K @HMP
  1. S HMPTEXT=+$G(FILTER("text")) ;include report/document text?
  1. ;
  1. ; parse & validate input parameters
  1. S ICN=+$P($G(DFN),";",2),DFN=+$G(DFN),ID=$G(ID)
  1. I DFN<1,ICN S DFN=+$$GETDFN^MPIF001(ICN)
  1. S TYPE=$$LOW^XLFSTR($G(TYPE)) I TYPE="" S TYPE=$$ALL
  1. ;next line, ICR 10035 ASF 11/2/15 DE2818, DE4496 19 August 2016
  1. I TYPE'="new",DFN<1!'$D(^DPT(DFN)) D LOGDPT^HMPLOG(DFN),ERR(1,DFN) G GTQ
  1. S:'$G(START) START=1410102 S:'$G(STOP) STOP=4141015 S:'$G(MAX) MAX=9999
  1. I START,STOP,STOP<START N X S X=START,START=STOP,STOP=X ;switch
  1. I STOP,$L(STOP,".")<2 S STOP=STOP_".24"
  1. I ID="",$D(FILTER("id")) S ID=FILTER("id")
  1. ;
  1. ; extract data
  1. N HMPTYPE,HMPP,HMPHDR,HMPTAG,HMPTN
  1. S HMPTYPE=TYPE D ADD("<results version='1.1' timeZone='"_$$TZ^XLFDT_"' >")
  1. F HMPP=1:1:$L(HMPTYPE,";") S HMPTAG=$P(HMPTYPE,";",HMPP) I $L(HMPTAG) D
  1. . S HMPTN="EN^"_$$RTN(.HMPTAG) Q:'$L($T(@HMPTN)) ;D ERR(2) Q
  1. . D ADD("<"_HMPTAG) S HMPHDR=HMPI,HMPTOTL=0
  1. . D @(HMPTN_"(DFN,START,STOP,MAX,ID)")
  1. . S @HMP@(HMPHDR)=@HMP@(HMPHDR)_" total='"_+$G(HMPTOTL)_"' >" D ADD("</"_HMPTAG_">")
  1. D ADD("</results>")
  1. ;
  1. GTQ ; end
  1. Q
  1. ;
  1. RTN(X) ; -- Return name of HMPDxxxx routine for clinical domain X
  1. ; X is also enforced as expected group tag name, if passed by ref
  1. N Y S Y="HMPD",X=$G(X) I X="" Q Y
  1. I X["accession" S Y="HMPDLRA",X="accessions"
  1. I X["allerg" S Y="HMPDGMRA",X="reactions"
  1. I X["appointment" S Y="HMPDSDAM",X="appointments"
  1. I X["clinicalProc" S Y="HMPDMC",X="clinicalProcedures"
  1. I X["consult" S Y="HMPDGMRC",X="consults"
  1. I X["demograph" S Y="HMPDPT",X="demographics"
  1. I X["document" S Y="HMPDTIU",X="documents"
  1. I X["factor" S Y="HMPDPXHF",X="healthFactors"
  1. I X["flag" S Y="HMPDGPF",X="flags"
  1. I X["immunization" S Y="HMPDPXIM",X="immunizations"
  1. I X["skin" S Y="HMPDPXSK",X="skinTests"
  1. I X?1"exam".E S Y="HMPDPXAM",X="exams"
  1. I X["educat" S Y="HMPDPXED",X="educationTopics"
  1. I X["insur" S Y="HMPDIB",X="insurancePolicies"
  1. I X["polic" S Y="HMPDIB",X="insurancePolicies"
  1. I X["lab" S Y="HMPDLR",X="labs"
  1. I X["panel" S Y="HMPDLRO",X="panels"
  1. I X["med" S Y="HMPDPS",X="meds"
  1. I X["pharm" S Y="HMPDPSOR",X="meds"
  1. I X["observ" S Y="HMPDMDC",X="observations"
  1. I X["order" S Y="HMPDOR",X="orders"
  1. I X["patient" S Y="HMPDPT",X="demographics"
  1. I X["problem" S Y="HMPDGMPL",X="problems"
  1. I X["procedure" S Y="HMPDPROC",X="procedures"
  1. I X["reaction" S Y="HMPDGMRA",X="reactions"
  1. I X["surg" S Y="HMPDSR",X="surgeries"
  1. I X["visit" S Y="HMPDVSIT",X="visits"
  1. I X["vital" S Y="HMPDGMV",X="vitals"
  1. I X["rad" S Y="HMPDRA",X="radiologyExams"
  1. I X["xray" S Y="HMPDRA",X="radiologyExams"
  1. I X["new" S Y="HMPDX",X="patients"
  1. Q Y
  1. ;
  1. TAG(X) ; -- return plural name for group tags
  1. N Y S:X'?1.L X=$$LOW^XLFSTR(X)
  1. I $E(X,$L(X))="s" S Y=X
  1. I $E(X,$L(X))="y" S Y=$E(X,1,$L(X)-1)_"ies"
  1. E S Y=X_"s"
  1. Q Y
  1. ;
  1. ALL() ; -- return string for all types of data
  1. Q "demographics;reactions;problems;vitals;labs;meds;immunizations;observation;visits;appointments;documents;procedures;consults;flags;factors;skinTests;exams;education;insurance"
  1. ;
  1. ERR(X,VAL) ; -- return error message
  1. N MSG S MSG="Error"
  1. I X=1 S MSG="Patient with dfn '"_$G(VAL)_"' not found"
  1. I X=2 S MSG="Requested domain type '"_$G(VAL)_"' not recognized"
  1. I X=99 S MSG="Unknown request"
  1. ;
  1. D ADD("<error>")
  1. D ADD("<message>"_MSG_"</message>")
  1. D ADD("</error>")
  1. Q
  1. ;
  1. ESC(X) ; -- escape outgoing XML
  1. ; Q $ZCONVERT(X,"O","HTML") ; uncomment for fastest performance on Cache
  1. ;
  1. N I,Y,QOT S QOT=""""
  1. S Y=$P(X,"&") F I=2:1:$L(X,"&") S Y=Y_"&"_$P(X,"&",I)
  1. S X=Y,Y=$P(X,"<") F I=2:1:$L(X,"<") S Y=Y_"<"_$P(X,"<",I)
  1. S X=Y,Y=$P(X,">") F I=2:1:$L(X,">") S Y=Y_">"_$P(X,">",I)
  1. S X=Y,Y=$P(X,"'") F I=2:1:$L(X,"'") S Y=Y_"'"_$P(X,"'",I)
  1. S X=Y,Y=$P(X,QOT) F I=2:1:$L(X,QOT) S Y=Y_"""_$P(X,QOT,I)
  1. Q Y
  1. ;
  1. ADD(X) ; Add a line @HMP@(n)=X
  1. S HMPI=$G(HMPI)+1
  1. S @HMP@(HMPI)=X
  1. Q
  1. ;
  1. STRING(ARY) ; -- Return text in ARY(n) or ARY(n,0) as a string, ARY passed by ref.
  1. ;DE3409 8/11/2106 CK - to prevent a MAXSTRING error, allow 30,000 characters
  1. N I,MXSTRNG,X,Y
  1. S MXSTRNG=30000
  1. S I=+$O(ARY("")) I I=0 S I=+$O(ARY(0))
  1. S Y=$S($D(ARY(I,0)):ARY(I,0),1:$G(ARY(I)))
  1. F S I=$O(ARY(I)) Q:I<1 D
  1. . S X=$S($D(ARY(I,0)):ARY(I,0),1:ARY(I))
  1. . I ($L(Y)+$L(X))>MXSTRNG S Y=Y_$E(X,1,(MXSTRNG-$L(Y))) Q
  1. . I $E(X)=" " S Y=Y_$C(13,10)_X Q
  1. . ; add a space to separate each line of text
  1. . S Y=Y_$S($E(Y,$L(Y))=" ":"",1:" ")_X
  1. Q Y
  1. ;
  1. FAC(X) ; -- return Institution file station# for location X
  1. N HLOC,FAC,Y0,Y S Y=""
  1. S HLOC=$G(^SC(+$G(X),0)),FAC=$P(HLOC,U,4) ;ICR 10040 DE2818 ASF 11/5/15
  1. ; Get P:4 via Med Ctr Div, if not directly linked
  1. I 'FAC,$P(HLOC,U,15) S FAC=$$GET1^DIQ(44,+$G(X)_",","3.5:.07","I")
  1. S Y0=$S(FAC:$$NS^XUAF4(FAC),1:$P($$SITE^VASITE,U,2,3)) ;name^stn#
  1. S:$L(Y0) Y=$P(Y0,U,2)_U_$P(Y0,U) ;switch to stn#^name
  1. I $L(Y),'Y S $P(Y,U)=FAC
  1. Q Y
  1. ;
  1. VUID(IEN,FILE) ; -- Return VUID for item
  1. Q $$GET1^DIQ(FILE,IEN_",",99.99)
  1. ;
  1. VERSION(RET) ; -- Return current version of data extracts
  1. S RET="1.01"
  1. Q