Thought I'd chime in since I have some background with HL7...

Your plan seems reasonable, but I had a few additional suggestions.
1) What happened to attributes?  Could we add one more case:
Assigning Authority (piece 9) = PROVIDER.ATTR
ID Type (piece 13) = <Attribute ID>

2) Minor point, but the difference between PROVIDER.ID and PROVIDER.IDENTIFIER could get confusing. Perhaps consider changing PROVIDER.ID to PROVIDER.PK?

3) I think it would be nice to be able to configure the values we'd expect in the assigning authority field.

Also, does OpenMRS have copy of the HL7 specs? I didn't realize they cost anything, but wow - $700?

I wouldn't mind helping with some of this work, if you have a ticket that would be good for someone with some HL7 knowledge, but new to OpenMRS.

-Spencer


On 3/1/2012 1:33 PM, Darius Jazayeri wrote:
Burke, Ben, and I just discussed this, and here's how we want to treat the assigning authority field.

We want to support the following options:

  * Assigning authority = null
      o legacy behavior: lookup by Person.personId, then find the
        relevant provider
      o if not found, throw an error, don't try to find a provider
  * Assigning authority = ^PROVIDER.ID <http://PROVIDER.ID>^L
      o (this means Universal Id = "PROVIDER.ID <http://PROVIDER.ID>"
        and Universal Id Type = "L")
      o Lookup provider by primary key id.
  * Assigning authority = ^PROVIDER.IDENTIFIER^L
      o (this means Universal Id = "PROVIDER.IDENTIFIER" and Universal
        Id Type = "L")
      o Lookup provider by identifier
  * Assigning authority = ^PROVIDER.UUID^L
      o (this means Universal Id = "PROVIDER.UUID" and Universal Id
        Type = "L")
      o Lookup provider by uuid

-Darius

On Thu, Mar 1, 2012 at 11:34 AM, Wyclif Luyima <[email protected] <mailto:[email protected]>> wrote:

    Darius is spot on, we can use the 9th component of the XCN. Sorry
    for my limited HL7/HAPI knowledge.
    So i guess everyone agrees that we take this route.

    Wyclif


    On Thu, Mar 1, 2012 at 2:03 PM, Darius Jazayeri
    <[email protected] <mailto:djazayeri%[email protected]>> wrote:

        According to the HL7 2.5 spec, PV1's Attending Doctor is an
        XCN (which means " extended composite ID number and name for
        persons").

        And indeed our code treats this as an XCN:
             XCN hl7Provider = pv1.getAttendingDoctor(0);

        And XCN has "Assigning Authority" as its 9th component. (Its
        datatype is HD = hierarchic designator.)

        So, we really *should* be able to use this field.

        -Darius

        On Thu, Mar 1, 2012 at 10:52 AM, Wyclif Luyima
        <[email protected] <mailto:[email protected]>> wrote:

            We certainly need to figure out a way to determine if the
            value is an identifier Vs providerId vs personId, but from
            my recent attempts, assigning authority is not supported
            for XCN so we might not be able to use it for this purpose.
            If we can't seem to get around this, how about if we say
            the id should be prefixed with what describes it  i.e
            identifier/personId/providerId, if the prefix doesn't
            exist then it is assumed to be a personId to support
            messages from old legacy code.

            Wyclif


            On Thu, Mar 1, 2012 at 1:24 PM, Ben Wolfe <[email protected]
            <mailto:[email protected]>> wrote:

                Is the authority allowed to be any text?  Or should be
                preface this with a 99 or some other openmrs-specific
                string?

                Wyclif, what if a provider has an identifier that is
                the same as an existing person_id ?  That current
                implementation would fail.

                Is this a bug in HAPI that is fixed in a later
                version?  IIRC, we're using a hapi version from 3-4
                years ago.

                Ben


                On Thu, Mar 1, 2012 at 12:55 PM, Wyclif Luyima
                <[email protected] <mailto:[email protected]>> wrote:

                    I tried reading in the assigning authority while
                    working on TRUNK-2893 and noticed that the library
                    we are using to parse the HL7, in the case of XCNs
                     it interpretes what we expect to be the assigning
                    authority as the given name, basically it always
                    returns null when you try to get the assigning
                    authority for XCN,  it is for the CE that it gets
                    the assigning authority.

                    My view is and this is what i implemented(we can
                    change it) in the initial commit for TRUNK-2893,
                    is to assume it is a personId or provider
                     identifier, i.e for the ID number you can specify
                    the personId or provider identifier and this will
                    still take care of HL7 messages from old legacy
                    code gracefully. So the Orur01 handler first
                    checks for a provider associated to a person with
                    a personId matching the passed in value if it is a
                    number otherwise it defaults to looking up one
                    with a matching provider identifier.

                    Wyclif


                    On Thu, Mar 1, 2012 at 11:31 AM, Darius Jazayeri
                    <[email protected] <mailto:[email protected]>>
                    wrote:

                        Hi All,

                        Per TRUNK-3108
                        <https://tickets.openmrs.org/browse/TRUNK-3108>,
                        incorrectly merged into TRUNK-2843
                        <https://tickets.openmrs.org/browse/TRUNK-2843>:

                        In 1.9 we've added a Provider object, but our
                        ORUR01Handler class has not yet been updated
                        to take this into account. Currently, the
                        formentry and xforms modules pass a value for
                        a PV1's provider field like "1^Super User
                        (1-8)", and we interpret the first number as a
                        person_id (pk of the person table), and ignore
                        the name. This is now problematic, because not
                        every person necessarily has a provider
                        associated with them, and some may have more
                        than one.

                        The correct new behavior seems like it would
                        be to instead interpret the first number as a
                        provider_id (pk of the provider table). The
                        downside of this is that R01 messages produced
                        by all existing code would give you the wrong
                        providers.

                        A slightly-hackier, but backwards-compatible
                        way would be to let the authority field of the
                        XCN tell how to interpret the value passed in:

                          * no authority : "legacy mode". Treat as
                            person id (pk of person table)
                          * authority = PROV_ID : Treat as provider id
                            (pk of provider table)
                          * authority = PROV_IDENTIFIER : Treat as
                            provider.identifier (user-specified
                            identifier for the provider)
                          * authority = PROV_ATTR_3 : Look for a
                            provider who has an attribute whose
                            providerAttributeType is 3, and whose
                            value is what's given

                        Thoughts? Alternatives?

                        -Darius
                        
------------------------------------------------------------------------
                        Click here to unsubscribe
                        
<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l>
from OpenMRS Developers' mailing list

                    
------------------------------------------------------------------------
                    Click here to unsubscribe
                    
<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l>
                    from OpenMRS Developers' mailing list


                
------------------------------------------------------------------------
                Click here to unsubscribe
                
<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l>
                from OpenMRS Developers' mailing list


            
------------------------------------------------------------------------
            Click here to unsubscribe
            <mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l>
            from OpenMRS Developers' mailing list


        ------------------------------------------------------------------------
        Click here to unsubscribe
        <mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l>
        from OpenMRS Developers' mailing list


    ------------------------------------------------------------------------
    Click here to unsubscribe
    <mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> from
    OpenMRS Developers' mailing list


------------------------------------------------------------------------
Click here to unsubscribe <mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> from OpenMRS Developers' mailing list

_________________________________________

To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to 
[email protected] with "SIGNOFF openmrs-devel-l" in the  body (not 
the subject) of your e-mail.

[mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l]

Reply via email to