Giter VIP home page Giter VIP logo

fhir's Introduction

Introduction

FhirProto is Google’s implementation of the FHIR Standard for Health Care data using Protocol Buffers. By leveraging Google’s core data storage format, FhirProto provides a type-safe, strongly validated FHIR format with cross-language support at a fraction of the size on disk, making it a great data model to develop your Health Care application on. Structured Codes and Extensions guarantee that your data will be in the correct format. Support for generating and validating against custom Implementation Guides allow you to customize FhirProto to your dataset and requirements. Parsing and Printing libraries make it easy to go back and forth between FhirProto format and JSON.

Getting Started

We think the best way to get an idea of how FhirProto works is to get in and start playing with it. To that end, we provide https://github.com/google/fhir-examples. This repo contains a script for using Synthea to create a synthetic FHIR JSON dataset, and then shows some examples of parsing, printing, validating, profiling and querying. The repo also contains a walkthrough of many of the examples.

A Reference User Guide with in-depth descriptions of different concepts can be found here.

Trademark

FHIR® is the registered trademark of HL7 and is used with the permission of HL7. Use of the FHIR trademark does not constitute endorsement of this product by HL7.

fhir's People

Contributors

aaronnash avatar alextumanov avatar c-y-koo avatar copybara-github avatar dewang-google avatar dharmez avatar dogarithm avatar evalon32 avatar faithfulzhening avatar fpquintao avatar frankyang-code4fun avatar jingtang10 avatar kevineger avatar kunzhang avatar lastomato avatar luid101 avatar milah avatar nickgeorge avatar nikklassen avatar quarz0 avatar rbrush avatar rchen152 avatar settyblue avatar sundberg avatar suyashkumar avatar tejassun avatar waltaskew avatar wilsonssun avatar xueweizhao avatar yiz-work avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fhir's Issues

Example for Generating Protos Using the scripts seems broken

Hey Team,

I am trying to use the repo and scripts to generate protos from my custom Implementation guide.

I am trying to follow the guidelines mentioned in this link: https://github.com/google/fhir-examples/blob/master/USERGUIDE.md#generating-protos-from-profiles

As an example I am trying to use the "US Core protos:" example., which seem to be failing for bullet points: 3(link is broken) and 4 with the following error (this was updating the command to: generate_protos.sh //proto/google/fhir/proto/r4:uscore)

ERROR: Skipping 'proto/google/fhir/proto/r4:uscore_proto_files': no such target '//proto/google/fhir/proto/r4:uscore_proto_files': target 'uscore_proto_files' not declared in package 'proto/google/fhir/proto/r4' (did you mean 'uscore_proto_zip'?) defined by /usr/local/google/home/guptarju/google-fhir/fhir/proto/google/fhir/proto/r4/BUILD
WARNING: Target pattern parsing failed.
ERROR: no such target '//proto/google/fhir/proto/r4:uscore_proto_files': target 'uscore_proto_files' not declared in package 'proto/google/fhir/proto/r4' (did you mean 'uscore_proto_zip'?) defined by /usr/local/google/home/guptarju/google-fhir/fhir/proto/google/fhir/proto/r4/BUILD
INFO: Elapsed time: 0.220s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (0 packages loaded)
Build Failed: proto/google/fhir/proto/r4:uscore_proto_files```

Is there any update guide? Which could be referenced or the content within this file be updated

Parse FHIR JSON in Python?

google.protobuf.json_format's functions don't seem to work with FHIR JSON, even that produced by Synthea.

Would it be possible to add some kind of function that would convert to FHIR JSON and vice versa?

Does not pass `buf check lint`

This is buf: https://github.com/bufbuild/buf

I'm not sure if this is an issue in buf or the proto here. What do you think?

root@host:~/fhir# buf check lint
proto/r4/core/profiles/datatypes.proto:31:1:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:65:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:68:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:71:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.modifier_extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:74:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.path: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:81:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.slice_name: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:84:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.slice_is_constraining: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:87:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.label: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:90:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.code: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:99:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.definition: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:102:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.comment: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:105:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.requirements: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:108:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.alias: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:111:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.min: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:114:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.max: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:118:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Base: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:120:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Base.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:123:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Base.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:126:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Base.path: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:130:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Base.min: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:134:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Base.max: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:137:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.base: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:143:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:150:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:153:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:156:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.code: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:164:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.target_profile: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:170:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.VersioningCode: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:178:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.VersioningCode.value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:180:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.VersioningCode.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:182:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.VersioningCode.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:184:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.TypeRef.versioning: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:186:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.type: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:189:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:193:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.base64_binary: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:194:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.boolean: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:195:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.canonical: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:196:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.code: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:197:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.date: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:198:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.date_time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:199:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.decimal: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:200:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:201:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.instant: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:202:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.integer: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:203:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.markdown: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:204:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.oid: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:205:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.positive_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:206:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.string_value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:207:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:208:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.unsigned_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:209:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.uri: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:210:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.url: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:211:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.uuid: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:212:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.address: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:213:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.age: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:214:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.annotation: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:215:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.attachment: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:216:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.codeable_concept: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:217:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.coding: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:218:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.contact_point: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:219:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.count: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:220:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.distance: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:221:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.duration: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:222:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.human_name: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:223:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.identifier: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:224:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.money: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:225:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.period: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:226:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.quantity: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:227:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.range: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:228:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.ratio: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:229:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.reference: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:230:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.sampled_data: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:231:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.signature: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:232:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.timing: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:233:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.contact_detail: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:234:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.contributor: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:235:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.data_requirement: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:236:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.expression: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:237:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.parameter_definition: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:238:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.related_artifact: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:239:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.trigger_definition: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:240:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.usage_context: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:241:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.DefaultValueX.dosage: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:244:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.default_value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:247:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.meaning_when_missing: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:250:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.order_meaning: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:259:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:261:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:264:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:267:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.label: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:271:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:275:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.base64_binary: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:276:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.boolean: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:277:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.canonical: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:278:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.code: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:279:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.date: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:280:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.date_time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:281:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.decimal: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:282:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:283:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.instant: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:284:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.integer: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:285:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.markdown: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:286:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.oid: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:287:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.positive_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:288:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.string_value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:289:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:290:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.unsigned_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:291:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.uri: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:292:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.url: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:293:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.uuid: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:294:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.address: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:295:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.age: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:296:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.annotation: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:297:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.attachment: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:298:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.codeable_concept: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:299:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.coding: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:300:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.contact_point: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:301:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.count: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:302:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.distance: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:303:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.duration: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:304:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.human_name: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:305:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.identifier: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:306:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.money: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:307:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.period: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:308:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.quantity: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:309:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.range: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:310:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.ratio: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:311:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.reference: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:312:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.sampled_data: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:313:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.signature: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:314:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.timing: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:315:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.contact_detail: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:316:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.contributor: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:317:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.data_requirement: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:318:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.expression: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:319:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.parameter_definition: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:320:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.related_artifact: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:321:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.trigger_definition: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:322:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.usage_context: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:323:9:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.ValueX.dosage: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:326:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Example.value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:329:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.example: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:332:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:336:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.date: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:337:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.date_time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:338:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.instant: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:339:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:340:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.decimal: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:341:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.integer: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:342:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.positive_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:343:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.unsigned_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:344:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MinValueX.quantity: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:347:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.min_value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:350:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:354:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.date: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:355:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.date_time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:356:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.instant: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:357:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.time: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:358:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.decimal: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:359:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.integer: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:360:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.positive_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:361:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.unsigned_int: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:362:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.MaxValueX.quantity: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:365:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.max_value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:368:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.max_length: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:371:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.condition: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:374:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:379:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:382:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:385:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.key: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:388:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.requirements: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:391:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.SeverityCode: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:399:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.SeverityCode.value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:401:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.SeverityCode.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:403:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.SeverityCode.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:405:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.severity: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:409:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.human: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:413:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.expression: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:416:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.xpath: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:419:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Constraint.source: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:421:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.constraint: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:424:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.must_support: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:430:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.is_modifier_reason: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:436:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:441:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:444:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:447:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.StrengthCode: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:455:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.StrengthCode.value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:457:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.StrengthCode.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:459:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.StrengthCode.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:461:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.strength: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:465:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.description: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:468:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.ElementDefinitionBinding.value_set: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:470:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.binding: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:473:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:475:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:478:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:481:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.identity: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:485:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.LanguageCode: already defined as message in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:496:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.LanguageCode.id: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:498:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.LanguageCode.extension: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:501:7:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.LanguageCode.value: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:503:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.language: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:506:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.map: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:510:5:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.Mapping.comment: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:512:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.mapping: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:515:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.question: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"
proto/r4/core/profiles/datatypes.proto:522:3:duplicate symbol google.fhir.r4.core.DataElementConstraintOnElementDefinitionDataType.allowed_units: already defined as field in "proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto"

google.fhir Python PIP installable

Are there any plans to make a Python PIP release of google.fhir? Haven't found any existing ones, just for JSON. Would be very handy.

Thank you!

Feature Request: Friendlier extension JSON for non-standard JSON consumers

Currently, this project's JSON printer produces complex and deeply nested json for extensions (as per the standard). It would be nice if the printer produced a simpler JSON, for i.e. clients that were willing to accept non-standard FHIR.

One could imagine running the standard protobuf json printer to simplify printing of extensions, but then again the overall JSON becomes more complex (with lots of nested "value").

[Urgent] Need help with issue using jsonformat NewMarshaller

I am marshalling a proto message using the below code

Print of a proto struct instance

code:{coding:{system:{value:"https://snomed.info/sct"} code:{value:"d-5007465174"}} coding:{system:{value:"http://mdb.eka.care/technical"} code:{value:"d-5007465174"} display:{value:"COVID-19"}}} subject:{patient_id:{value:"oid"}} onset:{date_time:{value_us:1577836800 timezone:"Asia/Kolkata" precision:SECOND}} recorded_date:{value_us:1713875467 timezone:"Asia/Kolkata" precision:SECOND}

Code

   import "github.com/google/fhir/go/jsonformat"

    jsonMarshaller, _ := jsonformat.NewMarshaller(false, "", "", fhirversion.R4)
    encodedResource, _ := jsonMarshaller.MarshalResource(resource) // resource is the above instance
    print(string(encodedResource))

Above print output

{"code":{"coding":[{"code":"d-5007465174","system":"https://snomed.info/sct"},{"code":"d-5007465174","display":"COVID-19","system":"http://mdb.eka.care/technical"}]},"onsetDateTime":"1970-01-01T05:56:17+05:30","recordedDate":"1970-01-01T05:58:33+05:30","resourceType":"Condition","subject":{"reference":"Patient/oid"}}

The issue is the value of recorded_date in proto model is 1713875467, while after marshal, it's becoming 1970-01-01T05:58:33+05:30
I am unsure what's causing the issue though the code is straighforward. Similar is the case with onset.

Request help to help me correct this.

Consider tagging submodule "go"?

I found that packages, say github.com/google/fhir/go/proto/google/fhir/proto/annotations_go_proto, are placed in submodule github.com/google/fhir/go instead of root module.

However, it seems that submodule github.com/google/fhir/go is not tagged. According to go docs, submodule should be tagged like relative-path-to-root/vX.X.X.
At now, when trying to import package github.com/google/fhir/go/proto/google/fhir/proto/annotations_go_proto, downstream would depends on pseudo-version of module github.com/google/fhir/go.

github.com/google/fhir/go v0.0.0-20230201040735-41722f15f676

I think it is not very readable and difficult to upgrade. This is not conductive to version control either.
So, I propose whether it is possible to tag submodule properly. For example, go/v0.0.1, go/v0.7.4etc, so that other project can use tag to import this module in go.mod.

Patient Id is not accepting string expecting type object

I am trying to send FHIR patient example as request to a grpc server. I generated typescript files using proto files.
When I send below FHIR patient example as request , I am getting following error
{ code: 13, details: '.google.fhir.r4.core.Id: object expected', metadata: Metadata { internalRepr: Map(2) { 'content-type' => [Array], 'date' => [Array] }, options: {} }, progress: 'PROCESSED' }

Is the example I am sending is in the right format. If not what is the expected format can you provide any example?

FHIR Patient example

        resourceType: "Patient",
        id: "27343",
        name: [
          {
            use: "official",
            family: "Pataskii",
            given: ["Pata", ""],
            text: "Pata Pataskii",
          },
        ],
        communication: [
          {
            language: {
              coding: [
                {
                  system: "http://hl7.org/fhir/ValueSet/all-languages",
                },
              ],
            },
          },
        ],
        address: [
          {
            line: ["Test", ""],
            city: "TEST CITY",
            state: "CA",
            postalCode: "78987",
            country: "US",
          },
        ],
        birthDate: "2009-08-09",
        gender: "Male",
        maritalStatus: {
          coding: [
            {
              system: "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus",
              code: "S",
              display: "Never Married",
            },
          ],
        },
        generalPractitioner: [
          {
            reference: "Practitioner/117",
          },
        ],
        contact: [
          {
            name: {},
            relationship: [
              {
                coding: [
                  {
                    system:
                      "http://terminology.hl7.org/3.1.0/CodeSystem-v2-0131.html",
                    code: "EP",
                  },
                ],
              },
            ],
            telecom: [
              {
                system: "phone",
                use: "home",
              },
              {
                system: "phone",
                use: "mobile",
              },
            ],
            extension: [],
          },
        ],
        extension: [],
        identifier: [
          {
            type: {
              text: "ssn",
              coding: [
                {
                  system: "http://terminology.hl7.org/CodeSystem/v2-0203",
                  code: "SS",
                },
              ],
            },
            system: "http://hl7.org/fhir/sid/us-ssn",
            value: "",
          },
          {
            type: {
              text: "drivers license",
              coding: [
                {
                  system: "http://terminology.hl7.org/CodeSystem/v2-0203",
                  code: "DL",
                },
              ],
            },
            period: {},
            use: "official",
            assigner: {},
          },
        ],
        telecom: [
          {
            system: "phone",
            value: "8765434560",
            use: "home",
          },
          {
            system: "phone",
            value: "8765678767",
            use: "work",
          },
          {
            extension: [],
            system: "phone",
            value: "8765434567",
            use: "mobile",
          },
          {
            extension: [],
            system: "email",
            value: "[email protected]",
          },
        ],
        contained: [],
      }


Building under Windows using MSVC

tl;dr

There are some gcc specific copts in the BUILD files. If I remove them I get errors like error C2491: 'antlr4::dfa::Vocabulary::EMPTY_VOCABULARY': definition of dllimport static data member not allowed and the build fails.
Is building this project under Windows using MSVC supported. Does anyone have any pointers how to make it work?

Full example

If I try to build e.g. the r4 json_format C++ library using bazel build //cc/google/fhir/r4:json_format I get the following errors

PS C:\git\fhir> bazel build //cc/google/fhir/r4:json_format
INFO: Analyzed target //cc/google/fhir/r4:json_format (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: C:/users/mathias.kogler/_bazel_mathias.kogler/ee5vwmtg/external/antlr_cc_runtime/BUILD.bazel:3:11: Compiling atn/LL1Analyzer.cpp failed: (Exit 2): cl.exe failed: error executing command C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\bin\HostX64\x64\cl.exe /nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE ... (remaining 40 arguments skipped)
cl : Command line error D8021 : invalid numeric argument '/Wno-implicit-fallthrough'
Target //cc/google/fhir/r4:json_format failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.672s, Critical Path: 0.19s
INFO: 13 processes: 13 internal.
FAILED: Build did NOT complete successfully

If I remove the -Wno-implicit-falltrough from the copts in bazel/antlr.BUILD and change the -cxxopt in .bazelrc from build --cxxopt=-std=c++17 to the msvc format build --cxxopt=/std:c++17 I get the following errors

PS C:\git\fhir> bazel build //cc/google/fhir/r4:json_format
INFO: Build option --cxxopt has changed, discarding analysis cache.
INFO: Analyzed target //cc/google/fhir/r4:json_format (0 packages loaded, 3011 targets configured).
INFO: Found 1 target...
ERROR: C:/users/mathias.kogler/_bazel_mathias.kogler/ee5vwmtg/external/antlr_cc_runtime/BUILD.bazel:3:11: Compiling Vocabulary.cpp failed: (Exit 2): cl.exe failed: error executing command C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\bin\HostX64\x64\cl.exe /nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE ... (remaining 39 arguments skipped)
cl : Command line warning D9002 : ignoring unknown option '-fexceptions'
external/antlr_cc_runtime/Vocabulary.cpp(12): warning C4273: 'EMPTY_VOCABULARY': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(27): note: see previous definition of 'public: static antlr4::dfa::Vocabulary const antlr4::dfa::Vocabulary::EMPTY_VOCABULARY'
external/antlr_cc_runtime/Vocabulary.cpp(12): error C2491: 'antlr4::dfa::Vocabulary::EMPTY_VOCABULARY': definition of dllimport static data member not allowed
external/antlr_cc_runtime/Vocabulary.cpp(14): warning C4273: 'antlr4::dfa::Vocabulary::Vocabulary': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(42): note: see previous definition of '{ctor}'
external/antlr_cc_runtime/Vocabulary.cpp(18): warning C4273: 'antlr4::dfa::Vocabulary::Vocabulary': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(60): note: see previous definition of '{ctor}'
external/antlr_cc_runtime/Vocabulary.cpp(25): warning C4273: 'antlr4::dfa::Vocabulary::~Vocabulary': inconsistent 
dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(18): note: see previous definition of '{dtor}'
external/antlr_cc_runtime/Vocabulary.cpp(28): warning C4273: 'antlr4::dfa::Vocabulary::fromTokenNames': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(76): note: see previous definition of 'fromTokenNames'
external/antlr_cc_runtime/Vocabulary.cpp(61): warning C4273: 'antlr4::dfa::Vocabulary::getMaxTokenType': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(82): note: see previous definition of 'getMaxTokenType'
external/antlr_cc_runtime/Vocabulary.cpp(65): warning C4273: 'antlr4::dfa::Vocabulary::getLiteralName': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(119): note: see previous definition of 'getLiteralName'
external/antlr_cc_runtime/Vocabulary.cpp(73): warning C4273: 'antlr4::dfa::Vocabulary::getSymbolicName': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(163): note: see previous definition of 'getSymbolicName'
external/antlr_cc_runtime/Vocabulary.cpp(85): warning C4273: 'antlr4::dfa::Vocabulary::getDisplayName': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\Vocabulary.h(184): note: see previous definition of 'getDisplayName'
ERROR: C:/users/mathias.kogler/_bazel_mathias.kogler/ee5vwmtg/external/antlr_cc_runtime/BUILD.bazel:3:11: Compiling atn/ATNDeserializationOptions.cpp failed: (Exit 2): cl.exe failed: error executing command C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\bin\HostX64\x64\cl.exe /nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE ... (remaining 39 arguments skipped)
cl : Command line warning D9002 : ignoring unknown option '-fexceptions'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(10): warning C4273: 'defaultOptions': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(15): note: see previous definition of 'private: static antlr4::atn::ATNDeserializationOptions antlr4::atn::ATNDeserializationOptions::defaultOptions'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(10): error C2491: 'antlr4::atn::ATNDeserializationOptions::defaultOptions': definition of dllimport static data member not allowed
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(12): warning C4273: 'antlr4::atn::ATNDeserializationOptions::ATNDeserializationOptions': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(22): note: see previous definition of '{ctor}'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(16): warning C4273: 'antlr4::atn::ATNDeserializationOptions::ATNDeserializationOptions': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(23): note: see previous definition of '{ctor}'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(21): warning C4273: 'antlr4::atn::ATNDeserializationOptions::~ATNDeserializationOptions': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(25): note: see previous definition of '{dtor}'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(24): warning C4273: 'antlr4::atn::ATNDeserializationOptions::getDefaultOptions': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(28): note: see previous definition of 'getDefaultOptions'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(28): warning C4273: 'antlr4::atn::ATNDeserializationOptions::isReadOnly': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(30): note: see previous definition of 'isReadOnly'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(32): warning C4273: 'antlr4::atn::ATNDeserializationOptions::makeReadOnly': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(32): note: see previous definition of 'makeReadOnly'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(36): warning C4273: 'antlr4::atn::ATNDeserializationOptions::isVerifyATN': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(34): note: see previous definition of 'isVerifyATN'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(40): warning C4273: 'antlr4::atn::ATNDeserializationOptions::setVerifyATN': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(36): note: see previous definition of 'setVerifyATN'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(45): warning C4273: 'antlr4::atn::ATNDeserializationOptions::isGenerateRuleBypassTransitions': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(38): note: see previous definition of 'isGenerateRuleBypassTransitions'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(49): warning C4273: 'antlr4::atn::ATNDeserializationOptions::setGenerateRuleBypassTransitions': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(40): note: see previous definition of 'setGenerateRuleBypassTransitions'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(54): warning C4273: 'antlr4::atn::ATNDeserializationOptions::throwIfReadOnly': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(43): note: see previous definition of 'throwIfReadOnly'
external/antlr_cc_runtime/atn/ATNDeserializationOptions.cpp(60): warning C4273: 'antlr4::atn::ATNDeserializationOptions::InitializeInstanceFields': inconsistent dll linkage
C:\users\mathias.kogler\_bazel_mathias.kogler\ee5vwmtg\execroot\com_google_fhir\external\antlr_cc_runtime\atn/ATNDeserializationOptions.h(46): note: see previous definition of 'InitializeInstanceFields'
Target //cc/google/fhir/r4:json_format failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 3.173s, Critical Path: 2.43s
INFO: 15 processes: 11 internal, 4 local.
FAILED: Build did NOT complete successfully

Unmarshaller support for R5 versions

Hi, Is there a plan to write an unmarshaller for R5 version. I currently see the unmarshaller is available for R4, R3. If the plan is not in near future, can you guide me on how to generate the unmarshaller. I would like to tweak the code base and add the functionality.

[Go] How to parse profile

I want to use the US Core profile. However, I don't see any way of parsing a US Core Patient JSON into a USCorePatientProfile. The jsonformat unmarshaller always returns an instance of *r4pb.ContainedResource.

Is there a way to convert from one profile to another like in C++? Or unmarshal directly into a USCorePatientProfile?

Slice on structured fields

I need to generate C++ code from profiles (json) containing slices on structured fields (e.g. Address).

Maybe I can implement the missing feature myself, but I need some advice.

  • Is there a function or functions in the java part, that could be used to generate the slice message?
    • I have the following use case: The address field of Organization is sliced into two slices of an Adress based profile (address-de-basis) to support two different flavours of Address.line - physical address vs. post box. (This is done in an intermediate profile base "KBV_PR_Base_Organization".)
  • Which function could be used in the C++ part to read the different slices? (I think writing just means selection of the active slice.)
  • Any Idea how to implement a default slice?

Details:

From my investigations I found two problems:

  1. In ProtoGenerator.java, slices like this are not supported:
private DescriptorProto generateMessage(
      ElementDefinition currentElement,
      List<ElementDefinition> elementList,
      DescriptorProto.Builder builder)
      throws InvalidFhirException {
   ...
   for (ElementDefinition deferredElement : deferredElements) {
      // Currently we only support slicing for Extensions and Codings
      if (isElementSupportedForSlicing(deferredElement)
         ...
      } else {
        cgmDebugOut(2, "Build field slicing (not supported yet):" + cgmStringify(deferredElement.getId().getValue()));
        builder
            .addFieldBuilder()
            .setNumber(nextTag)
            .getOptionsBuilder()
            .setExtension(
                ProtoGeneratorAnnotations.reservedReason,
                "field "
                    + nextTag
                    + " reserved for "
                    + deferredElement.getId().getValue()
                    + " which uses an unsupported slicing on "
                    + deferredElement.getType(0).getCode().getValue());
        nextTag++;
      }
    }
  ...
}
  1. Once the java generator would have been enhanced to generate a sliced proto message, serialization to and from json has to be handled correctly in the c++ part.
  • To Json: Just write the slices´ content (if any)? Maybe respecting place where the original field resides.
  • From Json: Detect sliced field by annotation. Extract slice discriminator (Maybe by reading into (new) instance of non sliced field when slice discrimination is on value?). Select correct slice by attribute. Read into that slice. Here, it is not clear to me, what infrastructure in C++ could be used.

If I'm right, some annotations have been foreseen for discrimination of the right slice.
Regarding annotation fhir_slice_by, I am not sure, if this is the intended use. As far as I understand, slicing type and path must be specified.
Something like this:
"[(.google.fhir.proto.fhir_slice_by) = "value:type"]" means the slice discriminator is by "value" from field "type".

Python 3.10 + 3.11 support

I know that Python 3.10 stable isn't out yet, but it'd be nice to be ready for it if possible.

https://docs.python.org/3.10/whatsnew/3.10.html

Currently, setup.py sets the version range at 3.6-3.9.

https://github.com/google/fhir/blob/master/py/setup.py#L155

$ poetry update
Updating dependencies
Resolving dependencies... (8.4s)

  SolverProblemError

  The current project's Python requirement (>=3.8,<3.11) is not compatible with some of the required packages Python requirement:
    - google-fhir requires Python >=3.6, <3.10, so it will not be satisfied for Python >=3.10,<3.11

  Because google-fhir (0.7.2) requires Python >=3.6, <3.10
   and no versions of google-fhir match >0.7.2,<0.8.0, google-fhir is forbidden.
  So, because hos depends on google-fhir (^0.7.2), version solving failed.

Duplicate types

There are duplicate types which seems iffy. Identical files with just different names.

For example:

https://github.com/google/fhir/blob/master/proto/r4/core/profiles/data_element_constraint_on_element_definition_data_type.proto#L31

https://github.com/google/fhir/blob/master/proto/r4/core/profiles/datatypes.proto#L31

Would there be any way to trim this down to just one file for a certain type definition?

This is one of the things keeping buf check lint from passing: #15

More information here: bufbuild/buf#99

Thank you!

R5 support

Hi, is there a plan to support proto messages for R5 version in this repo?

Go - Task_Output encoded REST message does not match FHIR Store model

Intro

Hello, I'm using the Go package to help compose a PATCH call to our FHIR Store on GCP. I'm trying to update a Task's Output field with a reference to a QuestionnaireResponseId and I'm having trouble composing a correct PATCH call using the provided fhir/go/proto/google/fhir/proto/r4/core/resources/task_go_proto/ package. Specifically Task_Output.

Context

  • We use an in-house FHIR router client to make REST calls to the FHIR Store.
  • Our FHIR router client composes a PATCH call using the FHIR Patch Add operation, provides the path to the relevant FHIR element being patched (output), and the actual value payload to be added to the existing Task entry
  • The value payload is a []proto.Message, which in this case contains a single Task_Output entry
  • When composing the PATCH call, we first marshal each entry of the []proto.Message using a jsonformatter.AnalyticsMarshaller, afterwards we marshall the entire message into bytes using Go's json library
  • We then compose a request to the Task endpoint using the relevant payload, API parameters and headers and make the request
  • The issue I am encountering stems from a mismatch of keys, explained below

REST Call Message Mismatch

The issue I am encountering is a key mismatch between what the FHIR Store is expecting and the message generated by encoding the proto.Message.

The FHIR store expects a message like this, I have tested calls to our FHIR Store with the message format below using Postman and a 200 Success message is returned and the entries are updated (Given a proper FHIR QuestionnaireResponseId is passed rather than Q...1234...):

[
      {
        "op": "add",
        "path": "/output",
        "value": [
            {
                "type": {
                    "text": "QuestionnaireResponse generated"
                },
                "valueReference": {
                    "reference":  "QuestionnaireResponse/QuestionnaireResponseId_12345678"
                }
            }
        ]
    }
]

The message generated by our backend is like this, notice the value key and the two reference entries, testing these calls to our FHIR Store using Postman returns a 400 Bad Request error:

[
    {
        "op": "add",
        "path": "/output",
        "value": [
            {
                "type": {
                    "text": "QuestionnaireResponse generated"
                },
                "value": {
                    "reference": {
                        "reference": "QuestionnaireResponse/QuestionnaireResponse/questionnaireId"
                    }
                }
            }
        ]
    }
]

Issue

Essentially, the FHIR Store is expecting the key valueReference but the message generated by our backend using the Task_Output model found in fhir/go/proto/google/fhir/proto/r4/core/resources/task_go_proto/task.pb.go is returning the key as value. I believe this is because the proto and json names are set to value in the provided library. The valueReference field aligns with the following Task Output example.

For more context, here is the structure of the Task_Output value payload that is being used in the PATCH call:

/**
questionnaireId is the FHIR ID for the questionnaireResponseId we are trying to PATCH to the Task Output entry
QuestionnaireResponseGenerated = "QuestionnaireResponse generated"
QuestionnaireResponseResourceType = "QuestionnaireResponse" 
**/
&task_go_proto.Task_Output{
    Type: &datatypes_go_proto.CodeableConcept{
        Text: &datatypes_go_proto.String{
            Value: fhir_constants.QuestionnaireResponseGenerated, 
         },
     },
     Value: &task_go_proto.Task_Output_ValueX{
         Choice: &task_go_proto.Task_Output_ValueX_Reference{
             Reference: &datatypes_go_proto.Reference{
                 Reference: &datatypes_go_proto.Reference_QuestionnaireResponseId{
                     QuestionnaireResponseId: &datatypes_go_proto.ReferenceId{
                         Value: fmt.Sprintf("%s/%s", fhir_constants.QuestionnaireResponseResourceType, questionnaireId),
                     },
                  },
               },
           },
       },
},

I've tried multiple variations of the Task_Output_ValueX field but they all return the value key. I've tried extending the Task_Output class as well using a struct of my own but the fields outside Task_Output get ignored by the jsonformatter.Marshaller

Any insight into possible solutions for this problem would be greatly appreciated. Any more information or context that you may need, I will be happy to provide. Thank you!

Accepting JSON from standard FHIR server

Could use this library to generate a FHIR client library which accepts JSON from a FHIR server which is not using gRPC?

I'm new to protocol buffers and gRPC and I've been looking into this for a couple days, but I've been having hard time finding a definitive answer. Thank you for your help in advance!

Canonical FHIR Resource Enum

Is there a canonical enum representing the available FHIR resource types? I couldn't find it. Are implementers expected to roll their own lists? e.g. "Patient", "Practitioner", "PractitionerRole", ... and so on. Seems error-prone vs having a canonical enum from the protos.

Thank you.

Overly strict Python dependency requirements

I'm getting this warning (even though it looks like an error) about the new PIP dependency resolver.

ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.

We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.

google-fhir 0.6.2 requires protobuf==3.13.0, but you'll have protobuf 3.14.0 which is incompatible.

I can see that the requirements are set exactly: https://github.com/google/fhir/blob/master/py/requirements.txt For a library, would it be better to do something like this?

absl-py >= 0.10.0 < 0.11.0
backports.zoneinfo >= 0.2.1 < 0.3.0
mypy-protobuf >= 1.23 < 2
protobuf >= 3.13.0 < 4
python-dateutil >= 2.8.1 < 3
six >= 1.15.0 < 2

(I haven't tested those exactly, it's just speculation and assuming those are all semver.)

Thank you!

go: module source tree too large

When importing some FHIR packages, go mod tidy dies and refuses to proceed due to a size issue. Has anyone managed to get this to work?

go: finding module for package github.com/google/fhir/proto/google/fhir/proto/r4/core/codes_go_proto
go: finding module for package github.com/google/fhir/proto/google/fhir/proto/r4/core/resources/bundle_and_contained_resource_go_proto
        github.com/google/fhir/proto/google/fhir/proto/r4/core/codes_go_proto: create zip: module source tree too large (max size is 524288000 bytes)
        github.com/google/fhir/proto/google/fhir/proto/r4/core/resources/bundle_and_contained_resource_go_proto: create zip: module source tree too large (max size is 524288000 bytes)

Feature Request: Profiles specified via protobuf

Currently, it's a little tricky to figure out how to write an extension and/or profile. Assuming the users of this library are already familiar with protobufs, I'd say it'd be simpler if an extension could be generated from a protobuf file (i.e. if generate_protos_from_config.sh accepted a .proto).

That said, I am not sure about whether in general a .proto has "too much" or "not enough" information to generate an extension (as I still figure out how to write an extension and profile).

Python json_fhir_string_to_proto raises wrong exception type

Hi everyone,

According to https://github.com/google/fhir/blame/master/py/google/fhir/r4/json_format.py#L82,L83 json_fhir_string_to_proto() should raise InvalidFhirError.

In this example, it raises ValueError instead. I have not tested with the latest google-fhir but am suspecting the results may be the same.

import json

from google.fhir.fhir_errors import InvalidFhirError
from google.fhir.r4.json_format import json_fhir_string_to_proto
from proto.google.fhir.proto.r4.core.resources.bundle_and_contained_resource_pb2 import (  # noqa: E501
    Bundle,
)

INVALID_BUNDLE_DICT = {
    "resourceType": "Bundle",
    "type": "not a transaction",
    "entry": [
        {
            "fullUrl": "urn:uuid:85e52038-4d69-50e9-9e46-e379b8d830af",
            "resource": {
                "resourceType": "Patient",
                "id": "85e52038-4d69-50e9-9e46-e379b8d830af",
                "name": [
                    {"use": "official", "family": "Simpson", "given": ["Homer", "Jay"]}
                ],
            },
        }
    ],
}

try:
    json_fhir_string_to_proto(json.dumps(INVALID_BUNDLE_DICT), Bundle)
except InvalidFhirError:
    print("Excepts as expected.")

print("Success.")

Let me know if anything is unclear. The error is under the type field. Happy to help dig in further if need be.

Thank you for your time.

Overlapping filenames causing issues on case-insensitive filesystems.

The following files have collisions on case-insensitive filesystems:

spec/hl7.fhir.core/3.0.1/package/CodeSystem-example.json
spec/hl7.fhir.core/3.0.1/package/CodeSystem-list-example-codes.json
spec/hl7.fhir.core/3.0.1/package/ValueSet-example-expansion.json
spec/hl7.fhir.core/3.0.1/package/ValueSet-example-intensional.json
spec/hl7.fhir.core/3.0.1/package/ValueSet-list-example-codes.json

This makes including this repository as a submodule inconvenient as the submodule will always report a dirty filesystem state.

go: profiling + validation support in go

We're maintaining some custom resource validation code that we'd love to deprecate in favor of profiling support in this codebase.

Can you give an estimate on when we might see profiling+validation support for go in this repo?

Cannot convert nested resource from protobuf to JSON

There are likely other places where this would also be the case, but I found it when using resource in Parameters.Parameter. Trying to pass a resource (e.g. Parameters) into resource throws an error, and if you do it directly mypy will give you an error as well. From what I can tell the proper way is to pack it into an Any protobuf, but then when printing to JSON it prints invalid JSON.

Here's some sample code that reproduces the issue:

from google.fhir.r4 import json_format
from proto.google.fhir.proto.r4.core.resources.bundle_and_contained_resource_pb2 import (  # noqa: E501
    Bundle,
    ContainedResource,
)
from google.protobuf.any_pb2 import Any as AnyPB
from proto.google.fhir.proto.r4.core.resources.parameters_pb2 import Parameters
from proto.google.fhir.proto.r4.core.datatypes_pb2 import Uri

from uuid import uuid4

raw_nested_resource = Parameters()

packed_nested_resource = AnyPB()
packed_nested_resource.Pack(raw_nested_resource)


def convert_nested_resource_to_json(nested_resource) -> None:
    entry = Bundle.Entry(
        full_url=Uri(value=f"urn:uuid:{uuid4()}"),
        resource=ContainedResource(
            parameters=Parameters(
                parameter=[Parameters.Parameter(resource=nested_resource)]
            )
        ),
    )

    print(json_format.pretty_print_fhir_to_json_string(entry))


print("Converting packed nested resource to json:")
convert_nested_resource_to_json(packed_nested_resource)

print("\nConverting raw nested resource to json:")
convert_nested_resource_to_json(raw_nested_resource)

and the output:

$ python3 test_fhir.py
Converting packed nested resource to json:
{
  "fullUrl": "urn:uuid:eca063c6-48da-4619-9ae6-89bde23b689a",
  "resource": {
    "resourceType": "Parameters",
    "parameter": [
      {
        "resource":
      }
    ]
  }
}

Converting raw nested resource to json:
Traceback (most recent call last):
  File "test_fhir.py", line 35, in <module>
    convert_nested_resource_to_json(raw_nested_resource)
  File "test_fhir.py", line 23, in convert_nested_resource_to_json
    parameter=[Parameters.Parameter(resource=nested_resource)]
TypeError: Parameter to MergeFrom() must be instance of same class: expected google.protobuf.Any got google.fhir.r4.core.Parameters.

If you take out the variable and hardcode nested_resource to Parameters(), mypy will also give you an error:

Argument "resource" to "Parameter" has incompatible type "Parameters"; expected "Optional[google.protobuf.any_pb2.Any]"

Python json -> protobuf "cannot be parsed as a reference"

The latest Synthea gives different output. An older version works fine for me, however the latest results in:

ValueError: String 'Practitioner?identifier=http://hl7.org/fhir/sid/us-npi|9999999959' cannot be parsed as a reference.

I can write up a code sample if need be.

This is using Synthea from master: https://github.com/synthetichealth/synthea/releases/download/master-branch-latest/synthea-with-dependencies.jar

It looks like they have some versions released more recently, I will try those.

Python 3.9 support

Currently, google-fhir requires Python 3.7 or 3.8. With 3.9 out in production, what would it take to support it?

Thank you!

Namespace/Class collisions with C# compiler in DatatypesReflection

Both proto/google/fhir/proto/r4/core/datatypes.proto and proto/google/fhir/proto/r4/core/profiles/datatypes.proto generate a class named DatatypesReflection as part of the standard output from protoc. Both *.proto files use the same package google.fhir.r4.core. This results in a duplicate name collision in the generated output.

This problem disappears if the datatypes.proto file is moved into the google.fhir.r4.core.profiles namespace.

Tho' I am not certain if that causes any other unrelated issues.

Python date conversion issue with json_format

First off, thank you so much for adding the json_format stuff. It's just been fantastic to work with.

Noticing a bug with our code, or could maybe be with json_format.

I know about the DST issue mentioned here: https://github.com/google/fhir/releases/tag/v0.6.2

We are trying to normalize to UTC (or rather, treat all dates as UTC). At least for now, in this bit of code.

What we're seeing is that when converting from FHIR JSON to protobuf to FHIR JSON, 2016-03-03T10:10:57-07:00 ends up getting represented as 2016-03-04. I've tried forcing UTC timezone on my system and am still seeing that.

Does this seem possible? Likely? One comparison I had seemed to indicate it was off by exactly 8 hours.

I can come up with a more concrete test case if you like. This is using Synthea generated JSON LPRs.

My colleague is suggesting that maybe it's how the protobufs are converting to microseconds without timezones, then back to a date string. I still don't see how the date would up being ahead and not behind (or the same, looking at the date and not the time).

Thank you!

go: jsonformat package is not go gettable

Currently the imports in the jsonformat go package require consumers to also be using bazel. It would be nice if this implementation was directly consumable (as in, via go modules)

If you aren't planning on supporting this, please let me as we will try a go mod hack or begrudgingly maintain a fork 🙂

py/ subtree accidentally deleted?

All python related files were removed with 6773267
The entire /py/* subtree is gone.
Judging from the got description this was not intendend? Or is python support silently removed?

Export extensions to their own fields on analytics print?

Hello, I'm working with python and I've been trying to figure out if there's a way to make print_fhir_to_json_string_for_analytics export nested extension fields to their own fields. (Currently just creates a list and adds just the extension URLs inside)
I thought that If I created a custom profile and defined my extensions there it would work but it still doesn't.

protobuf 4.21 support

Currently, we are locked into 3.x with ~=3.13.

If I forcibly install 4.21, I get this:

E   TypeError: Descriptors cannot not be created directly.
E   If this call came from a _pb2.py file, your generated code is out of date and must b
e regenerated with protoc >= 3.19.0.
E   If you cannot immediately regenerate your protos, some other possible workarounds ar
e:
E    1. Downgrade the protobuf package to 3.20.x or lower.
E    2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python
 parsing and will be much slower).
E
E   More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-0
6#python-updates

Would it be possible to regenerate with a newer protoc and allow for protobuf v4 to be used?

Thank you!

Idiomatic way of dealing with unknown fields? [golang]

When parsing the CMS DPC synthetic test files ExplanationOfBenefit and Coverage do not parse cleanly.

err: error at "Coverage": unknown field

error at "ExplanationOfBenefit.extension[0].valueMoney": unknown field
error at "ExplanationOfBenefit.item[0].adjudication[0].amount": unknown field

How are y'all dealing with this? Thanks

FR: Exposing a list of maven deps

Right now consuming the gen_fhir_definitions_and_protos rule is difficult for a project already using java/kotlin + maven deps as the maven install is unnamed and there is no exposing of the deps via a list of something of the like (which can be consumed via the project's own maven_install). This makes it only possible to manually copy the deps by hand, which is obviously error prone.

It would be really helpful to either expose the maven deps list (for example how grpc-java does it ), or maybe offer the ability to provide a custom maven install name.

Apologies if there is a way to do this I'm missing. Thanks for a great library!

No need to require backports.zoneinfo on Python 3.9+

backports.zoneinfo on Python 3.9+ has to be compiled, so can't install in say the python:3.9-slim image.

pganssle/zoneinfo#105

I opened a PR, but got this big notice about signing a CLA. It's a very simple PR and I'm not sure if you can merge PRs here.

Feel free to reuse the two changed lines (if they even work) any way you please.

#36

Thank you! Let me know if you have any questions.

Missing GoalAchievementStatus code system

The GoalAchievementStatus code system is defined as part of R4 and is the preferred binding for the Goal.achievementStatus element. However, no protos are generated for it in this repo.

The JSON spec IS included in the repo here:

{"resourceType":"CodeSystem","id":"goal-achievement","meta":{"lastUpdated":"2019-11-01T09:29:23.356+11:00","profile":["http://hl7.org/fhir/StructureDefinition/shareablecodesystem"]},"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/structuredefinition-wg","valueCode":"pc"}],"url":"http://terminology.hl7.org/CodeSystem/goal-achievement","identifier":[{"system":"urn:ietf:rfc:3986","value":"urn:oid:2.16.840.1.113883.4.642.4.1375"}],"version":"4.0.1","name":"GoalAchievementStatus","title":"Goal achievement status","status":"draft","experimental":false,"publisher":"HL7 International - Patient Care WG","contact":[{"telecom":[{"system":"url","value":"http://www.hl7.org/Special/committees/patientcare/"}]}],"description":"Describes the progression, or lack thereof, towards the goal against the target.","caseSensitive":true,"valueSet":"http://hl7.org/fhir/ValueSet/goal-achievement","content":"complete","concept":[{"code":"in-progress","display":"In Progress","definition":"The goal is being sought but has not yet been reached. (Also applies if the goal was reached in the past but there has been regression and the goal is again being sought).","concept":[{"code":"improving","display":"Improving","definition":"The goal is being sought, and is progressing."},{"code":"worsening","display":"Worsening","definition":"The goal is being sought, but is regressing."},{"code":"no-change","display":"No Change","definition":"The goal is being sought, but the trend is flat."}]},{"code":"achieved","display":"Achieved","definition":"The goal has been met.","concept":[{"code":"sustaining","display":"Sustaining","definition":"The goal has been met, but ongoing activity is needed to sustain the goal objective."}]},{"code":"not-achieved","display":"Not Achieved","definition":"The goal has not been met and there might or might not have been progress towards target.","concept":[{"code":"no-progress","display":"No Progress","definition":"The goal has not been met and little to no progress towards target."},{"code":"not-attainable","display":"Not Attainable","definition":"The goal is not possible to be met."}]}]}

Other Goal code systems are properly included, e.g. GoalLifecycleStatusCode:

// Codes that reflect the current state of a goal and whether the goal is still
// being targeted. See http://hl7.org/fhir/goal-status
message GoalLifecycleStatusCode {

Another idea I had was that maybe this code system maturity was below some kind of filter used in this repo. It is considered 0 - Draft so that may make sense. However, the GoalAcceptanceState code system is also 0 - Draft and it is included:

// Codes indicating whether the goal has been accepted by a stakeholder.
// See http://terminology.hl7.org/CodeSystem/goal-acceptance-status
message GoalAcceptanceStatusCode {

Does anyone know if this was intentional or a bug?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.