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

AUPNMBI.m

Go to the documentation of this file.
  1. AUPNMBI ; IHS/OIT/FBD&NKD - MBI APIS ; 10/25/2017 ;
  1. ;;99.1;IHS DICTIONARIES (PATIENT);**26,27**;MAR 9, 1999;Build 2
  1. ;
  1. Q ;NO TOP-LEVEL CALL ALLOWED
  1. ;
  1. ADDMBI(PATIEN,EFFDATE,MBI,SOURCE) ;PEP - ADD MBI VALUE FOR A PATIENT
  1. ; Function: Add an MBI for a patient on the specified effective date
  1. ; Call: $$ADDMBI^AUPNMBI(PATIEN,EFFDATE,MBI,SOURCE)
  1. ; Returned value:
  1. ; Successful: EFF_DATE(? - as IEN in MBI multiple)
  1. ; Unsuccessful: 0 (zero)
  1. ;
  1. N FDA,SF,IENS,RES,ERR
  1. S MBI=$$UP^XLFSTR($G(MBI)) ;TRANSLATE ALL ALPHAS TO UPPERCASE
  1. S SF=9000001.44,IENS="+1,"_$G(PATIEN)_"," ; SET MBI SUBFILE AND IENS STRING (LOOKUP/ADD)
  1. S:$D(^AUPNPAT($G(PATIEN),44,$G(EFFDATE))) IENS="?"_IENS
  1. S FDA(SF,IENS,.01)=$G(EFFDATE) ; EFFECTIVE DATE (#.01)
  1. S FDA(SF,IENS,1)=$G(MBI) ; MBI (#1)
  1. S FDA(SF,IENS,2)=$G(SOURCE) ; SOURCE (#2)
  1. S FDA(SF,IENS,3)=$$DT^XLFDT ; DATE ENTERED (#3)
  1. S FDA(SF,IENS,4)=$G(DUZ) ; ENTERED BY (#4)
  1. S RES(1)=$G(EFFDATE) ; ENTRY DINUM'ED BY DATE
  1. D UPDATE^DIE(,"FDA","RES","ERR")
  1. Q $S($D(ERR):"0^"_$G(ERR("DIERR","1","TEXT",1)),1:+$G(RES(1))) ; ERROR: 0^MESSAGE, SUCCESS: IEN (DATE)
  1. ;
  1. ;
  1. GETMBI(PATIEN,SVCDATE,FORMAT) ;PEP - GET MBI VALUE FOR A PATIENT
  1. ;Function: Retrieve an MBI for a patient on the specified date of service
  1. ; Call: $$GETMBI^AUPNMBI(PAT_IEN,DATE,FMT)
  1. ; FORMAT:
  1. ; 0/default: MBI value only return requested
  1. ; 1: All fields, internal value return requested
  1. ; 2: All fields, external value return requested
  1. ; Returned value:
  1. ; Successful (Dependent upon FORMAT specification):
  1. ; 0/default: MBI
  1. ; 1: MBI^EFF_DATE^SOURCE
  1. ; 2: MBI^EFF_DATE_ext^SOURCE_ext
  1. ; Unsuccessful: 0 (zero)
  1. ;
  1. N IEN,RES
  1. S (IEN,RES)=0,PATIEN=+$G(PATIEN),SVCDATE=+$G(SVCDATE),FORMAT=$G(FORMAT,0) Q:'PATIEN!'SVCDATE RES
  1. S IEN=$O(^AUPNPAT(PATIEN,44,SVCDATE+.000001),-1) Q:'IEN RES
  1. S RES=$P($G(^AUPNPAT(PATIEN,44,IEN,0)),U,2)
  1. I FORMAT S RES=RES_U_$$GET1^DIQ(9000001.44,IEN_","_PATIEN,.01,$S(FORMAT>1:"",1:"I"))_U_$$GET1^DIQ(9000001.44,IEN_","_PATIEN,2,$S(FORMAT>1:"",1:"I"))
  1. Q RES
  1. ;
  1. DELMBI(PATIEN,EFFDATE,MBI) ;DELETE MBI VALUE FOR A PATIENT
  1. ; Function: Delete an MBI entry for a patient on the specified effective date
  1. ; Call: $$DELMBI^AUPNMBI(PATIEN,EFFDATE,MBI)
  1. ; Returned value:
  1. ; Successful: 1
  1. ; Unsuccessful: 0 (zero)
  1. ; - Error message (if any) concatenated to status response
  1. ; - Format: 0^error_message
  1. ;
  1. N PAT,DATE,DIK,DA,ERR ;INITIALIZATION
  1. S PAT=$G(PATIEN),DATE=$G(EFFDATE),MBI=$G(MBI)
  1. I +PAT D ;
  1. . I $D(^AUPNPAT(PAT)) D ;
  1. . . I +DATE D ;
  1. . . . I $D(^AUPNPAT(PAT,44,DATE)) D ;
  1. . . . . I $P(^AUPNPAT(PAT,44,DATE,0),U,2)=MBI D ;
  1. . . . . . S DA(1)=PAT,DA=DATE,DIK="^AUPNPAT("_DA(1)_",44,"
  1. . . . . . D ^DIK
  1. . . . . E S ERR="0^MBI not found for specified date" I 1
  1. . . . E S ERR="0^Effective date not found" I 1
  1. . . E S ERR="0^Invalid effective date" I 1
  1. . E S ERR="0^Invalid patient reference" I 1
  1. E S ERR="0^Invalid pointer value" I 1
  1. Q:$D(ERR) ERR
  1. Q 1
  1. ;
  1. HISTMBI(PATIEN,TARGET,FORMAT) ;PEP - GET MBI VALUE HISTORY FOR A PATIENT
  1. ;Function: Retrieve the entire MBI history for a patient, sorted by effective date
  1. ; Call: $$HISTMBI^AUPNMBI(PAT_IEN,.TARGET_ARRAY,FORMAT)
  1. ; FORMAT:
  1. ; 1/default: Effective_Date and Source returned in FileMan-internal format
  1. ; 2: Effective_Date and Source returned in external format
  1. ; Returned value:
  1. ; Successful: 1
  1. ; - MBI history returned as individual nodes in specified target array
  1. ; - Node format (dependent upon FORMAT specification):
  1. ; - 1/default: MBI^Effective_Date^Source
  1. ; - 2: MBI^Effective_Date_ext^Source_ext
  1. ; Unsuccessful: 0 (zero)
  1. ; - Error message (if any) concatenated to status response
  1. ; - Format: 0^error_message
  1. ;
  1. N ERR,MBI,PAT,TARCNT K TARGET ;INITIALIZATION
  1. ;S PAT=+$G(PATIEN) ;AUPN*99.1*27 - ORIGINAL LINE - COMMENTED OUT
  1. S PAT=+$G(PATIEN),FORMAT=$G(FORMAT,1),TARCNT=0 ;IHS/OIT/NKD - AUPN*99.1*27 - INCLUDED OUTPUT FORMAT PARAMETER
  1. I +PAT D ;
  1. . I $D(^AUPNPAT(PAT,0)) D ;
  1. . . S MBI=0
  1. . . I +$O(^AUPNPAT(PAT,44,MBI)) D ;
  1. . . . ;F S MBI=$O(^AUPNPAT(PATIEN,44,MBI)) Q:'+MBI S TARGET(MBI)=$$GETMBI(PAT,MBI,1) ;AUPN*99.1*27 - ORIGINAL LINE - COMMENTED OUT
  1. . . . F S MBI=$O(^AUPNPAT(PATIEN,44,MBI)) Q:'+MBI S TARGET(MBI)=$$GETMBI(PAT,MBI,FORMAT),TARCNT=TARCNT+1 ;IHS/OIT/NKD - AUPN*99.1*27 - INCLUDED OUTPUT FORMAT PARAMETER
  1. . . E S ERR="0^No MBI history on file for patient" I 1
  1. . E S ERR="0^Invalid patient reference" I 1
  1. E S ERR="0^Invalid pointer value" I 1
  1. Q:$D(ERR) ERR
  1. Q TARCNT
  1. ;
  1. FORMOK(MBI) ;PEP - VALIDATE MBI VALUE FORMAT
  1. ;Function: Validate MBI format compliance
  1. ;Call: $$FORMOK^AUPNMBI(MBI)
  1. ;Returned value:
  1. ; Successful: MBI
  1. ; Submitted MBI value returned if verified as being in valid MBI format
  1. ; Unsuccessful: 0(zero)^error_message
  1. ;
  1. ;Acceptable MBI Format is:
  1. ; 1 1
  1. ;Position: 1 2 3 4 5 6 7 8 9 0 1
  1. ; ---------------------
  1. ; Type: C A X N A X N A A N N
  1. ;
  1. ;Types are:
  1. ; A = Alphabetic characters A-Z
  1. ; C = Natural numbers 1-9
  1. ; N = Whole numbers 0-9
  1. ; X = Alphanumeric characters 0-9 and A-Z
  1. ;Letters excluded from use in alphabetics and alphanumerics: S, L, O, B, I, Z
  1. ;
  1. N CHAR,EXCLUDE,FLAG,MBILEN,POS,RETURN,XFORM
  1. S MBILEN=11 ;VALID LENGTH OF MBI STRING
  1. S EXCLUDE="SLOBIZ" ;CMS-DEFINED LIST OF CHARACTERS EXCLUDED FROM ACCEPTABILITY
  1. S XFORM="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ;ACCEPTABLE 'X'(ALPHANUMERIC) CHARACTERS
  1. ;
  1. S RETURN=0
  1. S MBI=$$UP^XLFSTR($G(MBI)) ;TRANSLATE ALL ALPHAS TO UPPERCASE
  1. I $L(MBI)=MBILEN D ;ACCEPTABLE LENGTH CHECK
  1. . I MBI?1N1A1E1N1A1E1N2A2N,XFORM[$E(MBI,3),XFORM[$E(MBI,6) D ;OVERALL FORMAT CHECK
  1. . . I +$E(MBI) D ;FIRST DIGIT CHECK - MUST BE NON-ZERO (1-9)
  1. . . . S FLAG=0
  1. . . . F POS=1:1:MBILEN D ;CHECK MBI STRING FOR EXCLUDED CHARACTERS
  1. . . . . S CHAR=$E(MBI,POS) ;EACH CHARACTER INDIVIDUALLY EXTRACTED...
  1. . . . . I EXCLUDE[CHAR S FLAG=1 ;...AND FLAGGED IF PART OF THE EXCLUDED CHARACTER SET
  1. . . . I FLAG S RETURN="0^contains one or more excluded characters "_EXCLUDE Q ;EXIT PROCESSING STREAM IF ANY EXCLUDED CHARACTERS FOUND
  1. . . . ;
  1. . . . S RETURN=MBI ;ALL CHECKS PASSED, USER-SUBMITTED MBI VALUE RETURNED AS VALID
  1. . . E S RETURN="0^positive integer required for first character"
  1. . E S RETURN="0^incorrect format"
  1. E S RETURN="0^incorrect length - must be "_MBILEN_" characters"
  1. ;
  1. Q RETURN