FHIR Chat · Patient age · implementers

Stream: implementers

Topic: Patient age


view this post on Zulip Brett Esler (Dec 07 2016 at 00:29):

I have been in some discussions around a concept of storing 'age' as a proxy for date of birth for Patient (as an extension) - this is to handle uncertain and approximations to date of birth e.g.. around 70 years old; in their 50s. Has anyone addressed this before? It seems not at all useful as a quantity by itself; would need to record when the age was asserted.

view this post on Zulip Brian Postlethwaite (Dec 07 2016 at 01:54):

I thought that was the purpose of being able to state that the birth date was "1950", maybe an extension that covers the certainty of the values. Some people know that there birthday is 20th January, but it could have been 1923, 24 or 25! As records were lost at the time (more unlikely now)

view this post on Zulip Stephen Royce (Dec 07 2016 at 02:08):

Does that mean it's legal in FHIR to use

<birthDate value="1950" />

?

view this post on Zulip Grahame Grieve (Dec 07 2016 at 02:08):

yes

view this post on Zulip Stephen Royce (Dec 07 2016 at 02:09):

Oh right. I thought date had to be an xs:date.

view this post on Zulip Stephen Royce (Dec 07 2016 at 02:11):

Perhaps I should read the spec first:
"union of xs:date, xs:gYearMonth, xs:gYear"

view this post on Zulip Grahame Grieve (Dec 07 2016 at 02:13):

y

view this post on Zulip Stephen Royce (Dec 07 2016 at 03:08):

How would you handle the situation that @Brian Postlethwaite raised where I know that I was born on January 3, say, but I'm not sure what the year was? Do we just pick a year that's close and assume that's good enough? How would that work in a data matching scenario because a different system may have picked a different year?

view this post on Zulip Brian Postlethwaite (Dec 07 2016 at 03:19):

<birthDate value="1924-01-03">
<extension url="...date-certainty">
<valueCode value="EAA" />
</extension>
</birthDate>
This is used in quite a few Australian govt minimum datasets (MDS) - VINAH, SHS, SCTT, PCEHR, CWH.
Those 3 letters are a code where each letter designates the level of accuracy of that component (A = Accurate, E=Estimated, U=Unknown) in Day, Month, Year sequence (but if we were to do this as an international standard, I'd probably recommend going in YMD order)

view this post on Zulip Stephen Royce (Dec 07 2016 at 04:06):

We've already added exactly this extension to our own (internal, unpublished) patient model. But I was wondering if there was a more generic -- i.e. non-Australian-specific -- solution. Also, the codes here conflate 3 separate pieces of information and become difficult to use in a semantic context. (They feel _very_ 1980s to me!) Furthermore, now that you don't have to state day or month, the use of a 3-character code would not always be appropriate.

view this post on Zulip Grahame Grieve (Dec 07 2016 at 05:12):

no there is not a more generic extension. I've neve seen anything like that outside AS4590 and it's impacted areas

view this post on Zulip Michelle (Moseman) Miller (Dec 07 2016 at 14:42):

By way of another pattern to consider, FamilyMemberHistory has an age choice of data types (Age, Range, or String) with a corresponding estimatedAge boolean. This allows for saying "estimated 70 years old" or "estimated 50-60 years old"

view this post on Zulip Grahame Grieve (Dec 07 2016 at 19:06):

...which is age at death. The tricky thing about this is it's 'age at a date'

view this post on Zulip Michelle (Moseman) Miller (Dec 07 2016 at 21:31):

I get your point, but I would clarify that the FamilyMemberHistory.age isn't defined as age at death, but instead defined as "The age of the relative at the time the family member history is recorded" with another attribute to indicate when recorded -- FamilyMemberHistory.date

view this post on Zulip Michelle (Moseman) Miller (Dec 07 2016 at 21:32):

There are other attributes for FamilyMemberHistory.deceasedAge or FamilyMemberHistory.deceasedRange, too.

view this post on Zulip Grahame Grieve (Dec 07 2016 at 21:32):

duh I knew I should've checked that

view this post on Zulip Abbie Watson (Dec 08 2016 at 18:04):

The French philosopher Jean Baudrillard has a relevant model in Simulacra et Simulation. He discusses the four classifications of images - originals, copies, copies of copies, and simulacra; which is used within some Radiology departments as a model for describing reference vs diagnostic quality images vs synthetic avatars and simulacra such as the Talairach-Tournoux Brain Atlas. The AEU model of Accurate, Estimated, Unknown is roughly similar in purpose... estimating the knowability and quality of the purported knowledge.

Michelle's point about "the age of the relative at the time the family member history is recorded" is similar in quality to the problem of a Radiology department scanning an analog radiograph with a flatbed digital scanner.

It's an interesting trend, and will only grow with the advent of wearable biometric devices. Is the quality of a weight measurement at home the same as at a hospital? Is there a difference between a calibrated device taking the measurement, and an individual copying that data in by hand? I haven't seen any coding or standard besides Baudrillard's model (and now the Australian AS4590 standard, thank you!), but there seems to be a growing need for such a model.

view this post on Zulip Bela Bara (Nov 03 2021 at 12:17):

I am looking for a solution to include the Patient´s age to a document Bundle (R4), but did not find any explicit representation of the age. The document itself is a snapshot of an assessment, which has a Patient resource. After reading the FHIR specs and FHIR chat i´ve found two possible ways. (Samples below)

  • Add an Observation to the Bundle entries with a specific Loinc-code and stores the age in the value field. The observation would have the reference to the patient in the subject field.
  • Add an extension to the Patient resource using the valueAge field

Observation

{
  "resourceType": "Observation",
  "status": "final",
  "category": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "survey",
          "display": "Survey"
        }
      ]
    }
  ],
  "code": {
    "coding": [
      {
        "system": "https://loinc.org/",
        "code": "30525-5",
        "display": "Age"
      }
    ]
  },
  "subject": {
    "reference": "Patient/af224d54-281e-4dcc-b5ed-f665c253d302"
  },
  "valueQuantity": {
    "value": 10,
    "unit": "years",
    "system": "http://unitsofmeasure.org",
    "code": "a"
  }
}

Extension for age

{
  "resourceType": "Patient",
  "id": "d8badb6f-ae3d-425d-b679-968c7b18bde7",
  "extension": [
    {
      "url": "http://example.com/fhir/StructureDefinition/patient-age",
      "valueAge": {
        "value": 50
      }
    }
  ]
  ...
}

Which variant is the preferred one to include the patient´s age? what are the pros/cons?

view this post on Zulip Benjamin Green (Nov 03 2021 at 12:55):

I tend to suggest age is an observation on a patient that is true at a particular instant in time.

Your observation almost looks right but you ought to add the Observation.effective[x] field in there that says when this is true. Age makes no sense without the context of when.

In terms of Patient, I wouldn't ever usually suggest putting too much on there that is likely to change regularly or predictably. I think really carefully about using address within Patient, especially if it being used to give context to other data. Age would be a definite no for me in almost every case.

view this post on Zulip Patrick Werner (Nov 03 2021 at 12:58):

+1 for Observation. The Extension doesn't capture the date of the age assessment.

view this post on Zulip Yunwei Wang (Nov 03 2021 at 13:47):

Just for curiosity, age can be calculated from the timestamp of the Bundle (or Composition) and Patient's birthday. What is the reason to have a standalone age observation in a bundle?

view this post on Zulip Lloyd McKenzie (Nov 03 2021 at 14:02):

Another option for you is that if you want to express a date as "how old was the patient when", you can use the relative-date extension with a base event of 'birth'.

view this post on Zulip Bela Bara (Nov 03 2021 at 15:39):

Patrick Werner said:

+1 for Observation. The Extension doesn't capture the date of the age assessment.

Would you have the same opinion, if the Extension recorded the date?

{
  "resourceType": "Patient",
  "id": "59150120-b184-4d21-9e73-2123af083ccc",
  "extension": [
    {
      "url": "http://example.com/fhir/StructureDefinition/patient-age",
      "extension": [
        {
          "url": "age",
          "valueAge": {
            "value": 50
          }
        },
        {
          "url": "recordedDate",
          "valueDate": "2021-11-03"
        }
      ]
    }
  ]
}

view this post on Zulip Bela Bara (Nov 03 2021 at 15:40):

Yunwei Wang said:

Just for curiosity, age can be calculated from the timestamp of the Bundle (or Composition) and Patient's birthday. What is the reason to have a standalone age observation in a bundle?

Due to some privacy constraints the birthday is not accessible, only the age is known.

view this post on Zulip Daniel Venton (Nov 03 2021 at 15:47):

By doing it this way, the age extension is not part of the resource. The server would be responsible for calculating and injecting the extension, at the point when the resource is served. Essentially changing the contents of the resource but not updating the resource.

An observation model, the resource would never change. The data recorded is part of the resource.

Either of these methods can expose the patients birth date however. I query for the Patient resource on Jan 3 and get age 50. I query again on Jan 4 and the response is 51. What is the patient birthdate?

Also either method, you need to return the UOM as well. 50 yr/mo/day/hr/min

view this post on Zulip Gino Canessa (Nov 03 2021 at 15:58):

I would lean towards an extension present on each individual resource in the bundle that reflects the patient's age at the time relevant to that resource (e.g., either Lloyd's suggestion of relative-date to birth or something similar).

To continue the example above, it's fine that you are querying on Jan 3 and Jan 4, and the patient is currently 50 or 51. But an Observation in the bundle was made when the patient was 50 (or 48, etc.), regardless of the patients current age.

Putting 'current age' over old data can cause patient safety issues (e.g., the doc thought they were looking at something from this year, but it was from 5 years ago).

view this post on Zulip Daniel Venton (Nov 03 2021 at 16:02):

If the resource is "Patient" what is the "patients age relevant to the resource".
If the requirement is to keep the patients birthdate private, then providing a means to derive that birthdate doesn't seem to meet the requirement.

Yes, an age extension on an Observation would be the age at the time of the Observation. An age on a Condition would be age at diagnosis, age at recorded, age at last occurrence or age at resolution?

view this post on Zulip Gino Canessa (Nov 03 2021 at 16:08):

For the patient record, probably the patient's current age.

I am just noting that if you have a relevant Observation in a bundle that was made when a patient was 48 and you hide dates, you need to make it clear that the observation was taken when the patient was 48, even if they are currently 50.

Your question about which age is represented is exactly my point. The context of the age calculation needs to be specific. If there is only one in a bundle (e.g., current age), and that is displayed instead of DOB, it is prone to errors.

view this post on Zulip Bela Bara (Nov 03 2021 at 16:17):

Recalculation of the patient´s age is probably not an issue, because the document Bundle is a snapshot of an assessment, therefore the resources/extensions will not be changed later on. Though, it has to be clear, what is the relative date to the age calculation.

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:23):

Just for capturing the Age should I use an entire Observation resource?

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:24):

Instead Identifier can have an option to make value as number or string right? That way we can add age as number inside patient identifier & make it query using < less than or greater than > ?

view this post on Zulip Gino Canessa (Feb 28 2022 at 18:26):

What would be the meaning of an Age in the Patient though? First seen, last updated, current? Age can be calculated by looking at the Patient's Birth Date quite easily and does not have those errors.

view this post on Zulip Bret H (Feb 28 2022 at 18:27):

Gino Canessa said:

For the patient record, probably the patient's current age.

I am just noting that if you have a relevant Observation in a bundle that was made when a patient was 48 and you hide dates, you need to make it clear that the observation was taken when the patient was 48, even if they are currently 50.

Your question about which age is represented is exactly my point. The context of the age calculation needs to be specific. If there is only one in a bundle (e.g., current age), and that is displayed instead of DOB, it is prone to errors.

Would the Observation.effective date be helpful as part of the record?

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:29):

@Gino Canessa You're absolutely correct. But I don't have any date of birth in my source data. I have only age. I dont want to subtract age number with current year and make date of birth as YYYY format. Because as a data, its a misrepresentation.

  • FHIR definition of observation is ambiguous "simple assertions made about a patient". "I'm a male" is also an simple assertion about me. Then Why Gender is in Patient resource when Age is not.

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:34):

@Bret H I did not understand why Age has to be in observation in first place?. I agree Observation make sense. But why? .

view this post on Zulip Gino Canessa (Feb 28 2022 at 18:37):

Yes, data is messy. I would probably suggest picking a day for the DOB (e.g., January 1st, date of import, whatever), then marking the date with an extension to flag that it was done that way.

It would be no less accurate than Age in the general case, and workflow could be used to address it (e.g., ask the patient their actual birth date at next visit).

I do not see a generic extension to mark data that way yet, but I only looked quickly so it may be there (or one could be proposed)

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:42):

so far i see the best way to capture age is (current year - Age in the source data ) as the DOB in patient resource accepts yyyy format as well.

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:42):

Still its messy

view this post on Zulip Gino Canessa (Feb 28 2022 at 18:46):

Yes, but if you use Age you also need to ensure that you always keep it up to date (e.g., increment age next year) and ensure that it is only done once, ensure that downstream systems that read the age have context, etc.

Practically speaking, I have seen several incidents because a patient's Age was out of sync when a practitioner read it.. I tend to try and steer people away from using it.

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:47):

got it

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:47):

I have a doubt. Can we query birthDate only with year using lt and gt?

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:50):

yeah it works

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:51):

http://hapi.fhir.org/baseR4/Patient?birthdate=lt1995&birthdate=gt1993
Like this we can use

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:51):

which is safe for now

view this post on Zulip Lloyd McKenzie (Feb 28 2022 at 18:52):

Putting age in an 'identifier' would absolutely be a bad idea. When sending data in FHIR, it's important to respect the meaning of the element - and 'age' is definitely not a unique identifier for the patient. If you need to transmit age, Observation is best, extension (ideally with two components so you can communicate 'age' as well as 'as of when?') is second best.

view this post on Zulip Vibin_chander (Feb 28 2022 at 18:58):

Not all existing FHIR sources like say Azure API for FHIR allows us to modify structure defintion. Then how can we make extension queryable ?

view this post on Zulip Vibin_chander (Feb 28 2022 at 19:02):

FHIR defintion of observation is difficult to understand. "simple assertions made about a patient, device or other subject.". I'm a male, is also a simple assertion but gender is in Patient resource right?

I don' t understand what simple assertion is

view this post on Zulip Shamil Nizamov (Feb 28 2022 at 19:08):

In a simple term if you do not know where to put some statement it likely goes to the Observation. :)

view this post on Zulip Vibin_chander (Feb 28 2022 at 19:24):

Ok. I have to agree to that. @Shamil Nizamov .

view this post on Zulip Lloyd McKenzie (Feb 28 2022 at 19:54):

You don't have to modify the structure definition to use an extension - extensions are built into the resource in all locations they're allowed - and I presume Azure has support for extensions.
To make an extension searchable, you just define a SearchParameter for it - and configure the relevant server to support it. Depending on the SearchParameter and the server, that can be as simple as uploading it or sticking it into the correct file location.

view this post on Zulip Vibin_chander (Mar 01 2022 at 02:54):

@Lloyd McKenzie I agree. The vital part of the question remains same. Why observation?.

view this post on Zulip René Spronk (Mar 01 2022 at 08:22):

Where else? Age is mostly of clinical relevance, whereas the patient is about demographic/administrative details of the patient. Birthdate fits with the latter category, whereas age doesn't. Observation has the advantage that it allows one to specify the author of the observation and the date that the observation was made. Age may be an estimate, and may or may not be based on all sorts of other things such as x-rays of the hand.

view this post on Zulip Vibin_chander (Mar 01 2022 at 08:35):

I have a use case to list all the female gender patients with in a age group of 20 to 40

view this post on Zulip Vibin_chander (Mar 01 2022 at 08:35):

Here age is not clinical reference. Its just a sub set of patient demographics

view this post on Zulip Richard Townley-O'Neill (Mar 01 2022 at 09:10):

A reason for gender in Patient is it is commonly part of identifying a person. But that is gender for bureaucratic purposes, not sex for clinical purposes, which would be an observation.

view this post on Zulip Vibin_chander (Mar 01 2022 at 09:27):

@Richard Townley-O'Neill your there. You're nearly getting to what I'm pointing out here. FHIR built on top of pareto's principle and they believe that 20% of world's most used data forms the FHIR resources.

view this post on Zulip Vibin_chander (Mar 01 2022 at 09:28):

The standard's decision of 20% is not my 20%.

view this post on Zulip Vibin_chander (Mar 01 2022 at 09:28):

that's the problem

view this post on Zulip René Spronk (Mar 01 2022 at 09:51):

Ah, but that's the nature of standardization for a global context-independent market. And that's why we have extensions.

view this post on Zulip John Moehrke (Mar 01 2022 at 11:28):

I agree with @René Spronk . Add to that, that there are ways to get your edge case results. But as an edge case, the model is not optimized for you, and you thus will need to work harder.

view this post on Zulip Daniel Venton (Mar 01 2022 at 13:08):

Vibin_chander said:

Why observation?.

I would ask, "Why store a calculable field anywhere?" I certainly understand the need for age observations. "When you are rolled through the ER door, unconscious, the provider says patient appears to be male, appears to be 50-60 years old...." But if you know something about the birthdate then you can calculate for any criteria you want. Having the hard and fast discrete data point on which to make the calculation, trumps the need to have assorted stored aggregate values.

Try saying, "I want all patients that have an age observation with the value between 20 and 40 where the observation was taken between 2020-2021." You likely aren't going to get what you want. "All patients with birthdate between 1982-2002." Is likely more precise.

view this post on Zulip Lloyd McKenzie (Mar 01 2022 at 15:00):

Age is a point-in-time value. Observation is where we capture point-in-time values. In general, we try to avoid persisting age at all because working with is complex. ("2.3 years ago they were 32 years old" is somewhat miserable to work with.)

view this post on Zulip Yunwei Wang (Mar 01 2022 at 15:38):

Vibin_chander said:

I have a use case to list all the female gender patients with in a age group of 20 to 40

Patient?gender=female &birthdate=lt2002-03-01&birthdate=gt1982-03-01

view this post on Zulip Lloyd McKenzie (Mar 01 2022 at 16:01):

One key thing to be aware of is that the data in a resource is 'static' unless the server receives an update - and if there's an update, then the version changes and a new entry gets added to history. So, for example, if you created a Patient instance with an 'age' extension, that age can't change dynamically. It's fixed until/unless someone sends an update to change the Patient record.


Last updated: Apr 12 2022 at 19:14 UTC