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

PSOERXOF.m

Go to the documentation of this file.
  1. PSOERXOF ;ALB/BWF - eRx parsing Utilities ; 11/14/2019 3:46pm
  1. ;;7.0;OUTPATIENT PHARMACY;**581,635**;DEC 1997;Build 19
  1. ;
  1. Q
  1. ; REFREQ - # of refills requested (rxrenewal request messages).
  1. MEDDIS(GBL,CNT,PSOIEN,RXIEN,ORIEN,REFREQ) ;
  1. N DRUGDES,PRODCODE,PCQUAL,STRENGTH,DDBCODE,DDBCQUAL,FSCODE,FCODE,SSCODE,SCODE,DEASCH,VALUE,CLQUAL,USCODE,PUC,DAYSUPP
  1. N F,DIRECT,NOTE,REQUAL,SUB,WDATE,LFDATE,EXDATE,EFDATE,PEND,DOD,DATEVAL,PAQUAL,PAVAL,DCS,PAS,SIGTXT,SIGLOOP
  1. N RXDAT,RXIENS,DRUGDES,QTY,RXDAT,RVAL,DRUGIEN,DNDC,SUBST,LESS,I,DCLOOP,DCSVAL,MEDIEN,QUOM,CLQUAL
  1. N ERXSFIEN,MTYPE,RESVAL,NODE,ORIGQTY
  1. ; this is the section we will likely be using
  1. S RXIENS=RXIEN_","
  1. S MTYPE=$$GET1^DIQ(52.49,PSOIEN,.08,"I"),RESVAL=$$GET1^DIQ(52.49,PSOIEN,52.1,"I")
  1. D GETS^DIQ(52,RXIENS,"1;6;7;8;9;10;10.2;101","IE","RXDAT")
  1. D CONVXML^PSOERXX1("RXDAT")
  1. S DRUGDES=$G(RXDAT(52,RXIENS,6,"E"))
  1. S DRUGIEN=$G(RXDAT(52,RXIENS,6,"I"))
  1. ;Reference to $$GETNDC^PSSNDCUT supported by IA 4707
  1. I DRUGIEN S DNDC=$$GETNDC^PSSNDCUT(DRUGIEN,$G(PSOSITE)),DNDC=$TR(DNDC,"-","")
  1. S QTY=$G(RXDAT(52,RXIENS,7,"E"))
  1. I QTY[".",$P(QTY,".",2)="" S QTY=$P(QTY,".")
  1. ;38 Original Quantity
  1. ;40 Remaining Quantity
  1. ;87 Quantity Received
  1. ;QS Quantity sufficient as determined by the dispensing pharmacy.
  1. ; Quantity to be based on established dispensing protocols between
  1. ; the prescriber and pharmacy/pharmacist.
  1. ; FUTURE - WHEN THIS IS USED, CLQUAL MAY NEED TO BE CALCULATED AND NOT HARD CODED
  1. S NODE=$S(MTYPE="N":"P",(MTYPE="RE"):"MR",1:"P")
  1. S ERXSFIEN=$O(^PS(52.49,PSOIEN,311,"C",NODE,0))
  1. ; PSO*7*635 - if the original quantity does not match the dispense quantity, return 'Unspecified - C38046'
  1. S ORIGQTY=$$GET1^DIQ(52.49311,ERXSFIEN_","_PSOIEN_",",2.1,"E")
  1. S CLQUAL=$$GET1^DIQ(52.49311,ERXSFIEN_","_PSOIEN_",",2.2,"E")
  1. I ORIGQTY=QTY S QUOM=$$GET1^DIQ(52.49311,ERXSFIEN_","_PSOIEN_",",2.3,"E")
  1. I ORIGQTY'=QTY S QUOM="C38046"
  1. ; PSO*7*635 - end fix
  1. ; how to determine Unit Source Code?
  1. ;AA - NCI values of Diagnostic, Therapeutic, and Research Equipment - Pharmaceutical Dosage Form (http://www.cancer.gov/cancertopics/terminologyresources/page4- NCI Thesaurus)
  1. ;AB - NCI values of Units of Presentation (http://www.cancer.gov/cancertopics/terminologyresources/page4- NCI Thesaurus)
  1. ;AC - NCI values of Property or Attribute - Unit of Measure - Unit of Category - Potency Unit (http://www.cancer.gov/cancertopics/terminologyresources/page4- NCI Thesaurus)
  1. ; FOR NOW SET IT TO AA
  1. S USCODE="AA"
  1. S DAYSUPP=$G(RXDAT(52,RXIENS,8,"E"))
  1. ; DIRECTIONS COME FROM SIG, FIELD 10
  1. ; FUTURE ENHANCEMENT - SHOULD WE GRAB ALL INFORMATION FROM THE SIG1 MULTIPLE? 52,10.2
  1. S SIGLOOP=0 F S SIGLOOP=$O(^PSRX(RXIEN,"SIG1",SIGLOOP)) Q:'SIGLOOP D
  1. .I '$D(SIGTXT) S SIGTXT=$G(^PSRX(RXIEN,"SIG1",SIGLOOP,0)) Q
  1. .S SIGTXT=SIGTXT_" "_$G(^PSRX(RXIEN,"SIG1",SIGLOOP,0))
  1. S SIGTXT=$$SYMENC^MXMLUTL(SIGTXT)
  1. S REQUAL=$$GET1^DIQ(52.49,PSOIEN,5.7,"I")
  1. I REQUAL="R" S REQUAL="P"
  1. S SUBST=$$GET1^DIQ(52.49,PSOIEN,5.8,"I")
  1. S RVAL=$S($D(REFREQ):REFREQ,1:$G(RXDAT(52,RXIENS,9,"E")))
  1. I $D(REFREQ) S REQUAL="P"
  1. ; CONVERT DATE types, ALSO MAKE SURE WE NEED TO POPULATE THESE.. MAY NOT BE NEEDED
  1. S LFDATE=$G(RXDAT(52,RXIENS,101,"I")) I LFDATE S LFDATE=$P($$EXTIME^PSOERXO1(LFDATE),"T")
  1. S EXDATE=$G(RXDAT(52,RXIENS,26,"I")) I EXDATE S EXDATE=$P($$EXTIME^PSOERXO1(EXDATE),"T")
  1. S WDATE=$G(RXDAT(52,RXIENS,1,"I")) I WDATE S WDATE=$P($$EXTIME^PSOERXO1(WDATE),"T")
  1. S EFDATE=""
  1. D C S @GBL@(CNT,0)="<MedicationDispensed>"
  1. D C S @GBL@(CNT,0)="<DrugDescription>"_DRUGDES_"</DrugDescription>"
  1. I $L($G(DNDC)) D
  1. .D C S @GBL@(CNT,0)="<DrugCoded>"
  1. .D C S @GBL@(CNT,0)="<ProductCode>"
  1. .D BL(GBL,.CNT,"Code",DNDC)
  1. .D BL(GBL,.CNT,"Qualifier","ND")
  1. .D C S @GBL@(CNT,0)="</ProductCode>"
  1. .D C S @GBL@(CNT,0)="</DrugCoded>"
  1. D C S @GBL@(CNT,0)="<Quantity>"
  1. D C S @GBL@(CNT,0)="<Value>"_QTY_"</Value>"
  1. D C S @GBL@(CNT,0)="<CodeListQualifier>"_CLQUAL_"</CodeListQualifier>"
  1. D C S @GBL@(CNT,0)="<QuantityUnitOfMeasure>"
  1. D BL(GBL,.CNT,"Code",QUOM)
  1. D C S @GBL@(CNT,0)="</QuantityUnitOfMeasure>"
  1. D C S @GBL@(CNT,0)="</Quantity>"
  1. D C S @GBL@(CNT,0)="<DaysSupply>"_DAYSUPP_"</DaysSupply>"
  1. I $L(WDATE) D
  1. .D C S @GBL@(CNT,0)="<WrittenDate>"
  1. .D C S @GBL@(CNT,0)="<Date>"_WDATE_"</Date>"
  1. .D C S @GBL@(CNT,0)="</WrittenDate>"
  1. I $L(LFDATE) D
  1. .D C S @GBL@(CNT,0)="<LastFillDate>"
  1. .D C S @GBL@(CNT,0)="<Date>"_LFDATE_"</Date>"
  1. .D C S @GBL@(CNT,0)="</LastFillDate>"
  1. I $L(SUBST) D C S @GBL@(CNT,0)="<Substitutions>"_SUBST_"</Substitutions>"
  1. S MEDIEN=$O(^PS(52.49,PSOIEN,311,0))
  1. S DCLOOP=0 F S DCLOOP=$O(^PS(52.49,PSOIEN,311,MEDIEN,7,DCLOOP)) Q:'DCLOOP D
  1. .S DCSVAL=$$GET1^DIQ(52.493117,DCLOOP_","_MEDIEN_","_PSOIEN_",",.02,"E")
  1. .D C S @GBL@(CNT,0)="<DrugCoverageStatusCode>"_DCSVAL_"</DrugCoverageStatusCode>"
  1. D C S @GBL@(CNT,0)="<Sig>"
  1. D BL(GBL,.CNT,"SigText",SIGTXT)
  1. D C S @GBL@(CNT,0)="</Sig>"
  1. I $G(REFREQ) D BL(GBL,.CNT,"PharmacyRequestedRefills",REFREQ)
  1. D C S @GBL@(CNT,0)="</MedicationDispensed>"
  1. Q
  1. BL(GBL,CNT,TAG,VAR) ;
  1. Q:VAR=""
  1. D C S @GBL@(CNT,0)="<"_TAG_">"_$$SYMENC^MXMLUTL(VAR)_"</"_TAG_">"
  1. Q
  1. C ;
  1. S CNT=$G(CNT)+1
  1. Q