| 1 | PSUOP1 ;BIR/CFL - PSU PBM Outpatient Pharmacy Data Collection for Version 6.0 ;25 AUG 1998 | 
|---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005 | 
|---|
| 3 | ; | 
|---|
| 4 | ;DBIAs | 
|---|
| 5 | ; Reference to ^PSRX( file #52 supported by DBIA(s) 465, 2512, 2513 | 
|---|
| 6 | EN ;Entry to data collection | 
|---|
| 7 | K ^TMP($J) | 
|---|
| 8 | D CMOPARY,ADLOOP | 
|---|
| 9 | Q | 
|---|
| 10 | ADLOOP ;Loop through the AD cross reference | 
|---|
| 11 | S X1=PSUSDT,X2=-31 | 
|---|
| 12 | D C^%DTC K %,%H,%T | 
|---|
| 13 | S PSUFDT=X | 
|---|
| 14 | F  S PSUFDT=$O(^PSRX("AD",PSUFDT)) Q:PSUFDT=""!(PSUFDT\1>PSUEDT)  D | 
|---|
| 15 | .S PSURXIEN="" | 
|---|
| 16 | .F  S PSURXIEN=$O(^PSRX("AD",PSUFDT,PSURXIEN)) Q:PSURXIEN=""  D | 
|---|
| 17 | ..S PSUFIL="" | 
|---|
| 18 | ..F  S PSUFIL=$O(^PSRX("AD",PSUFDT,PSURXIEN,PSUFIL)) Q:PSUFIL=""  D | 
|---|
| 19 | ...Q:'$D(^PSRX(PSURXIEN,0)) | 
|---|
| 20 | ...K PSUTYP,PSUOP | 
|---|
| 21 | ...S PSUFLN=PSUFIL | 
|---|
| 22 | ...D COMVAR | 
|---|
| 23 | ...S PSUCMOP="N" | 
|---|
| 24 | ...; | 
|---|
| 25 | ...; check for CMOP data | 
|---|
| 26 | ...I $D(^PSRX(PSURXIEN,4,0)) D ARLOOP | 
|---|
| 27 | ...I PSUCMOP="Y" Q  ; record filed in subroutine | 
|---|
| 28 | ...I (PSUFDT\1<PSUSDT) Q | 
|---|
| 29 | ...S PSUTYP=$S(PSUFLN=0:"N",1:"R") | 
|---|
| 30 | ...D GETDATA | 
|---|
| 31 | ...D SETREC^PSUOP3 | 
|---|
| 32 | ..I $D(^PSRX(PSURXIEN,"P",0)),'$D(^XTMP(PSUOPSUB,"RXIEN",PSURXIEN)) D ADPLOOP | 
|---|
| 33 | K ^TMP($J) | 
|---|
| 34 | Q | 
|---|
| 35 | ARLOOP ;Check to see if CMOP Data exists for the reporting period | 
|---|
| 36 | I $D(^TMP($J,PSURXIEN,PSUFLN)) D | 
|---|
| 37 | .S PSUCMOP="Y" | 
|---|
| 38 | .S PSUTYP=$S(PSUFLN=0:"N",1:"R") | 
|---|
| 39 | .D GETDATA | 
|---|
| 40 | .I (PSURELDT="")!(PSURELDT<PSUSDT)!(PSURELDT>PSUEDT) Q | 
|---|
| 41 | .D SETREC^PSUOP3 | 
|---|
| 42 | Q | 
|---|
| 43 | ADPLOOP ;Get data for partial fills | 
|---|
| 44 | S PSUPFN=0 | 
|---|
| 45 | F  S PSUPFN=$O(^PSRX(PSURXIEN,"P",PSUPFN)) Q:'PSUPFN  D | 
|---|
| 46 | .S PSUCMOP="N" | 
|---|
| 47 | .D COMVAR | 
|---|
| 48 | .S PSUTYP="P" | 
|---|
| 49 | .D GETPART | 
|---|
| 50 | .Q:((PSUFD<PSUSDT)!(PSUFD>PSUEDT)) | 
|---|
| 51 | .D SETREC^PSUOP3 | 
|---|
| 52 | Q | 
|---|
| 53 | GETDATA ;Get the data for New Fills, Refills and Partial fills | 
|---|
| 54 | I PSUTYP="N" D | 
|---|
| 55 | .S PSUFD=PSUOP(22) | 
|---|
| 56 | .S PSUDS=PSUOP(8) | 
|---|
| 57 | .S PSUQTY=+PSUOP(7) | 
|---|
| 58 | .S PSUDRCT=PSUOP(17) | 
|---|
| 59 | .S PSURELDT=PSUOP(31) | 
|---|
| 60 | .I PSURELDT'="" S PSURELDT=PSURELDT\1 | 
|---|
| 61 | .S PSUPRID=PSUOP(4) | 
|---|
| 62 | .S PSUMW=PSUOP(11) | 
|---|
| 63 | .S PSUDIVP=PSUOP(20) | 
|---|
| 64 | .S PSUNDC="" | 
|---|
| 65 | .I PSUCMOP="Y" D | 
|---|
| 66 | ..S PSUNDC=$$VALI^PSUTL(52.01,"PSURXIEN,PSUFLN",4) | 
|---|
| 67 | .S PSUNDC=$S(PSUNDC="":PSUOP(27),PSUNDC="":PSUDRUG(31),1:"No NDC") | 
|---|
| 68 | .D PROVDR^PSUOP3 | 
|---|
| 69 | ;Get data for Refills | 
|---|
| 70 | I PSUTYP="R" D  K REC | 
|---|
| 71 | .D GETS^PSUTL(52.1,"PSURXIEN,PSUFLN",".01;1;1.1;1.2;2;8;15;17","PSUREFIL","I") | 
|---|
| 72 | .D MOVEI^PSUTL("PSUREFIL") | 
|---|
| 73 | .S PSUFD=PSUREFIL(.01) | 
|---|
| 74 | .S PSUPRID=PSUREFIL(15) | 
|---|
| 75 | .S PSUMW=PSUREFIL(2) | 
|---|
| 76 | .S PSUDIVP=PSUREFIL(8) | 
|---|
| 77 | .S PSUDS=PSUREFIL(1.1) | 
|---|
| 78 | .S PSUQTY=+PSUREFIL(1) | 
|---|
| 79 | .S PSUDRCT=PSUREFIL(1.2) | 
|---|
| 80 | .S PSURELDT=PSUREFIL(17) | 
|---|
| 81 | .I PSURELDT'="" S PSURELDT=PSURELDT\1 | 
|---|
| 82 | .S PSURXP=PSUOP(3) | 
|---|
| 83 | .S PSUDR=PSUOP(6) | 
|---|
| 84 | .S PSUNDC="" | 
|---|
| 85 | .I PSUCMOP="Y" D | 
|---|
| 86 | ..S PSUNDC=$$VALI^PSUTL(52.01,"PSURXIEN,PSUFLN",4) | 
|---|
| 87 | .I PSUNDC="" S PSUNDC=$$VALI^PSUTL(52.1,"PSURXIEN,PSUFLN",11) | 
|---|
| 88 | .I PSUNDC="" S PSUNDC=$S(PSUDRUG(31)'="":PSUDRUG(31),1:"No NDC") | 
|---|
| 89 | .D PROVDR^PSUOP3 | 
|---|
| 90 | Q | 
|---|
| 91 | GETPART ;Get data for Partial Fills | 
|---|
| 92 | K PSUPART | 
|---|
| 93 | D GETS^PSUTL(52.2,"PSURXIEN,PSUPFN",".01;.02;.04;.041;.042;.09;6;8","PSUPART","I") | 
|---|
| 94 | D MOVEI^PSUTL("PSUPART") | 
|---|
| 95 | S PSUFD=PSUPART(.01) | 
|---|
| 96 | S PSUPRID=PSUPART(6) | 
|---|
| 97 | S PSUMW=PSUPART(.02) | 
|---|
| 98 | S PSUDIVP=PSUPART(.09) | 
|---|
| 99 | S PSUDS=PSUPART(.041) | 
|---|
| 100 | S PSUQTY=+PSUPART(.04) | 
|---|
| 101 | S PSUDRCT=PSUPART(.042) | 
|---|
| 102 | S PSURELDT=PSUPART(8) | 
|---|
| 103 | I PSURELDT'="" S PSURELDT=PSURELDT\1 | 
|---|
| 104 | S PSUNDC=$$VALI^PSUTL(52.2,"PSURXIEN,PSUFLN",1) | 
|---|
| 105 | I PSUNDC="" S PSUNDC=$S(PSUDRUG(31)'="":PSUDRUG(31),1:"No NDC") | 
|---|
| 106 | D PROVDR^PSUOP3  ;Get shared variables | 
|---|
| 107 | Q | 
|---|
| 108 | COMVAR ;Get the common variables | 
|---|
| 109 | D GETS^PSUTL(52,PSURXIEN,".01;2;3;4;6;7;8;11;17;20;22;27;31","PSUOP","I") | 
|---|
| 110 | D MOVEI^PSUTL("PSUOP") | 
|---|
| 111 | S PSURXN=PSUOP(.01) | 
|---|
| 112 | S DFN=PSUOP(2) D PID^VADPT | 
|---|
| 113 | S PSUSSN=$TR(VA("PID"),"^-","") | 
|---|
| 114 | S PSUWPC="" ;Patient counseling only exists for version 7.0 | 
|---|
| 115 | S PSUDR=PSUOP(6) | 
|---|
| 116 | S PSURXP=PSUOP(3) | 
|---|
| 117 | ;S PSUSIG=PSUOP(10) | 
|---|
| 118 | D GETDRUG^PSUOP3 | 
|---|
| 119 | Q | 
|---|
| 120 | CMOPARY ;Loop through the "AR" cross reference and build CMOP array | 
|---|
| 121 | S X1=PSUSDT,X2=-1 | 
|---|
| 122 | D C^%DTC K %,%H,%T | 
|---|
| 123 | S PSUCDT=X | 
|---|
| 124 | F  S PSUCDT=$O(^PSRX("AR",PSUCDT)) Q:'PSUCDT  D | 
|---|
| 125 | .S PSUCRX="" | 
|---|
| 126 | .F  S PSUCRX=$O(^PSRX("AR",PSUCDT,PSUCRX)) Q:PSUCRX=""  D | 
|---|
| 127 | ..S PSUCLN="" | 
|---|
| 128 | ..F  S PSUCLN=$O(^PSRX("AR",PSUCDT,PSUCRX,PSUCLN)) Q:PSUCLN=""  D | 
|---|
| 129 | ...S ^TMP($J,PSUCRX,PSUCLN)="" | 
|---|
| 130 | Q | 
|---|