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

RGADTP3.m

Go to the documentation of this file.
  1. RGADTP3 ;BIR/CMC-RGADTP2 - CONTINUED ;4/21/22 10:52
  1. ;;1.0;CLINICAL INFO RESOURCE NETWORK;**48,59,63,65,67,68,71,73,76,77**;30 Apr 99;Build 3
  1. ;
  1. ;MOVED CHKPVT AND DIFF FROM RGADTP2 DUE TO ROUTINE SIZE ISSUE
  1. Q
  1. CHKPVT(ARRAY) ;CHECKS TO SEE IF OUTSTANDING IDENTITY EDIT IS WAITING TO BE SENT IN THE ADT/HL7 PIVOT FILE
  1. ;**44 CREATED - ARRAY CONTAINS THE ARRAY ELEMENTS NEEDED TO FIND THE PATIENT IN THE ADT/HL7 PIVOT FILE
  1. ;RETURNED IS -1^EDIT PENDING IN PIVOT FILE OR 0 IF THERE ISN'T ONE
  1. I '$D(^VAT(391.71,"C",ARRAY("DFN"))) Q 0
  1. N PIV,FIELDS
  1. S PIV=$O(^VAT(391.71,"C",ARRAY("DFN"),"A"),-1) ;get last entry in the pivot file for this patient
  1. I '$D(^VAT(391.71,"AXMIT",4,PIV))&('$D(^VAT(391.71,"AXMIT",3,PIV))) Q 0
  1. S FIELDS=$$GET1^DIQ(391.71,PIV_",",2.1,"I")
  1. I FIELDS[".01;"!(FIELDS[".02;")!(FIELDS[".03;")!(FIELDS[".09;")!(FIELDS[".0906;")!(FIELDS[".2403;")!(FIELDS["994;") Q "-1^DFN "_ARRAY("DFN")_": Edits made to identity fields waiting to come to MPI, MPI update not processed as of yet."
  1. Q 0
  1. ;
  1. DIFF(ARRAY,RGRSDFN,DR,ARAY) ; are there fields to update? **47
  1. N NAME,SSN,PDOB,SEX,SID,MMN,OLDNAME,OLDHLNAM,OLDMMN,OLDHLMMN,HLNAME,HLMMN,SSNV,MBI,PSNR,PREFNAME,TIN,FIN,ITIN,SEXORDES,PRONOUNDES
  1. S DR="",NAME=$$GET1^DIQ(2,+RGRSDFN_",",.01,"I"),HLNAME=ARRAY("NAME")
  1. ;**48 remove name standardization check
  1. ;D STDNAME^XLFNAME(.NAME,"F",.OLDNAME) S HLNAME=ARRAY("NAME") D STDNAME^XLFNAME(.HLNAME,"F",.OLDHLNAM)
  1. ;**71,Story 841921 (mko): If the Name Components flag is not set, and the incoming name is > 30 chars,
  1. ; use the name components to build a truncated name
  1. ; If the flag is set, then we need to update the Name Components entry rather than the Patient Name.
  1. ; Save the incoming components in ARAY(20), when different from existing values
  1. I '$$GETFLAG^MPIFNAMC D
  1. .S:$L(HLNAME)>30 (HLNAME,ARRAY("NAME"))=$$FMTNAME(.ARRAY,30)
  1. .S:NAME'=$G(HLNAME) DR=DR_".01;",ARAY(2,.01)=ARRAY("NAME")
  1. E D
  1. .N DIERR,DIMSG,DIHELP,MSG,NCIENS,TARG
  1. .S NCIENS=$$GET1^DIQ(2,+RGRSDFN_",",1.01,"I","","MSG")_","
  1. .D:NCIENS>0 GETS^DIQ(20,NCIENS,"1;2;3;5","I","TARG","MSG")
  1. .S:$G(TARG(20,NCIENS,1,"I"))'=$G(ARRAY("SURNAME")) ARAY(2,1.01,"FAMILY")=$G(ARRAY("SURNAME"))
  1. .S:$G(TARG(20,NCIENS,2,"I"))'=$G(ARRAY("FIRST")) ARAY(2,1.01,"GIVEN")=$G(ARRAY("FIRST"))
  1. .S:$G(TARG(20,NCIENS,3,"I"))'=$G(ARRAY("MIDDLE")) ARAY(2,1.01,"MIDDLE")=$G(ARRAY("MIDDLE"))
  1. .S:$G(TARG(20,NCIENS,5,"I"))'=$G(ARRAY("SUFFIX")) ARAY(2,1.01,"SUFFIX")=$G(ARRAY("SUFFIX"))
  1. .S:$D(ARAY(2,1.01)) DR=DR_"1.01;"
  1. ;**67 - Story 455460 (ckn) - Update Preferred Name
  1. S PREFNAME=$$GET1^DIQ(2,+RGRSDFN_",",.2405,"I") D
  1. .I PREFNAME="",$G(ARRAY("PREFERREDNAME"))="@" Q
  1. .I PREFNAME'=$G(ARRAY("PREFERREDNAME")) S DR=DR_".2405;",ARAY(2,.2405)=$G(ARRAY("PREFERREDNAME"))
  1. S PDOB=$$GET1^DIQ(2,+RGRSDFN_",",.03,"I") I PDOB'=ARRAY("MPIDOB") S DR=DR_".03;",ARAY(2,.03)=ARRAY("MPIDOB")
  1. S SSN=$$GET1^DIQ(2,+RGRSDFN_",",.09,"I") D
  1. .I SSN["P",ARRAY("SSN")=""!(ARRAY("SSN")="@") Q
  1. .; **47 if incoming SSN value is null/@ and existing SSN isn't a pseudo create a new pseudo SSN
  1. .I SSN'["P" I ARRAY("SSN")="@"!(ARRAY("SSN")="") S ARRAY("SSN")="P"
  1. .I SSN'=ARRAY("SSN"),ARRAY("SSN")'="" S DR=DR_".09;",ARAY(2,.09)=ARRAY("SSN")
  1. S SEX=$$GET1^DIQ(2,+RGRSDFN_",",.02,"I") D
  1. .I SEX=""&(ARRAY("SEX")="@") Q
  1. .I SEX'=ARRAY("SEX") S DR=DR_".02;",ARAY(2,.02)=ARRAY("SEX")
  1. ;**63 Story 174247: Self-ID Gender
  1. S SID=$$GET1^DIQ(2,+RGRSDFN_",",.024,"I") D
  1. .I SID="",$G(ARRAY(.024))="@" Q
  1. .I SID'=$G(ARRAY(.024)) S DR=DR_".024;",ARAY(2,.024)=$G(ARRAY(".024"))
  1. ;S SSNV=$$GET1^DIQ(2,+RGRSDFN_",",.0907,"I") I SSNV="" S SSNV="@"
  1. ;I SSNV'=$G(ARRAY(.0907)) S ARAY(2,.0907)=$G(ARRAY(.0907)),DR=DR_".0907;" ;**76 don't file until after ssn is filed by EDIT^VAFCPTED in ^RGADTP2
  1. ;S PSNR=$$GET1^DIQ(2,+RGRSDFN_",",.0906,"I") I PSNR="" S PSNR="@"
  1. ;I PSNR'=ARRAY(.0906) S ARAY(2,.0906)=$G(ARRAY(.0906)),DR=DR_".0906;" ;**76 don't file until after ssn is filed by EDIT^VAFCPTED in ^RGADTP2
  1. I $G(ARRAY("MBI"))'="" D ;**59, MVI_881
  1. . S MBI=$$GET1^DIQ(2,+RGRSDFN_",",994,"I") S:MBI="" MBI="@"
  1. . I MBI'=ARRAY("MBI") S DR=DR_"994;",ARAY(2,994)=ARRAY("MBI")
  1. S HLMMN=$G(ARRAY("MMN")) ;**59, MVI_881
  1. I HLMMN'="" D
  1. . S MMN=$$GET1^DIQ(2,+RGRSDFN_",",.2403,"I") S:MMN="" MMN="@"
  1. . I MMN'="@" D STDNAME^XLFNAME(.MMN,"F",.OLDMMN)
  1. . I HLMMN'="@" D STDNAME^XLFNAME(.HLMMN,"F",.OLDHLMMN)
  1. . I MMN'=HLMMN S DR=DR_".2403;",ARAY(2,.2403)=ARRAY("MMN")
  1. I $G(ARRAY("TIN"))'="" D
  1. . S TIN=$$GET1^DIQ(2,+RGRSDFN_",",991.08,"I") S:TIN="" TIN="@"
  1. . I TIN'=ARRAY("TIN") S DR=DR_"991.08;",ARAY(2,991.08)=ARRAY("TIN")
  1. I $G(ARRAY("FIN"))'="" D
  1. . S FIN=$$GET1^DIQ(2,+RGRSDFN_",",991.09,"I") S:FIN="" FIN="@"
  1. . I FIN'=ARRAY("FIN") S DR=DR_"991.09;",ARAY(2,991.09)=ARRAY("FIN")
  1. I $G(ARRAY("ITIN"))'="" D ;**76, VAMPI-11120 (dri) update ITIN field
  1. . S ITIN=$$GET1^DIQ(2,+RGRSDFN_",",991.11,"I") S:ITIN="" ITIN="@"
  1. . I ITIN'=ARRAY("ITIN") S DR=DR_"991.11;",ARAY(2,991.11)=ARRAY("ITIN")
  1. I $S($O(ARRAY("SexOr",0)):1,$O(^DPT(+RGRSDFN,.025,0)):1,1:0) S DR=DR_".025;" ;**76, VAMPI-11114 (dri) check in ^vafcpted whether to update sexual orientation
  1. I $G(ARRAY("SexOrDes"))'="" D ;**76, VAMPI-11114 (dri) update sexual orientation description ;**77, VAMPI-13755 (dri) - file after "SexOr" for "AHIST" x-ref
  1. . S SEXORDES=$$GET1^DIQ(2,+RGRSDFN_",",.0251,"I") S:SEXORDES="" SEXORDES="@"
  1. . I SEXORDES'=ARRAY("SexOrDes") S DR=DR_".0251;",ARAY(2,.0251)=ARRAY("SexOrDes")
  1. I $S($O(ARRAY("Pronoun",0)):1,$O(^DPT(+RGRSDFN,.2406,0)):1,1:0) S DR=DR_".2406;" ;**76, VAMPI-11118 (dri) check in vafcpted whether to update pronoun
  1. I $G(ARRAY("PronounDes"))'="" D ;**76, VAMPI-11118 (dri) update pronoun description
  1. . S PRONOUNDES=$$GET1^DIQ(2,+RGRSDFN_",",.24061,"I") S:PRONOUNDES="" PRONOUNDES="@"
  1. . I PRONOUNDES'=ARRAY("PronounDes") S DR=DR_".24061;",ARAY(2,.24061)=ARRAY("PronounDes")
  1. I $S($O(ARRAY("ALIAS",0)):1,$O(^DPT(+RGRSDFN,.01,0)):1,1:0) S DR=DR_"1;"
  1. ;**65 - Story 323009 (ckn): Update DOD fields
  1. N ODOD,ODODP,ODODLUP,ODODSRC,ODODARY,ODODD,ANSWER,DUPDFLG
  1. S DUPDFLG=$$CHK^VAFCDODA() ;Date of Death update flag
  1. ; check for validation of Date of Death- if imprecise date of
  1. ; death - remove all Date of Death if no existin date of death
  1. D VAL^DIE(2,+RGRSDFN_",",.351,"R",$G(ARRAY("MPIDOD")),.ANSWER)
  1. I DUPDFLG D
  1. . I $G(ARRAY("MPIDOD"))="""@"""!($G(ARRAY("MPIDOD"))="") D Q
  1. ..;**68 - Story 500735 (ckn) : Only Delete Date of Death data if
  1. ..; deletion through PSIM TK OVERRIDE
  1. .. I '$G(ARRAY("TKOVRDOD")) Q
  1. .. I $$GET1^DIQ(2,+RGRSDFN_",",.351,"I")="" Q
  1. .. S DR=DR_".354;",ARAY(2,.354)=$G(ARRAY(.354)) ;Date of death last updated date
  1. .. ;Remove rest of the DOD fields
  1. .. S DR=DR_".351;.352;.353;.355;.357;.358;",(ARAY(2,.351),ARAY(2,.352),ARAY(2,.353),ARAY(2,.355),ARAY(2,.357),ARAY(2,.358))="@"
  1. . I ANSWER="^" S DODIMPF=1_"^"_$G(ARRAY("MPIDOD")) Q ;Date of Death Imprecise Flag - No update on VistA
  1. . I $G(ARRAY("MPIDOD"))>0 D Q
  1. .. N TUPD S TUPD=0
  1. .. D GETS^DIQ(2,+RGRSDFN_",",".351;.353;.354;.357","I","ODODARY")
  1. .. S ODOD=ODODARY(2,+RGRSDFN_",",.351,"I")
  1. ..; S ODODD=ODODARY(2,+RGRSDFN_",",.357,"I")
  1. .. S ODODLUP=ODODARY(2,+RGRSDFN_",",.354,"I")
  1. .. S ODODSRC=ODODARY(2,+RGRSDFN_",",.353,"I")
  1. ..; I ODOD=ARRAY("MPIDOD") Q ;No update if no change in Date of Death
  1. ..;**71 - Story 841797 (ckn)
  1. ..;DOD metadata update allowed if update is from PSIM TK OVERRIDE even
  1. ..;if no change in Date of Death
  1. ..;**131 - Story 1125116 (ckn) DOD metadata update is allowed now regardless
  1. ..; I ODOD=ARRAY("MPIDOD"),'$G(ARRAY("TKOVRDOD")) Q
  1. .. I ODOD'=ARRAY("MPIDOD") S DR=DR_".351;",ARAY(2,.351)=$G(ARRAY(.351)),TUPD=1
  1. ..; I ODODD'=$G(ARRAY("DODDocType")) S DR=DR_".357;",ARAY(2,.357)=$G(ARRAY(.357))
  1. .. I ODODLUP'=$G(ARRAY("DODLastUpdated")),(ODOD'=ARRAY("MPIDOD")) S DR=DR_".354;",ARAY(2,.354)=$G(ARRAY(.354))
  1. .. I ODODSRC'=$G(ARRAY("DODSource")) S DR=DR_".353;",ARAY(2,.353)=$G(ARRAY(.353)),TUPD=1
  1. .. ;S DR=DR_".353;",ARAY(2,.353)=$G(ARRAY(.353))
  1. .. ;Remove rest of the DOD fields if Date Of Death is getting updated
  1. .. S DR=DR_".352;.357;.358",ARAY(2,.352)="@",ARAY(2,.358)="@",ARAY(2,.357)="@"
  1. .. I TUPD S DR=DR_";.355",ARAY(2,.355)="@"
  1. Q
  1. ;
  1. FMTNAME(ARRAY,LEN) ;Return a formatted name from cleaned Name Components that doesn't exceed LEN characters in length.
  1. ;**71,Story 841921 (mko): New function
  1. N NC
  1. S:'$G(LEN) LEN=30
  1. ;
  1. ;If ARRAY is passed as a string and doesn't have descendants assume it equals "surname^first^middle^suffix"
  1. D:$D(ARRAY)=1
  1. . S ARRAY("SURNAME")=$P(ARRAY,"^")
  1. . S ARRAY("FIRST")=$P(ARRAY,"^",2)
  1. . S ARRAY("MIDDLE")=$P(ARRAY,"^",3)
  1. . S ARRAY("SUFFIX")=$P(ARRAY,"^",4)
  1. ;
  1. ;Clean the components
  1. S NC("FAMILY")=$$CLEANC^XLFNAME($G(ARRAY("SURNAME")))
  1. S NC("GIVEN")=$$CLEANC^XLFNAME($G(ARRAY("FIRST")))
  1. S NC("MIDDLE")=$$CLEANC^XLFNAME($G(ARRAY("MIDDLE")))
  1. S NC("SUFFIX")=$$CLEANC^XLFNAME($G(ARRAY("SUFFIX")))
  1. ;
  1. ;Build a full name, maximum length LEN
  1. Q $$NAMEFMT^XLFNAME(.NC,"F","CL"_LEN)
  1. ;