- PSOERXOH ;ALB/BWF - eRx parsing Utilities ; 11/14/2019 3:46pm
- ;;7.0;OUTPATIENT PHARMACY;**581**;DEC 1997;Build 126
- ;
- Q
- ODIAG(GL,CNT,ERXIEN,MIEN) ; outbound diagnosis segment (52.493113)
- N F,DIAGIEN,DIAGDAT,DIAGIENS,CIQ,PDXCODE,PDXQUAL,PDXOV
- N PDXDESC,PDCOV,SDXCODE,SDXQUAL,SDXDESC,SDXOV
- S F=52.493113
- I '$O(^PS(52.49,ERXIEN,311,MIEN,3,0)) Q
- S DIAGIEN=0 F S DIAGIEN=$O(^PS(52.49,ERXIEN,311,MIEN,3,DIAGIEN)) Q:'DIAGIEN D
- .K DIAGDAT
- .S DIAGIENS=DIAGIEN_","_MIEN_","_ERXIEN_","
- .D GETS^DIQ(F,DIAGIENS,"**","IE","DIAGDAT")
- .S CIQ=$G(DIAGDAT(F,DIAGIENS,.02,"I")),PDXCODE=$G(DIAGDAT(F,DIAGIENS,1.1,"E")),PDXQUAL=$G(DIAGDAT(F,DIAGIENS,1.2,"I"))
- .S PDXOV=$G(DIAGDAT(F,DIAGIENS,1.3,"I")),PDXDESC=$G(DIAGDAT(F,DIAGIENS,2,"E")),SDXCODE=$G(DIAGDAT(F,DIAGIENS,3.1,"E"))
- .S SDXQUAL=$G(DIAGDAT(F,DIAGIENS,3.2,"I")),SDXOV=$G(DIAGDAT(F,DIAGIENS,3.3,"I")),SDXDESC=$G(DIAGDAT(F,DIAGIENS,4,"E"))
- .I $G(PDXOV) S PDXOV=$P($$EXTIME^PSOERXO1(PDXOV),"T")
- .I $G(SDXOV) S SDXOV=$P($$EXTIME^PSOERXO1(SDXOV),"T")
- .D C S @GBL@(CNT,0)="<Diagnosis>"
- .D BL(GBL,.CNT,"ClinicalInformationQualifier",CIQ)
- .I $L(PDXCODE_PDXQUAL_PDXDESC_PDXOV) D
- ..D C S @GBL@(CNT,0)="<Primary>"
- ..D BL(GBL,.CNT,"Code",PDXCODE)
- ..D BL(GBL,.CNT,"Qualifier",PDXQUAL)
- ..D BL(GBL,.CNT,"Description",PDXDESC)
- .I $L(PDXOV) D
- ..D C S @GBL@(CNT,0)="<DateOfLastOfficeVisit>"
- ..D BL(GBL,.CNT,"Date",PDXOV)
- ..D C S @GBL@(CNT,0)="</DateOfLastOfficeVisit>"
- .I $L(PDXCODE_PDXQUAL_PDXDESC_PDXOV) D
- ..D C S @GBL@(CNT,0)="</Primary>"
- .I $L(SDXCODE_SDXQUAL_SDXDESC_SDXOV) D
- ..D C S @GBL@(CNT,0)="<Secondary>"
- ..D BL(GBL,.CNT,"Code",SDXCODE)
- ..D BL(GBL,.CNT,"Qualifier",SDXQUAL)
- ..D BL(GBL,.CNT,"Description",SDXDESC)
- .I $L(SDXOV) D
- ..D C S @GBL@(CNT,0)="<DateOfLastOfficeVisit>"
- ..D BL(GBL,.CNT,"Date",SDXOV) ; need to write function to convert this date
- ..D C S @GBL@(CNT,0)="</DateOfLastOfficeVisit>"
- .I $L(SDXCODE_SDXQUAL_SDXDESC_SDXOV) D
- ..D C S @GBL@(CNT,0)="</Secondary>"
- .D C S @GBL@(CNT,0)="</Diagnosis>"
- Q
- ODUE(GL,CNT,ERXIEN,MIEN) ;outbound drug use evaluation segment
- N F,DUEIEN,DUEDAT,DUEIENS,SERVREA,PROFSERV,SVXRC
- N CAC,CAQ,COAGDESC,CLINCODE,ACKREA
- S F=52.493116
- I '$O(^PS(52.49,ERXIEN,311,MIEN,6,0)) Q
- S DUEIEN=0 F S DUEIEN=$O(^PS(52.49,ERXIEN,311,MIEN,6,DUEIEN)) Q:'DUEIEN D
- .K DUEDAT
- .S DUEIENS=DUEIEN_","_MIEN_","_ERXIEN_","
- .D GETS^DIQ(F,DUEIENS,"**","IE","DUEDAT")
- .S SERVREA=$G(DUEDAT(F,DUEIENS,.02,"E")),PROFSERV=$G(DUEDAT(F,DUEIENS,.03,"E"))
- .S SVXRC=$G(DUEDAT(F,DUEIENS,.04,"E")),CAC=$G(DUEDAT(F,DUEIENS,.05,"E"))
- .S CAQ=$G(DUEDAT(F,DUEIENS,.06,"E")),CLINCODE=$G(DUEDAT(F,DUEIENS,.07,"I"))
- .S COAGDESC=$G(DUEDAT(F,DUEIENS,1,"E")),ACKREA=$G(DUEDAT(F,DUEIENS,2,"E"))
- .D C S @GBL@(CNT,0)="<DrugUseEvaluation>"
- .D BL(GBL,.CNT,"ServiceReasonCode",SERVREA)
- .D BL(GBL,.CNT,"ProfessionalServiceCode",PROFSERV)
- .D BL(GBL,.CNT,"ServiceResultCode",SVXRC)
- .I $L(CAC_CAQ_COAGDESC) D
- ..D C S @GBL@(CNT,0)="<CoAgent>"
- ..D C S @GBL@(CNT,0)="<CoAgentCode>"
- ..D BL(GBL,.CNT,"Code",CAC)
- ..D BL(GBL,.CNT,"Qualifier",CAQ)
- ..D BL(GBL,.CNT,"Description",COAGDESC)
- ..D C S @GBL@(CNT,0)="</CoAgentCode>"
- ..D C S @GBL@(CNT,0)="</CoAgent>"
- .D BL(GBL,.CNT,"ClinicalSignificanceCode",CLINCODE)
- .D BL(GBL,.CNT,"AcknowledgementReason",ACKREA)
- .D C S @GBL@(CNT,0)="</DrugUseEvaluation>"
- Q
- ODCS(GL,CNT,ERXIEN,MIEN) ;outbound drug coverage status segment
- N F,DCSIEN,DCSDAT,DCSIENS,DCSTCODE
- S F=52.493117
- S DCSIEN=0 F S DCSIEN=$O(^PS(52.49,ERXIEN,311,MIEN,7,DCSIEN)) Q:'DCSIEN D
- .K DCSDAT
- .S DCSIENS=DCSIEN_","_MIEN_","_ERXIEN_","
- .D GETS^DIQ(F,DCSIENS,"**","E","DCSDAT")
- .S DCSTCODE=$G(DCSDAT(F,DCSIENS,.02,"E"))
- .D BL(GBL,.CNT,"DrugCoverageStatusCode",DCSTCODE)
- Q
- BL(GBL,CNT,TAG,VAR) ;
- Q:VAR=""
- D C S @GBL@(CNT,0)="<"_TAG_">"_$$SYMENC^MXMLUTL(VAR)_"</"_TAG_">"
- Q
- C ;
- S CNT=$G(CNT)+1
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOERXOH 3881 printed Feb 18, 2025@23:55:19 Page 2
- PSOERXOH ;ALB/BWF - eRx parsing Utilities ; 11/14/2019 3:46pm
- +1 ;;7.0;OUTPATIENT PHARMACY;**581**;DEC 1997;Build 126
- +2 ;
- +3 QUIT
- ODIAG(GL,CNT,ERXIEN,MIEN) ; outbound diagnosis segment (52.493113)
- +1 NEW F,DIAGIEN,DIAGDAT,DIAGIENS,CIQ,PDXCODE,PDXQUAL,PDXOV
- +2 NEW PDXDESC,PDCOV,SDXCODE,SDXQUAL,SDXDESC,SDXOV
- +3 SET F=52.493113
- +4 IF '$ORDER(^PS(52.49,ERXIEN,311,MIEN,3,0))
- QUIT
- +5 SET DIAGIEN=0
- FOR
- SET DIAGIEN=$ORDER(^PS(52.49,ERXIEN,311,MIEN,3,DIAGIEN))
- if 'DIAGIEN
- QUIT
- Begin DoDot:1
- +6 KILL DIAGDAT
- +7 SET DIAGIENS=DIAGIEN_","_MIEN_","_ERXIEN_","
- +8 DO GETS^DIQ(F,DIAGIENS,"**","IE","DIAGDAT")
- +9 SET CIQ=$GET(DIAGDAT(F,DIAGIENS,.02,"I"))
- SET PDXCODE=$GET(DIAGDAT(F,DIAGIENS,1.1,"E"))
- SET PDXQUAL=$GET(DIAGDAT(F,DIAGIENS,1.2,"I"))
- +10 SET PDXOV=$GET(DIAGDAT(F,DIAGIENS,1.3,"I"))
- SET PDXDESC=$GET(DIAGDAT(F,DIAGIENS,2,"E"))
- SET SDXCODE=$GET(DIAGDAT(F,DIAGIENS,3.1,"E"))
- +11 SET SDXQUAL=$GET(DIAGDAT(F,DIAGIENS,3.2,"I"))
- SET SDXOV=$GET(DIAGDAT(F,DIAGIENS,3.3,"I"))
- SET SDXDESC=$GET(DIAGDAT(F,DIAGIENS,4,"E"))
- +12 IF $GET(PDXOV)
- SET PDXOV=$PIECE($$EXTIME^PSOERXO1(PDXOV),"T")
- +13 IF $GET(SDXOV)
- SET SDXOV=$PIECE($$EXTIME^PSOERXO1(SDXOV),"T")
- +14 DO C
- SET @GBL@(CNT,0)="<Diagnosis>"
- +15 DO BL(GBL,.CNT,"ClinicalInformationQualifier",CIQ)
- +16 IF $LENGTH(PDXCODE_PDXQUAL_PDXDESC_PDXOV)
- Begin DoDot:2
- +17 DO C
- SET @GBL@(CNT,0)="<Primary>"
- +18 DO BL(GBL,.CNT,"Code",PDXCODE)
- +19 DO BL(GBL,.CNT,"Qualifier",PDXQUAL)
- +20 DO BL(GBL,.CNT,"Description",PDXDESC)
- End DoDot:2
- +21 IF $LENGTH(PDXOV)
- Begin DoDot:2
- +22 DO C
- SET @GBL@(CNT,0)="<DateOfLastOfficeVisit>"
- +23 DO BL(GBL,.CNT,"Date",PDXOV)
- +24 DO C
- SET @GBL@(CNT,0)="</DateOfLastOfficeVisit>"
- End DoDot:2
- +25 IF $LENGTH(PDXCODE_PDXQUAL_PDXDESC_PDXOV)
- Begin DoDot:2
- +26 DO C
- SET @GBL@(CNT,0)="</Primary>"
- End DoDot:2
- +27 IF $LENGTH(SDXCODE_SDXQUAL_SDXDESC_SDXOV)
- Begin DoDot:2
- +28 DO C
- SET @GBL@(CNT,0)="<Secondary>"
- +29 DO BL(GBL,.CNT,"Code",SDXCODE)
- +30 DO BL(GBL,.CNT,"Qualifier",SDXQUAL)
- +31 DO BL(GBL,.CNT,"Description",SDXDESC)
- End DoDot:2
- +32 IF $LENGTH(SDXOV)
- Begin DoDot:2
- +33 DO C
- SET @GBL@(CNT,0)="<DateOfLastOfficeVisit>"
- +34 ; need to write function to convert this date
- DO BL(GBL,.CNT,"Date",SDXOV)
- +35 DO C
- SET @GBL@(CNT,0)="</DateOfLastOfficeVisit>"
- End DoDot:2
- +36 IF $LENGTH(SDXCODE_SDXQUAL_SDXDESC_SDXOV)
- Begin DoDot:2
- +37 DO C
- SET @GBL@(CNT,0)="</Secondary>"
- End DoDot:2
- +38 DO C
- SET @GBL@(CNT,0)="</Diagnosis>"
- End DoDot:1
- +39 QUIT
- ODUE(GL,CNT,ERXIEN,MIEN) ;outbound drug use evaluation segment
- +1 NEW F,DUEIEN,DUEDAT,DUEIENS,SERVREA,PROFSERV,SVXRC
- +2 NEW CAC,CAQ,COAGDESC,CLINCODE,ACKREA
- +3 SET F=52.493116
- +4 IF '$ORDER(^PS(52.49,ERXIEN,311,MIEN,6,0))
- QUIT
- +5 SET DUEIEN=0
- FOR
- SET DUEIEN=$ORDER(^PS(52.49,ERXIEN,311,MIEN,6,DUEIEN))
- if 'DUEIEN
- QUIT
- Begin DoDot:1
- +6 KILL DUEDAT
- +7 SET DUEIENS=DUEIEN_","_MIEN_","_ERXIEN_","
- +8 DO GETS^DIQ(F,DUEIENS,"**","IE","DUEDAT")
- +9 SET SERVREA=$GET(DUEDAT(F,DUEIENS,.02,"E"))
- SET PROFSERV=$GET(DUEDAT(F,DUEIENS,.03,"E"))
- +10 SET SVXRC=$GET(DUEDAT(F,DUEIENS,.04,"E"))
- SET CAC=$GET(DUEDAT(F,DUEIENS,.05,"E"))
- +11 SET CAQ=$GET(DUEDAT(F,DUEIENS,.06,"E"))
- SET CLINCODE=$GET(DUEDAT(F,DUEIENS,.07,"I"))
- +12 SET COAGDESC=$GET(DUEDAT(F,DUEIENS,1,"E"))
- SET ACKREA=$GET(DUEDAT(F,DUEIENS,2,"E"))
- +13 DO C
- SET @GBL@(CNT,0)="<DrugUseEvaluation>"
- +14 DO BL(GBL,.CNT,"ServiceReasonCode",SERVREA)
- +15 DO BL(GBL,.CNT,"ProfessionalServiceCode",PROFSERV)
- +16 DO BL(GBL,.CNT,"ServiceResultCode",SVXRC)
- +17 IF $LENGTH(CAC_CAQ_COAGDESC)
- Begin DoDot:2
- +18 DO C
- SET @GBL@(CNT,0)="<CoAgent>"
- +19 DO C
- SET @GBL@(CNT,0)="<CoAgentCode>"
- +20 DO BL(GBL,.CNT,"Code",CAC)
- +21 DO BL(GBL,.CNT,"Qualifier",CAQ)
- +22 DO BL(GBL,.CNT,"Description",COAGDESC)
- +23 DO C
- SET @GBL@(CNT,0)="</CoAgentCode>"
- +24 DO C
- SET @GBL@(CNT,0)="</CoAgent>"
- End DoDot:2
- +25 DO BL(GBL,.CNT,"ClinicalSignificanceCode",CLINCODE)
- +26 DO BL(GBL,.CNT,"AcknowledgementReason",ACKREA)
- +27 DO C
- SET @GBL@(CNT,0)="</DrugUseEvaluation>"
- End DoDot:1
- +28 QUIT
- ODCS(GL,CNT,ERXIEN,MIEN) ;outbound drug coverage status segment
- +1 NEW F,DCSIEN,DCSDAT,DCSIENS,DCSTCODE
- +2 SET F=52.493117
- +3 SET DCSIEN=0
- FOR
- SET DCSIEN=$ORDER(^PS(52.49,ERXIEN,311,MIEN,7,DCSIEN))
- if 'DCSIEN
- QUIT
- Begin DoDot:1
- +4 KILL DCSDAT
- +5 SET DCSIENS=DCSIEN_","_MIEN_","_ERXIEN_","
- +6 DO GETS^DIQ(F,DCSIENS,"**","E","DCSDAT")
- +7 SET DCSTCODE=$GET(DCSDAT(F,DCSIENS,.02,"E"))
- +8 DO BL(GBL,.CNT,"DrugCoverageStatusCode",DCSTCODE)
- End DoDot:1
- +9 QUIT
- BL(GBL,CNT,TAG,VAR) ;
- +1 if VAR=""
- QUIT
- +2 DO C
- SET @GBL@(CNT,0)="<"_TAG_">"_$$SYMENC^MXMLUTL(VAR)_"</"_TAG_">"
- +3 QUIT
- C ;
- +1 SET CNT=$GET(CNT)+1
- +2 QUIT