ORWGAPI ; SLC/STAFF - Graph API ;12/21/05  08:14
 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**215,243**;Dec 17, 1997;Build 242
 ;
ALLITEMS(ITEMS,DFN) ; API - return all items of data on patient (procedures, tests, codes,..)
 N CNT,SUB,TMP,TYPE
 K ^TMP("ORWGAPI",$J)
 S DFN=+$G(DFN) I 'DFN Q
 D TYPES("ORWGAPI",DFN)
 D RETURN^ORWGAPIW(.TMP,.ITEMS)
 S CNT=0
 S SUB=""
 F  S SUB=$O(^TMP("ORWGAPI",$J,SUB)) Q:SUB=""  D
 . S TYPE=$P(^TMP("ORWGAPI",$J,SUB),U)
 . D ITEMS^ORWGAPIR(.ITEMS,DFN,TYPE,0,,,.CNT,TMP)
 D SETLAST^ORWGTASK(DFN)
 K ^TMP("ORWGAPI",$J)
 Q
 ;
ALLVIEWS(DATA,VIEW,USER) ; API - get all graph views
 D ALLVIEWS^ORWGAPIP(.DATA,+$G(VIEW),+$G(USER))
 Q
 ;
CLASS(DATA,TYPE) ; API - get classification
 I TYPE=50.605 D DRUGC^ORWGAPIC(.DATA)
 I TYPE=68 D ACC^ORWGAPIC(.DATA)
 I TYPE=8925.1 D TIUTITLE^ORWGAPIA(.DATA)
 I TYPE=100.98 D OITEM^ORWGAPIA(.DATA)
 Q
 ;
DATEDATA(DATA,OLDEST,NEWEST,TYPEITEM,DFN) ; API - return all data for an item on patient for date range
 N CNT,ITEM,SUB,TMP,TYPE
 S DFN=+$G(DFN) I 'DFN Q
 S OLDEST=+$G(OLDEST)
 S NEWEST=+$G(NEWEST,$$NOW^ORWGAPIX)
 S TYPEITEM=$G(TYPEITEM) I TYPEITEM'[U Q
 I 'OLDEST D ITEMDATA(.DATA,TYPEITEM,NEWEST,DFN,OLDEST) Q
 I OLDEST<NEWEST Q
 S TYPEITEM=$$UP^ORWGAPIX(TYPEITEM)
 D RETURN^ORWGAPIW(.TMP,.DATA)
 S TYPE=$P(TYPEITEM,U)
 S ITEM=$P(TYPEITEM,U,2)
 S CNT=0
 D DATA^ORWGAPIR(.DATA,ITEM,TYPE,NEWEST,DFN,.CNT,TMP,OLDEST)
 Q
 ;
DATEITEM(ITEMS,OLDEST,NEWEST,TYPE,DFN) ; API - return all file items on patient for date range
 N CNT,SUB,TMP
 K ^TMP("ORWGAPI",$J)
 S DFN=+$G(DFN) I 'DFN Q
 S OLDEST=+$G(OLDEST),NEWEST=+$G(NEWEST),TYPE=$G(TYPE)
 I $L(TYPE) S ^TMP("ORWGAPI",$J,1)=TYPE
 I '$L(TYPE) D TYPES("ORWGAPI",DFN)
 D RETURN^ORWGAPIW(.TMP,.ITEMS)
 S CNT=0
 S SUB=""
 F  S SUB=$O(^TMP("ORWGAPI",$J,SUB)) Q:SUB=""  D
 . S TYPE=$P(^TMP("ORWGAPI",$J,SUB),U)
 . D ITEMS^ORWGAPIR(.ITEMS,DFN,TYPE,6,OLDEST,NEWEST,.CNT,TMP)
 K ^TMP("ORWGAPI",$J)
 Q
 ;
DELVIEWS(DATA,NAME,PUBLIC) ; API - delete a graph view
 D DELVIEWS^ORWGAPIP(.DATA,$G(NAME),$G(PUBLIC))
 Q
 ;
DETAIL(DATA,DFN,DATE1,DATE2,VAL,COMP) ; API - get all reports for types of data from items and date range
 D DETAIL^ORWGAPID("ORWGRPC",DFN,DATE1,DATE2,.VAL)
 S DATA=$NA(^TMP("ORWGRPC",$J))
 Q
 ;
DETAILS(DATA,DFN,DATE1,DATE2,TYPE,COMP) ; API - get report for type of data for a date or date range
 D DETAILS^ORWGAPID("ORWGRPC",DFN,DATE1,DATE2,TYPE)
 S DATA=$NA(^TMP("ORWGRPC",$J))
 Q
 ;
FASTDATA(DATA,DFN) ; API - get all data (non-lab) on patient
 D FASTDATA^ORWGAPIF(.DATA,DFN)
 Q
 ;
FASTITEM(ITEMS,DFN) ; API - get all items on patient 
 D FASTITEM^ORWGAPIF(.ITEMS,DFN)
 D SETLAST^ORWGTASK(DFN)
 Q
 ;
FASTLABS(DATA,DFN) ; API - get all lab data on patient
 D FASTLABS^ORWGAPIF(.DATA,DFN)
 Q
 ;
FASTTASK(STATUS,DFN,OLDDFN) ; API - process cache of all data and items on patient, -1 if turned off
 ; this should be able to be turned off if needbe (D CLEAN^ORWGTASK)
 D UPDATE^ORWGTASK(.STATUS,DFN,DUZ,+$G(OLDDFN))
 Q
 ;
GETDATES(DATA,REPORTID) ; API - get graph date ranges
 D GETDATES^ORWGAPID(.DATA,$G(REPORTID))
 Q
 ;
GETPREF(DATA) ; API - get graph settings
 D GETPREF^ORWGAPIP(.DATA)
 Q
 ;
GETSIZE(DATA) ; API - get graph positions and sizes
 D GETSIZE^ORWGAPIP(.DATA)
 Q
 ;
GETVIEWS(DATA,ALL,PUBLIC,EXT,USER) ; API - get graph views
 D GETVIEWS^ORWGAPIP(.DATA,$G(ALL),$G(PUBLIC),$G(EXT),+$G(USER))
 Q
 ;
ITEMDATA(DATA,TYPEITEM,START,DFN,BACKTO) ; API - return data of an item on patient (glucose results)
 N CNT,ITEM,TMP,TYPE
 S DFN=+$G(DFN) I 'DFN Q
 S TYPEITEM=$G(TYPEITEM) I TYPEITEM'[U Q
 S TYPEITEM=$$UP^ORWGAPIX(TYPEITEM)
 S START=$G(START,$$NOW^ORWGAPIX)
 D RETURN^ORWGAPIW(.TMP,.DATA)
 S TYPE=$P(TYPEITEM,U)
 S ITEM=$P(TYPEITEM,U,2)
 S CNT=0
 D DATA^ORWGAPIR(.DATA,ITEM,TYPE,START,DFN,.CNT,TMP,$G(BACKTO))
 Q
 ; 
ITEMS(ITEMS,DFN,TYPE) ; API - return items of a type of data on patient (lab tests)
 N CNT,TMP
 S DFN=+$G(DFN) I 'DFN Q
 S TYPE=$G(TYPE) I '$L(TYPE) Q
 D RETURN^ORWGAPIW(.TMP,.ITEMS)
 S CNT=0
 D ITEMS^ORWGAPIR(.ITEMS,DFN,TYPE,3,,,.CNT,TMP)
 I TYPE=63 D SETLAST^ORWGTASK(DFN)
 Q
 ;
LOOKUP(VAL,FILE,FROM,DIR) ; API - get item names for long lookup
 N REF,SCREEN,XREF
 D FILE^ORWGAPIU($G(FILE),.REF,.XREF,.SCREEN)
 I '$L(REF) Q
 D GENERIC^ORWGAPIW(.VAL,.FROM,DIR,FILE,REF,XREF,SCREEN)
 Q
 ;
PUBLIC(USER) ; API - $$(user) -> 1 if user can edit public settings and views
 Q $$PUBLIC^ORWGAPIP(USER)
 ;
RPTPARAM(IEN) ; API - $$(ien) -> PARAM1^PARAM2 for graph report else ""
 Q $$RPTPARAM^ORWGAPIP(IEN)
 ;
SETPREF(DATA,VAL,PUBLIC) ; API - set a graph setting
 D SETPREF^ORWGAPIP(.DATA,$G(VAL),$G(PUBLIC))
 Q
 ;
SETSIZE(DATA,VAL) ; API - set graph positions and settings
 D SETSIZE^ORWGAPIP(.DATA,.VAL)
 Q
 ;
SETVIEWS(DATA,NAME,PUBLIC,VAL) ; API - set a graph view
 D SETVIEWS^ORWGAPIP(.DATA,$G(NAME),$G(PUBLIC),.VAL)
 Q
 ;
TAX(DATA,ALL,REMTAX) ; API - get reminder taxonomies
 D TAX^ORWGAPID(.DATA,+$G(ALL),.REMTAX)
 Q
 ;
TESTING(DATA) ; API - return test data
 D TESTING^ORWGTEST(.DATA)
 Q
 ;
TESTSPEC(DATA) ;  API - return test/spec info on all lab tests
 D TESTSPEC^ORWGAPIC(.DATA)
 Q
 ;
TYPES(TYPES,DFN,SUB) ; API - return all types of data on patient (if no dfn, return all)
 N TMP
 S DFN=+$G(DFN)
 S SUB=+$G(SUB)
 D RETURN^ORWGAPIW(.TMP,.TYPES)
 D TYPES^ORWGAPIT(.TYPES,DFN,SUB,TMP)
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORWGAPI   5397     printed  Sep 23, 2025@20:12:29                                                                                                                                                                                                     Page 2
ORWGAPI   ; SLC/STAFF - Graph API ;12/21/05  08:14
 +1       ;;3.0;ORDER ENTRY/RESULTS REPORTING;**215,243**;Dec 17, 1997;Build 242
 +2       ;
ALLITEMS(ITEMS,DFN) ; API - return all items of data on patient (procedures, tests, codes,..)
 +1        NEW CNT,SUB,TMP,TYPE
 +2        KILL ^TMP("ORWGAPI",$JOB)
 +3        SET DFN=+$GET(DFN)
           IF 'DFN
               QUIT 
 +4        DO TYPES("ORWGAPI",DFN)
 +5        DO RETURN^ORWGAPIW(.TMP,.ITEMS)
 +6        SET CNT=0
 +7        SET SUB=""
 +8        FOR 
               SET SUB=$ORDER(^TMP("ORWGAPI",$JOB,SUB))
               if SUB=""
                   QUIT 
               Begin DoDot:1
 +9                SET TYPE=$PIECE(^TMP("ORWGAPI",$JOB,SUB),U)
 +10               DO ITEMS^ORWGAPIR(.ITEMS,DFN,TYPE,0,,,.CNT,TMP)
               End DoDot:1
 +11       DO SETLAST^ORWGTASK(DFN)
 +12       KILL ^TMP("ORWGAPI",$JOB)
 +13       QUIT 
 +14      ;
ALLVIEWS(DATA,VIEW,USER) ; API - get all graph views
 +1        DO ALLVIEWS^ORWGAPIP(.DATA,+$GET(VIEW),+$GET(USER))
 +2        QUIT 
 +3       ;
CLASS(DATA,TYPE) ; API - get classification
 +1        IF TYPE=50.605
               DO DRUGC^ORWGAPIC(.DATA)
 +2        IF TYPE=68
               DO ACC^ORWGAPIC(.DATA)
 +3        IF TYPE=8925.1
               DO TIUTITLE^ORWGAPIA(.DATA)
 +4        IF TYPE=100.98
               DO OITEM^ORWGAPIA(.DATA)
 +5        QUIT 
 +6       ;
DATEDATA(DATA,OLDEST,NEWEST,TYPEITEM,DFN) ; API - return all data for an item on patient for date range
 +1        NEW CNT,ITEM,SUB,TMP,TYPE
 +2        SET DFN=+$GET(DFN)
           IF 'DFN
               QUIT 
 +3        SET OLDEST=+$GET(OLDEST)
 +4        SET NEWEST=+$GET(NEWEST,$$NOW^ORWGAPIX)
 +5        SET TYPEITEM=$GET(TYPEITEM)
           IF TYPEITEM'[U
               QUIT 
 +6        IF 'OLDEST
               DO ITEMDATA(.DATA,TYPEITEM,NEWEST,DFN,OLDEST)
               QUIT 
 +7        IF OLDEST<NEWEST
               QUIT 
 +8        SET TYPEITEM=$$UP^ORWGAPIX(TYPEITEM)
 +9        DO RETURN^ORWGAPIW(.TMP,.DATA)
 +10       SET TYPE=$PIECE(TYPEITEM,U)
 +11       SET ITEM=$PIECE(TYPEITEM,U,2)
 +12       SET CNT=0
 +13       DO DATA^ORWGAPIR(.DATA,ITEM,TYPE,NEWEST,DFN,.CNT,TMP,OLDEST)
 +14       QUIT 
 +15      ;
DATEITEM(ITEMS,OLDEST,NEWEST,TYPE,DFN) ; API - return all file items on patient for date range
 +1        NEW CNT,SUB,TMP
 +2        KILL ^TMP("ORWGAPI",$JOB)
 +3        SET DFN=+$GET(DFN)
           IF 'DFN
               QUIT 
 +4        SET OLDEST=+$GET(OLDEST)
           SET NEWEST=+$GET(NEWEST)
           SET TYPE=$GET(TYPE)
 +5        IF $LENGTH(TYPE)
               SET ^TMP("ORWGAPI",$JOB,1)=TYPE
 +6        IF '$LENGTH(TYPE)
               DO TYPES("ORWGAPI",DFN)
 +7        DO RETURN^ORWGAPIW(.TMP,.ITEMS)
 +8        SET CNT=0
 +9        SET SUB=""
 +10       FOR 
               SET SUB=$ORDER(^TMP("ORWGAPI",$JOB,SUB))
               if SUB=""
                   QUIT 
               Begin DoDot:1
 +11               SET TYPE=$PIECE(^TMP("ORWGAPI",$JOB,SUB),U)
 +12               DO ITEMS^ORWGAPIR(.ITEMS,DFN,TYPE,6,OLDEST,NEWEST,.CNT,TMP)
               End DoDot:1
 +13       KILL ^TMP("ORWGAPI",$JOB)
 +14       QUIT 
 +15      ;
DELVIEWS(DATA,NAME,PUBLIC) ; API - delete a graph view
 +1        DO DELVIEWS^ORWGAPIP(.DATA,$GET(NAME),$GET(PUBLIC))
 +2        QUIT 
 +3       ;
DETAIL(DATA,DFN,DATE1,DATE2,VAL,COMP) ; API - get all reports for types of data from items and date range
 +1        DO DETAIL^ORWGAPID("ORWGRPC",DFN,DATE1,DATE2,.VAL)
 +2        SET DATA=$NAME(^TMP("ORWGRPC",$JOB))
 +3        QUIT 
 +4       ;
DETAILS(DATA,DFN,DATE1,DATE2,TYPE,COMP) ; API - get report for type of data for a date or date range
 +1        DO DETAILS^ORWGAPID("ORWGRPC",DFN,DATE1,DATE2,TYPE)
 +2        SET DATA=$NAME(^TMP("ORWGRPC",$JOB))
 +3        QUIT 
 +4       ;
FASTDATA(DATA,DFN) ; API - get all data (non-lab) on patient
 +1        DO FASTDATA^ORWGAPIF(.DATA,DFN)
 +2        QUIT 
 +3       ;
FASTITEM(ITEMS,DFN) ; API - get all items on patient 
 +1        DO FASTITEM^ORWGAPIF(.ITEMS,DFN)
 +2        DO SETLAST^ORWGTASK(DFN)
 +3        QUIT 
 +4       ;
FASTLABS(DATA,DFN) ; API - get all lab data on patient
 +1        DO FASTLABS^ORWGAPIF(.DATA,DFN)
 +2        QUIT 
 +3       ;
FASTTASK(STATUS,DFN,OLDDFN) ; API - process cache of all data and items on patient, -1 if turned off
 +1       ; this should be able to be turned off if needbe (D CLEAN^ORWGTASK)
 +2        DO UPDATE^ORWGTASK(.STATUS,DFN,DUZ,+$GET(OLDDFN))
 +3        QUIT 
 +4       ;
GETDATES(DATA,REPORTID) ; API - get graph date ranges
 +1        DO GETDATES^ORWGAPID(.DATA,$GET(REPORTID))
 +2        QUIT 
 +3       ;
GETPREF(DATA) ; API - get graph settings
 +1        DO GETPREF^ORWGAPIP(.DATA)
 +2        QUIT 
 +3       ;
GETSIZE(DATA) ; API - get graph positions and sizes
 +1        DO GETSIZE^ORWGAPIP(.DATA)
 +2        QUIT 
 +3       ;
GETVIEWS(DATA,ALL,PUBLIC,EXT,USER) ; API - get graph views
 +1        DO GETVIEWS^ORWGAPIP(.DATA,$GET(ALL),$GET(PUBLIC),$GET(EXT),+$GET(USER))
 +2        QUIT 
 +3       ;
ITEMDATA(DATA,TYPEITEM,START,DFN,BACKTO) ; API - return data of an item on patient (glucose results)
 +1        NEW CNT,ITEM,TMP,TYPE
 +2        SET DFN=+$GET(DFN)
           IF 'DFN
               QUIT 
 +3        SET TYPEITEM=$GET(TYPEITEM)
           IF TYPEITEM'[U
               QUIT 
 +4        SET TYPEITEM=$$UP^ORWGAPIX(TYPEITEM)
 +5        SET START=$GET(START,$$NOW^ORWGAPIX)
 +6        DO RETURN^ORWGAPIW(.TMP,.DATA)
 +7        SET TYPE=$PIECE(TYPEITEM,U)
 +8        SET ITEM=$PIECE(TYPEITEM,U,2)
 +9        SET CNT=0
 +10       DO DATA^ORWGAPIR(.DATA,ITEM,TYPE,START,DFN,.CNT,TMP,$GET(BACKTO))
 +11       QUIT 
 +12      ; 
ITEMS(ITEMS,DFN,TYPE) ; API - return items of a type of data on patient (lab tests)
 +1        NEW CNT,TMP
 +2        SET DFN=+$GET(DFN)
           IF 'DFN
               QUIT 
 +3        SET TYPE=$GET(TYPE)
           IF '$LENGTH(TYPE)
               QUIT 
 +4        DO RETURN^ORWGAPIW(.TMP,.ITEMS)
 +5        SET CNT=0
 +6        DO ITEMS^ORWGAPIR(.ITEMS,DFN,TYPE,3,,,.CNT,TMP)
 +7        IF TYPE=63
               DO SETLAST^ORWGTASK(DFN)
 +8        QUIT 
 +9       ;
LOOKUP(VAL,FILE,FROM,DIR) ; API - get item names for long lookup
 +1        NEW REF,SCREEN,XREF
 +2        DO FILE^ORWGAPIU($GET(FILE),.REF,.XREF,.SCREEN)
 +3        IF '$LENGTH(REF)
               QUIT 
 +4        DO GENERIC^ORWGAPIW(.VAL,.FROM,DIR,FILE,REF,XREF,SCREEN)
 +5        QUIT 
 +6       ;
PUBLIC(USER) ; API - $$(user) -> 1 if user can edit public settings and views
 +1        QUIT $$PUBLIC^ORWGAPIP(USER)
 +2       ;
RPTPARAM(IEN) ; API - $$(ien) -> PARAM1^PARAM2 for graph report else ""
 +1        QUIT $$RPTPARAM^ORWGAPIP(IEN)
 +2       ;
SETPREF(DATA,VAL,PUBLIC) ; API - set a graph setting
 +1        DO SETPREF^ORWGAPIP(.DATA,$GET(VAL),$GET(PUBLIC))
 +2        QUIT 
 +3       ;
SETSIZE(DATA,VAL) ; API - set graph positions and settings
 +1        DO SETSIZE^ORWGAPIP(.DATA,.VAL)
 +2        QUIT 
 +3       ;
SETVIEWS(DATA,NAME,PUBLIC,VAL) ; API - set a graph view
 +1        DO SETVIEWS^ORWGAPIP(.DATA,$GET(NAME),$GET(PUBLIC),.VAL)
 +2        QUIT 
 +3       ;
TAX(DATA,ALL,REMTAX) ; API - get reminder taxonomies
 +1        DO TAX^ORWGAPID(.DATA,+$GET(ALL),.REMTAX)
 +2        QUIT 
 +3       ;
TESTING(DATA) ; API - return test data
 +1        DO TESTING^ORWGTEST(.DATA)
 +2        QUIT 
 +3       ;
TESTSPEC(DATA) ;  API - return test/spec info on all lab tests
 +1        DO TESTSPEC^ORWGAPIC(.DATA)
 +2        QUIT 
 +3       ;
TYPES(TYPES,DFN,SUB) ; API - return all types of data on patient (if no dfn, return all)
 +1        NEW TMP
 +2        SET DFN=+$GET(DFN)
 +3        SET SUB=+$GET(SUB)
 +4        DO RETURN^ORWGAPIW(.TMP,.TYPES)
 +5        DO TYPES^ORWGAPIT(.TYPES,DFN,SUB,TMP)
 +6        QUIT