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

PXRMCSUBOBJ.m

Go to the documentation of this file.
  1. PXRMCSUBOBJ ;SLC/PKR - Routines for CSUB Objects. ;05/19/2020
  1. ;;2.0;CLINICAL REMINDERS;**46**;Feb 04, 2005;Build 236
  1. ;
  1. ;===============
  1. CSUBDATE(FUNCTION,DATEFORMAT,TEXT,FIEVAL) ;CSUB Date Object.
  1. N CELLFORMAT,DATE,EXTDATE,JUSTIFY,LIST,PADC,ROUTINE,WIDTH
  1. S ROUTINE=$P(FUNCTION,"(",1)
  1. S LIST=$P(FUNCTION,"(",2)
  1. S LIST=$P(LIST,")",1)
  1. S CELLFORMAT=$P(DATEFORMAT,":",2,3)
  1. S DATEFORMAT=$P(DATEFORMAT,":",1)
  1. S DATE=$S(ROUTINE="MRD":$$MRD(LIST,.FIEVAL),ROUTINE="MIN_DATE":$$MINDATE(LIST,.FIEVAL),1:0)
  1. S EXTDATE=$S(DATE=0:$G(TEXT),1:$$FMTE^XLFDT(DATE,DATEFORMAT))
  1. I CELLFORMAT'="" D
  1. . S PADC=$P(CELLFORMAT,":",2),CELLFORMAT=$P(CELLFORMAT,":",1)
  1. . S JUSTIFY=$E(CELLFORMAT,1),WIDTH=$P(CELLFORMAT,JUSTIFY,2)_"T"
  1. . S EXTDATE=$S(JUSTIFY="L":$$LJ^XLFSTR(EXTDATE,WIDTH,PADC),JUSTIFY="R":$$RJ^XLFSTR(EXTDATE,WIDTH,PADC),JUSTIFY="C":$$CJ^XLFSTR(EXTDATE,WIDTH,PADC),1:EXTDATE)
  1. Q EXTDATE
  1. ;
  1. ;===============
  1. CSUBINTE(CSUB,CELLFORMAT,FILENUM,FIELDNUM,FINUM,OCC,SEP,PIECE,TEXT,FIEVAL) ;
  1. ;CSUB INTE Object.
  1. N EXTERNAL,INTERNAL,JUSTIFY,MSG,PADC,WIDTH
  1. S CELLFORMAT=$G(CELLFORMAT),OCC=$G(OCC),SEP=$G(SEP)
  1. S PIECE=$G(PIECE,1),TEXT=$G(TEXT)
  1. S INTERNAL=$S(OCC="":$G(FIEVAL(FINUM,CSUB)),1:$G(FIEVAL(FINUM,OCC,CSUB)))
  1. I SEP'="" S INTERNAL=$P(INTERNAL,SEP,PIECE)
  1. S EXTERNAL=$S(INTERNAL'="":$$EXTERNAL^DILFD(FILENUM,FIELDNUM,,INTERNAL,"MSG"),1:TEXT)
  1. I CELLFORMAT'="" D
  1. . S PADC=$P(CELLFORMAT,":",2),CELLFORMAT=$P(CELLFORMAT,":",1)
  1. . S JUSTIFY=$E(CELLFORMAT,1),WIDTH=$P(CELLFORMAT,JUSTIFY,2)_"T"
  1. . S EXTERNAL=$S(JUSTIFY="L":$$LJ^XLFSTR(EXTERNAL,WIDTH,PADC),JUSTIFY="R":$$RJ^XLFSTR(EXTERNAL,WIDTH,PADC),JUSTIFY="C":$$CJ^XLFSTR(EXTERNAL,WIDTH,PADC),1:EXTERNAL)
  1. Q EXTERNAL
  1. ;
  1. ;===============
  1. CSUBNUM(CSUB,FORMAT,FINUM,OCC,SEP,PIECE,TEXT,FIEVAL) ;CSUB Num Object.
  1. N CELLFORMAT,FMT,FNUM,FTYPE,JUSTIFY,NDEC,NUM,PADC,WIDTH
  1. S OCC=$G(OCC),SEP=$G(SEP),PIECE=$G(PIECE,1),TEXT=$G(TEXT)
  1. S NUM=$S(OCC="":$G(FIEVAL(FINUM,CSUB)),1:$G(FIEVAL(FINUM,OCC,CSUB)))
  1. I SEP'="" S NUM=$P(NUM,SEP,PIECE)
  1. S FTYPE=$P(FORMAT,":",1)
  1. I NUM'="" D
  1. . S FMT=$P(FORMAT,":",2),NDEC=$P(FORMAT,":",3)
  1. . S FNUM=$S(FTYPE="N":$FN(NUM,FMT,NDEC),FTYPE="D":$$FMTE^XLFDT(NUM,FMT),1:NUM)
  1. I NUM="" S FNUM=TEXT
  1. S CELLFORMAT=$S(FTYPE="D":$P(FORMAT,":",3,4),FTYPE="N":$P(FORMAT,":",4,5),1:"")
  1. I CELLFORMAT'="" D
  1. . S PADC=$P(CELLFORMAT,":",2),CELLFORMAT=$P(CELLFORMAT,":",1)
  1. . S JUSTIFY=$E(CELLFORMAT,1),WIDTH=$P(CELLFORMAT,JUSTIFY,2)_"T"
  1. . S FNUM=$S(JUSTIFY="L":$$LJ^XLFSTR(FNUM,WIDTH,PADC),JUSTIFY="R":$$RJ^XLFSTR(FNUM,WIDTH,PADC),JUSTIFY="C":$$CJ^XLFSTR(FNUM,WIDTH,PADC),1:FNUM)
  1. Q FNUM
  1. ;
  1. ;===============
  1. CSUBOBJ(CSUBLINE,FIEVAL) ;Top-level entry point for CSUB objects, determine
  1. ;the object type and branch to it.
  1. N DONE,FINUM,LEN,OBJECT,OBJEND,OBJSEND,OBJSTART,OBJTEXT,OCC,OUTTEXT
  1. S DONE=0,OBJEND=1,OBJSTART=1
  1. S LEN=$L(CSUBLINE)
  1. F Q:DONE D
  1. . S OBJSTART=$F(CSUBLINE,"$$CSUB",OBJEND)-6
  1. . I OBJSTART=-6 S DONE=1 Q
  1. . S OBJEND=$F(CSUBLINE,"(",OBJSTART)-2
  1. . S OBJECT=$E(CSUBLINE,OBJSTART,OBJEND)
  1. . I OBJECT="$$CSUBDATE" D Q
  1. .. N DATEFORMAT,FUNCTION,FUNEND,FUNSTART,RP,TEMP,TEXT
  1. .. S FUNSTART=$F(CSUBLINE,"MRD",OBJEND)-3
  1. .. I FUNSTART=-3 S FUNSTART=$F(CSUBLINE,"MIN_DATE",OBJEND)-8
  1. .. S FUNEND=$F(CSUBLINE,")",OBJEND)-1
  1. .. S FUNCTION=$E(CSUBLINE,FUNSTART,FUNEND)
  1. .. S RP=$F(CSUBLINE,")",FUNEND+2)
  1. .. S TEMP=$E(CSUBLINE,FUNEND+2,RP-2)
  1. .. S DATEFORMAT=$P(TEMP,",",1)
  1. .. S TEXT=$P(TEMP,",",2)
  1. .. S OBJTEXT=$$CSUBDATE(FUNCTION,DATEFORMAT,TEXT,.FIEVAL)
  1. .. S OUTTEXT=$E(CSUBLINE,1,OBJSTART-1)_OBJTEXT_$E(CSUBLINE,RP,LEN)
  1. .. S CSUBLINE=OUTTEXT
  1. . I OBJECT="$$CSUBINTE" D Q
  1. .. N CELLFORMAT,CSUB,FIELDNUM,FILENUM,FNUM,PIECE,RP,SEP,TEMP,TEXT
  1. .. S RP=$F(CSUBLINE,")",OBJEND+2)
  1. .. S TEMP=$E(CSUBLINE,OBJEND+2,RP-2)
  1. .. S CSUB=$P(TEMP,",",1),CELLFORMAT=$P(TEMP,",",2),FILENUM=$P(TEMP,",",3)
  1. .. S FIELDNUM=$P(TEMP,",",4),FINUM=$P(TEMP,",",5),OCC=$P(TEMP,",",6)
  1. .. S SEP=$P(TEMP,",",7),PIECE=$P(TEMP,",",8),TEXT=$P(TEMP,",",9)
  1. .. S OBJTEXT=$$CSUBINTE(CSUB,CELLFORMAT,FILENUM,FIELDNUM,FINUM,OCC,SEP,PIECE,TEXT,.FIEVAL)
  1. .. S OUTTEXT=$E(CSUBLINE,1,OBJSTART-1)_OBJTEXT_$E(CSUBLINE,RP,LEN)
  1. .. S CSUBLINE=OUTTEXT
  1. . I OBJECT="$$CSUBNUM" D Q
  1. .. N CSUB,FORMAT,PIECE,RP,SEP,TEMP,TEXT
  1. .. S RP=$F(CSUBLINE,")",OBJEND+2)
  1. .. S TEMP=$E(CSUBLINE,OBJEND+2,RP-2)
  1. .. S CSUB=$P(TEMP,",",1)
  1. .. I TEMP["N:," D
  1. ... S FORMAT=$P(TEMP,",",2,3)
  1. ... S FINUM=$P(TEMP,",",4),OCC=$P(TEMP,",",5),SEP=$P(TEMP,",",6)
  1. ... S PIECE=$P(TEMP,",",7),TEXT=$P(TEMP,",",8)
  1. .. E D
  1. ... S FORMAT=$P(TEMP,",",2)
  1. ... S FINUM=$P(TEMP,",",3),OCC=$P(TEMP,",",4),SEP=$P(TEMP,",",5)
  1. ... S PIECE=$P(TEMP,",",6),TEXT=$P(TEMP,",",7)
  1. .. S OBJTEXT=$$CSUBNUM(CSUB,FORMAT,FINUM,OCC,SEP,PIECE,TEXT,.FIEVAL)
  1. .. S OUTTEXT=$E(CSUBLINE,1,OBJSTART-1)_OBJTEXT_$E(CSUBLINE,RP,LEN)
  1. .. S CSUBLINE=OUTTEXT
  1. . I OBJECT="$$CSUBTEXT" D Q
  1. .. N CELLFORMAT,CSUB,PIECE,RP,SEP,TEMP,TEXT
  1. .. S RP=$F(CSUBLINE,")",OBJEND+2)
  1. .. S TEMP=$E(CSUBLINE,OBJEND+2,RP-2)
  1. .. S CSUB=$P(TEMP,",",1),CELLFORMAT=$P(TEMP,",",2),FINUM=$P(TEMP,",",3)
  1. .. S OCC=$P(TEMP,",",4),SEP=$P(TEMP,",",5)
  1. .. S PIECE=$P(TEMP,",",6),TEXT=$P(TEMP,",",7)
  1. .. S OBJTEXT=$$CSUBTEXT(CSUB,CELLFORMAT,FINUM,OCC,SEP,PIECE,TEXT,.FIEVAL)
  1. .. S OUTTEXT=$E(CSUBLINE,1,OBJSTART-1)_OBJTEXT_$E(CSUBLINE,RP,LEN)
  1. .. S CSUBLINE=OUTTEXT
  1. Q OUTTEXT
  1. ;
  1. ;===============
  1. CSUBTEXT(CSUB,CELLFORMAT,FINUM,OCC,SEP,PIECE,TEXT,FIEVAL) ;CSUB Text Object.
  1. N FITEXT,JUSTIFY,PADC,WIDTH
  1. S CELLFORMAT=$G(CELLFORMAT),OCC=$G(OCC)
  1. S SEP=$G(SEP),PIECE=$G(PIECE,1),TEXT=$G(TEXT)
  1. S FITEXT=$S(OCC="":$G(FIEVAL(FINUM,CSUB)),1:$G(FIEVAL(FINUM,OCC,CSUB)))
  1. I SEP'="" S FITEXT=$P(FITEXT,SEP,PIECE)
  1. I FITEXT="" S FITEXT=TEXT
  1. I CELLFORMAT'="" D
  1. . S PADC=$P(CELLFORMAT,":",2),CELLFORMAT=$P(CELLFORMAT,":",1)
  1. . S JUSTIFY=$E(CELLFORMAT,1),WIDTH=$P(CELLFORMAT,JUSTIFY,2)_"T"
  1. . S FITEXT=$S(JUSTIFY="L":$$LJ^XLFSTR(FITEXT,WIDTH,PADC),JUSTIFY="R":$$RJ^XLFSTR(FITEXT,WIDTH,PADC),JUSTIFY="C":$$CJ^XLFSTR(FITEXT,WIDTH,PADC),1:FITEXT)
  1. Q FITEXT
  1. ;
  1. ;===============
  1. MINDATE(LIST,FIEVAL) ;Oldest date.
  1. N FINUM,IND,MIND,NUMFI,TESTD
  1. S MIND=9991231
  1. S NUMFI=$L(LIST,",")
  1. F IND=1:1:NUMFI D
  1. . S FINUM=$P(LIST,",",IND)
  1. . S TESTD=$G(FIEVAL(FINUM,"DATE"))
  1. . I (TESTD>0),(TESTD<MIND) S MIND=TESTD
  1. I MIND=9991231 S MIND=0
  1. Q MIND
  1. ;
  1. ;===============
  1. MRD(LIST,FIEVAL) ;Most recent date.
  1. N FINUM,IND,MRD,NUMFI
  1. S MRD=0
  1. S NUMFI=$L(LIST,",")
  1. F IND=1:1:NUMFI D
  1. . S FINUM=$P(LIST,",",IND)
  1. . I $G(FIEVAL(FINUM,"DATE"))>MRD S MRD=FIEVAL(FINUM,"DATE")
  1. Q MRD
  1. ;