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

PSOERXX3.m

Go to the documentation of this file.
  1. PSOERXX3 ;ALB/BWF - eRx xml utilities ; 8/3/2016 5:14pm
  1. ;;7.0;OUTPATIENT PHARMACY;**467,508,551**;DEC 1997;Build 37
  1. ;
  1. Q
  1. PATIENT(GBL,PSOISTE,IEN) ;
  1. N F,PATREL,LNAME,FNAME,MNAME,SUFF,PREF,GENDER,DOB,ADDL1,ADDL2,CITY,STATE,ZIP,PLQ,CUNIT,BED,ROOM,PSDAT,ILOOP
  1. N ITYP,IVAL,CLOOP,CNUM,CQUAL,PIEN,PIENS,PSSN
  1. S F=52.46
  1. S PIEN=$$GET1^DIQ(52.49,IEN,.04,"I") Q:'PIEN
  1. S PIENS=PIEN_","
  1. D GETS^DIQ(F,PIENS,"**","IE","PSDAT")
  1. D CONVXML^PSOERXX1("PSDAT")
  1. S PATREL=$G(PSDAT(F,PIENS,1.7,"I"))
  1. S LNAME=$G(PSDAT(F,PIENS,.02,"E"))
  1. S FNAME=$G(PSDAT(F,PIENS,.03,"E"))
  1. S MNAME=$G(PSDAT(F,PIENS,.04,"E"))
  1. S SUFF=$G(PSDAT(F,PIENS,.05,"E"))
  1. S PREF=$G(PSDAT(F,PIENS,.06,"E"))
  1. S GENDER=$G(PSDAT(F,PIENS,.07,"I"))
  1. ; DOB NEEDS TO BE CONVERTED
  1. S DOB=$G(PSDAT(F,PIENS,.08,"I")) I DOB S DOB=$P($$EXTIME^PSOERXO1(DOB),"T")
  1. S ADDL1=$G(PSDAT(F,PIENS,3.1,"E"))
  1. S ADDL2=$G(PSDAT(F,PIENS,3.2,"E"))
  1. S CITY=$G(PSDAT(F,PIENS,3.3,"E"))
  1. S STATE=$G(PSDAT(F,PIENS,3.4,"I"))
  1. S STATE=$$STRES^PSOERXX2(STATE,PSOSITE)
  1. S ZIP=$G(PSDAT(F,PIENS,3.5,"E"))
  1. S PLQ=$G(PSDAT(F,PIENS,1.6,"E"))
  1. S PSSN=$G(PSDAT(F,PIENS,1.4,"E"))
  1. ; FUTURE ENHANCEMENT, GRAB CUNIT/BED/ROOM FROM CORRECT LOCATIONS. THIS LOGIC IS NOT ACTIVE WITH VERSION 2
  1. S CUNIT=$G(PSDAT(F,PIENS,1,"E"))
  1. S BED=$G(PSDAT(F,PIENS,1,"E"))
  1. S ROOM=$G(PSDAT(F,PIENS,1,"E"))
  1. D C S @GBL@(CNT,0)="<Patient>"
  1. I $L(PATREL) D C S @GBL@(CNT,0)="<PatientRelationship>"_PATREL_"</PatientRelationship>"
  1. I '$O(^PS(52.46,PIEN,5,0)) D
  1. .I PSSN D
  1. ..D C S @GBL@(CNT,0)="<Identification>"
  1. ..D C S @GBL@(CNT,0)="<SocialSecurity>"_PSSN_"</SocialSecurity>"
  1. ..D C S @GBL@(CNT,0)="</Identification>"
  1. I $O(^PS(52.46,PIEN,5,0)) D
  1. .D C S @GBL@(CNT,0)="<Identification>"
  1. .S ILOOP=0 F S ILOOP=$O(^PS(52.46,PIEN,5,ILOOP)) Q:'ILOOP D
  1. ..S ITYP=$$GET1^DIQ(52.465,ILOOP_","_PIENS,.01,"E")
  1. ..S IVAL=$$GET1^DIQ(52.465,ILOOP_","_PIENS,.02,"E")
  1. ..D IDENT^PSOERXX2(.GBL,ITYP,IVAL)
  1. .D C S @GBL@(CNT,0)="</Identification>"
  1. D C S @GBL@(CNT,0)="<Name>"
  1. I $L(LNAME) D C S @GBL@(CNT,0)="<LastName>"_LNAME_"</LastName>"
  1. I $L(FNAME) D C S @GBL@(CNT,0)="<FirstName>"_FNAME_"</FirstName>"
  1. I $L(MNAME) D C S @GBL@(CNT,0)="<MiddleName>"_MNAME_"</MiddleName>"
  1. I $L(SUFF) D C S @GBL@(CNT,0)="<Suffix>"_SUFF_"</Suffix>"
  1. I $L(PREF) D C S @GBL@(CNT,0)="<Prefix>"_PREF_"</Prefix>"
  1. D C S @GBL@(CNT,0)="</Name>"
  1. I $L(GENDER) D C S @GBL@(CNT,0)="<Gender>"_GENDER_"</Gender>"
  1. I $L(DOB) D
  1. .D C S @GBL@(CNT,0)="<DateOfBirth>"
  1. .D C S @GBL@(CNT,0)="<Date>"_DOB_"</Date>"
  1. .D C S @GBL@(CNT,0)="</DateOfBirth>"
  1. I $L(ADDL1) D
  1. .D C S @GBL@(CNT,0)="<Address>"
  1. .I $L(ADDL1) D C S @GBL@(CNT,0)="<AddressLine1>"_ADDL1_"</AddressLine1>"
  1. .I $L(ADDL2) D C S @GBL@(CNT,0)="<AddressLine2>"_ADDL2_"</AddressLine2>"
  1. .I $L(CITY) D C S @GBL@(CNT,0)="<City>"_CITY_"</City>"
  1. .I $L(STATE) D C S @GBL@(CNT,0)="<State>"_STATE_"</State>"
  1. .I $L(ZIP) D C S @GBL@(CNT,0)="<ZipCode>"_ZIP_"</ZipCode>"
  1. .I $L(PLQ) D C S @GBL@(CNT,0)="<PlaceLocationQualifier>"_PLQ_"</PlaceLocationQualifier>"
  1. .D C S @GBL@(CNT,0)="</Address>"
  1. I $O(^PS(52.46,PIEN,3,0)) D
  1. .D C S @GBL@(CNT,0)="<CommunicationNumbers>"
  1. .S CLOOP=0 F S CLOOP=$O(^PS(52.46,PIEN,3,CLOOP)) Q:'CLOOP D
  1. ..S CNUM=$$GET1^DIQ(52.462,CLOOP_","_PIENS,.01,"E")
  1. ..S CQUAL=$$GET1^DIQ(52.462,CLOOP_","_PIENS,.02,"I")
  1. ..D COMMNUM^PSOERXX2(.GBL,CNUM,CQUAL)
  1. .D C S @GBL@(CNT,0)="</CommunicationNumbers>"
  1. I $L(CUNIT)!($L(BED))!($L(ROOM)) D
  1. .D C S @GBL@(CNT,0)="<PatientLocation>"
  1. .I $L(CUNIT) D C S @GBL@(CNT,0)="<FacilityUnit>"_CUNIT_"</FacilityUnit>"
  1. .I $L(BED) D C S @GBL@(CNT,0)="<Bed>"_BED_"</Bed>"
  1. .I $L(ROOM) D C S @GBL@(CNT,0)="<Room>"_ROOM_"</Room>"
  1. .D C S @GBL@(CNT,0)="</PatientLocation>"
  1. D C S @GBL@(CNT,0)="</Patient>"
  1. Q
  1. FILLST(GBL,FTYPE,FNOTE) ;
  1. D C S @GBL@(CNT,0)="<FillStatus>"
  1. D C S @GBL@(CNT,0)=$S(FTYPE="F":"<Filled>",FTYPE="P":"<PartialFill>",1:"")
  1. D C S @GBL@(CNT,0)="<Note>"_FNOTE_"</Note>"
  1. D C S @GBL@(CNT,0)=$S(FTYPE="F":"</Filled>",FTYPE="P":"</PartialFill>",1:"")
  1. D C S @GBL@(CNT,0)="</FillStatus>"
  1. Q
  1. BENEFITS(GBL,IEN) ;
  1. N F,NCPDPID,NCPDPID,PAYNAME,CARDID,LNAME,FNAME,MNAME,SUFF,PREF,GID,PSDAT,BIENS,BLOOP,IDLOOP
  1. S IENS=IEN_","
  1. S F=52.4918
  1. I '$O(^PS(52.49,IEN,18,0)) Q
  1. D C S @GBL@(CNT,0)="<BenefitsCoordination>"
  1. S BLOOP=0 F S BLOOP=$O(^PS(52.49,IEN,18,BLOOP)) Q:'BLOOP D
  1. .S BIENS=BLOOP_","_IENS
  1. .K PSDAT
  1. .D GETS^DIQ(F,BIENS,"**","IE","PSDAT")
  1. .D CONVXML^PSOERXX1("PSDAT")
  1. .; FUTURE ENHANCEMENT - the IDENTIFICATION multiple is where the NCPDPID info belongs, USE IDENTIFICATION MULTIPLE IN THE PAYER SUBFILE
  1. .;S NCPDPID=$G(PSDAT(F,IENS,1,"E"))
  1. .;FUTURE ENHANCEMENT - STORE PAYER NAME DIFFERENTLY AN..35
  1. .S PAYNAME=$E($G(PSDAT(F,BIENS,.03,"E")),1,35)
  1. .S CARDID=$G(PSDAT(F,BIENS,7,"E"))
  1. .S LNAME=$G(PSDAT(F,BIENS,1,"E"))
  1. .S FNAME=$G(PSDAT(F,BIENS,2,"E"))
  1. .S MNAME=$G(PSDAT(F,BIENS,3,"E"))
  1. .S SUFF=$G(PSDAT(F,BIENS,4,"E"))
  1. .S PREF=$G(PSDAT(F,BIENS,5,"E"))
  1. .S GID=$G(PSDAT(F,BIENS,.02,"E"))
  1. .; PAYER IDENTIFICATION INFORMATION
  1. .I $D(^PS(52.49,IEN,18,BLOOP,6)) D
  1. ..S IDLOOP=0 F S IDLOOP=$O(^PS(52.49,IEN,18,BLOOP,6,IDLOOP)) Q:'IDLOOP D
  1. ...D C S @GBL@(CNT,0)="<PayerIdentification>"
  1. ...S ITYP=$$GET1^DIQ(52.49186,IDLOOP_","_BLOOP_","_IENS,.01,"E")
  1. ...S IVAL=$$GET1^DIQ(52.49186,IDLOOP_","_BLOOP_","_IENS,.02,"E")
  1. ...D C S @GBL@(CNT,0)="<"_ITYP_">"_IVAL_"</"_ITYP_">"
  1. ...D C S @GBL@(CNT,0)="</PayerIdentification>"
  1. ..;D C S @GBL@(CNT,0)="</PayerIdentification>"
  1. .I $L(PAYNAME) D C S @GBL@(CNT,0)="<PayerName>"_PAYNAME_"</PayerName>"
  1. .I $L(CARDID) D C S @GBL@(CNT,0)="<CardholderID>"_CARDID_"</CardholderID>"
  1. .I ($L(LNAME))!($L(FNAME))!($L(MNAME))!($L(SUFF))!($L(PREF)) D
  1. ..D C S @GBL@(CNT,0)="<CardHolderName>"
  1. ..;/BLB/ - PSO*7*551 BEGIN CHANGE - PREVENT EMPTY SECTIONS
  1. ..I $L(LNAME) D C S @GBL@(CNT,0)="<LastName>"_LNAME_"</LastName>"
  1. ..I $L(FNAME) D C S @GBL@(CNT,0)="<FirstName>"_FNAME_"</FirstName>"
  1. ..I $L(MNAME) D C S @GBL@(CNT,0)="<MiddleName>"_MNAME_"</MiddleName>"
  1. ..I $L(SUFF) D C S @GBL@(CNT,0)="<Suffix>"_SUFF_"</Suffix>"
  1. ..I $L(PREF) D C S @GBL@(CNT,0)="<Prefix>"_PREF_"</Prefix>"
  1. ..D C S @GBL@(CNT,0)="</CardHolderName>"
  1. .I $L(GID) D C S @GBL@(CNT,0)="<GroupID>"_GID_"</GroupID>"
  1. D C S @GBL@(CNT,0)="</BenefitsCoordination>"
  1. Q
  1. ;/BLB/ PSO*7.0*551 - END CHANGE
  1. OBSERVE(GBL,IEN) ;
  1. N F,DIMENS,VALUE,OBDATE,MDQ,MSC,MUC,OBNOTE,PSDAT,OIENS,OLOOP
  1. S F=52.4914
  1. S OBNOTE=$$GET1^DIQ(52.49,IEN,15,"E") S OBNOTE=$$SYMENC^MXMLUTL(OBNOTE)
  1. S IENS=IEN_","
  1. I '$O(^PS(52.49,IEN,14,0)) Q
  1. D C S @GBL@(CNT,0)="<Observation>"
  1. S OLOOP=0 F S OLOOP=$O(^PS(52.49,IEN,14,OLOOP)) Q:'OLOOP D
  1. .S OIENS=OLOOP_","_IENS
  1. .K PSDAT
  1. .D GETS^DIQ(F,OIENS,"**","IE","PSDAT")
  1. .D CONVXML^PSOERXX1("PSDAT")
  1. .S DIMENS=$G(PSDAT(F,OIENS,.02,"E"))
  1. .S VALUE=$G(PSDAT(F,OIENS,.03,"E"))
  1. .; convert observation date
  1. .S OBDATE=$G(PSDAT(F,OIENS,.04,"I")) I OBDATE S OBDATE=$P($$EXTIME^PSOERXO1(OBDATE),"T")
  1. .S MDQ=$G(PSDAT(F,OIENS,.05,"I"))
  1. .S MSC=$G(PSDAT(F,OIENS,.06,"E"))
  1. .S MUC=$G(PSDAT(F,OIENS,.07,"E"))
  1. .D C S @GBL@(CNT,0)="<Measurement>"
  1. .D C S @GBL@(CNT,0)="<Dimension>"_DIMENS_"</Dimension>"
  1. .D C S @GBL@(CNT,0)="<Value>"_VALUE_"</Value>"
  1. .I $L(OBDATE) D
  1. ..D C S @GBL@(CNT,0)="<ObservationDate>"
  1. ..D C S @GBL@(CNT,0)="<Date>"_OBDATE_"</Date>"
  1. ..D C S @GBL@(CNT,0)="</ObservationDate>"
  1. .I $L(MDQ) D C S @GBL@(CNT,0)="<MeasurementDataQualifier>"_MDQ_"</MeasurementDataQualifier>"
  1. .I $L(MSC) D C S @GBL@(CNT,0)="<MeasurementSourceCode>"_MSC_"</MeasurementSourceCode>"
  1. .I $L(MUC) D C S @GBL@(CNT,0)="<MeasurementUnitCode>"_MUC_"</MeasurementUnitCode>"
  1. .D C S @GBL@(CNT,0)="</Measurement>"
  1. I $L(OBNOTE) D
  1. .D C S @GBL@(CNT,0)="<ObservationNotes>"_OBNOTE_"</ObservationNotes>"
  1. D C S @GBL@(CNT,0)="</Observation>"
  1. Q
  1. DRUGEVAL(GBL,IEN) ;
  1. N F,SRC,PSC,SERVRC,CAID,CAQ,CSC,AR,PSDAT,DLOOP
  1. Q
  1. S F=52.4916
  1. S DLOOP=0 F S DLOOP=$O(^PS(52.49,IEN,16,DLOOP)) Q:'DLOOP D
  1. .S IENS=IEN_","_DLOOP_","
  1. .K PSDAT D GETS^DIQ(F,IENS,"**","IE","PSDAT")
  1. .D CONVXML^PSOERXX1("PSDAT")
  1. .S SRC=$G(PSDAT(F,IENS,.01,"E"))
  1. .S PSC=$G(PSDAT(F,IENS,.02,"E"))
  1. .S SERVRC=$G(PSDAT(F,IENS,.03,"E"))
  1. .S CAID=$G(PSDAT(F,IENS,.04,"E"))
  1. .S CAQ=$G(PSDAT(F,IENS,.05,"E"))
  1. .S CSC=$G(PSDAT(F,IENS,.06,"E"))
  1. .S AR=$G(PSDAT(F,IENS,1,"E"))
  1. .D C S @GBL@(CNT,0)="<DrugUseEvaluation>"
  1. .D C S @GBL@(CNT,0)="<ServiceReasonCode>"_SRC_"</ServiceReasonCode>"
  1. .D C S @GBL@(CNT,0)="<ProfessionalServiceCode>"_PSC_"</ProfessionalServiceCode>"
  1. .D C S @GBL@(CNT,0)="<ServiceResultCode>"_SERVRC_"</ServiceResultCode>"
  1. .D C S @GBL@(CNT,0)="<CoAgent>"
  1. .D C S @GBL@(CNT,0)="<CoAgentID>"_CAID_"</CoAgentID>"
  1. .D C S @GBL@(CNT,0)="<CoAgentQualifier>"_CAQ_"</CoAgentQualifier>"
  1. .D C S @GBL@(CNT,0)="</CoAgent>"
  1. .D C S @GBL@(CNT,0)="<ClinicalSignificanceCode>"_CSC_"</ClinicalSignificanceCode>"
  1. .D C S @GBL@(CNT,0)="<AcknowledgementReason>"_AR_"</AcknowledgementReason>"
  1. .D C S @GBL@(CNT,0)="</DrugUseEvaluation>"
  1. Q
  1. DIAGNOS(GBL,IENS) ;
  1. N F,CIQ,PQUAL,PVAL,SQUAL,SVAL,PSDAT
  1. S F=52.499
  1. D GETS^DIQ(F,IENS,"**","IE","PSDAT")
  1. D CONVXML^PSOERXX1("PSDAT")
  1. S CIQ=$G(PSDAT(F,IENS,1,"E"))
  1. S PQUAL=$G(PSDAT(F,IENS,1,"E"))
  1. S PVAL=$G(PSDAT(F,IENS,1,"E"))
  1. S SQUAL=$G(PSDAT(F,IENS,1,"E"))
  1. S SVAL=$G(PSDAT(F,IENS,1,"E"))
  1. ;FUTURE ENHANCEMENT - FOR NOW JUST BUILD HEADER/FOOTER AND QUIT, LATER BUILD THE REST
  1. D C S @GBL@(CNT,0)="<Diagnosis>"
  1. D C S @GBL@(CNT,0)="</Diagnosis>"
  1. Q
  1. D C S @GBL@(CNT,0)="<Diagnosis>"
  1. D C S @GBL@(CNT,0)="<ClinicalInformationQualifier>"_CIQ_"</ClinicalInformationQualifier>"
  1. D C S @GBL@(CNT,0)="<Primary>"
  1. D C S @GBL@(CNT,0)="<Qualifier>"_PQUAL_"</Qualifier>"
  1. D C S @GBL@(CNT,0)="<Value>"_PVAL_"</Value>"
  1. D C S @GBL@(CNT,0)="</Primary>"
  1. D C S @GBL@(CNT,0)="<Secondary>"
  1. D C S @GBL@(CNT,0)="<Qualifier>"_SQUAL_"</Qualifier>"
  1. D C S @GBL@(CNT,0)="<Value>"_SVAL_"</VALUE>"
  1. D C S @GBL@(CNT,0)="</Secondary>"
  1. D C S @GBL@(CNT,0)="</Diagnosis>"
  1. Q
  1. C ;
  1. S CNT=$G(CNT)+1
  1. Q