Index: ccr/trunk/p/CCRMEDS6.m
===================================================================
--- ccr/trunk/p/CCRMEDS6.m	(revision 331)
+++ ccr/trunk/p/CCRMEDS6.m	(revision 332)
@@ -56,7 +56,9 @@
  ; The next lines, however many, are the med and the sig.
  ; I won't be using those because I have to get the sig parsed exactly.
- N J S J="" F  S J=$O(MEDS1(J)) Q:J=""  I $E(MEDS1(J),1,3)="~OP" S MEDCNT=MEDCNT+1 S MED(MEDCNT)=MEDS1(J)
+ N J S J="" F  S J=$O(MEDS1(J)) Q:J=""  I $E(MEDS1(J),1,3)="~OP" S MEDCNT=MEDCNT+1 S MEDS(MEDCNT)=MEDS1(J)
+ K MEDS1
  S MEDMAP=$NA(^TMP("GPLCCR",$J,"MEDMAP")) ; this is the variable map
  S @MEDMAP@(0)=0 ; Initial count of meds
+ S MEDCNT="" ; Initialize for $Order
  F  S MEDCNT=$O(MEDS(MEDCNT)) Q:MEDCNT=""  D  ; for each medication in the list
  . I DEBUG W "MEDCNT IS ",MEDCNT,!
@@ -77,6 +79,7 @@
  . ; Provider only provided in API as text, not DUZ.
  . ; We need to get DUZ from filman file 52 (Prescription)
- . ; Field 4;; IEN is Piece 1 of Meds stripped of trailing characters.
- . N RXIEN S RXIEN=+$P(MEDS(MEDCNT),U)
+ . ; Field 4; IEN is Piece 2 of Meds stripped of trailing characters.
+ . ; Note that I will use RXIEN several times later
+ . N RXIEN S RXIEN=+$P(MEDS(MEDCNT),U,2)
  . S @MAP@("MEDSOURCEACTORID")="ACTORPROVIDER_"_$$GET1^DIQ(52,RXIEN,4,"I")
  . S @MAP@("MEDPRODUCTNAMETEXT")=$P(MEDS(MEDCNT),U,3)
@@ -101,5 +104,5 @@
  . . S RXNIEN=$$FIND1^DIC(176.002,,,NDC,"NDC")
  . . S RXNORM=$$GET1^DIQ(176.002,RXNIEN,.01)
- . . S SRCIEN=$$FIND1^DIC(176.003,,"B","RXNORM")
+ . . S SRCIEN=$$FIND1^DIC(176.003,,,"RXNORM","B")
  . . S RXNNAME=$$GET1^DIQ(176.003,SRCIEN,6)
  . . S RXNVER=$$GET1^DIQ(176.003,SRCIEN,7)
@@ -113,5 +116,5 @@
  . ;
  . ; Brand name is 52 field 6.5
- . S @MAP@("MEDBRANDNAMETEXT")=$$GET1^DIQ(52,RXIEN,6.5,"I")
+ . S @MAP@("MEDBRANDNAMETEXT")=$$GET1^DIQ(52,RXIEN,6.5)
  . ;
  . ; Next I need Med Form (tab, cap etc), strength (250mg)
@@ -153,5 +156,5 @@
  . ; --- START OF DIRECTIONS ---
  . ; Sig data not in any API :-(  Oh yes, you can get the whole thing, but...
- . ; we want the compoenents.
+ . ; we want the components.
  . ; It's in multiple 113 in the Prescription File (52)
  . ; #.01 DOSAGE ORDERED [1F] 			"20"
@@ -201,5 +204,5 @@
  . . ; That's the same thing I am going to do.
  . . ; Search B index of 51.1 (Admin Schedule) with first abbr of schedule
- . . N SCHEDIEN=$$FIND^DIC(51.1,,,$P(SIGDATA(7)," "),"B") 
+ . . N SCHEDIEN=$$FIND1^DIC(51.1,,,$P(SIGDATA(7)," "),"B") 
  . . N INTERVAL S INTERVAL="" ; Default
  . . S:SCEHDIEN INTERVAL=$$GET1^DIQ(51.1,SCHEDIEN,2)
@@ -208,8 +211,13 @@
  . . ; Duration is 10M minutes, 10H hours, 10D for Days
  . . ; 10W for weeks, 10L for months. I smell $Select
- . . N DURUNIT S DURUNIT=$E(SIGDATA(4),$L(SIGDATA(4))) ; get last char
- . . N DURTXT S DURTXT=$S(DURUNIT="M":"Minutes",DURUNIT="H":"Hours",DURUNIT="D":"Days",DURUNIT="W":"Weeks",DURUNIT="L":"Months",1:"Days")
- . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDDURATIONVALUE")=+SIGDATA(4)
- . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDDURATIONUNIT")=DURTXT
+ . . ; But we don't need to do that if there isn't a duration
+ . . I +SIGDATA(4) D
+ . . . N DURUNIT S DURUNIT=$E(SIGDATA(4),$L(SIGDATA(4))) ; get last char
+ . . . N DURTXT S DURTXT=$S(DURUNIT="M":"Minutes",DURUNIT="H":"Hours",DURUNIT="D":"Days",DURUNIT="W":"Weeks",DURUNIT="L":"Months",1:"Days")
+ . . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDDURATIONVALUE")=+SIGDATA(4)
+ . . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDDURATIONUNIT")=DURTXT
+ . . E  D
+ . . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDDURATIONVALUE")=""
+ . . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDDURATIONUNIT")=""
  . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDPRNFLAG")=SIGDATA(4)["PRN"
  . . S @MAP@("M","DIRECTIONS",DIRCNT,"MEDPROBLEMOBJECTID")="" ; when avail
