The anchor is obviously is a record in visit_occurrence. The visit record in visit_occirrence represents whether it is inpatient, outpatient, etc. The record has enough information in OMOP standard visit concept form and source-visit-types (using visit_type_concept_id, visit_source_concept_id etc). All other clinical tables like observation, condition, measurement are linked/anchored to visit_occcurrence. So carrying this information to these clinical tables is redundant and inefficient, IMO. So I see value in “disentangling” and removing inpatient, outpatient etc. for not just condition, but also procedure, observation, measurement etc.
I don’t see a reason for “stated on claim” because, I think, visit_type_concept_id should say if the data came from claim, or EHR or other.
For US claims codes: Position is important, especially primary vs secondary vs admitting, or 1st, 2nd, 3rd, 4th position till at least 25 to 30 etc. This is generalizable to condition, procedure, observation, measurement etc. So we can create generalized concept id to represent all these. However, also important is whether the source is a claim summary (header) vs claim detail (line) vs claim other (unknown). So this makes it a composite of these two attributes - position and claim source. I.e. concept id for claim-summary-primary-position, claim-detail-primary-position, claim-summary-13th-position etc.