All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hl7.fhir.validation.codesystem.LoincChecker Maven / Gradle / Ivy

The newest version!
package org.hl7.fhir.validation.codesystem;

import java.util.EnumSet;
import java.util.List;

import org.hl7.fhir.r5.context.IWorkerContext;
import org.hl7.fhir.r5.utils.XVerExtensionManager;
import org.hl7.fhir.r5.utils.validation.ValidatorSession;
import org.hl7.fhir.utilities.Utilities;
import org.hl7.fhir.utilities.validation.ValidationMessage;
import org.hl7.fhir.validation.instance.type.ValueSetValidator.CodeValidationRule;
import org.hl7.fhir.validation.instance.type.ValueSetValidator.PropertyFilterType;
import org.hl7.fhir.validation.instance.type.ValueSetValidator.PropertyOperation;
import org.hl7.fhir.validation.instance.type.ValueSetValidator.PropertyValidationRules;

public class LoincChecker extends CodeSystemChecker {

  public LoincChecker(IWorkerContext context, XVerExtensionManager xverManager, boolean debug, List errors, ValidatorSession session) {
    super(context, xverManager, debug, errors, session);
  }
  

  @Override
  public void listPropertyNames(List knownNames) {
    super.listPropertyNames(knownNames);
    addName(knownNames, "concept");
    addName(knownNames, "ancestor");
    addName(knownNames, "descendent");
    addName(knownNames, "parent");
    addName(knownNames, "child");
    addName(knownNames, "COMPONENT");
    addName(knownNames, "PROPERTY");
    addName(knownNames, "TIME_ASPCT");
    addName(knownNames, "SYSTEM");
    addName(knownNames, "SCALE_TYP");
    addName(knownNames, "METHOD_TYP");
    addName(knownNames, "CLASS");
    addName(knownNames, "VersionLastChanged");
    addName(knownNames, "CHNG_TYPE");
    addName(knownNames, "DefinitionDescription");
    addName(knownNames, "STATUS");
    addName(knownNames, "CLASSTYPE");
    addName(knownNames, "FORMULA");
    addName(knownNames, "EXMPL_ANSWERS");
    addName(knownNames, "SURVEY_QUEST_TEXT");
    addName(knownNames, "SURVEY_QUEST_SRC");
    addName(knownNames, "UNITSREQUIRED");
    addName(knownNames, "ORDER_OBS");
    addName(knownNames, "HL7_FIELD_SUBFIELD_ID");
    addName(knownNames, "EXTERNAL_COPYRIGHT_NOTICE");
    addName(knownNames, "EXAMPLE_UNITS");
    addName(knownNames, "EXAMPLE_UCUM_UNITS");
    addName(knownNames, "STATUS_REASON");
    addName(knownNames, "STATUS_TEXT");
    addName(knownNames, "CHANGE_REASON_PUBLIC");
    addName(knownNames, "COMMON_TEST_RANK");
    addName(knownNames, "COMMON_ORDER_RANK");
    addName(knownNames, "HL7_ATTACHMENT_STRUCTURE");
    addName(knownNames, "EXTERNAL_COPYRIGHT_LINK");
    addName(knownNames, "PanelType");
    addName(knownNames, "AskAtOrderEntry");
    addName(knownNames, "AssociatedObservations");
    addName(knownNames, "VersionFirstReleased");
    addName(knownNames, "ValidHL7AttachmentRequest");
    addName(knownNames, "answer-list");
    addName(knownNames, "MAP_TO");
    addName(knownNames, "analyte");
    addName(knownNames, "analyte-core");
    addName(knownNames, "analyte-suffix");
    addName(knownNames, "analyte-numerator");
    addName(knownNames, "analyte-divisor");
    addName(knownNames, "analyte-divisor-suffix");
    addName(knownNames, "challenge");
    addName(knownNames, "adjustment");
    addName(knownNames, "count");
    addName(knownNames, "time-core");
    addName(knownNames, "time-modifier");
    addName(knownNames, "system-core");
    addName(knownNames, "super-system");
    addName(knownNames, "analyte-gene");
    addName(knownNames, "category");
    addName(knownNames, "search");
    addName(knownNames, "rad-modality-modality-type");
    addName(knownNames, "rad-modality-modality-subtype");
    addName(knownNames, "rad-anatomic-location-region-imaged");
    addName(knownNames, "rad-anatomic-location-imaging-focus");
    addName(knownNames, "rad-anatomic-location-laterality-presence");
    addName(knownNames, "rad-anatomic-location-laterality");
    addName(knownNames, "rad-view-aggregation");
    addName(knownNames, "rad-view-view-type");
    addName(knownNames, "rad-maneuver-maneuver-type");
    addName(knownNames, "rad-timing");
    addName(knownNames, "rad-pharmaceutical-substance-given");
    addName(knownNames, "rad-pharmaceutical-route");
    addName(knownNames, "rad-reason-for-exam");
    addName(knownNames, "rad-guidance-for-presence");
    addName(knownNames, "rad-guidance-for-approach");
    addName(knownNames, "rad-guidance-for-action");
    addName(knownNames, "rad-guidance-for-object");
    addName(knownNames, "rad-subject");
    addName(knownNames, "document-kind");
    addName(knownNames, "document-role");
    addName(knownNames, "document-setting");
    addName(knownNames, "document-subject-matter-domain");
    addName(knownNames, "document-type-of-service");
    addName(knownNames, "answers-for");
    addName(knownNames, "answer");
    addName(knownNames, "answer-list");

  }

  @Override
  public PropertyValidationRules rulesForFilter(String property, EnumSet ops) {
    if (Utilities.existsInList(property, 
        "ancestor",
        "descendent",
        "parent",
        "child",
        "COMPONENT",
        "PROPERTY",
        "TIME_ASPCT",
        "SYSTEM",
        "SCALE_TYP",
        "METHOD_TYP",
        "CLASS",
        "answer-list",
        "MAP_TO",
        "analyte",
        "analyte-core",
        "analyte-suffix",
        "analyte-numerator",
        "analyte-divisor",
        "analyte-divisor-suffix",
        "challenge",
        "adjustment",
        "count",
        "time-core",
        "time-modifier",
        "system-core",
        "super-system",
        "analyte-gene",
        "category",
        "search",
        "rad-modality-modality-type",
        "rad-modality-modality-subtype",
        "rad-anatomic-location-region-imaged",
        "rad-anatomic-location-imaging-focus",
        "rad-anatomic-location-laterality-presence",
        "rad-anatomic-location-laterality",
        "rad-view-aggregation",
        "rad-view-view-type",
        "rad-maneuver-maneuver-type",
        "rad-timing",
        "rad-pharmaceutical-substance-given",
        "rad-pharmaceutical-route",
        "rad-reason-for-exam",
        "rad-guidance-for-presence",
        "rad-guidance-for-approach",
        "rad-guidance-for-action",
        "rad-guidance-for-object",
        "rad-subject",
        "document-kind",
        "document-role",
        "document-setting",
        "document-subject-matter-domain",
        "document-type-of-service",
        "answers-for",
        "answer",
        "answer-list")) {
        return new PropertyValidationRules(PropertyFilterType.Code, CodeValidationRule.Error, addToOps(ops, PropertyOperation.Equals, PropertyOperation.Exists, PropertyOperation.RegEx, PropertyOperation.In, PropertyOperation.NotIn)).setChange(true);      
      }
      
      if (Utilities.existsInList(property,
          "VersionLastChanged",
          "CHNG_TYPE",
          "DefinitionDescription",
          "STATUS",
          "CLASSTYPE",
          "FORMULA",
          "EXMPL_ANSWERS",
          "SURVEY_QUEST_TEXT",
          "SURVEY_QUEST_SRC",
          "UNITSREQUIRED",
          "ORDER_OBS",
          "HL7_FIELD_SUBFIELD_ID",
          "EXTERNAL_COPYRIGHT_NOTICE",
          "EXAMPLE_UNITS",
          "EXAMPLE_UCUM_UNITS",
          "STATUS_REASON",
          "STATUS_TEXT",
          "CHANGE_REASON_PUBLIC",
          "COMMON_TEST_RANK",
          "COMMON_ORDER_RANK",
          "HL7_ATTACHMENT_STRUCTURE",
          "EXTERNAL_COPYRIGHT_LINK",
          "PanelType",
          "AskAtOrderEntry",
          "AssociatedObservations",
          "VersionFirstReleased",
          "ValidHL7AttachmentRequest")) { 
        return new PropertyValidationRules(PropertyFilterType.String, CodeValidationRule.None, addToOps(ops, PropertyOperation.Equals, PropertyOperation.Exists, PropertyOperation.RegEx, PropertyOperation.In, PropertyOperation.NotIn));
      }

      if (Utilities.existsInList(property, 
        "STATUS")) { 
        return new PropertyValidationRules(PropertyFilterType.CodeList, CodeValidationRule.None, addToOps(ops, PropertyOperation.Equals, PropertyOperation.RegEx, PropertyOperation.In, PropertyOperation.NotIn))
            .setCodes("ACTIVE", "TRIAL", "DISCOURAGED", "DEPRECATED");
      }

      if (Utilities.existsInList(property, 
        "copyright")) {
        return new PropertyValidationRules(PropertyFilterType.CodeList, CodeValidationRule.None, addToOps(ops, PropertyOperation.Equals, PropertyOperation.RegEx, PropertyOperation.In, PropertyOperation.NotIn)).setCodes("LOINC", "3rdParty");      
      }

      if (Utilities.existsInList(property, 
        "concept")) {
        return new PropertyValidationRules(PropertyFilterType.Code, CodeValidationRule.None, addToOps(ops, PropertyOperation.Equals, PropertyOperation.IsA, PropertyOperation.IsNotA));      
      }
      if (Utilities.existsInList(property, 
          "code")) {
          return new PropertyValidationRules(PropertyFilterType.Code, CodeValidationRule.None, addToOps(ops, PropertyOperation.Equals, PropertyOperation.IsA, PropertyOperation.IsNotA));      
        }
      return null;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy