Perhaps we need to re-visit the decision of supporting Person-less Providers.

Can the reason for doing this essentially be summed up as "we don't necessarily know the genders and birthdates of every provider that we might want to upload to our system, and these are required on Person"? Are there other reasons that led to this decision that I'm not aware of?

If that's the extent of it, perhaps we'd be better off loosening this restriction on Person and enforcing that Person be non-null on Provider. We certainly have situations in our system (migration of Patient data from legacy systems like EPI Info, for example), where birthdate and gender information of Patients is incomplete and we'd want this restriction loosened anyway in order to be able to properly add this data in without putting hacks in place...

Mike



On 04/02/2012 06:21 PM, Mark Goodrich wrote:

Instinctively, it would seem to be good idea to extend relationships to allow Provider-to-Patient relationships instead of just a Person-to-Person relationships. But if we do go this route, doesn’t it seem like Provider should be data, not metadata?

As a way to logically wrap my head around the issue when working on the Provider Management module, I defined Provider (from the perspective of the module) as “a Person with one or more Provider metadata objects associated with them”. This, of course, isn’t entirely right, because from an OpenMRS perspective you can have a Provider that isn’t associated with a person, but it seems to work for the module because the module is meant to manage **people** who are providers.

Mark

*From:*[email protected] [mailto:[email protected]] *On Behalf Of *Darius Jazayeri
*Sent:* Monday, April 02, 2012 5:34 PM
*To:* [email protected]
*Subject:* Re: [OPENMRS-DEV] ProviderAttributes

@Mark, it was designed as a way to "add attributes to things." E.g. having your module create a ProviderAttributeType whose attribute value represents a providers role is perfectly fine, in the sense that a provider's specific role is an attribute of the provider.

That said, if you want to enforce referential integrity, or simplify the hql/sql to find providers with a given role, you might want to use an FK'd DB field instead.

@All, it occurs to me that as we introduce providers (and we allow multiple providers for a person, as well as person-less providers), and as we plan to someday maybe support having multiple patient rows for a person, our relationship table is now lacking.

Really we should be able to support saying that a specific row in the /provider/ table has a relationship to a patient, not force Mark to do what he's doing here, and have to put a relationship on the provider's underlying person...

-Darius

On Thu, Mar 29, 2012 at 7:04 AM, Mark Goodrich <[email protected] <mailto:[email protected]>> wrote:

Roger & Burke—

Thanks for the input…

Roger summed up my wariness pretty well… do people agree that the “enriched attribute model” was designed as a way to handle structural relationships? Was the attribute model designed to facilitate storing data in a more RESTful manner than a structural relationship?

One downside of doing things this way is that the “Provider Role” provider attribute type has to be hardcoded into the Provider Management module (ie, I’ve got a constant PROVIDER_ROLE_ATTRIBUTE_TYPE_UUID)

@Roger—your suggestion of having “relationships supported” and “relationships supervised” stored as provider attributes is interesting—the one-click selection could probably be maintained via the API. I don’t know if I I’m going to refactor it at this point, but it is worth considering.

As for the argument of a one-to-one vs a many-to-one relationship between provider and person, I don’t have a strong preference either way. The API I’m creating assumes a many-to-one relationship, but I don’t think this is a core part of the way I’m doing things. In my model a provider can only have one provider role, and so if a person has multiple roles, they would have an associated provider object for each role—but I don’t think switching this in the future so that the person has only one provider, but provider is allowed to have multiple roles would be terribly difficult.

One perhaps controversial thing that I’m doing in the module is that I’m hiding the Provider object behind the API. In terms of what the API exposes to a consumer, a “provider” is defined as “a Person with one or more Providers associated with it”. The reason for this is that the Provider Management module deals primarily with relationships (provider/patient relationships and supervisor/provider relationships) and Relationships are defined on the person-to-person level. (For instance, the API method getProvidersForPatient(Patient patient) has a return type of List<Person>, not List<Provider>). This could be considered the “wrong” approach since it ignores personless Providers, but the Provider Management module is specifically designed to manage **people** who are providers. The fact that Provider is metadata, as opposed to data, made me more comfortable with this approach. The alternative approach would be to add the ability to handle Provider-to-Person relationships.

Take care,

Mark

*From:*[email protected] <mailto:[email protected]> [mailto:[email protected] <mailto:[email protected]>] *On Behalf Of *Friedman, Roger (CDC/CGH/DGHA) (CTR)
*Sent:* Thursday, March 29, 2012 8:43 AM


*To:* [email protected] <mailto:[email protected]>
*Subject:* Re: [OPENMRS-DEV] ProviderAttributes

I understand your wariness about putting a structural relationship into a provider attribute which as Burke says is a way of extending the provider table. However, given our newly enriched attribute model and the benefits of RESTful thinking, I would give each provider 3 attributes: "role", which serves as a category for selection and reporting; "relationships supported", a multi-value attribute; and "relationships supervised", a multi-value attribute. Admittedly, this removes the one-click selection of multiple relationships supported and supervised, but on the other hand inhibits role fragmentation consequent to special cases (provider A can do everything that a role X can except for supervising relationship N). If you want to restore one-click selection, I would do something like relationship type tags (and it turns out that tags are merely a special case of attribute, so you might as well do relationship type attribute).

Burke, despite your explanations, I still don't see the need for non-unique providers, and especially the need for non-unique patients. The base function of the provider table is to provide the ability to identify a provider who is not a person, and to collect attributes which are important for describing providers. If a provider works at multiple institutions or has multiple specialties, that should not result in "aliased" providers. Please take a look at how those relationships are handled in the HR module.

Likewise for patients, they already can have location-specific IDs, they can receive services at any location. Having separate patient records for each facility where a patient receives services is no different than having separate patient records for the outpatient clinic, the x-ray room, the optometry room, etc. Even with respect to privacy, locations within a facility (e.g. HIV clinic, psychiatric ward) might be at least as sensitive as different facilities. What's different about being a patient at more than one facility is that the facilities might keep different sets of patient attributes; this is a place for patient attribute type tags, as suggested above.

*From:*[email protected] <mailto:[email protected]> [mailto:[email protected]] <mailto:[mailto:[email protected]]> *On Behalf Of *Burke Mamlin
*Sent:* Wednesday, March 28, 2012 9:17 PM
*To:* [email protected] <mailto:[email protected]>
*Subject:* Re: [OPENMRS-DEV] ProviderAttributes

Attributes are meant to serve as local (implementation-specific) extensions to tables and can contain simple metadata or links to other objects (think of them as another column added to the core table). For example, a person attribute could store a person's primary clinic as a Location reference.

Don't think of Provider as a unique person. A provider represents a person as a provider. Just as a single person could have multiple user accounts, it's possible for a single person to have multiple provider entries (e.g., a doctor who practices in more than one specialty, a doctor registered at through two different institutions).

<digression>If we ever end up needing to support multiple institutions within OpenMRS in the future, then patient could go the same direction (e.g., a person allowed to have a patient entry for each institution where they've been a patient). If that ever happens, the API would need to do the heavy lifting to present patients across institutions as a single patient.</digression>

-Burke

On Wed, Mar 28, 2012 at 5:45 PM, Mark Goodrich <[email protected] <mailto:[email protected]>> wrote:

Hello all—

I asked this question a couple of weeks ago on this list, but Mike & I were debating it yesterday so I wanted to follow up with a more detailed version of the question…

I’m working on a new Provider Management module that we are planning to use to manage community health workers. To do this, I’ve created a new Provider Role domain object that has a many-to-many relationship to RelationshipType as well as other Provider Roles:

public class ProviderRole extends BaseOpenmrsMetadata implements Serializable {

    private Integer providerRoleId;

    // the provider/patient relationships this role can support

    private Set<RelationshipType> relationshipTypes;

    // the provider roles this provider role can supervise

    private Set<ProviderRole> superviseeProviderRoles;

etc …

A Provider Role has many-to-one relationship with Provider, and so the obvious solution to implement this would be to create a foreign key mapping table between Provider and Provider Role, but I thought it might be worth considering storing Provider Role as a Provider Attribute instead… so I asked the list, and the general consensus, I believe, was to use Provider Attribute.

I’m second guessing my decision a bit now… are Provider Attributes (and Attributes in general) really meant as a way to create a link between two core domain objects, or are they only intended for storing more basic information like provider health center, provider home town, etc?

Thanks,

Mark

------------------------------------------------------------------------

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