# frozen_string_literal: true

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Cloud
    module DocumentAI
      module V1
        # The schema defines the output of the processed document by a processor.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Display name to show to users.
        # @!attribute [rw] description
        #   @return [::String]
        #     Description of the schema.
        # @!attribute [rw] entity_types
        #   @return [::Array<::Google::Cloud::DocumentAI::V1::DocumentSchema::EntityType>]
        #     Entity types of the schema.
        # @!attribute [rw] metadata
        #   @return [::Google::Cloud::DocumentAI::V1::DocumentSchema::Metadata]
        #     Metadata of the schema.
        class DocumentSchema
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # EntityType is the wrapper of a label of the corresponding model with
          # detailed attributes and limitations for entity-based processors. Multiple
          # types can also compose a dependency tree to represent nested types.
          # @!attribute [rw] enum_values
          #   @return [::Google::Cloud::DocumentAI::V1::DocumentSchema::EntityType::EnumValues]
          #     If specified, lists all the possible values for this entity.  This
          #     should not be more than a handful of values.  If the number of values
          #     is >10 or could change frequently use the `EntityType.value_ontology`
          #     field and specify a list of all possible values in a value ontology
          #     file.
          # @!attribute [rw] display_name
          #   @return [::String]
          #     User defined name for the type.
          # @!attribute [rw] name
          #   @return [::String]
          #     Name of the type. It must be unique within the schema file and
          #     cannot be a "Common Type".  The following naming conventions are used:
          #
          #     - Use `snake_casing`.
          #     - Name matching is case-sensitive.
          #     - Maximum 64 characters.
          #     - Must start with a letter.
          #     - Allowed characters: ASCII letters `[a-z0-9_-]`.  (For backward
          #       compatibility internal infrastructure and tooling can handle any ascii
          #       character.)
          #     - The `/` is sometimes used to denote a property of a type.  For example
          #       `line_item/amount`.  This convention is deprecated, but will still be
          #       honored for backward compatibility.
          # @!attribute [rw] base_types
          #   @return [::Array<::String>]
          #     The entity type that this type is derived from.  For now, one and only
          #     one should be set.
          # @!attribute [rw] properties
          #   @return [::Array<::Google::Cloud::DocumentAI::V1::DocumentSchema::EntityType::Property>]
          #     Description the nested structure, or composition of an entity.
          class EntityType
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Defines the a list of enum values.
            # @!attribute [rw] values
            #   @return [::Array<::String>]
            #     The individual values that this enum values type can include.
            class EnumValues
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end

            # Defines properties that can be part of the entity type.
            # @!attribute [rw] name
            #   @return [::String]
            #     The name of the property.  Follows the same guidelines as the
            #     EntityType name.
            # @!attribute [rw] display_name
            #   @return [::String]
            #     User defined name for the property.
            # @!attribute [rw] value_type
            #   @return [::String]
            #     A reference to the value type of the property.  This type is subject
            #     to the same conventions as the `Entity.base_types` field.
            # @!attribute [rw] occurrence_type
            #   @return [::Google::Cloud::DocumentAI::V1::DocumentSchema::EntityType::Property::OccurrenceType]
            #     Occurrence type limits the number of instances an entity type appears
            #     in the document.
            class Property
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods

              # Types of occurrences of the entity type in the document.  This
              # represents the number of instances, not mentions, of an entity.
              # For example, a bank statement might only have one
              # `account_number`, but this account number can be mentioned in several
              # places on the document.  In this case, the `account_number` is
              # considered a `REQUIRED_ONCE` entity type. If, on the other hand, we
              # expect a bank statement to contain the status of multiple different
              # accounts for the customers, the occurrence type is set to
              # `REQUIRED_MULTIPLE`.
              module OccurrenceType
                # Unspecified occurrence type.
                OCCURRENCE_TYPE_UNSPECIFIED = 0

                # There will be zero or one instance of this entity type.  The same
                # entity instance may be mentioned multiple times.
                OPTIONAL_ONCE = 1

                # The entity type will appear zero or multiple times.
                OPTIONAL_MULTIPLE = 2

                # The entity type will only appear exactly once.  The same
                # entity instance may be mentioned multiple times.
                REQUIRED_ONCE = 3

                # The entity type will appear once or more times.
                REQUIRED_MULTIPLE = 4
              end
            end
          end

          # Metadata for global schema behavior.
          # @!attribute [rw] document_splitter
          #   @return [::Boolean]
          #     If true, a `document` entity type can be applied to subdocument
          #     (splitting). Otherwise, it can only be applied to the entire document
          #     (classification).
          # @!attribute [rw] document_allow_multiple_labels
          #   @return [::Boolean]
          #     If true, on a given page, there can be multiple `document` annotations
          #     covering it.
          # @!attribute [rw] prefixed_naming_on_properties
          #   @return [::Boolean]
          #     If set, all the nested entities must be prefixed with the parents.
          # @!attribute [rw] skip_naming_validation
          #   @return [::Boolean]
          #     If set, we will skip the naming format validation in the schema. So the
          #     string values in `DocumentSchema.EntityType.name` and
          #     `DocumentSchema.EntityType.Property.name` will not be checked.
          class Metadata
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end
      end
    end
  end
end