openapi: 3.1.0
info:
  contact:
    email: integrations@luminovo.com
  description: >
    The base URL of Luminovo's API is `https://api.luminovo.com/`.


    **Versioning**


    This API uses data model versioning to ensure backwards compatibility. The
    data model version is specified using the `Accept` header. For example,
    `Accept: application/api.luminovo.rfq-v1+json` specifies version 1 of the
    RfQ data model. Refer to each endpoint's description for the correct
    `Accept` header value. If no `Accept` header is provided, the API will
    return a 404 error.


    **Handling Enum Types**


    For all enum types in the API, you must account for an `"Unknown"` case.
    This ensures forward-compatibility, as new enum variants may be introduced
    without notice within the same data model version. For example, an enum
    `Status` with variants `Ok` and `Error` may gain a new variant `Warning` at
    any time.
  license:
    name: Proprietary
    url: https://www.luminovo.com
  title: Luminovo API
  version: 1.0.0
  x-logo:
    backgroundColor: '#22283c'
    url: >-
      https://uploads-ssl.webflow.com/5c7fe6c71d33841ef1f9ed4f/5c7fe6c71d33847079f9ee30_logo2.svg
servers:
  - url: https://api.luminovo.com
tags:
  - description: >
      An Assembly is a logical group of items that should be assembled into one
      unit. It represents a complete product or sub-product that can be
      manufactured, sourced, and managed as a cohesive unit.

      You can view assemblies in Luminovo under the "Assemblies" tab.
    name: Assembly
    x-displayName: Assembly
  - description: Authentication and token retrieval endpoints.
    name: Authentication
    x-displayName: Authentication
  - description: >
      BOM stands for Bill of Materials - it's a comprehensive list of all
      components, parts, and assemblies required to manufacture a product.

      You can view BOMs in Luminovo under the respective RfQ.
    name: BOM
    x-displayName: BOM
  - description: >
      Components are the fundamental building blocks that make up electronic
      assemblies (PCBs, products, etc.).

      You can view components in Luminovo under the "Parts" tab.

      There are `OffTheShelf` and `Custom` components in order to get good data
      quality in Luminovo.

      - `OffTheShelf` are all electonic components which have a MPN and can be
      purchased from an electronic parts suppliers.

      - `Custom` are all other non-electronic components, such as screws,
      packaging materials, lables, etc. Also, custom are all electronic
      components which are not standartized and don't have an MPN.
    name: Components
    x-displayName: Components
  - description: |
      Get information about a custom part.
    name: Custom Part
    x-displayName: Custom Part
  - description: |
      Search, Create and Get Customers.
    name: Customer
    x-displayName: Customer
  - description: >
      **Deprecated.** The demand import endpoint is deprecated and will be
      removed in a future version.


      A demand in Luminovo is a request for a specific quantity of electronic
      parts or assemblies

      that need to be delivered by a certain date. Demands are attached to
      assemblies or components

      within Luminovo based on the internal part number.
    name: Demand
    x-displayName: Demand
  - description: |
      Retrieve calculation plans and their configurations for RFQs.
    name: Flexible Calculation
    x-displayName: Flexible Calculation
  - description: |
      Get, create, delete and update all your manufacturing resources.
    name: Manufacturing and Calculation
    x-displayName: Manufacturing and Calculation
  - description: >
      Import offers and inventory data, create custom part offers and get a PCB
      offer.
    name: Offers and Inventory
    x-displayName: Offers and Inventory
  - description: >
      This section is relevant for the users of Luminovo’s Customer
      Collaboration Platform.

      Use the following endpoints to customize the order options your customer
      receives when ordering via the Customer Collaboration Platform.
    name: Order Management
    x-displayName: Order Management
  - description: PCB-related endpoints and resources.
    name: PCB
    x-displayName: PCB
  - description: |
      Pick and Place (PnP) data for assemblies.
    name: PnP
    x-displayName: PnP
  - description: >
      **Deprecated.** These endpoints are deprecated and will not be maintained
      going forward.

      If you currently rely on them and this is a blocker, please reach out to
      us.


      Get and create purchase orders for a sourcing scenario.
    name: Purchase Orders
    x-displayName: Purchase Orders
  - description: |
      You can upload the quotation for an RfQ.
    name: Quotation
    x-displayName: Quotation
  - description: |
      Get one or all RfQ’s, delete, create or update one RfQ.
    name: RfQ
    x-displayName: RfQ
  - description: >
      A sourcing scenario defines a sourcing configuration for a project. Each
      scenario specifies which

      assemblies to source (demands), their required quantities, and a set of
      solution preferences

      that control how offers are evaluated and selected.


      Sourcing scenarios belong to a project, which is either an **RFQ**
      (Request for Quotation) or a

      **Negotiation**. A single project can have multiple scenarios, allowing
      you to compare

      different sourcing strategies side by side — for example, different order
      quantities,

      supplier preferences, or lead time targets.


      **Note on solution preferences:** Sourcing scenarios include detailed
      solution preferences that control

      how offers are evaluated (e.g., lead time targets, supplier preferences,
      inventory handling,

      pricing filters, packaging, and excess thresholds). These settings are
      complex and evolve

      frequently — we update them on a monthly basis. For this reason,
      **managing solution

      preferences via the API is not supported**. Please configure them through
      the Luminovo UI

      instead.
    name: Sourcing Scenario
    x-displayName: Sourcing Scenario
  - description: |
      Supplier-management related endpoints.
    name: Supplier
    x-displayName: Supplier
  - description: |
      Get all your Luminovo users.
    name: User
    x-displayName: User
paths:
  /assemblies/import:
    post:
      operationId: PostAssemblies
      parameters:
        - description: >
            In case it is set to "true" it will allow importing assemblies even
            if some of the referenced IPNs do not exist in Luminovo.

            These IPNs will then be recorded in BOM item notes. If set to
            “false”, the assemblies with missing IPNs will get skipped during
            import
          examples:
            enabled:
              value: 'true'
          in: query
          name: skip_missing_ipns
          required: false
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Assemblies'
        description: >
          This endpoint allows importing assembly data.


          **The import need not include all your assemblies.**

          **Assemblies that were uploaded previously but are not present in a
          new upload are not deleted.**


          An assembly is a logical group of items that should be assembled into
          one unit.

          Assemblies can be nested via subassemblies. Nesting has to be acyclic,
          that is no

          assembly may be referenced in any of its own subassemblies.


          Assemblies are uniquely identified by the combination of
          `internal_part_number` and

          `revision.` That is, an assembly with the same `internal_part_number`
          and `revision` may

          not be listed twice. All duplicated assemblies will be skipped during
          import.


          Finally, an assembly will also not be imported if it is part of a
          circular reference.

          That is, if an assembly is referenced in any of its own subassemblies.
        required: true
      responses:
        '207':
          content:
            application/json:
              schema:
                properties:
                  items:
                    $ref: '#/components/schemas/AssemblyImportResponse'
                type: object
          description: Successfull import
        '400':
          description: Bad request
      summary: Import Assembly Data
      tags:
        - Assembly
      security:
        - BearerAuth: []
  /components/import:
    post:
      operationId: PostComponents
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Components'
        description: >
          Import your ERP component data into Luminovo.


          Important Notes:


          - We will update your data once/day.

          For technical reasons, data sent to this endpoint will be imported
          only once a day on weekdays (Mon-Fri, early in the morning)

          on our side. Hence, newly uploaded data will therefore usually only
          become available in the product the next day.

          Only the last uploaded data will be imported, so every new upload to
          this endpoint will overwrite the previous one from the same day.


          - Include all your components in the import.

          Components with IPNs that were uploaded previously but are not present
          in a new upload are deleted.


          For best results and most up-to-date component library, we recommend
          uploading your Components once/day at 11 pm CET.
        required: true
      responses:
        '202':
          description: Accepted response
        '400':
          description: Bad request
      summary: Import Component Data
      tags:
        - Components
      security:
        - BearerAuth: []
  /offers/import:
    post:
      operationId: PostOffers
      requestBody:
        content:
          application/json:
            examples:
              full-inventory-ipn-offer:
                description: An inventory offer for an IPN with all fields specified.
                value:
                  - availability:
                      available_stock: 5626
                      lead_time: 254
                      on_order:
                        - date: '2023-12-24'
                          quantity: 1000
                        - date: '2024-01-08'
                          quantity: 2000
                      total_stock: 9386
                    customer:
                      name: MyCustomer
                      number: '9987'
                    notes: Example notes
                    packaging: Bag
                    part:
                      internal_part_number: 1000-10
                    prices:
                      - moq: 1
                        mpq: 10
                        unit_price:
                          amount: '0.0100'
                          currency: EUR
                      - moq: 100
                        mpq: 10
                        unit_price:
                          amount: '0.0090'
                          currency: EUR
                    supplier:
                      supplier: Inventory Site
                      supplier_number: SITE-001
                      supplier_part_number: INV-EXT-SUP-NUMBER
                      type: Internal
                    unit_of_measurement:
                      quantity: 0.1
                      unit: Kilogram
                    valid_until: '2030-04-01'
              full-supplier-part-offer:
                description: >-
                  An supplier offer for an off-the-shelf part with all fields
                  specified.
                value:
                  - availability:
                      available_stock: 5626
                      lead_time: 254
                      on_order:
                        - date: '2023-12-24'
                          quantity: 1000
                        - date: '2024-01-08'
                          quantity: 2000
                    customer:
                      name: MyCustomer
                      number: '9987'
                    notes: Example notes
                    packaging: Reel
                    part:
                      manufacturer: Panasonic
                      manufacturer_part_number: ERJ-B2BF1R1V
                    price_type: Contract
                    prices:
                      - moq: 1
                        mpq: 10
                        unit_price:
                          amount: '0.0100'
                          currency: EUR
                      - moq: 100
                        mpq: 10
                        unit_price:
                          amount: '0.0090'
                          currency: EUR
                    supplier:
                      stock_location: USA
                      supplier: Mouser
                      supplier_number: SUP-020
                      supplier_part_number: 667-ERJ-B2BF1R1V
                      type: External
                    unit_of_measurement:
                      quantity: 1
                      unit: Piece
                    valid_until: '2030-04-01'
              minimal-inventory-ipn-offer:
                description: >-
                  An inventory offer for an IPN with a minimal number of fields
                  specified.
                value:
                  - availability:
                      available_stock: 251
                    part:
                      internal_part_number: 1000-10
                    prices:
                      - unit_price:
                          amount: '0.500'
                          currency: EUR
                    supplier:
                      type: Internal
              minimal-supplier-part-offer:
                description: >-
                  An supplier offer for an off-the-shelf part with a minimal
                  number of fields specified.
                value:
                  - availability:
                      available_stock: 251
                    part:
                      manufacturer: Panasonic
                      manufacturer_part_number: ERJ-B2BF1R1V
                    prices:
                      - unit_price:
                          amount: '0.500'
                          currency: EUR
                    supplier:
                      supplier_number: SUP-020
                      type: External
            schema:
              $ref: '#/components/schemas/OffersImport'
        description: >
          This endpoint allows importing of ERP offer and inventory data into
          Luminovo.


          ## Types of Offers

          There are two types of offers that can be imported:


          ### 1. Inventory Offers

          For inventory offers (or simply your inventory), set `supplier.type:
          "Internal"`. The supplier field should reference your inventory site
          location,

          which needs to be configured in advance in Luminovo (Settings ->
          Sites). If no supplier is specified, the default

          inventory site will be used.


          ### 2. Supplier Offers

          For supplier offers, set `supplier.type: "External"`. The supplier
          field should reference the actual supplier

          (e.g., "Mouser", "Arrow", etc.).


          ## Updating Existing Offers

          When importing offers, previously imported offers will be replaced if
          they are equivalent on the following fields:
            - `part`: `internal_part_number` or our resolved part through the given `manufacturer` and `manufacturer_part_number`
            - `supplier`: the resolved internal or external supplier through the given `supplier` or `supplier_number`.
            - `supplier_part_number`
            - `customer`: the resolved customer through the given `name` or `number`.
            - `packaging`
            - `price_type`
            - `import_context`
        required: true
      responses:
        '207':
          content:
            application/json:
              examples:
                all-success:
                  description: >-
                    The standard case when all offer items in the request were
                    parsed and handled successfully.
                  value:
                    - description: Created
                      part:
                        internal_part_number: 1000-10
                      status: 200
                    - description: Created
                      part:
                        manufacturer: Panasonic
                        manufacturer_part_number: ERJ-B2BF1R1V
                      status: 200
                unmatched-part:
                  description: >-
                    A few showcases of error responses when the manufacturer or
                    MPN cannot be matched to a part.
                  value:
                    - description: >-
                        The manufacturer 'ExampleManufacturer' cannot be found.
                        Please contact support if this manufacturer should be
                        added to Luminovo.
                      part:
                        manufacturer: ExampleManufacturer
                        manufacturer_part_number: MPN
                      status: 400
                    - description: >-
                        No part with manufacturer part number 'ExampleMpn' can
                        be found from the manufacturer 'Panasonic'. Please check
                        if the part can be found in Luminovo, and possibly use
                        an alternative part number.
                      part:
                        manufacturer: Panasonic
                        manufacturer_part_number: ExampleMpn
                      status: 400
              schema:
                $ref: '#/components/schemas/PostOffersImportResponse'
          description: Response for importing new offer data
        '400':
          description: Bad request
        '403':
          description: Not authorized
      summary: Import Offers and Inventory
      tags:
        - Offers and Inventory
      security:
        - BearerAuth: []
  /purchase-orders/{rfq_id}:
    get:
      deprecated: true
      description: >
        **Deprecated.** This endpoint is deprecated and will not be maintained
        going forward.

        If you currently rely on this endpoint and this is a blocker, please
        reach out to us.


        Get all the purchase orders from Luminovo relating to one RfQ.
      operationId: GetPurchaseOrders
      parameters:
        - allowEmptyValue: false
          description: The ID of the RfQ
          in: path
          name: rfq_id
          required: true
          schema:
            format: uuid
            type: string
        - description: >
            The sourcing scenario for which to filter purchase order.


            When a customer has confirmed an order, meaning they have paid for
            one of the sourcing scenarios, we can infer the
            `sourcing_scenario_id`. This is why this parameter is optional.


            Important: if purchase orders have already been created for another
            sourcing scenario, this endpoint

            will return an empty list of purchase orders. This is a safety
            precaution to prevent accidentally ordering two different sourcing
            scenarios.
          in: query
          name: sourcing_scenario_id
          required: false
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPurchaseOrderResponse'
          description: Success response
        '403':
          description: Not authorized
      summary: Get Purchase Orders
      tags:
        - Purchase Orders
      security:
        - BearerAuth: []
    post:
      deprecated: true
      description: >
        **Deprecated.** This endpoint is deprecated and will not be maintained
        going forward.

        If you currently rely on this endpoint and this is a blocker, please
        reach out to us.


        Create or update purchase orders corresponding to one RfQ.

        Typically, you first get the purchase orders into your ERP, perform some
        transformations,

        and send the updated purchase orders to Luminovo.
      operationId: CreatePurchaseOrders
      parameters:
        - allowEmptyValue: false
          description: The ID of the RfQ
          in: path
          name: rfq_id
          required: true
          schema:
            format: uuid
            type: string
        - description: >
            The sourcing scenario for which we want to create a purchase order.


            Defaults to the sourcing scenario that has been paid for by the
            customer.

            If no sourcing scenario has been paid for, this parameter is
            required.
          in: query
          name: sourcing_scenario_id
          required: false
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePurchaseOrdersRequest'
        required: true
      responses:
        '200':
          description: Success response
        '403':
          description: Not authorized
      summary: Create Purchase Orders
      tags:
        - Purchase Orders
      security:
        - BearerAuth: []
  /token:
    post:
      operationId: PostToken
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenRequest'
        description: >
          ## Getting an access token

          To use the Luminovo API you need to get an access token using your
          authentication token.

          If you are an API customer, you can create an API token in the API
          Settings: https://{insert tenant name
          here}.luminovo.com/settings/organization/api-integration.

          If you want to upgrade your API package, reach out to your customer
          success manager.


          ```curl

          curl --request POST \
            --url https://api.luminovo.com/token  \
            --header 'content-type: application/json' \
            --data '{"token":"cb7daea2-df5f-44de-99cc-213668e6c991"}'
          ```

          *Response*

          ```

          eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

          ```

          ### API Request


          You can use this `bearer token` with an `Authorization Header` in your
          request to obtain authorized access to Luminovo's API.

          ```curl

          curl --request GET \

          --url https://api.luminovo.com/{endpoint} \

          --header 'authorization: Bearer
          eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'

          ```


          ### Token expiration

          Bear in mind that the access token is only valid for 1 hour. You can
          always examine the JWT token by decoding it (e.g. using
          https://jwt.io/) and checking the `exp` claim. When a token expires
          please acquire a new one using the same method discussed earlier. The
          rotation of access tokens avoids exposure through token leakage. It is
          perfectly fine to refresh a token before its expiration!


          ### Token length

          Please note that the length of the bearer token can vary over time.
          Your implementation should not make assumptions about the token length
          as it may increase or decrease based on future authentication system
          updates. Always handle the complete token as provided by the API
          regardless of its size.
      responses:
        '200':
          content:
            text/plain:
              schema:
                description: The JWT access token
                examples:
                  - >-
                    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
                type: string
          description: Success response
        '401':
          description: Authentication failed
      security: []
      summary: Authenticating to the API
      tags:
        - Authentication
  /assemblies:
    get:
      tags:
        - Assembly
      summary: Get Assembly
      description: Queries assembly details given assembly id(s).
      operationId: GetAssembly
      parameters:
        - name: assembly_ids
          in: query
          description: Assembly ids to retrieve (comma-separated list).
          required: true
          schema:
            type: array
            items:
              type: string
              format: uuid
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.assembly-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/AssemblyAcceptHeader'
      responses:
        '200':
          description: The requested assemblies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.rfq.v1.AllAssembliesResponse'
      security:
        - BearerAuth: []
    post:
      tags:
        - Assembly
      summary: Create Assembly
      description: Creates a new assembly under a given RfQ.
      operationId: CreateAssembly
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.assembly-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/AssemblyAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.assembly.v1.AssemblyInput'
        required: true
      responses:
        '200':
          description: Assembly created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.assembly.v1.SimpleAssemblyResponse'
      security:
        - BearerAuth: []
  /assemblies/{assembly_id}/manufacturing-data/export:
    get:
      tags:
        - Manufacturing and Calculation
      summary: Get Manufacturing Costs for an Assembly
      description: >-
        Get the complete manufacturing related costs for an assembly. Returns
        the same data that can be

        exported via excel on Luminovo.
      operationId: get_assembly_manufacturing_data_export_v1
      parameters:
        - name: assembly_id
          in: path
          description: The ID of the assembly to fetch details for
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: >-
            Set this to
            `application/api.luminovo.assembly.manufacturing-data.export-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/ManufacturingDataExportAcceptHeader'
      responses:
        '200':
          description: Assembly manufacturing cost details
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.CustomOrderSelectionOptionInput
      security:
        - BearerAuth: []
  /assemblies/{assembly_id}/pcb:
    post:
      tags:
        - Assembly
      summary: Create Assembly PCB
      description: Creates a PCB and links it to an assembly.
      operationId: CreateAssemblyPcb
      parameters:
        - name: assembly_id
          in: path
          description: ID of the assembly to create a PCB for.
          required: true
          schema:
            type: string
        - name: without_files
          in: query
          description: Whether to create the PCB without files.
          required: false
          schema:
            type:
              - boolean
              - 'null'
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.assembly-pcb-v1+json`.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.assembly.v1.CreateAssemblyPcbRequest'
        required: true
      responses:
        '200':
          description: PCB created successfully.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.assembly.v1.CreateAssemblyPcbResponse
      security:
        - BearerAuth: []
  /calculations/assembly-costs:
    get:
      tags:
        - Manufacturing and Calculation
      summary: Get Calculated Assembly Cost
      description: >-
        Query the calculation table for an assembly. Return material and
        manufacturing cost as well as all additional cost configured in the
        calculation table.

        The response includes an is_cost_frozen field that indicates whether the
        cost is frozen.
      operationId: GetCalculationAssemblyCost
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.assembly-cost-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/AssemblyCostAcceptHeader'
        - name: assembly_id
          in: query
          description: The ID of the assembly for which to get the cost.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Get calculated cost of an assembly.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.calculation.calculation_assembly_cost.v1.CalculationAssemblyCostResponse
      security:
        - BearerAuth: []
  /components/{ipn}/risk:
    get:
      tags:
        - Components
      summary: Get Component Risk
      description: Get compliance and lifecycle of a component.
      operationId: GetComponentRisk
      parameters:
        - name: ipn
          in: path
          description: >-
            The IPN (Internal Part Number) value of the component to fetch
            details for
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.component-risk-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/ComponentRiskAcceptHeader'
      responses:
        '200':
          description: Component risk.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.ipn.v1.ComponentRiskResponse'
      security:
        - BearerAuth: []
  /custom-parts/{id}:
    get:
      tags:
        - Custom Part
      summary: Get Custom Part
      description: >-
        Get information about a custom part.

        Information includes the description, part type, and compliance
        information.
      operationId: GetCustomPart
      parameters:
        - name: id
          in: path
          description: id of the custom part to retrieve
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.custom-part-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomPartAcceptHeader'
      responses:
        '200':
          description: Custom part.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.custom_part.v1.CustomPart'
      security:
        - BearerAuth: []
  /custom-parts/{id}/resources:
    get:
      tags:
        - Custom Part
      summary: Get Custom Part Resources
      description: >-
        Retrieves URLs for resources/files attached to the custom part.

        URL to retrieve the actual file is only valid temporarily.

        You need to call this endpoint again to get a new valid URL after some
        time.
      operationId: GetCustomPartResources
      parameters:
        - name: id
          in: path
          description: id of the custom part resources should be retrieved from
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.resource-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomPartResourceAcceptHeader'
      responses:
        '200':
          description: File URL response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.resource.v1.ResourceUrlResponse'
      security:
        - BearerAuth: []
  /customers:
    get:
      tags:
        - Customer
      summary: Search or Get All Customers
      description: >-
        Queries all customers given a specific filter. Filter is optional. If
        filter is not set, returns all customers.
      operationId: SearchCustomer
      parameters:
        - name: customer_number
          in: query
          required: false
          schema:
            type:
              - string
              - 'null'
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-v1+json`.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Customers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.customer.v1.AllCustomerResponse'
      security:
        - BearerAuth: []
    post:
      tags:
        - Customer
      summary: Create New Customer
      description: >-
        Create a new customer.

        If successful, the customer will be returned in the response with its ID
        referenced.
      operationId: CreateCustomer
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.customer.v1.CustomerInput'
        required: true
      responses:
        '200':
          description: Customer created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.customer.v1.CustomerResponse'
      security:
        - BearerAuth: []
  /customers/{id}:
    get:
      tags:
        - Customer
      summary: Get Customer
      description: Get a customer based on its ID.
      operationId: GetCustomer
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerAcceptHeader'
      responses:
        '200':
          description: Single customer response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.customer.v1.CustomerResponse'
      security:
        - BearerAuth: []
    delete:
      tags:
        - Customer
      summary: Delete Customer
      description: Delete a customer by its ID.
      operationId: DeleteCustomer
      parameters:
        - name: id
          in: path
          description: The ID of the customer to delete
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerAcceptHeader'
      responses:
        '204':
          description: Customer deleted.
      security:
        - BearerAuth: []
    patch:
      tags:
        - Customer
      summary: Update Customer
      description: Update a customer by its ID.
      operationId: UpdateCustomer
      parameters:
        - name: id
          in: path
          description: The ID of the customer to update
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.customer.v1.CustomerUpdate'
        required: true
      responses:
        '200':
          description: Customer updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.customer.v1.CustomerResponse'
      security:
        - BearerAuth: []
  /customers/{id}/users:
    get:
      tags:
        - Customer
      summary: Get Customer Users
      description: Returns all users associated with a customer.
      operationId: GetCustomerUsers
      parameters:
        - name: id
          in: path
          description: The ID of the customer.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-user-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerUserAcceptHeader'
      responses:
        '200':
          description: List of users for the customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.user.v1.AllUsers'
      security:
        - BearerAuth: []
    post:
      tags:
        - Customer
      summary: Invite Customer User
      description: >-
        Invite a user to a customer. The user will receive an email invitation
        to join the customer portal.
      operationId: InviteCustomerUser
      parameters:
        - name: id
          in: path
          description: The ID of the customer to invite the user to.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-user-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerUserAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.user.v1.UserInviteInput'
        required: true
      responses:
        '200':
          description: User invite sent successfully.
      security:
        - BearerAuth: []
  /customers/{id}/users/{user_id}:
    delete:
      tags:
        - Customer
      summary: Delete Customer User
      description: Delete a user from a customer.
      operationId: DeleteCustomerUser
      parameters:
        - name: id
          in: path
          description: The ID of the customer.
          required: true
          schema:
            type: string
        - name: user_id
          in: path
          description: The ID of the user to delete.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-user-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerUserAcceptHeader'
      responses:
        '204':
          description: User deleted successfully.
      security:
        - BearerAuth: []
    patch:
      tags:
        - Customer
      summary: Update Customer User
      description: Update a user associated with a customer.
      operationId: UpdateCustomerUser
      parameters:
        - name: id
          in: path
          description: The ID of the customer.
          required: true
          schema:
            type: string
        - name: user_id
          in: path
          description: The ID of the user to update.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.customer-user-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomerUserAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.user.v1.UserUpdateInput'
        required: true
      responses:
        '200':
          description: User updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.user.v1.User'
      security:
        - BearerAuth: []
  /demand/import:
    post:
      tags:
        - Demand
      summary: Create Demand
      description: >-
        **Deprecated.** This endpoint is deprecated and will be removed in a
        future version.


        Create a demand scenario for IPNs. You can create demands for both
        assemblies and single components.

        If a demand gets created for an assembly, it gets propagated to the
        assembly's subassemblies and BOM items.
      operationId: doc_clear_and_create_demands_v1
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.demand-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/DemandAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DemandCreationRequest'
        required: true
      responses:
        '207':
          description: Demands created.
      deprecated: true
      security:
        - BearerAuth: []
  /flexible-calculation/plans/rfq/{rfq_id}:
    get:
      tags:
        - Flexible Calculation
      summary: Get Calculation Plans by RFQ (v0 - unstable)
      description: >-
        Retrieve all flexible calculation plans associated with a given RFQ.


        **Note:** This endpoint uses API version v0, which indicates an unstable
        contract.

        Breaking changes may be introduced without a version bump. Do not rely
        on the

        exact shape of the response for long-lived integrations until this is
        promoted to v1.
      operationId: doc_get_plans_by_rfq_v0
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.flexible-calculation-v0+json`.
          required: true
          schema:
            $ref: '#/components/schemas/FlexibleCalculationAcceptHeader'
        - name: rfq_id
          in: path
          description: The ID of the RFQ.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.flexible_calculation.v0.AllCalculationPlansResponse
        '401':
          description: Unauthorized, please check permissions for the token
      security:
        - BearerAuth: []
  /flexible-calculation/plans/{id}:
    get:
      tags:
        - Flexible Calculation
      summary: Get Calculation Plan (v0 - unstable)
      description: >-
        Retrieve a single flexible calculation plan by its ID.


        **Note:** This endpoint uses API version v0, which indicates an unstable
        contract.

        Breaking changes may be introduced without a version bump. Do not rely
        on the

        exact shape of the response for long-lived integrations until this is
        promoted to v1.
      operationId: doc_get_plan_v0
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.flexible-calculation-v0+json`.
          required: true
          schema:
            $ref: '#/components/schemas/FlexibleCalculationAcceptHeader'
        - name: id
          in: path
          description: The ID of the calculation plan.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.flexible_calculation.v0.CalculationPlanResponse
        '401':
          description: Unauthorized, please check permissions for the token
        '404':
          description: Not found
      security:
        - BearerAuth: []
  /manufacturing/resource:
    get:
      tags:
        - Manufacturing and Calculation
      summary: Get All Resources
      description: >-
        Get an array of all resources. Resources represent all machinery and
        employees relevant to production including their

        hourly rates (e.g. SMT Personnel or Fuji NXT Pick and Place Machine).


        Resources can be used in activities to get time calculations as well as
        costs associated with them.
      operationId: get_resource_many_v1
      parameters:
        - name: Accept
          in: header
          description: >-
            Set this to
            `application/api.luminovo.manufacturing.resource-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/ManufacturingResourceAcceptHeader'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: >-
                    #/components/schemas/types.manufacturing.resource.v1.ResourceResponse
      security:
        - BearerAuth: []
    post:
      tags:
        - Manufacturing and Calculation
      summary: Create New Resource
      description: Create a new manufacturing resource.
      operationId: doc_post_resource_v1
      parameters:
        - name: Accept
          in: header
          description: >-
            Set this to
            `application/api.luminovo.manufacturing.resource-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/ManufacturingResourceAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/types.manufacturing.resource.v1.ResourceInput
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.manufacturing.resource.v1.ResourceResponse
        '401':
          description: Unauthorized, please check permissions for the token
        '422':
          description: Not processable
      security:
        - BearerAuth: []
  /manufacturing/resource/{id}:
    delete:
      tags:
        - Manufacturing and Calculation
      summary: Delete Resource
      description: Delete a resource using its ID.
      operationId: doc_delete_resource_v1
      parameters:
        - name: Accept
          in: header
          description: >-
            Set this to
            `application/api.luminovo.manufacturing.resource-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/ManufacturingResourceAcceptHeader'
        - name: id
          in: path
          description: The ID of the resource to delete.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful response
        '401':
          description: Unauthorized, please check permissions for the token
        '404':
          description: Not found
      security:
        - BearerAuth: []
    patch:
      tags:
        - Manufacturing and Calculation
      summary: Update Resource
      description: Update a resource using its ID.
      operationId: doc_patch_resource_v1
      parameters:
        - name: Accept
          in: header
          description: >-
            Set this to
            `application/api.luminovo.manufacturing.resource-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/ManufacturingResourceAcceptHeader'
        - name: id
          in: path
          description: The ID of the resource to update.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/types.manufacturing.resource.v1.ResourceUpdate
        required: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.manufacturing.resource.v1.ResourceResponse
        '401':
          description: Unauthorized, please check permissions for the token
        '404':
          description: Not found
      security:
        - BearerAuth: []
  /offer/custom-part:
    post:
      tags:
        - Offers and Inventory
      summary: Create Custom Part Offer
      description: >-
        Creates a new offer for a custom part. Attach the sourcing scenario ID
        when creating a new custom part offer.
      operationId: CreateCustomPartOffer
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.custom-part-offer-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CustomPartOfferAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/types.sourcing.offer.custom.v1.CustomPartOfferInput
        required: true
      responses:
        '200':
          description: Customer created.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.sourcing.offer.custom.v1.CustomPartOffer
      security:
        - BearerAuth: []
  /order-management/order-selection:
    post:
      tags:
        - Order Management
      summary: Create Order Selection Options
      description: >-
        You can create customized order selection options for your customers at
        the check-out on the Customer Collaboration Platform.

        Define custom order batch sizes, lead time, order size, etc.
      operationId: doc_post_order_selection_options_v1
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.order-management-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/OrderManagementAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/types.order_management.order_selection_option.v1.CustomOrderSelectionOptionsRequest
        required: true
      responses:
        '200':
          description: Order selection options created.
      security:
        - BearerAuth: []
  /order-management/orders:
    get:
      tags:
        - Order Management
      summary: Get Order Details
      description: >-
        Get the details for an order placed on the Customer Collaboration
        Platform relating to an RfQ.
      operationId: doc_get_orders_v1
      parameters:
        - name: rfq_id
          in: query
          description: The RfQ ID to fetch order details for.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.order-management-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/OrderManagementAcceptHeader'
      responses:
        '200':
          description: Order details.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.order_management.orders.v1.GetOrdersResponse
      security:
        - BearerAuth: []
  /pnp:
    get:
      tags:
        - PnP
      summary: Get PnP Items
      description: Get a list of PnP items for an assembly.
      operationId: GetPnp
      parameters:
        - name: assembly_id
          in: query
          description: The assembly ID to get PnP items for.
          required: true
          schema:
            type: string
            format: uuid
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.pnp-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/PnpAcceptHeader'
      responses:
        '200':
          description: PnP items.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.pnp.v1.PnpResponse'
      security:
        - BearerAuth: []
  /rfqs:
    get:
      tags:
        - RfQ
      summary: Get all RfQs
      description: Returns all RfQ's in Luminovo.
      operationId: GetAllRfQs
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.rfq-overview-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/RfqOverviewAcceptHeader'
        - name: archived
          in: query
          required: false
          schema:
            type:
              - boolean
              - 'null'
        - name: customer_id
          in: query
          required: false
          schema:
            type:
              - string
              - 'null'
            format: uuid
        - name: internal_number
          in: query
          required: false
          schema:
            type:
              - string
              - 'null'
      responses:
        '200':
          description: Get all existing Rfqs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.rfq.v1.AllRfQsResponse'
      security:
        - BearerAuth: []
    post:
      tags:
        - RfQ
      summary: Create Rfq
      description: Create a new RfQ either for an existing or a new customer.
      operationId: CreateRfQ
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.rfq-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/RfqAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.rfq.v1.RfQCreation'
        required: true
      responses:
        '200':
          description: RfQ created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.rfq.v1.RfQResponse'
      security:
        - BearerAuth: []
  /rfqs/status-history:
    get:
      tags:
        - RfQ
      summary: Get RfQ status change history
      description: Returns the history of status changes for all RfQs.
      operationId: GetRfqStatusHistory
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.rfq-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/RfqAcceptHeader'
      responses:
        '200':
          description: RfQ status history.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.rfq.status_history.v1.AllRfqStatusHistory
      security:
        - BearerAuth: []
  /rfqs/{id}:
    get:
      tags:
        - RfQ
      summary: Get Rfq
      description: Get one RfQ based on its ID.
      operationId: GetRfQ
      parameters:
        - name: id
          in: path
          description: id of the RfQ to retrieve
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.rfq-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/RfqAcceptHeader'
      responses:
        '200':
          description: Get existing RfQ.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.rfq.v1.RfQResponse'
      security:
        - BearerAuth: []
    delete:
      tags:
        - RfQ
      summary: Delete RfQ
      description: Delete an RfQ based on its ID.
      operationId: DeleteRfQ
      parameters:
        - name: id
          in: path
          description: id of the RfQ to delete
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.rfq-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/RfqAcceptHeader'
      responses:
        '204':
          description: Rfq deleted.
      security:
        - BearerAuth: []
    patch:
      tags:
        - RfQ
      summary: Update RfQ
      description: Update an RfQ based on its ID.
      operationId: UpdateRfQ
      parameters:
        - name: id
          in: path
          description: id of the RfQ to update
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.rfq-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/RfqAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.rfq.v1.RfqUpdate'
        required: true
      responses:
        '200':
          description: RfQ updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.rfq.v1.RfQResponse'
      security:
        - BearerAuth: []
  /rfqs/{id}/costed-bom:
    get:
      tags:
        - BOM
      summary: Get costed BOM
      description: >-
        **Deprecated.** We are actively working on a new version of this
        endpoint.

        If anything about the current version is causing problems, we are
        actively looking

        for feedback — please reach out to us.


        Returns costed BOM for a given RfQ.
      operationId: GetRfqCostedBom
      parameters:
        - name: id
          in: path
          description: id of the RfQ to retrieve the costed bom for
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.costed-bom-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/CostedBomAcceptHeader'
      responses:
        '200':
          description: RfQ costed BOM.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedBom'
      deprecated: true
      security:
        - BearerAuth: []
  /rfqs/{id}/quotation/upload:
    post:
      tags:
        - Quotation
      summary: Upload Quotation for an RfQ
      description: >-
        By sending the request, you will get a URL to upload the quotation
        corresponding to an RfQ.


        This API is the equivalent of uploading a PDF file in the Quotation
        section of the frontend.

        Upon successful upload, you can call the `Update RfQ` API to set the RfQ
        status to `QuotationAvailable`.


        Unless you change the status to `QuotationAvailable`, the PDF is still
        available internally, but

        (if the customer portal is available) the customer will not be notified
        and will not be able to

        download the PDF. This is consistent with the behavior of the quotation
        upload in the UI, where

        the status is not updated unless you click the 'Send to customer'
        button.


        Uploading is a two-step process:

        1. Call this API to retrieve a URL to upload the file to.

        1. Upload the file contents to the retrieved URL using the `PUT` method.
           * The `PUT` call must set the `x-ms-blob-type` header to the value `BlockBlob`.

        See the [help
        page](https://help.luminovo.com/en/articles/235339-customize-the-quotation-purchase-and-payment-flow-in-the-customer-portal-using-the-api)

        for an explanation of when and how to use this API.
      operationId: UploadQuotation
      parameters:
        - name: id
          in: path
          description: id of the RfQ for which to upload the quotation
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.quotation-upload-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/QuotationUploadAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.rfq.v1.QuotationUpload'
        required: true
      responses:
        '200':
          description: Generated url for upload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.rfq.v1.SingleFileUrlResponse'
      security:
        - BearerAuth: []
  /rfqs/{id}/tree:
    get:
      tags:
        - BOM
      summary: Get BOM Tree
      description: >-
        Get the list of all assemblies included in your RfQ.

        Note: Luminovo creates an assembly for every created RfQ. Hence, the RfQ
        ID itself is also referenced as an assembly.
      operationId: GetBOMtree
      parameters:
        - name: id
          in: path
          description: id of the RfQ.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.assembly-ids-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/AssemblyIdsAcceptHeader'
      responses:
        '200':
          description: Get BOM tree for RfQ.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.assembly.assembly_ids.v1.AssemblyIdsResponse
      security:
        - BearerAuth: []
  /sourcing-scenarios:
    post:
      tags:
        - Sourcing Scenario
      summary: Create Scenario
      description: >-
        **Deprecated.** This endpoint is deprecated and will be removed in a
        future version.


        Create a new sourcing scenario corresponding to an RfQ.
      operationId: CreateSourcingScenario
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.sourcing-scenario-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SourcingScenarioAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioInput
        required: true
      responses:
        '200':
          description: Scenario created.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioResponse
        '400':
          description: Bad request. The input is invalid.
        '401':
          description: Unauthorized. The Bearer token is missing or invalid.
        '403':
          description: Forbidden. The authenticated user does not have permission.
      deprecated: true
      security:
        - BearerAuth: []
  /sourcing-scenarios/run-selection:
    post:
      tags:
        - Sourcing Scenario
      summary: Run Calculation
      description: >-
        Triggers the sourcing selection calculation for the given scenarios.


        **Typical usage:**

        - **Run for single scenario**: `{"type": "SourcingScenarios",
        "sourcing_scenario_ids": ["scenario-uuid"]}` - runs selection for one
        specific scenario

        - **Multiple specific scenarios**: `{"type": "SourcingScenarios",
        "sourcing_scenario_ids": ["uuid1", "uuid2", "uuid3"]}` - runs selection
        for multiple scenarios


        **Requirements:**

        - An empty `sourcing_scenario_ids` array will return a 400 Bad Request
        error.

        - **All sourcing scenarios must belong to the same RFQ.** Scenarios from
        different RFQs will result in an error.
      operationId: RunSourcingCalculation
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.sourcing-calculation-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SourcingCalculationAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/types.sourcing.calculation.v1.SourcingScenarioCalculationInput
        required: true
      responses:
        '200':
          description: Calculation run successfully.
        '400':
          description: Invalid request data.
        '401':
          description: Unauthorized.
        '403':
          description: Forbidden.
      security:
        - BearerAuth: []
  /sourcing-scenarios/{id}:
    get:
      tags:
        - Sourcing Scenario
      summary: Get Scenario
      description: >-
        Returns a sourcing scenario with its associated project, demands, and
        settings.


        **Project**


        A sourcing scenario is associated with a project, which is either an
        **RFQ** (Request for

        Quotation) or a **Negotiation**. The `project` field is a tagged object
        with a `type`

        field (`"Rfq"` or `"Negotiation"`) and an `id` field containing the
        project's UUID.


        **Demands**


        Each demand item has a `type` field indicating its kind. Currently only
        `"Assembly"`

        demands are returned, each with:

        - `id`: the assembly's UUID

        - `name`: the human-readable assembly designator

        - `quantity`: the required quantity with unit of measurement (e.g.,
        `{"unit": "Pieces", "quantity": 1000.0}`)


        **Limitation:** Part demands (for off-the-shelf parts and
        components/IPNs) are not yet

        included in this endpoint and will be added as new `type` values in a
        future update.

        Consumers should gracefully handle or ignore unknown demand types.


        **Currency and Exchange Rates**


        `settings.currency.base_currency` is the base currency used for all cost
        calculations in

        this sourcing scenario. All monetary values are converted to this
        currency.


        `settings.currency.exchange_rates` maps each foreign currency code to
        its conversion rate.

        Rates are expressed as: **1 unit of base currency = `rate` units of
        foreign currency**.


        Each rate has an `is_manual` flag:

        - `true`: the rate was manually overridden by a user and takes
        precedence over the automatic rate

        - `false`: the rate was automatically fetched from a public exchange
        rate provider


        The `settings` object is extensible — additional setting groups may be
        added alongside

        `currency` in the future.


        **Versioning**


        > **Note:** A legacy v1 version of this endpoint is available by sending

        > `Accept: application/api.luminovo.sourcing-scenario-v1+json`. It is
        **deprecated** and

        > returns a less detailed response — it omits currency settings,
        assembly names, and project

        > type information. All new integrations should use v2.
      operationId: GetSourcingScenarioV2
      parameters:
        - name: id
          in: path
          description: UUID of the sourcing scenario to retrieve.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.sourcing-scenario-v2+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SourcingScenarioV2AcceptHeader'
      responses:
        '200':
          description: Sourcing scenario with project, demands, and settings.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.sourcing.sourcing_scenario.v2.SourcingScenarioResponse
        '401':
          description: Unauthorized. The Bearer token is missing or invalid.
        '403':
          description: >-
            Forbidden. The authenticated user does not have permission to view
            sourcing scenarios.
        '404':
          description: >-
            Not found. No sourcing scenario with the given ID exists for the
            authenticated tenant.
      security:
        - BearerAuth: []
    patch:
      tags:
        - Sourcing Scenario
      summary: Update Scenario
      description: >-
        **Deprecated.** This endpoint is deprecated and will be removed in a
        future version.


        Updates a sourcing scenario based on its ID. All assemblies relating to
        the scenario must be

        included in the request — only those in the request will be considered
        for the scenario.
      operationId: UpdateSourcingScenario
      parameters:
        - name: id
          in: path
          description: id of the Sourcing scenario to update
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.sourcing-scenario-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SourcingScenarioAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioUpdateInput
        required: true
      responses:
        '200':
          description: Updated scenario.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioResponse
        '400':
          description: Bad request. The input is invalid.
        '401':
          description: Unauthorized. The Bearer token is missing or invalid.
        '403':
          description: Forbidden. The authenticated user does not have permission.
        '404':
          description: Not found. No sourcing scenario with the given ID exists.
      deprecated: true
      security:
        - BearerAuth: []
  /supplier-quote/pcb/{pcb_id}/offer/{offer_id}:
    get:
      tags:
        - Offers and Inventory
      summary: Get PCB Offer from PCB Pricing Console
      description: Get the offer for a PCB, which was created in the PCB pricing console.
      operationId: GetSupplierCustomPartOffer
      parameters:
        - name: pcb_id
          in: path
          description: Set this to shared PCB id you want to get an offer from.
          required: true
          schema:
            type: string
        - name: offer_id
          in: path
          description: Set this to the offer ID.
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.custom-part-offer-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SupplierCustomPartOfferAcceptHeader'
      responses:
        '200':
          description: Custom part offer.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/types.sourcing.offer.custom.v1.CustomPartOffer
      security:
        - BearerAuth: []
  /suppliers:
    get:
      tags:
        - Supplier
      summary: Get Suppliers
      description: >-
        Retrieves supplier information with optional filtering.


        ## Parameters

        - `ids` (optional): Array of supplier IDs to filter by. If provided,
        only suppliers matching these IDs will be returned.


        ## Behavior

        - **With IDs**: Returns only the specified suppliers (bulk retrieval)

        - **Without IDs**: Returns all available suppliers


        ## Returns

        A list of supplier objects containing their basic information and
        metadata.


        ## Example

        ```

        GET /suppliers?ids=123,456,789  // Get specific suppliers

        GET /suppliers                  // Get all suppliers

        ```
      operationId: GetSuppliers
      parameters:
        - name: ids
          in: query
          description: >-
            The IDs of the suppliers to get. If not provided, all suppliers will
            be returned.
          required: false
          schema:
            type:
              - string
              - 'null'
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.supplier-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SupplierAcceptHeader'
      responses:
        '200':
          description: Suppliers fetched.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.supplier.v1.BulkSuppliersResponse'
      security:
        - BearerAuth: []
    post:
      tags:
        - Supplier
      summary: Import Suppliers
      description: Import a list of suppliers.
      operationId: ImportSuppliers
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.supplier-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SupplierAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.supplier.v1.ImportSuppliersRequest'
        required: true
      responses:
        '207':
          description: Suppliers imported.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.supplier.v1.ImportSuppliersResponse'
      security:
        - BearerAuth: []
  /suppliers/{id}:
    delete:
      tags:
        - Supplier
      summary: Delete Supplier
      description: >-
        Delete a supplier by its ID.


        Note: System suppliers cannot be deleted and will return an error if
        deletion is attempted
      operationId: DeleteSupplier
      parameters:
        - name: id
          in: path
          description: The ID of the supplier to delete
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.supplier-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SupplierAcceptHeader'
      responses:
        '200':
          description: Supplier deleted.
      security:
        - BearerAuth: []
    patch:
      tags:
        - Supplier
      summary: Update Supplier
      description: >-
        Update a supplier by its ID.

        Note: For system suppliers, only the supplier number & preference can be
        updated.
      operationId: UpdateSupplier
      parameters:
        - name: id
          in: path
          description: The ID of the supplier to update
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.supplier-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/SupplierAcceptHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/types.supplier.v1.SupplierUpdateRequest'
        required: true
      responses:
        '200':
          description: Supplier updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.supplier.v1.SingleSupplierResponse'
      security:
        - BearerAuth: []
  /users:
    get:
      tags:
        - User
      summary: Get All Users
      description: Returns all users of your system.
      operationId: GetAllUsers
      parameters:
        - name: Accept
          in: header
          description: Set this to `application/api.luminovo.user-v1+json`.
          required: true
          schema:
            $ref: '#/components/schemas/UserAcceptHeader'
      responses:
        '200':
          description: Get all organization users.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/types.user.v1.AllUsers'
      security:
        - BearerAuth: []
  /ems/pcb/pcbs:
    get:
      tags:
        - PCB
      summary: Find a PCB using an order ID
      description: Find a PCB using the orderID that was specified during its creation.
      parameters:
        - name: orderId
          in: query
          description: orderId
          required: true
          schema:
            type: string
      responses:
        '200':
          description: PCB was found
          content:
            application/json:
              schema:
                type: array
                items:
                  allOf:
                    - $ref: '#/components/schemas/PCBV2'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
    post:
      tags:
        - PCB
      summary: Create a new PCB
      description: |

        This endpoint facilitates the creation of a new PCB project.

        The request payload does not take any files, but they can be
        once the record is created.

        It is possible to use the API without providing any project
        files. This means analysis and value extraction will not be
        available.

        If this PCB belongs to a RfQ and should be linked together, then
        the `externalReference` and `orderId` fields should be filled
        and the RfQ should be updated with the PCB's UUID.

        The creation of a PCB involves the creation of a specification
        that can be used to override the default values of the PCB.
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PCBV2Creation'
        required: true
      responses:
        '200':
          description: PCB was created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2'
      deprecated: false
  /ems/pcb/capabilities:
    get:
      tags:
        - PCB
      summary: Get All Capabilities
      description: |

        Returns all the available PCB properties and the values available
        for each of them, as well as the default value.

        Some capabilities depend on the values of other capabilities,
        which means the list of available values is not complete unless
        the pcb-specific endpoint is used.
      responses:
        '200':
          description: List of PCB capabilities
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2SpecificationCapabilities'
      deprecated: false
  /ems/pcb/shares/{share}:
    get:
      tags:
        - PCB
      summary: Get a Shared PCB
      description: Find a Shared PCB by its UUID.
      parameters:
        - name: share
          in: path
          description: share
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PCB was found
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
  /ems/pcb/shares/{share}/files/all:
    get:
      tags:
        - PCB
      summary: Get the Shared PCB Files as zip
      description: Downloads PCB files of a shared PCB as a zip folder
      parameters:
        - name: share
          in: path
          description: share
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PCB project zip
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/NotUsed'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}:
    get:
      tags:
        - PCB
      summary: Get a PCB
      description: Find a PCB by its UUID.
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PCB was found
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
    put:
      tags:
        - PCB
      summary: Update a PCB
      description: Updates some of the PCB properties that were set during creation.
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PCBV2Update'
        required: true
      responses:
        '200':
          description: PCB was updated
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
    delete:
      tags:
        - PCB
      summary: Delete a PCB
      description: Find and delete a PCB by its UUID.
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PCB was deleted
          links: {}
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}/clone:
    post:
      tags:
        - PCB
      summary: Clone an existing PCB
      description: |

        Clone an existing PCB.

        This clones the PCB, analysis results, specifications and
        files associated.

        This operation returns an error if the PCB's analysis is
        in progress.
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PCBV2Clone'
        required: true
      responses:
        '200':
          description: PCB was cloned
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2Id'
        '404':
          description: PCB to clone was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}/files/all:
    get:
      tags:
        - PCB
      summary: Get the PCB Files as zip
      description: Downloads PCB files as a zip folder
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PCB project zip
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/NotUsed'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}/files/singular/{file}:
    get:
      tags:
        - PCB
      summary: Get a PCB File
      description: Downloads PCB file by name, if it exists.
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
        - name: file
          in: path
          description: file
          required: true
          schema:
            type: string
      responses:
        '200':
          description: PCB project zip
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/NotUsed'
        '404':
          description: PCB or file was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}/specifications:
    get:
      tags:
        - PCB
      summary: Get all PCB Specifications
      description: Get all PCB specificationss
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PCB specifications
          content:
            application/json:
              schema:
                type: array
                items:
                  allOf:
                    - $ref: '#/components/schemas/PCBV2Specification'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
    put:
      tags:
        - PCB
      summary: Create a new PCB Specification
      description: Create anew PCB specifications
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PCBV2Specification'
        required: true
      responses:
        '200':
          description: PCB specification created
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2Specification'
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}/specifications/{specification}:
    get:
      tags:
        - PCB
      summary: Get a PCB Specification
      description: Find PCB specification by name or UUID
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
        - name: specification
          in: path
          description: the name or uuid of the specification
          required: true
          explode: false
          schema:
            type: string
            description: the name or uuid of the specification
      responses:
        '200':
          description: PCB specification
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2Specification'
        '404':
          description: PCB or specification was not found
          links: {}
      deprecated: false
    put:
      tags:
        - PCB
      summary: Update a PCB Specification
      description: Update a PCB Specifications
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
        - name: specification
          in: path
          description: specification
          required: true
          schema:
            type: string
            format: uuid
        - name: removeUndefined
          in: query
          description: removeUndefined
          required: false
          schema:
            allOf:
              - $ref: '#/components/schemas/Object'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PCBV2Update'
        required: true
      responses:
        '200':
          description: PCB specification updated
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2Specification'
        '404':
          description: PCB or specification was not found
          links: {}
      deprecated: false
    delete:
      tags:
        - PCB
      summary: Delete a PCB Specification
      description: Delete a PCB Specifications
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
        - name: specification
          in: path
          description: specification
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PCB specification deleted
          links: {}
        '404':
          description: PCB or specification was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}/specifications/{specification}/previews:
    get:
      tags:
        - PCB
      summary: Get a PCB Specification Preview
      description: Find PCB specification by name or UUID
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
        - name: specification
          in: path
          description: the name or uuid of the specification
          required: true
          explode: false
          schema:
            type: string
            description: the name or uuid of the specification
      responses:
        '200':
          description: PCB specification previews
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBPreviews'
        '404':
          description: PCB or specification was not found
          links: {}
      deprecated: false
  /ems/pcb/pcbs/{pcb}/capabilities:
    get:
      tags:
        - PCB
      summary: >-
        Get All Capabilities respecting the currently set values of the
        specification
      description: |

        Returns all the available PCB properties and the values available
        for each of them, as well as the default value.

        Some capabilities depend on the values of other capabilities,
        which means the values for certain capabilities change based on
        the PCB specification.

        An example of this behaviour is the inner copper thickness, which
        requires the PCB to have at least 4 layers.
      parameters:
        - name: pcb
          in: path
          description: pcb
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: List of PCB capabilities
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PCBV2SpecificationCapabilities'
      deprecated: false
  /files/ems/pcb/pcbs/:pcb/files:
    post:
      tags:
        - PCB
      summary: Upload Files to the PCB
      parameters: []
      requestBody:
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/FileUpload'
            encoding:
              files:
                contentType: application/pdf, image/png
        required: false
      responses:
        '200':
          description: Files were uploaded
          links: {}
        '404':
          description: PCB was not found
          links: {}
      deprecated: false
components:
  schemas:
    Assemblies:
      items:
        $ref: '#/components/schemas/AssemblyBom'
      type: array
    AssemblyBom:
      properties:
        bom_items:
          description: >
            A list of BOM items.

            A BOM item defines the common characteristics of one or more design
            items (identified by

            designators).
          items:
            $ref: '#/components/schemas/BomItem'
          type: array
        customer_part_numbers:
          description: >
            Your customers' numbers referring to this assembly.


            Due to technical restrictions only the first element of this array
            is considered.

            That is, only the customer that is named first in this array will be
            associated

            with the assembly in the system.


            The customer can also be specified on its own, a customer part
            number (i.e. the `value` field)

            is not required. If the `revision` field is provided the `value`
            field must also be populated.


            CPNs will be matched to existing customers by their number.


            If a customer name is also given in the input data, the following
            cases are handled:

            1. if the customer does not yet exist, it will be created with the
            number and name provided.

            2. if the customer exists but has no name yet, it will be updated
            with the customer name from the input.

            3. if the customer exists and also has a name, the input customer
            name is ignored (i.e. the customer's name will not be updated with
            the input name).


            If only a customer number is given in the input data and a customer
            by that number does not yet exist, the associated CPN is filtered
            out and will not be imported.
          items:
            $ref: '#/components/schemas/CPN_2'
          type: array
        industry:
          default: Other
          description: The industry this assembly belongs to, defaults to `Other`.
          enum:
            - Auto
            - Medical
            - Defense
            - Aero
            - Rail
            - Industrial
            - Construction
            - Consumer
            - Other
          examples:
            - Industrial
          type: string
        internal_part_number:
          $ref: '#/components/schemas/InternalPartNumber'
        name:
          description: >
            The name of the assembly.

            Defaults to `internal_part_number.value -
            internal_part_number.revision`.
          examples:
            - SUB1500
          type: string
        notes:
          description: Notes for the assembly.
          examples:
            - Some notes
          type: string
        subassemblies:
          description: >
            A list of subassemblies referenced by `(internal_part_number.value,
            internal_part_number.revision)`.


            A subassembly is a nested assembly. The same subassemblies may be
            referenced in multiple

            assemblies. Subassemblies can either be included in the same import
            request, or reference

            existing assemblies that were imported via this endpoint earlier.


            This allows splitting large imports into multiple smaller requests
            by first importing

            leaf assemblies, then importing parent assemblies that reference
            them.


            Note: Only assemblies created via this API endpoint can be
            referenced across imports.

            Manually-created assemblies cannot be used as subassemblies in
            cross-import references.


            No circular references are permitted. That is, an assembly may not
            be referenced in any of

            its own subassemblies, including across multiple imports.
          items:
            $ref: '#/components/schemas/Subassembly'
          type: array
        type:
          description: The type of assembly.
          enum:
            - PCBA
            - Cable
            - Box build
            - System
          examples:
            - PCBA
          type: string
      required:
        - internal_part_number
        - type
      title: Assembly
      type: object
    AssemblyBomResponse:
      properties:
        description:
          description: >
            Human readable status description and containing additional context
            information about failures etc.
          examples:
            - |
              Human readable status description and containing additional
              context information about failures etc.
          type: string
        internal_part_number:
          $ref: '#/components/schemas/InternalPartNumber'
        status:
          oneOf:
            - description: The assembly was successfully imported.
              enum:
                - Success
              title: Success
              type: string
            - description: >
                The assembly has not been imported because some components
                referenced as part

                options are missing.


                That is, they have not yet been uploaded via the components API.

                Once they have been uploaded via the components API, the
                assembly import should

                be performed again so that the previously missing components are
                successfully referenced.
              enum:
                - MissingComponents
              title: MissingComponents
              type: string
            - description: >
                The assembly has not been imported because some assemblies
                listed as

                subassemblies are unknown. They must either be included in the
                same request,

                or have been previously imported via this endpoint.
              enum:
                - MissingSubassemblies
              title: MissingSubassemblies
              type: string
            - description: >
                The assembly has not been imported because an assembly with the
                same

                `internal_part_number` and `revision` was included in the
                request.
              enum:
                - Duplicate
              title: Duplicate
              type: string
            - description: >
                The assembly has not been imported because of a circular
                reference.

                That is, the same assembly is referenced as a subassembly.
              enum:
                - CicularReference
              title: CicularReference
              type: string
            - description: >
                The assembly has not been imported because it would create a
                circular reference

                with an existing assembly. This assembly is already a descendant
                of an assembly

                it is trying to reference as a subassembly.
              enum:
                - CircularReferenceWithExistingAssembly
              title: CircularReferenceWithExistingAssembly
              type: string
            - description: >
                The assembly is valid but was not imported because it exists in
                an invalid path.

                Either all of its parents or subassemblies are invalid.
              enum:
                - ExistsInInvalidPath
              title: ExistsInInvalidPath
              type: string
            - description: >
                The assembly has not been imported because it contains duplicate
                designators.
              enum:
                - DuplicateDesignators
              title: DuplicateDesignators
              type: string
            - description: >
                The assembly has not been imported because it contains bom items
                with no designators.
              enum:
                - BomItemsWithNoDesignators
              title: BomItemsWithNoDesignators
              type: string
            - description: >
                The assembly has not been imported because because some of the
                designators use OffTheShelf and Custom components
                simultaneously. That is not allowed.
              enum:
                - PartSpecificationTypeContradiction
              title: PartSpecificationTypeContradiction
              type: string
            - description: >
                The assembly has not been imported because a manually created
                assembly with the same internal_part_number and revision already
                exists.
              enum:
                - IpnBoundToManualAssembly
              title: IpnBoundToManualAssembly
              type: string
      type: object
    AssemblyImportResponse:
      items:
        $ref: '#/components/schemas/AssemblyBomResponse'
      type: array
    Availability:
      description: >-
        Availability of a solution or purchase option, indicating if it is in
        stock
      oneOf:
        - properties:
            type:
              enum:
                - Stock
                - OnOrderWithUnknownLeadTime
              type: string
          required:
            - type
          type: object
        - properties:
            days:
              format: integer
              type: integer
            type:
              enum:
                - PriceBreakLeadTimeDays
                - OnOrder
                - LeadTimeDays
              type: string
          required:
            - type
            - days
          type: object
    BomItem:
      properties:
        designators:
          description: >-
            The designators for the BOM item. Designators must be unique across
            the entire assembly. At least one designator must be given.
          examples:
            - - R1
              - R2
          items:
            type: string
          minItems: 1
          type: array
          uniqueItems: true
        do_not_place:
          default: false
          description: >-
            A flag to define if the BOM item should not be placed on the
            assembly.
          examples:
            - false
          type: boolean
        notes:
          description: Notes for the BOM item.
          examples:
            - The description of the BOM item
          type: string
        part_options:
          description: >
            A part option defines the components that may be used for the BOM
            item. All part options

            are considered equal alternatives of one another without any
            preference. All IPNs in part options of a given BomItem should be of
            either Custom xor OffTheShelf type, mixing both is not allowed.
          items:
            $ref: '#/components/schemas/PartOption'
          type: array
        quantity:
          description: >-
            The quantity per designator. I.e. the total quantity of the BOM item
            is `quantity` x `len(designators)`. Can be a fractional value. Can't
            be zero. Can't be negative. If you want to specify that this BOM
            item is not needed, please set do_not_place.
          examples:
            - 1
          type: number
        sourced_by:
          default: internal
          description: >
            Defines the consignment, i.e. if the BOM item should be sourced by
            an

            internal or external party (e.g. a customer or EMS).
          enum:
            - internal
            - external
          examples:
            - internal
          type: string
        unit:
          description: The unit the quantity of the BOM item is measured in.
          enum:
            - Pieces
            - Kg
            - Meters
            - Liters
          examples:
            - Pieces
          type: string
      required:
        - designators
        - quantity
        - unit
      title: BOM item
      type: object
    CPN:
      properties:
        customer:
          $ref: '#/components/schemas/Customer'
        revision:
          description: The revision of the customer's part number.
          examples:
            - A
          type: string
        value:
          description: The customer's part number.
          examples:
            - 123-456
          type: string
      required:
        - value
        - customer
      type: object
    CPN_2:
      properties:
        customer:
          $ref: '#/components/schemas/Customer'
        revision:
          description: The revision of the customer's part number.
          examples:
            - A
          type: string
        value:
          description: The customer's part number.
          examples:
            - 123-456
          type: string
      required:
        - customer
      type: object
    Capacitor:
      description: >-
        Defines the specifcation for a capacitor. We only support ceramic
        capacitors at the moment.
      properties:
        data:
          properties:
            capacitance_farads:
              examples:
                - '1e-12'
              type: string
            dielectric:
              description: We only support ceramic dielectric materials at the moment.
              properties:
                data:
                  enum:
                    - X8R
                    - C0G
                    - X7R
                    - X5R
                    - X8L
                    - Y5V
                    - X6S
                    - Z5U
                    - X7S
                    - NP0
                    - Y5U
                    - C0H
                    - Y5R
                    - Y5P
                    - Y5T
                    - U2J
                    - Z5V
                    - Z5P
                    - K4000
                    - X6T
                    - X7T
                    - Z5F
                  type: string
                type:
                  enum:
                    - Ceramic
                  type: string
              type: object
            tolerance_percent:
              examples:
                - '5'
              type: string
            voltage_rating_volts:
              examples:
                - '10'
              type: string
          type: object
        type:
          enum:
            - Capacitor
          type: string
      required:
        - type
        - data
      type: object
    Component:
      properties:
        category:
          description: >
            The part category as specified in your system of record (e.g. in
            your ERP or PLM system). The part category can be used on the
            Luminovo platform to filter your components and parts.
          type: string
        component:
          description: >
            The component data.


            Caution: it is only possible to change the type of the component
            (i.e. from `OffTheShelf` to `Custom` or vice versa) if

            the component is not currently used as a part option in any
            assembly. Otherwise, the update of the affected component is
            skipped.


            It is important to properly differentiate between `OffTheShelf` and
            `Custom` components in order to get good data quality in Luminovo.

            - `OffTheShelf` are all electonic components which have a MPN and
            can be purchased from the electronic parts suppliers.

            - `Custom` are all other non-electronic components, such as screws,
            packaging materials, lables, etc. Also, custom are all electronic
            components which are not standartized and don't have an MPN.
          discriminator:
            propertyName: type
          oneOf:
            - $ref: '#/components/schemas/OffTheShelf'
            - $ref: '#/components/schemas/Custom'
          type: object
        customer_part_numbers:
          description: >
            Your customers' numbers referring to this component.


            CPNs will be matched to existing customers by their number.


            If a customer name is also given in the input data, the following
            cases are handled:

            1. if the customer does not yet exist, it will be created with the
            number and name provided.

            2. if the customer exists but has no name yet, it will be updated
            with the customer name from the input.

            3. if the customer exists and also has a name, the input customer
            name is ignored (i.e. the customer's name will not be updated with
            the input name).


            If only a customer number is given in the input data and a customer
            by that number does not yet exist, the associated CPN is filtered
            out and will not be imported.
          items:
            $ref: '#/components/schemas/CPN'
          type: array
        description:
          description: >-
            Describes this component. We try to extract the component's
            specification from this field as well if given.
          examples:
            - 470R0_1%_TK100_250mW 1206
          type: string
        internal_part_number:
          $ref: '#/components/schemas/InternalPartNumber'
        is_preferred:
          description: >
            Whether the component is preferred over other components.

            Setting this flag will add a star icon to the component for easier
            visibility.

            Preferred components may also get sorted to the top in various
            places of the product, for example in suggestions.
          examples:
            - true
          type: boolean
        is_restricted_to_customers:
          description: >
            Whether the component is restricted to the customers listed in

            `customer_part_numbers`. Defaults to `false`.

            If a component is restricted, then it is only visible and available
            in projects for the listed customers.

            Beware: if you set it to `true` and `customer_part_numbers` is empty
            you will not be able to use this component in any projects.


            Restricting a component is only possible if the component is not
            currently used in a project by a customer that would violate the new
            restriction.


            I.e. setting this field to `true` for an existing component that is
            currently not restricted (i.e. `false`) is only allowed if the
            component is not used at all or only used by customers (defined by
            their numbers) listed in `customer_part_numbers`.

            If the component is used in projects of customers that are not
            listed in `customer_part_numbers`, the entire update of

            this component is ignored.


            Similarly, for an existing restricted component, the set of
            customers (defined by their numbers) listed in
            `customer_part_numbers`

            can only be reduced in a new update if the component is not used by
            the customer that is being removed from the list of restricted
            customers.

            If the component is still in use in a project by a customer that is
            to be removed from the `customer_part_numbers` list,

            the entire update of this component is ignored as well.
          examples:
            - true
          type: boolean
        origin:
          description: >
            The optional origin this component belongs to. This is useful if you
            want to upload components from different places separately.
            Subsequent uploads will only override the components in the same
            origin.


            Caution: If two or more distinct origins are specified in the same
            upload, the import is considered "full" and will remove all
            components not provided in the upload.


            Caution: Importing components without an origin works as before and
            is still expected to contain all components at once.
          type: string
      required:
        - internal_part_number
        - component
      title: Component
      type: object
    ComponentCustomPart:
      properties:
        description:
          examples:
            - Custom part description
          type: string
        drawing_number:
          examples:
            - ABC-12345-XX-YY-ZZZ
          type: string
        part_type:
          enum:
            - Mechanical
            - Plastic
            - Cable
            - Packaging
            - Label
            - Other
          examples:
            - Label
          type: string
        reach_compliant:
          default: Unknown
          enum:
            - NonCompliant
            - Unknown
            - NotRequired
            - CompliantWithExemption
            - Compliant
          examples:
            - Compliant
          type: string
        rohs_compliant:
          default: Unknown
          enum:
            - NonCompliant
            - Unknown
            - NotRequired
            - CompliantWithExemption
            - Compliant
          examples:
            - Compliant
          type: string
      required:
        - part_type
      type: object
    Components:
      items:
        $ref: '#/components/schemas/Component'
      type: array
    CreatePurchaseOrdersRequest:
      properties:
        purchase_order:
          $ref: '#/components/schemas/PendingPurchaseOrder'
      required:
        - purchase_order
      title: CreatePurchaseOrdersRequest
      type: object
    Currency:
      enum:
        - EUR
        - MAD
        - USD
        - AUD
        - BGN
        - BRL
        - CAD
        - CHF
        - CNY
        - CZK
        - DKK
        - GBP
        - HKD
        - HRK
        - HUF
        - IDR
        - ILS
        - INR
        - ISK
        - JPY
        - KRW
        - MXN
        - MYR
        - NOK
        - NZD
        - PHP
        - PLN
        - RON
        - RUB
        - SEK
        - SGD
        - THB
        - TRY
        - ZAR
        - TWD
        - VND
        - LKR
      type: string
    Custom:
      description: >-
        A custom component has a custom part that is specifically made for you
        (e.g. a Label) and cannot be bought Off-the-shelf.
      properties:
        data:
          properties:
            custom_parts:
              items:
                $ref: '#/components/schemas/ComponentCustomPart'
              type: array
          type: object
        type:
          enum:
            - Custom
          type: string
      required:
        - type
        - data
      title: Custom
      type: object
    Customer:
      properties:
        name:
          description: The name of the customer.
          examples:
            - MyOEM
          type: string
        number:
          description: The number of the customer.
          examples:
            - '9987'
          type: string
      required:
        - number
      type: object
    Date:
      format: date
      type: string
    DateTime:
      format: date-time
      type: string
    GetPurchaseOrderResponse:
      properties:
        created:
          items:
            $ref: '#/components/schemas/PurchaseOrder'
          type: array
        pending:
          items:
            $ref: '#/components/schemas/PendingPurchaseOrderDraft'
          type: array
      required:
        - pending
        - created
      title: GetPurchaseOrderResponse
      type: object
    ImportUnit:
      properties:
        quantity:
          description: The quantity must be greater than 0.
          type: number
        unit:
          enum:
            - Kilogram
            - Gram
            - Milligram
            - Pound
            - Meter
            - Centimeter
            - Millimeter
            - Foot
            - Inch
            - Liter
            - Centiliter
            - Milliliter
            - Ounce
            - Gallon
            - Pint
            - Piece
            - Pair
          title: Unit
          type: string
      required:
        - unit
        - quantity
      type: object
    ImportUnitOfMeasurement:
      allOf:
        - $ref: '#/components/schemas/ImportUnit'
      description: >-
        The unit of measurement for the unit price, as well as the quantities
        provided in available_stock and total_stock. If you do not provide this
        field then it defaults to 1 piece. If the part in your inventory is
        better measured in a different unit, you can set the unit of measurement
        here. For example, if your IPN refers to a cable roll, where each roll
        has 30 meters of cable, you could provide a quantity of 30 and unit of
        "Meter" for the unit_of_measurement. If you then specify your
        available_stock as 10, we will know that you have 300 meters of cable
        available. Additionally, if in this case your provided unit price is 20
        EUR, then that would mean 20 EUR per 30 meters of cable.
      title: Unit of measurement
    InternalPartNumber:
      properties:
        revision:
          description: >-
            The optional revision for an internal part number. Revisions must be
            unique for the same `value`.
          examples:
            - rev1
          type: string
        value:
          description: >-
            The internal part number value used to reference an assembly in the
            ERP system, also sometimes referred to as article number. The tuple
            of (`value`, `revision`) must be unique across all imported
            assemblies and components.
          examples:
            - 1000-0
          type: string
      required:
        - value
      type: object
    InternalUser:
      properties:
        email:
          description: The email address of the internal user
          examples:
            - max.mustermann@musterfirma.de
          type: string
        first_name:
          description: The first name of the internal user
          examples:
            - Max
          type: string
        id:
          description: The unique identifier of the internal user
          example: f7182b67-8cef-4bb6-a5de-3dbaf1a89ef5
          format: uuid
          type: string
        last_name:
          description: The last name of the internal user
          examples:
            - Mustermann
          type: string
      required:
        - id
        - first_name
        - last_name
        - email
      type: object
    IpnIdParts:
      properties:
        revision:
          description: The revision of the internal part number.
          type: string
        value:
          description: The internal part number (also known as IPN).
          type: string
      required:
        - value
      type: object
    MonetaryValue:
      properties:
        amount:
          type: string
        currency:
          $ref: '#/components/schemas/Currency'
      required:
        - amount
        - currency
      type: object
    NaiveDateTime:
      description: >
        A naive date-time string in the format "YYYY-MM-DDTHH:MM:SS", where "T"
        is a literal character separating the date and time components, without
        a time zone. Example: "2024-03-31T01:00:00".
      pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$
      type: string
    OffTheShelf:
      description: >-
        Off-the-shelf components refer to components that have parts (or a
        specification of them) that can be bought Off-the-shelf (and are not
        custom made to order).
      properties:
        data:
          properties:
            parts:
              description: >-
                Defines an Off-the-shelf part that can be used for this
                component. Keep in mind that although no part's fields are
                required by the spec, either MPN or SPN (but NOT both) MUST be
                present. A part will be skipped in case it doesnt comply with
                this.
              items:
                $ref: '#/components/schemas/Part'
              type: array
            specification:
              $ref: '#/components/schemas/Specification'
          type: object
        type:
          enum:
            - OffTheShelf
          type: string
      required:
        - type
        - data
      title: OffTheShelf
      type: object
    OfferId:
      anyOf:
        - properties:
            offer:
              format: uuid
              type: string
            offer_type:
              enum:
                - Other
                - CustomPart
                - Consigned
              type: string
          required:
            - offer_type
            - offer
          type: object
        - properties:
            offer:
              type: string
            offer_type:
              enum:
                - Inventory
              type: string
          required:
            - offer_type
            - offer
          type: object
    OfferImport:
      description: Offer import
      properties:
        availability:
          $ref: '#/components/schemas/OfferImportAvailability'
        customer:
          allOf:
            - $ref: '#/components/schemas/Customer'
          description: >-
            This field can be given if an offer or inventory is restricted to a
            certain customer. If a customer name is also given in the input
            data, the following cases are handled:

            1. If the customer can be found by number, the customer name will
            not be updated. 2. If the customer cannot be found by number but it
            can be found by name, the customer number will be updated to the
            number provided. 3. If the customer does not yet exist, it will be
            created only if the number and name are provided.
        import_context:
          description: >-
            Any text for context on the origin of the offer (e.g. a specific
            ERP). This allows us to more easily find offers from the same import
            and context.
          type: string
        notes:
          description: Notes for the offer.
          type: string
        one_time_costs:
          allOf:
            - $ref: '#/components/schemas/OfferImportOneTimeCost'
          description: >-
            One-time costs for the offer, e.g. setup costs. This is optional and
            can be used to provide additional costs that are not covered by the
            unit price.
        packaging:
          allOf:
            - $ref: '#/components/schemas/Packaging'
          description: The packaging for a part in an offer or inventory.
          title: Packaging
        part:
          $ref: '#/components/schemas/OfferImportPart'
        price_type:
          $ref: '#/components/schemas/OfferImportOfferPriceType'
        prices:
          description: >-
            A list of price breaks for a given offer or inventory. At least one
            price break needs to be given.
          items:
            $ref: '#/components/schemas/OfferImportPriceBreak'
          type: array
        supplier:
          $ref: '#/components/schemas/OfferImportSupplier'
        unit_of_measurement:
          $ref: '#/components/schemas/ImportUnitOfMeasurement'
        valid_until:
          allOf:
            - $ref: '#/components/schemas/Date'
          description: A date until which the given offer is valid.
      required:
        - part
        - supplier
        - prices
        - availability
      title: Offer
      type: object
    OfferImportAvailability:
      description: >-
        The availability of an offer or inventory, giving stock values and lead
        times.
      properties:
        available_stock:
          description: >-
            The freely available stock in your inventory or at the supplier,
            that can be used for new projects. This is what will be used for
            generating solutions in Luminovo.
          format: double
          minimum: 0
          type: number
        lead_time:
          description: >-
            This can be given to provide:

            - For inventory offers, a standard lead time (in days) that it takes
            to get new parts in stock in your inventory.

            - For offers from suppliers, a factory lead time (in days) that it
            takes for the supplier to replenish their stock
              from the manufacturer.
          minimum: 0
          type: integer
        on_order:
          description: >-
            A list of on-order items, which each give a quantity of units that
            are on order for a given offer or inventory, with an optional
            arrival date
          items:
            $ref: '#/components/schemas/OfferImportOnOrder'
          type: array
        total_stock:
          description: >-
            The total stock in your inventory (including stock already assigned
            to a different project). This won't be used for generating
            solutions, but only displayed as an additional info in Luminovo.
            This value is not used for offers from suppliers.
          format: double
          minimum: 0
          type: number
      required:
        - available_stock
      title: Availability
      type: object
    OfferImportInternalPartNumber:
      properties:
        internal_part_number:
          description: >-
            The internal part number used to reference an article in your ERP,
            also sometimes referred to as article number.
          examples:
            - 1000-10
          type: string
      required:
        - internal_part_number
      title: Internal Part Number
      type: object
    OfferImportManufacturerAndManufacturerPartNumber:
      properties:
        manufacturer:
          description: The manufacturer of the part.
          examples:
            - Panasonic
          type: string
        manufacturer_part_number:
          description: >-
            The manufacturer part number (MPN) used to identify the part from
            the given manufacturer. This will be taken together with the
            manufacturer to match your offer or inventory to a part. The more
            accurate this information is the higher the likelihood we will be
            able to match the part.
          examples:
            - ERJ-B2BF1R1V
          type: string
      required:
        - manufacturer
        - manufacturer_part_number
      title: Manufacturer and Manufacturer Part Number
      type: object
    OfferImportOfferPriceType:
      description: >
        The price type of the offer.

        This field is optional. If not given, then

        in the external supplier case, a list price type is used, and

        in the internal supplier case, a standard price type is used.


        **Price Type Meanings:**

        - **List**: Standard list price from the supplier (usually the highest
        price)

        - **Contract**: Negotiated contract price (usually better than list
        price)

        - **Quote**: Specific quote price for a particular order or customer

        - **Purchase**: Purchase price (what you actually paid)

        - **Standard**: Standard pricing (default pricing)

        - **CustomerNegotiated**: Price specifically negotiated with a customer

        - **TargetPrice**: Target price to beat or achieve
      enum:
        - List
        - Contract
        - Quote
        - Purchase
        - Standard
        - CustomerNegotiated
        - TargetPrice
      title: Price type
      type: string
    OfferImportOnOrder:
      properties:
        date:
          $ref: '#/components/schemas/Date'
        quantity:
          minimum: 0
          type: number
      required:
        - quantity
      title: OnOrder
      type: object
    OfferImportOneTimeCost:
      description: A cost value with description.
      properties:
        description:
          description: A human-readable description of the cost.
          type: string
        price:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
          description: The cost value.
      title: Cost
      type: object
    OfferImportPart:
      description: >-
        Specification of the part that a given offer or inventory is for. This
        can be either:

        - An internal part number (IPN) to identify parts of an ERP component.
          The IPN and attached component data needs to be uploaded separately through the components API for the offer or inventory to be accessible.
        - A manufacturer and manufacturer part number (MPN) to identify an
        off-the-shelf part.
          If no match or no unique match can be found for a given manufacturer and MPN, an error is returned for this offer or inventory item.
      oneOf:
        - $ref: '#/components/schemas/OfferImportInternalPartNumber'
        - $ref: >-
            #/components/schemas/OfferImportManufacturerAndManufacturerPartNumber
      title: Part
    OfferImportPriceBreak:
      properties:
        moq:
          description: >-
            The minimum order quantity (MOQ) for this price break, giving the
            minimum amount of units that need to be purchased. If not given, 1
            is used.
          exclusiveMinimum: 0
          format: double
          minimum: 0
          type: number
        mpq:
          description: >-
            The minimum packaging quantity (MPQ) for this price break, giving
            the number of multiples In which units can be purchased. If not
            given, 1 is used.
          exclusiveMinimum: 0
          format: double
          minimum: 0
          type: number
        unit_price:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
          description: Price per unit
      required:
        - unit_price
      title: Price break
      type: object
    OfferImportSupplier:
      description: >-
        The supplier of an offer, which can be either internal for an inventory
        offer, or external for an offer from a supplier. The location of the
        offer may be optionally given either through an inventory site or a
        stock location of a supplier.
      properties:
        stock_location:
          $ref: '#/components/schemas/ThreeLetterStockLocation'
          description: >-
            The stock location of the external supplier identified by
            `supplier_number` or `supplier`. It is only required to provide
            `stock_location` when more than one stock location exists for the
            supplier, so that the system knows which one to use.
        supplier:
          description: >-
            The name of either the inventory site or the external supplier that
            offers this part. For external suppliers, this is required if
            `supplier_number` is not given. If both are provided,
            `supplier_number` will be prioritized. For internal suppliers, a
            default inventory site is used if neither `supplier` nor
            `supplier_number` are given.
          examples:
            - Mouser
          type: string
        supplier_number:
          description: >-
            The supplier number can be used to identify an inventory site or an
            external supplier by an internal number. For external suppliers,
            this is required if `supplier` is not given.
          type: string
        supplier_part_number:
          description: >-
            The number used by the supplier as the stock keeping unit (SKU) for
            this part.
          examples:
            - 667-ERJ-B2BF1R1V
          type: string
        type:
          description: |-
            The type of the supplier:
            - `Internal`: for inventory offers
            - `External`: for offers from an external supplier
          enum:
            - Internal
            - External
          type: string
      required:
        - type
      title: Supplier
      type: object
    OffersImport:
      description: Offers import
      items:
        $ref: '#/components/schemas/OfferImport'
      type: array
    Packaging:
      enum:
        - AmmoPack
        - Bag
        - Bulk
        - Reel
        - ReReel
        - Tape
        - Tray
        - Tube
        - Carton
      type: string
    Part:
      oneOf:
        - properties:
            manufacturer:
              description: The part's manufacturer.
              examples:
                - Yageo
              type: string
            mpn:
              description: >-
                The manufacturer part number of the part. This will be taken
                together with the manufacturer to match your IPN to a part. The
                more accurate this information is the higher the likelihood we
                will be able to match the part.
              examples:
                - RC1206FR-10470RL
              type: string
          required:
            - mpn
          title: MPN and manufacturer
        - properties:
            supplier:
              description: The part's supplier.
              examples:
                - Arrow
              type: string
            supplier_part_number:
              description: The supplier part number of the part.
              examples:
                - 13-RC1206FR-10470RLTR-ND
              type: string
          required:
            - supplier_part_number
          title: SPN and supplier
      type: object
    PartOption:
      properties:
        internal_part_number:
          $ref: '#/components/schemas/InternalPartNumber'
      required:
        - internal_part_number
      title: Part option
      type: object
    PendingPurchaseOrder:
      properties:
        approved_at:
          $ref: '#/components/schemas/NaiveDateTime'
        billing_address:
          description: >-
            The billing address as a string. e.g. `"123 Main St, San Francisco,
            CA 94105"`
          type: string
        dispatch_method:
          description: |
            Use this to specify how the purchase order should be dispatched.
          oneOf:
            - properties:
                type:
                  enum:
                    - None
                  type: string
              required:
                - type
              title: None
              type: object
            - $ref: '#/components/schemas/PurchaseOrderEmail'
          type: object
        expected_delivery_at:
          $ref: '#/components/schemas/NaiveDateTime'
        line_items:
          items:
            $ref: '#/components/schemas/PendingPurchaseOrderLineItem'
          type: array
        notes:
          description: >-
            Extra notes to be added to the purchase order. This are internal
            notes and will not be dispatched.
          type: string
        purchase_order_number:
          description: >-
            The ID of the purchase order inside luminovo. If not supplied, this
            value is autogenerated and has the format `LUMI-000123`.
          type: string
        recipient:
          $ref: '#/components/schemas/PendingPurchaseOrderRecipient'
        sender_id:
          description: >
            The ID of the User that will send the purchase order.


            To obtain a user ID, use this command. You only need to do this
            once:

            ```

            curl 'https://api.luminovo.ai/users/organization' -H 'authorization:
            Bearer {{token}}'

            ```


            Note: this endpoint is not part of the public API, so don't make
            assumptions about its structure.
          format: uuid
          type: string
        shipping_address:
          description: Address for the purchase order to be sent
          type: string
        shipping_costs:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
        supplier_purchase_order_number:
          description: >-
            If known, enter the supplier purchase order number here. This can be
            added later.
          type: string
      required:
        - billing_address
        - recipient
        - line_items
        - notes
        - shipping_address
        - dispatch_method
      title: PendingPurchaseOrder
      type: object
    PendingPurchaseOrderDraft:
      properties:
        line_items:
          items:
            $ref: '#/components/schemas/PendingPurchaseOrderLineItem'
          type: array
        recipient:
          $ref: '#/components/schemas/PendingPurchaseOrderRecipient'
      required:
        - line_items
        - recipient
      title: Pending purchase order draft
      type: object
    PendingPurchaseOrderLineItem:
      properties:
        availability:
          $ref: '#/components/schemas/Availability'
        expected_unit_price:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
        ipns:
          items:
            type: string
          type: array
        linked_part:
          $ref: '#/components/schemas/PurchaseOrderLinkedPart'
        offer_created_at:
          $ref: '#/components/schemas/NaiveDateTime'
        offer_number:
          type: string
        packaging:
          allOf:
            - $ref: '#/components/schemas/Packaging'
        quantity:
          $ref: '#/components/schemas/QuantityUnit'
        received_at:
          $ref: '#/components/schemas/NaiveDateTime'
        solution_config_id:
          description: The associated solution configuration ID.
          format: uuid
          type: string
        supplier_part_number:
          description: Extra note
          type: string
        total_price:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
      required:
        - expected_unit_price
        - quantity
        - solution_config_id
        - total_price
        - linked_part
      title: PendingPurchaseOrderLineItem
      type: object
    PendingPurchaseOrderRecipient:
      oneOf:
        - properties:
            supplier_and_stock_location_id:
              description: The ID of the supplier-and-stock-location for purchase order
              format: uuid
              type: string
            supplier_contact:
              $ref: '#/components/schemas/SupplierContact'
            type:
              enum:
                - Supplier
              type: string
          required:
            - type
            - supplier_and_stock_location_id
          title: Supplier
          type: object
        - properties:
            internal_user:
              $ref: '#/components/schemas/InternalUser'
            inventory_id:
              description: The ID of the inventory site for purchase order
              format: uuid
              type: string
            type:
              enum:
                - Internal
              type: string
          required:
            - type
            - inventory_id
          title: Internal
          type: object
        - properties:
            type:
              enum:
                - Customer
              type: string
            user:
              $ref: '#/components/schemas/InternalUser'
          required:
            - type
          title: Customer
          type: object
        - properties:
            supplier_contact:
              $ref: '#/components/schemas/SupplierContact'
            supplier_number:
              description: The number of the supplier for purchase order
              type: string
            type:
              enum:
                - SupplierNumber
              type: string
          required:
            - type
            - supplier_number
          title: SupplierNumber
          type: object
      title: PendingPurchaseOrderRecipient
      type: object
    PostOffersImportResponse:
      items:
        properties:
          description:
            description: >
              Human readable status description containing additional context
              information about the status, e.g. failure description.
            type: string
          error_code:
            description: >
              Machine-readable error code for categorizing the type of error.
              Only present when status is not 200.
            type: string
          key:
            description: >
              Optional key that can be used to track which request item
              corresponds to which response item. Echoed back from the request.
            type: object
          part:
            $ref: '#/components/schemas/OfferImportPart'
          status:
            description: >
              Response status value. 200 for successfully created or updated
              offer or inventory items, 400 for bad requests, 422 for validation
              errors.
            enum:
              - 200
              - 400
              - 422
            type: integer
        required:
          - status
          - description
        type: object
      type: array
    PurchaseOptionResponse:
      allOf:
        - $ref: '#/components/schemas/OfferId'
        - properties:
            availability:
              $ref: '#/components/schemas/Availability'
            quantity:
              type: number
            signature:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/Signature'
            unit:
              $ref: '#/components/schemas/QuantityUnit'
            unit_price:
              $ref: '#/components/schemas/MonetaryValue'
          required:
            - unit
            - quantity
          type: object
    PurchaseOrder:
      properties:
        approved_at:
          $ref: '#/components/schemas/NaiveDateTime'
        billing_address:
          description: Billing address to be used in the Purchase order
          type: string
        expected_delivery_at:
          $ref: '#/components/schemas/DateTime'
        id:
          description: Purchase order ID
          format: uuid
          type: string
        line_items:
          items:
            $ref: '#/components/schemas/PurchaseOrderLineItem'
          type: array
        notes:
          description: Extra notes
          type: string
        purchase_order_number:
          description: Purchase order identifier
          type: string
        recipient:
          $ref: '#/components/schemas/PurchaseOrderRecipient'
        rfq_id:
          format: uuid
          type: string
        sent_at:
          $ref: '#/components/schemas/NaiveDateTime'
        shipping_address:
          description: Address for the purchase order to be sent
          type: string
        shipping_costs:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
        sourcing_scenario_id:
          format: uuid
          type: string
        supplier_purchase_order_number:
          description: Supplier purchase order identifier
          type: string
      required:
        - id
        - approved_at
        - line_items
        - billing_address
        - shipping_address
      title: Purchase order
      type: object
    PurchaseOrderEmail:
      description: Send a purchase order via an email
      properties:
        body:
          type: string
        subject:
          type: string
        type:
          enum:
            - Email
          type: string
      required:
        - type
        - subject
        - body
      title: Email
      type: object
    PurchaseOrderLineItem:
      properties:
        availability:
          $ref: '#/components/schemas/Availability'
        expected_unit_price:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
        id:
          description: Purchase order line item ID
          format: uuid
          type: string
        ipns:
          items:
            type: string
          type: array
        linked_part:
          $ref: '#/components/schemas/PurchaseOrderLinkedPart'
        offer_created_at:
          $ref: '#/components/schemas/DateTime'
        offer_number:
          type: string
        packaging:
          allOf:
            - $ref: '#/components/schemas/Packaging'
        quantity:
          $ref: '#/components/schemas/QuantityUnit'
        received_at:
          $ref: '#/components/schemas/DateTime'
        solution_config_id:
          description: Solution configuration ID
          format: uuid
          type: string
        supplier_part_number:
          description: Part number for supplier
          type: string
        total_price:
          allOf:
            - $ref: '#/components/schemas/MonetaryValue'
      required:
        - id
        - expected_unit_price
        - quantity
        - total_price
        - linked_part
        - solution_config_id
      title: PurchaseOrderLineItem
      type: object
    PurchaseOrderLinkedPart:
      oneOf:
        - properties:
            part:
              format: uuid
              type: string
            type:
              enum:
                - OffTheShelf
                - Custom
                - Ipn
              type: string
          required:
            - type
            - part
          type: object
        - properties:
            part_options:
              items:
                properties:
                  part:
                    format: uuid
                    type: string
                  type:
                    enum:
                      - Custom
                      - OffTheShelf
                      - Ipn
                      - Generic
                    type: string
                required:
                  - part
                  - type
                type: object
              type: array
            type:
              enum:
                - Consigned
              type: string
          required:
            - type
            - part_options
          type: object
      title: PurchaseOrderLinkedPart
      type: object
    PurchaseOrderRecipient:
      oneOf:
        - properties:
            supplier_and_stock_location_id:
              description: The ID of the supplier-and-stock-location for purchase order
              format: uuid
              type: string
            supplier_contact:
              format: uuid
              type: string
            type:
              enum:
                - Supplier
              type: string
          required:
            - type
            - supplier_and_stock_location_id
          type: object
        - properties:
            internal_user:
              format: uuid
              type: string
            inventory_id:
              description: The ID of the inventory site for purchase order
              format: uuid
              type: string
            type:
              enum:
                - Internal
              type: string
          required:
            - type
            - inventory_id
            - internal_user
          type: object
        - properties:
            type:
              enum:
                - Customer
              type: string
            user:
              format: uuid
              type: string
          required:
            - type
            - user
          type: object
        - properties:
            supplier_contact:
              format: uuid
              type: string
            supplier_number:
              description: The number of the supplier for purchase order
              type: string
            type:
              enum:
                - SupplierNumber
              type: string
          required:
            - type
            - supplier_number
          title: SupplierNumber
          type: object
      title: PurchaseOrderRecipient
      type: object
    QuantityUnit:
      properties:
        quantity:
          type: number
        unit:
          enum:
            - Kg
            - Meters
            - Liters
            - Pieces
          type: string
      required:
        - unit
        - quantity
      type: object
    Resistor:
      description: Defines the specifcation for a resistor.
      properties:
        data:
          properties:
            power_rating_watts:
              examples:
                - '50'
              type: string
            resistance_ohms:
              examples:
                - '100'
              type: string
            temperature_coefficient_ppmk:
              examples:
                - '200'
              type: string
            tolerance_percent:
              examples:
                - '5'
              type: string
            voltage_rating_volts:
              examples:
                - '10'
              type: string
          type: object
        type:
          enum:
            - Resistor
          type: string
      required:
        - type
        - data
      type: object
    Signature:
      type: object
    Specification:
      description: >-
        Defines the more abstract or technical properties, as well as possible
        compliance requirements of the component.
      properties:
        approved_manufacturers:
          description: >
            **This data is not yet supported and is ignored during import.**

            List of manufacturers that are approved for this Generic component.
            If empty - all manufacturers are approved.
          items:
            examples:
              - Yageo
            type: string
          type: array
        form_and_fit:
          description: >-
            Defines the package for the component. We will try to link a package
            to this component by `(name, mounting, number_of_pins)` triplet, and
            if no package would be found, we will try with `(empty name,
            mounting, number_of_pins)` triplet. The linked package will be used
            as data for manufacturing.
          properties:
            mounting:
              description: >-
                The package's mounting. At the moment we only support `SMT`,
                `THT`, `Press Fit` and `Other` as values.
              examples:
                - SMT
              type: string
            name:
              description: >-
                The name of the package. E.g. `0603` We interpret names as
                imperial per default. If you want to refer to a metric packge
                the suffix `mm` must be appended. E.g. `0603mm`
              examples:
                - '0603'
              type: string
            number_of_pins:
              description: |
                The package's number of pins.
              examples:
                - 2
              minimum: 1
              type: integer
          required:
            - name
          type: object
        function:
          description: >
            Defines the technical function of the component. At the moment we

            only support defining the function for resistors and ceramic

            capacitors.

            For generic components, the function is required for automatic
            linking of parts.

            If you do not specify a function, the linking of generic component
            will not be done automatically.


            For numeric fields such as `resistance_ohms`, `capacitance_farads`,
            `power_rating_watts`, and `voltage_rating_volts`, the following
            metric prefixes are supported for deserialization:

            - `p` for pico (10^-12)

            - `n` for nano (10^-9)

            - `u`, `µ` for micro (10^-6)

            - `m` for milli (10^-3)

            - `k` for kilo (10^3)

            - `M` for mega (10^6)


            These prefixes allow for concise representation of values. For
            example, "10k" will be interpreted as 10,000 (ten thousand).


            Ensure that values are non-negative, as negative values are not
            supported for these specifications. Additionally,

            ranges (e.g., `+10%-20%`) are not accepted; only single values
            should be provided for fields like `tolerance_percent`.

            Additionally, neither scientific (`5.31e5`) nor engineering
            (`531e3`) notations are supported.
          oneOf:
            - $ref: '#/components/schemas/Resistor'
            - $ref: '#/components/schemas/Capacitor'
          type: object
        type:
          description: >
            Defaults to `BoundToMPNs`.


            `BoundToMPNs`: this means that component specification is not
            generic, i.e. the selected parts were carefully selected and are
            binding.


            `Generic`: the component is generic. The component is mainly defined
            either via the

            technical properties in the function and form and fit, or the
            selected

            parts can be extended as long as the original intent is kept intact.

            Optionally restricts which manufacturers can be used. If none are

            restricted, then all manufacturers are fine. This is also often
            referred

            to as manufacturer free.
          enum:
            - BoundToMPNs
            - Generic
          type: string
      type: object
    Subassembly:
      properties:
        internal_part_number:
          $ref: '#/components/schemas/InternalPartNumber'
        quantity:
          description: How often the subassembly is required in the assembly.
          examples:
            - 1
          type: integer
      required:
        - internal_part_number
        - quantity
      title: Subassembly
      type: object
    SupplierContact:
      properties:
        email:
          description: The email address of the supplier contact
          examples:
            - max.mustermann@musterfirma.de
          type: string
        first_name:
          description: The first name of the supplier contact
          examples:
            - Max
          type: string
        id:
          description: the identifier of the supplier contact
          example: 1adf4f5f-ec6d-4b80-9da4-9f0d4f876913
          format: uuid
          type: string
        is_main_contact:
          description: >-
            Determines if this supplier contact will be the main contact. Sets
            the preselection of this contact
          example: true
          type: boolean
        is_public:
          description: Determines if this supplier contact will be public.
          example: true
          type: boolean
        last_name:
          description: The last name of the supplier contact
          examples:
            - Mustermann
          type: string
        position:
          description: Optional job description of the supplier contact
          examples:
            - Key Account Manager
          type: string
        supplier_and_stock_location:
          description: The identifier of the corresponding supplier
          example: 0f9b6e20-0f5c-4dd4-9ebf-f14cbece3f71
          format: uuid
          type: string
        user_language:
          description: The user language of the supplier contact
          enum:
            - de
            - en
            - es
            - fr
          example: en
          type: string
      required:
        - id
        - first_name
        - last_name
        - email
        - user_language
        - supplier_and_stock_location
        - is_main_contact
        - is_public
      type: object
    SupplierContactResponse:
      allOf:
        - $ref: '#/components/schemas/SupplierContact'
        - properties:
            id:
              description: The unique identifier of that supplier contact
              example: 1adf4f5f-ec6d-4b80-9da4-9f0d4f876913
              format: uuid
              type: string
          type: object
      description: The supplier contact object
      type: object
    ThreeLetterStockLocation:
      description: >-
        The stock location for this offer from an external supplier. If not
        given, just the supplier name with an unknown stock location is used.
        The stock location can be specified on a country level through ISO
        3166-1 alpha-3 codes or on a region level through English region names.
        The location is not used for internal suppliers, this should be
        configured through Luminovo.
      enum:
        - World
        - Africa
        - Northern Africa
        - Sub-Saharan Africa
        - Western Africa
        - Eastern Africa
        - Middle Africa
        - Southern Africa
        - Americas
        - Northern America
        - Latin America and the Caribbean
        - South America
        - Central America
        - Caribbean
        - Asia
        - Eastern Asia
        - Southern Asia
        - South-eastern Asia
        - Central Asia
        - Western Asia
        - Europe
        - Southern Europe
        - Eastern Europe
        - Northern Europe
        - Channel Islands
        - Western Europe
        - Oceania
        - Australia and New Zealand
        - Melanesia
        - Micronesia
        - Polynesia
        - ABW
        - AFG
        - AGO
        - AIA
        - ALA
        - ALB
        - AND
        - ARE
        - ARG
        - ARM
        - ASM
        - ATA
        - ATF
        - ATG
        - AUS
        - AUT
        - AZE
        - BDI
        - BEL
        - BEN
        - BES
        - BFA
        - BGD
        - BGR
        - BHR
        - BHS
        - BIH
        - BLM
        - BLR
        - BLZ
        - BMU
        - BOL
        - BRA
        - BRB
        - BRN
        - BTN
        - BVT
        - BWA
        - CAF
        - CAN
        - CCK
        - CHE
        - CHL
        - CHN
        - CIV
        - CMR
        - COD
        - COG
        - COK
        - COL
        - COM
        - CPV
        - CRI
        - CUB
        - CUW
        - CXR
        - CYM
        - CYP
        - CZE
        - DEU
        - DJI
        - DMA
        - DNK
        - DOM
        - DZA
        - ECU
        - EGY
        - ERI
        - ESH
        - ESP
        - EST
        - ETH
        - FIN
        - FJI
        - FLK
        - FRA
        - FRO
        - FSM
        - GAB
        - GBR
        - GEO
        - GGY
        - GHA
        - GIB
        - GIN
        - GLP
        - GMB
        - GNB
        - GNQ
        - GRC
        - GRD
        - GRL
        - GTM
        - GUF
        - GUM
        - GUY
        - HKG
        - HMD
        - HND
        - HRV
        - HTI
        - HUN
        - IDN
        - IMN
        - IND
        - IOT
        - IRL
        - IRN
        - IRQ
        - ISL
        - ISR
        - ITA
        - JAM
        - JEY
        - JOR
        - JPN
        - KAZ
        - KEN
        - KGZ
        - KHM
        - KIR
        - KNA
        - KOR
        - KWT
        - LAO
        - LBN
        - LBR
        - LBY
        - LCA
        - LIE
        - LKA
        - LSO
        - LTU
        - LUX
        - LVA
        - MAC
        - MAF
        - MAR
        - MCO
        - MDA
        - MDG
        - MDV
        - MEX
        - MHL
        - MKD
        - MLI
        - MLT
        - MMR
        - MNE
        - MNG
        - MNP
        - MOZ
        - MRT
        - MSR
        - MTQ
        - MUS
        - MWI
        - MYS
        - MYT
        - NAM
        - NCL
        - NER
        - NFK
        - NGA
        - NIC
        - NIU
        - NLD
        - NOR
        - NPL
        - NRU
        - NZL
        - OMN
        - PAK
        - PAN
        - PCN
        - PER
        - PHL
        - PLW
        - PNG
        - POL
        - PRI
        - PRK
        - PRT
        - PRY
        - PSE
        - PYF
        - QAT
        - REU
        - ROU
        - RUS
        - RWA
        - Sark
        - SAU
        - SDN
        - SEN
        - SGP
        - SGS
        - SHN
        - SJM
        - SLB
        - SLE
        - SLV
        - SMR
        - SOM
        - SPM
        - SRB
        - SSD
        - STP
        - SUR
        - SVK
        - SVN
        - SWE
        - SWZ
        - SXM
        - SYC
        - SYR
        - TCA
        - TCD
        - TGO
        - THA
        - TJK
        - TKL
        - TKM
        - TLS
        - TON
        - TTO
        - TUN
        - TUR
        - TUV
        - TWN
        - TZA
        - UGA
        - UKR
        - UMI
        - URY
        - USA
        - UZB
        - VAT
        - VCT
        - VEN
        - VGB
        - VIR
        - VNM
        - VUT
        - WLF
        - WSM
        - YEM
        - ZAF
        - ZMB
        - ZWE
      examples:
        - USA
      title: Stock location
      type: string
    TokenRequest:
      properties:
        token:
          description: The authentication token to exchange for an access token
          examples:
            - cb7daea2-df5f-44de-99cc-213668e6c991
          type: string
      required:
        - token
      type: object
    AssemblyAcceptHeader:
      type: string
      title: AssemblyAcceptHeader
      enum:
        - application/api.luminovo.assembly-v1+json
    AssemblyCostAcceptHeader:
      type: string
      title: AssemblyCostAcceptHeader
      enum:
        - application/api.luminovo.assembly-cost-v1+json
    AssemblyId:
      type: string
      format: uuid
    AssemblyIdsAcceptHeader:
      type: string
      title: AssemblyIdsAcceptHeader
      enum:
        - application/api.luminovo.assembly-ids-v1+json
    CalculationLineItemId:
      type: string
      format: uuid
    CalculationScenarioId:
      type: string
      format: uuid
    ComponentRiskAcceptHeader:
      type: string
      title: ComponentRiskAcceptHeader
      enum:
        - application/api.luminovo.component-risk-v1+json
    CostedBomAcceptHeader:
      type: string
      title: CostedBomAcceptHeader
      enum:
        - application/api.luminovo.costed-bom-v1+json
    CustomPartAcceptHeader:
      type: string
      title: CustomPartAcceptHeader
      enum:
        - application/api.luminovo.custom-part-v1+json
    CustomPartOfferAcceptHeader:
      type: string
      title: CustomPartOfferAcceptHeader
      enum:
        - application/api.luminovo.custom-part-offer-v1+json
    CustomPartResourceAcceptHeader:
      type: string
      title: CustomPartResourceAcceptHeader
      enum:
        - application/api.luminovo.resource-v1+json
    CustomerAcceptHeader:
      type: string
      title: CustomerAcceptHeader
      enum:
        - application/api.luminovo.customer-v1+json
    CustomerUserAcceptHeader:
      type: string
      title: CustomerUserAcceptHeader
      enum:
        - application/api.luminovo.customer-user-v1+json
    DemandAcceptHeader:
      type: string
      title: DemandAcceptHeader
      enum:
        - application/api.luminovo.demand-v1+json
    DemandCreationRequest:
      type: object
      required:
        - items
        - context
      properties:
        context:
          type: string
          description: >-
            The context field is a string that provides additional information
            about where the demand originated from or its purpose.

            It's required for most demand creation requests (except for sourcing
            scenarios).
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.demand.v1.DemandCreationRequestItem'
    DesignItemId:
      type: string
      format: uuid
    FlexibleCalculationAcceptHeader:
      type: string
      title: FlexibleCalculationAcceptHeader
      description: |-
        Accept header for flexible calculation endpoints.

        Version v0 indicates an unstable API contract. Breaking changes may be
        introduced without a version bump. Once the API stabilises, it will be
        promoted to v1.
      enum:
        - application/api.luminovo.flexible-calculation-v0+json
    GetPnpParams:
      type: object
      required:
        - assembly_id
      properties:
        assembly_id:
          $ref: '#/components/schemas/AssemblyId'
          description: The assembly ID to get PnP items for.
    HashMap_Option_types.assembly.assembly_manufacturing_data.export.v1.NaiveTime:
      type: object
      additionalProperties:
        oneOf:
          - type: 'null'
          - type: string
            format: time
      propertyNames:
        type: integer
        format: int32
    HashMap_types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetailCost:
      type: object
      additionalProperties:
        type: object
        properties:
          effective_cost:
            oneOf:
              - type: 'null'
              - $ref: >-
                  #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair
          total_cost:
            oneOf:
              - type: 'null'
              - $ref: >-
                  #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair
      propertyNames:
        type: integer
        format: int32
    HashMap_types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetailCost:
      type: object
      additionalProperties:
        type: object
        properties:
          fixed_cost:
            oneOf:
              - type: 'null'
              - $ref: >-
                  #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
          total_cost:
            oneOf:
              - type: 'null'
              - $ref: >-
                  #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair
          variable_cost:
            oneOf:
              - type: 'null'
              - $ref: >-
                  #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
      propertyNames:
        type: integer
        format: int32
    HashMap_types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummaryBreakdown:
      type: object
      additionalProperties:
        type: object
        required:
          - total_unit_time
          - total_batch_time
          - total_unit_cost
          - total_batch_cost
          - total_project_cost
          - total_effective_unit_cost
          - total_effective_batch_cost
        properties:
          total_batch_cost:
            $ref: >-
              #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
          total_batch_time:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime
          total_effective_batch_cost:
            $ref: >-
              #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
          total_effective_unit_cost:
            $ref: >-
              #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
          total_project_cost:
            $ref: >-
              #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
          total_unit_cost:
            $ref: >-
              #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
          total_unit_time:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime
      propertyNames:
        type: integer
        format: int32
    ManufacturingDataExportAcceptHeader:
      type: string
      title: ManufacturingDataExportAcceptHeader
      enum:
        - application/api.luminovo.assembly.manufacturing-data.export-v1+json
    ManufacturingResourceAcceptHeader:
      type: string
      title: ManufacturingResourceAcceptHeader
      enum:
        - application/api.luminovo.manufacturing.resource-v1+json
    ManufacturingScenarioTemplateInstanceId:
      type: string
      format: uuid
    OrderManagementAcceptHeader:
      type: string
      title: OrderManagementAcceptHeader
      enum:
        - application/api.luminovo.order-management-v1+json
    PnpAcceptHeader:
      type: string
      title: PnpAcceptHeader
      enum:
        - application/api.luminovo.pnp-v1+json
    PnpFileId:
      type: string
      format: uuid
    PnpItemId:
      type: string
      format: uuid
    QuotationUploadAcceptHeader:
      type: string
      title: QuotationUploadAcceptHeader
      enum:
        - application/api.luminovo.quotation-upload-v1+json
    RfqAcceptHeader:
      type: string
      title: RfqAcceptHeader
      enum:
        - application/api.luminovo.rfq-v1+json
    RfqOverviewAcceptHeader:
      type: string
      title: RfqOverviewAcceptHeader
      enum:
        - application/api.luminovo.rfq-overview-v1+json
    SiteId:
      type: string
      format: uuid
    SourcingCalculationAcceptHeader:
      type: string
      title: SourcingCalculationAcceptHeader
      enum:
        - application/api.luminovo.sourcing-calculation-v1+json
    SourcingScenarioAcceptHeader:
      type: string
      title: SourcingScenarioAcceptHeader
      enum:
        - application/api.luminovo.sourcing-scenario-v1+json
    SourcingScenarioV2AcceptHeader:
      type: string
      title: SourcingScenarioV2AcceptHeader
      enum:
        - application/api.luminovo.sourcing-scenario-v2+json
    String:
      type: string
    SupplierAcceptHeader:
      type: string
      title: SupplierAcceptHeader
      enum:
        - application/api.luminovo.supplier-v1+json
    SupplierCustomPartOfferAcceptHeader:
      type: string
      title: SupplierCustomPartOfferAcceptHeader
      enum:
        - application/api.luminovo.custom-part-offer-v1+json
    SupplierId:
      type: string
      format: uuid
    UserAcceptHeader:
      type: string
      title: UserAcceptHeader
      enum:
        - application/api.luminovo.user-v1+json
    UserId:
      type: string
      format: uuid
    types.assembly.assembly_ids.v1.AssemblyIdsResponse:
      type: object
      required:
        - assembly_ids
      properties:
        assembly_ids:
          type: array
          items:
            type: string
            format: uuid
    types.assembly.assembly_industry.v1.AssemblyIndustry:
      type: string
      enum:
        - Auto
        - Medical
        - Defense
        - Aero
        - Rail
        - Industrial
        - Construction
        - Consumer
        - Other
    types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetail:
      type: object
      required:
        - activity_name
        - resources_details
        - activity_process
        - activity_category
        - activity_level
        - drivers_detail
        - resource_cost_per_hour
        - costs_per_batch_size
        - times_per_batch_size
        - rank
      properties:
        activity_category:
          type: string
        activity_configuration_notes:
          type:
            - string
            - 'null'
        activity_description:
          type:
            - string
            - 'null'
        activity_internal_number:
          type:
            - string
            - 'null'
        activity_level:
          type: string
        activity_name:
          type: string
        activity_process:
          type: string
        costs_per_batch_size:
          $ref: >-
            #/components/schemas/HashMap_types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetailCost
        drivers_detail:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.DriverDetail
          description: write_number of xlsxwriter expects f64
        fixed_time:
          type:
            - string
            - 'null'
          format: time
        manufacturing_scenario_template_instance_id:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ManufacturingScenarioTemplateInstanceId'
        panel_factor:
          type:
            - number
            - 'null'
          format: double
          description: write_number of xlsxwriter expects f64
        rank:
          type: integer
          format: int32
        resource_cost_per_hour:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        resources_details:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ActivityResourceDetail
        times_per_batch_size:
          $ref: >-
            #/components/schemas/HashMap_Option_types.assembly.assembly_manufacturing_data.export.v1.NaiveTime
        variable_time:
          type:
            - string
            - 'null'
          format: time
    types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetailCost:
      type: object
      properties:
        effective_cost:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair
        total_cost:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair
    types.assembly.assembly_manufacturing_data.export.v1.ActivityResourceDetail:
      type: object
      required:
        - multiplier
        - resource
      properties:
        multiplier:
          type: string
        resource:
          $ref: >-
            #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ResourceDetail
    types.assembly.assembly_manufacturing_data.export.v1.AssemblySummary:
      type: object
      required:
        - assembly_name
      properties:
        assembly_name:
          type: string
        assembly_notes:
          type:
            - string
            - 'null'
    types.assembly.assembly_manufacturing_data.export.v1.CustomOrderSelectionOptionInput:
      type: object
      required:
        - assembly_summary
        - manufacturing_scenario_summaries
        - all_batch_sizes
      properties:
        all_batch_sizes:
          type: array
          items:
            type: integer
            format: int32
          uniqueItems: true
        assembly_summary:
          $ref: >-
            #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.AssemblySummary
        manufacturing_scenario_summaries:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioExport
    types.assembly.assembly_manufacturing_data.export.v1.DriverDetail:
      type: object
      required:
        - driver_name
        - driver_type
      properties:
        driver_count:
          type:
            - number
            - 'null'
          format: double
          description: write_number of xlsxwriter expects f64
        driver_name:
          type: string
        driver_type:
          type: string
    types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetail:
      type: object
      required:
        - expense_name
        - process
        - category
        - level
        - drivers_detail
        - costs_per_batch_size
        - rank
      properties:
        category:
          type: string
        costs_per_batch_size:
          $ref: >-
            #/components/schemas/HashMap_types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetailCost
        drivers_detail:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.DriverDetail
        expense_configuration_notes:
          type:
            - string
            - 'null'
        expense_description:
          type:
            - string
            - 'null'
        expense_internal_number:
          type:
            - string
            - 'null'
        expense_name:
          type: string
        level:
          type: string
        manufacturing_scenario_template_instance_id:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ManufacturingScenarioTemplateInstanceId'
        process:
          type: string
        rank:
          type: integer
          format: int32
    types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetailCost:
      type: object
      properties:
        fixed_cost:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        total_cost:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair
        variable_cost:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
    types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioExport:
      type: object
      required:
        - summary
        - activity_configuration_details
        - expense_configuration_details
      properties:
        activity_configuration_details:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetail
        expense_configuration_details:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetail
        summary:
          $ref: >-
            #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummary
    types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummary:
      type: object
      required:
        - manufacturing_scenario_name
        - activity_count
        - expense_count
        - breakdown_per_batch_size
      properties:
        activity_count:
          type: number
          format: double
        breakdown_per_batch_size:
          $ref: >-
            #/components/schemas/HashMap_types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummaryBreakdown
        expense_count:
          type: number
          format: double
        manufacturing_scenario_name:
          type: string
        manufacturing_scenario_notes:
          type:
            - string
            - 'null'
        sourcing_scenario_id:
          type:
            - string
            - 'null'
          format: uuid
    types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummaryBreakdown:
      type: object
      required:
        - total_unit_time
        - total_batch_time
        - total_unit_cost
        - total_batch_cost
        - total_project_cost
        - total_effective_unit_cost
        - total_effective_batch_cost
      properties:
        total_batch_cost:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        total_batch_time:
          $ref: >-
            #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime
        total_effective_batch_cost:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        total_effective_unit_cost:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        total_project_cost:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        total_unit_cost:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        total_unit_time:
          $ref: >-
            #/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime
    types.assembly.assembly_manufacturing_data.export.v1.NaiveTime:
      type: string
      format: time
    types.assembly.assembly_manufacturing_data.export.v1.ResourceDetail:
      type: object
      required:
        - name
        - resource_type
      properties:
        internal_number:
          type:
            - string
            - 'null'
        name:
          type: string
        resource_type:
          type: string
    types.assembly.assembly_type.v1.AssemblyType:
      type: string
      enum:
        - Box
        - Pcba
        - PcbOnly
        - Cable
        - System
        - BOM
    types.assembly.v1.AssemblyInput:
      type: object
      required:
        - rfq
        - customer
        - type
        - name
        - industry
      properties:
        customer:
          type: string
          format: uuid
          description: The ID of the customer who owns this assembly
        industry:
          $ref: >-
            #/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry
          description: The industry this assembly belongs to
        name:
          type: string
          description: >-
            A unique name/identifier for the assembly within the RfQ.

            This name helps identify the assembly in the BOM structure and
            should be descriptive

            (e.g., "Main PCB Assembly", "Power Supply Module", "Display
            Interface Board").
        notes:
          type:
            - string
            - 'null'
          description: Optional notes or description for the assembly
        parent_assembly:
          type:
            - string
            - 'null'
          format: uuid
          description: >-
            Optional parent assembly ID. If provided, this assembly becomes a
            sub-assembly of the specified parent.

            If not provided, this assembly becomes a top-level assembly within
            the RfQ.

            This allows building hierarchical assembly structures (e.g., a main
            PCB containing smaller sub-assemblies).
        rfq:
          type: string
          format: uuid
          description: The ID of the RfQ (Request for Quote) this assembly belongs to
        type:
          $ref: '#/components/schemas/types.assembly.assembly_type.v1.AssemblyType'
          description: The type of assembly being created
    types.assembly.v1.CreateAssemblyPcbRequest:
      type: object
    types.assembly.v1.CreateAssemblyPcbResponse:
      type: object
      required:
        - pcb_id
        - custom_part_specification_id
      properties:
        custom_part_specification_id:
          type: string
          format: uuid
          description: The ID of the custom part specification
        pcb_id:
          type: string
          format: uuid
          description: The ID of the created PCB
    types.assembly.v1.SimpleAssemblyResponse:
      type: object
      required:
        - id
        - name
        - type
        - customer
        - industry
      properties:
        customer:
          type: string
          format: uuid
        id:
          type: string
          format: uuid
        industry:
          $ref: >-
            #/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry
        name:
          type: string
        notes:
          type:
            - string
            - 'null'
        parent_assembly:
          type:
            - string
            - 'null'
          format: uuid
        rfq:
          type:
            - string
            - 'null'
          format: uuid
        type:
          $ref: '#/components/schemas/types.assembly.assembly_type.v1.AssemblyType'
    types.calculation.calculation_assembly_cost.v1.AdditionalCostResponse:
      type: object
      required:
        - other_costs
        - post_profit_costs
        - sub_total_cost
      properties:
        discount:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse
        other_costs:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.calculation.calculation_assembly_cost.v1.ExtraCostResponse
        post_profit_costs:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.calculation.calculation_assembly_cost.v1.ExtraCostResponse
        profit:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse
        sub_total_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Total of all other costs and post profit costs.
    types.calculation.calculation_assembly_cost.v1.BatchCostResponse:
      type: object
      required:
        - material_cost
        - manufacturing_cost
        - additional_cost
        - project_cost
        - summarized_cost
        - checkout_cost
      properties:
        additional_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.AdditionalCostResponse
        checkout_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.CostSummaryResponse
          description: >-
            Final cost representing what is displayed at checkout screen.

            If the project cost is separated (or any other type of cost), it is
            added to

            this cost. This is in contrast to `summarized_cost` with excludes
            separated costs.
        manufacturing_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.ManufacturingCostResponse
        material_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.MaterialCostResponse
        project_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.ProjectCostResponse
        summarized_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.CostSummaryResponse
          description: >-
            If the project cost is separated, it isn't added to the summarized
            cost.
    types.calculation.calculation_assembly_cost.v1.BatchSizeDataResponse:
      type: object
      required:
        - batch_size
        - cost
      properties:
        batch_size:
          type: integer
          format: int32
        cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.BatchCostResponse
    types.calculation.calculation_assembly_cost.v1.CalculationAssemblyCostResponse:
      type: object
      required:
        - id
        - calculation_assembly_details
        - costs
        - created_at
        - updated_at
        - is_cost_frozen
      properties:
        calculation_assembly_details:
          type: string
          format: uuid
        costs:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.calculation.calculation_assembly_cost.v1.ScenarioCostResponse
        created_at:
          type: string
          format: date-time
        id:
          type: string
          format: uuid
        is_cost_frozen:
          type: boolean
        updated_at:
          type: string
          format: date-time
    types.calculation.calculation_assembly_cost.v1.CalculationResult_Option_f64:
      oneOf:
        - type: object
          required:
            - data
            - result
          properties:
            data:
              oneOf:
                - type: 'null'
                - type: number
                  format: double
            result:
              type: string
              enum:
                - Ok
        - type: object
          required:
            - data
            - result
          properties:
            data:
              type: string
            result:
              type: string
              enum:
                - ScriptError
        - type: object
          required:
            - data
            - result
          properties:
            data:
              type: string
            result:
              type: string
              enum:
                - UnknownIdentifier
        - type: object
          required:
            - data
            - result
          properties:
            data:
              type: string
            result:
              type: string
              enum:
                - NullValue
    types.calculation.calculation_assembly_cost.v1.CostSummaryResponse:
      type: object
      required:
        - total_cost
        - total_profit
        - total_price
      properties:
        total_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
        total_price:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
        total_profit:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
    types.calculation.calculation_assembly_cost.v1.CostTypeResponse:
      oneOf:
        - type: object
          required:
            - data
            - type
          properties:
            data:
              $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
            type:
              type: string
              enum:
                - Fixed
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: string
            type:
              type: string
              enum:
                - Fraction
        - type: object
          required:
            - data
            - type
          properties:
            data:
              $ref: >-
                #/components/schemas/types.calculation.calculation_assembly_cost.v1.OverridableFormulaResponse
            type:
              type: string
              enum:
                - Formula
    types.calculation.calculation_assembly_cost.v1.CustomCostResponse:
      type: object
      required:
        - extra_costs
      properties:
        discount:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse
        extra_costs:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.calculation.calculation_assembly_cost.v1.ExtraCostResponse
        profit:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse
    types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse:
      type: object
      required:
        - cost_specification
        - unit_cost_value
        - unit_cost_fraction
        - total_cost_value
        - is_locked
      properties:
        cost_specification:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.CostTypeResponse
        is_locked:
          type: boolean
          description: >-
            Determine if the row is locked. Locked means, that from the template
            this row originates from it is not supposed to be changed by the
            user when viewing calculation.
        total_cost_value:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        unit_cost_fraction:
          type: string
        unit_cost_value:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.calculation.calculation_assembly_cost.v1.ExtraCostResponse:
      type: object
      required:
        - name
        - cost
      properties:
        cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse
        name:
          type: string
    types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse:
      type: object
      required:
        - unit_cost
        - total_cost
      properties:
        total_cost:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        unit_cost:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.calculation.calculation_assembly_cost.v1.FormulaCostType:
      oneOf:
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - script
                - currency
              properties:
                currency:
                  $ref: >-
                    #/components/schemas/types.primitives.monetary_value.v1.Currency
                script:
                  type: string
            type:
              type: string
              enum:
                - Fixed
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - script
              properties:
                script:
                  type: string
            type:
              type: string
              enum:
                - Fraction
    types.calculation.calculation_assembly_cost.v1.ManufacturingCostResponse:
      type: object
      required:
        - base_cost
        - cost
        - custom_cost
        - sub_total_cost
        - price
      properties:
        base_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Manufacturing cost excluding additives (e.g. project cost).
        cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Manufacturing cost including additives (e.g. project cost).
        custom_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.CustomCostResponse
        price:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Total of all the unit cells for `cost` and `custom_cost`.
        sub_total_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Total of all the costs excluding profits and discount.
    types.calculation.calculation_assembly_cost.v1.MaterialCostResponse:
      type: object
      required:
        - base_cost
        - cost
        - excess_material_cost
        - custom_cost
        - sub_total_cost
        - price
      properties:
        base_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Material cost excluding additives (e.g. excess material cost).
        cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Material cost including additives (e.g. excess material cost).
        custom_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.CustomCostResponse
        excess_material_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
        price:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Total of all the unit cells for `cost` and `custom_cost`.
        sub_total_cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Total of all the costs excluding profits and discount.
    types.calculation.calculation_assembly_cost.v1.OverridableFormula:
      oneOf:
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - calculated
                - manually_overridden
              properties:
                calculated:
                  $ref: >-
                    #/components/schemas/types.calculation.calculation_assembly_cost.v1.FormulaCostType
                manually_overridden:
                  type: string
            type:
              type: string
              enum:
                - Overridden
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - calculated
              properties:
                calculated:
                  $ref: >-
                    #/components/schemas/types.calculation.calculation_assembly_cost.v1.FormulaCostType
            type:
              type: string
              enum:
                - Evaluated
    types.calculation.calculation_assembly_cost.v1.OverridableFormulaResponse:
      type: object
      required:
        - result
        - formula
      properties:
        formula:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.OverridableFormula
        result:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.CalculationResult_Option_f64
    types.calculation.calculation_assembly_cost.v1.ProjectCostResponse:
      type: object
      required:
        - cost
        - price
        - activity_costs
        - expense_costs
      properties:
        activity_costs:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.calculation.calculation_assembly_cost.v1.ProjectEntityCostCellResponse
        cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
        expense_costs:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.calculation.calculation_assembly_cost.v1.ProjectEntityCostCellResponse
        one_time_costs:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
        price:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
          description: Total of all the unit cells for `cost` and `profit`.
        profit:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse
    types.calculation.calculation_assembly_cost.v1.ProjectEntityCostCellResponse:
      type: object
      required:
        - id
        - name
        - cost
      properties:
        cost:
          $ref: >-
            #/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse
        id:
          type: string
          format: uuid
        name:
          type: string
    types.calculation.calculation_assembly_cost.v1.ScenarioCostResponse:
      type: object
      required:
        - scenario_combination_id
        - manufacturing_scenario_id
        - sourcing_scenario_id
        - order_size
        - batch_size_costs
      properties:
        batch_size_costs:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.calculation.calculation_assembly_cost.v1.BatchSizeDataResponse
        manufacturing_lead_time:
          type:
            - integer
            - 'null'
          format: int32
        manufacturing_scenario_id:
          type: string
          format: uuid
          description: >-
            The ID of the manufacturing scenario that this scenario cost is
            associated with. This may be absent for frozen

            costs which were created before April 3rd, 2025.
        order_size:
          type: integer
          format: int32
        scenario_combination_id:
          type: string
          format: uuid
          description: >-
            The ID of the scenario combination that was submitted for
            calculations.
        sourcing_scenario_id:
          type: string
          format: uuid
          description: >-
            The ID of the sourcing scenario that this scenario cost is
            associated with. This may be absent for frozen costs

            which were created before April 3rd, 2025.
        sourcing_total_availability:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.availability.v1.AggregatedAvailabilityIncludingShippingTime
        total_lead_time:
          type:
            - integer
            - 'null'
          format: int32
    types.compliance.v1.ComplianceStatus:
      type: string
      enum:
        - NonCompliant
        - Unknown
        - NotRequired
        - CompliantWithExemption
        - Compliant
    types.custom_part.panel.v1.Depanelization:
      type: string
      enum:
        - VCut
        - Milling
        - MillingAndVCut
    types.custom_part.panel.v1.Padding:
      type: object
      required:
        - top_in_mm
        - bottom_in_mm
        - left_in_mm
        - right_in_mm
      properties:
        bottom_in_mm:
          type: string
        left_in_mm:
          type: string
        right_in_mm:
          type: string
        top_in_mm:
          type: string
    types.custom_part.panel.v1.PanelDetails:
      type: object
      required:
        - row_count
        - column_count
        - horizontal_spacing_in_mm
        - vertical_spacing_in_mm
        - min_milling_distance_in_mm
        - padding
        - depanelization
        - pcb_is_rotated
      properties:
        column_count:
          type: integer
          format: int32
        depanelization:
          $ref: '#/components/schemas/types.custom_part.panel.v1.Depanelization'
        horizontal_spacing_in_mm:
          type: string
        max_x_outs:
          type:
            - integer
            - 'null'
          format: int32
        min_milling_distance_in_mm:
          type: string
        padding:
          $ref: '#/components/schemas/types.custom_part.panel.v1.Padding'
        panel_preference:
          type:
            - string
            - 'null'
          format: uuid
        pcb_is_rotated:
          type: boolean
        row_count:
          type: integer
          format: int32
        vertical_spacing_in_mm:
          type: string
    types.custom_part.v1.CustomPart:
      type: object
      required:
        - id
        - part_type
        - category
        - reach_compliant
        - rohs_compliant
      properties:
        category:
          $ref: '#/components/schemas/types.custom_part.v1.CustomPartCategoryDetails'
        description:
          type:
            - string
            - 'null'
        id:
          type: string
          format: uuid
        part_type:
          $ref: '#/components/schemas/types.custom_part.v1.CustomPartType'
        reach_compliant:
          $ref: '#/components/schemas/types.compliance.v1.ComplianceStatus'
        rohs_compliant:
          $ref: '#/components/schemas/types.compliance.v1.ComplianceStatus'
    types.custom_part.v1.CustomPartCategory:
      type: object
      required:
        - id
        - category
        - origin
      properties:
        category:
          type: string
        description:
          type:
            - string
            - 'null'
        id:
          type: string
          format: uuid
        identifier:
          type:
            - string
            - 'null'
        origin:
          $ref: '#/components/schemas/types.custom_part.v1.CustomPartCategoryOrigin'
        parent:
          type:
            - string
            - 'null'
          format: uuid
    types.custom_part.v1.CustomPartCategoryDetails:
      oneOf:
        - type: object
          required:
            - PCB
          properties:
            PCB:
              type: object
              required:
                - user_category
              properties:
                pcb_id:
                  type:
                    - string
                    - 'null'
                  format: uuid
                user_category:
                  $ref: '#/components/schemas/types.custom_part.v1.CustomPartCategory'
        - type: object
          required:
            - Other
          properties:
            Other:
              type: object
              required:
                - user_category
              properties:
                user_category:
                  $ref: '#/components/schemas/types.custom_part.v1.CustomPartCategory'
    types.custom_part.v1.CustomPartCategoryOrigin:
      type: string
      enum:
        - System
        - User
        - Import
    types.custom_part.v1.CustomPartType:
      oneOf:
        - type: object
          required:
            - content
            - name
          properties:
            content:
              type:
                - string
                - 'null'
              format: uuid
            name:
              type: string
              enum:
                - PCB
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              enum:
                - Mechanical
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              enum:
                - Plastic
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              enum:
                - Cable
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              enum:
                - Packaging
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              enum:
                - Label
        - type: object
          required:
            - name
          properties:
            name:
              type: string
              enum:
                - Other
    types.customer.v1.AllCustomerResponse:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.customer.v1.CustomerResponse'
    types.customer.v1.CustomerBillingAddress:
      type: object
      properties:
        city:
          type:
            - string
            - 'null'
        country_code:
          type:
            - string
            - 'null'
        line1:
          type:
            - string
            - 'null'
          description: Country code in ISO 3166-1 alpha-2 format.
        line2:
          type:
            - string
            - 'null'
        postal_code:
          type:
            - string
            - 'null'
    types.customer.v1.CustomerBusinessData:
      oneOf:
        - type: object
          required:
            - customer_type
          properties:
            customer_type:
              type: string
              enum:
                - private
        - type: object
          required:
            - customer_type
          properties:
            commercial_register_number:
              type:
                - string
                - 'null'
            customer_type:
              type: string
              enum:
                - business
            vat_id:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/types.vat.v1.CompleteVatId'
    types.customer.v1.CustomerInput:
      type: object
      required:
        - name
      properties:
        billing_address:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.customer.v1.CustomerBillingAddress'
        commercial_register_number:
          type:
            - string
            - 'null'
        customer_number:
          type:
            - string
            - 'null'
        default_contact_person:
          type:
            - string
            - 'null'
          format: uuid
        language:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.customer.v1.Language'
        name:
          type: string
        vat_id:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.vat.v1.CompleteVatId'
    types.customer.v1.CustomerResponse:
      type: object
      required:
        - id
        - name
        - language
      properties:
        billing_address:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.customer.v1.CustomerBillingAddress'
        commercial_register_number:
          type:
            - string
            - 'null'
        customer_number:
          type:
            - string
            - 'null'
        default_contact_person:
          type:
            - string
            - 'null'
          format: uuid
        id:
          type: string
          format: uuid
        language:
          $ref: '#/components/schemas/types.customer.v1.Language'
        name:
          type: string
        vat_id:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.vat.v1.CompleteVatId'
    types.customer.v1.CustomerUpdate:
      type: object
      properties:
        billing_address:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.customer.v1.CustomerBillingAddress'
        business_data:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.customer.v1.CustomerBusinessData'
              description: If not provided, the customer type will not be updated.
        customer_number:
          type:
            - string
            - 'null'
        default_contact_person:
          type:
            - string
            - 'null'
          format: uuid
        language:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.customer.v1.Language'
        name:
          type:
            - string
            - 'null'
    types.customer.v1.Language:
      type: string
      enum:
        - de
        - en
        - es
        - fr
        - it
        - th
        - zh
        - ja
        - hi
        - cs
    types.demand.v1.DemandCreationRequestItem:
      type: object
      required:
        - type
        - internal_part_number
        - quantity
        - delivery_start_date
        - delivery_end_date
      properties:
        delivery_end_date:
          type: string
          format: date
          description: If not specified, the delivery start date will be used.
        delivery_start_date:
          type: string
          format: date
          description: >-
            The start and end date indicate the time range for which the given
            quantity is needed.

            E.g. 2025-01-01 for the start date and 2025-12-31 for the end date
            indicates an annual demand for 2025.

            Using the same date for start and end date indicates that the given
            quantity is needed on that specific date.
        end_customer:
          type:
            - string
            - 'null'
          description: >-
            The customer number or name for the recipient of the finished good,
            regardless of any intermediary recipient (like internal or external
            sites used for assembly).
        internal_part_number:
          $ref: '#/components/schemas/types.ipn.v1.InternalPartNumberIdentifiers'
          description: The internal part number. Can be for an assembly or a component.
        production_start_date:
          type:
            - string
            - 'null'
          format: date
          description: >-
            Only used for assembly demands.

            The production start date will be used as the delivery start date
            for the calculated demands of components from this assembly (because
            you need the components a little earlier to finish the assembly and
            fulfill the delivery start date of the assembly).

            If no production start date is given, the delivery start date is
            used for the calculated component demands.
        quantity:
          $ref: '#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit'
        ship_to_site:
          type:
            - string
            - 'null'
          description: >-
            The name or site number of the site that will receive the item. Can
            be an internal or external (EMS) site.
        supplier:
          type:
            - string
            - 'null'
          description: >-
            The name or site number of the site that will supply the item. Only
            used for assembly demands.

            Can be an internal or external (EMS) site that manufactures the
            assembly.

            The supplier site of an assembly will be used as the Ship to site
            for the calculated component demands (as the site that does the
            assembly needs to receive the components).
        type:
          $ref: '#/components/schemas/types.demand.v1.DemandType'
          description: >-
            "gross": Represents gross demand (total demand before considering
            inventory)

            "net": Represents net demand (demand after considering inventory)
    types.demand.v1.DemandType:
      type: string
      enum:
        - gross
        - net
    types.flexible_calculation.v0.AllCalculationPlansResponse:
      type: array
      items:
        $ref: >-
          #/components/schemas/types.flexible_calculation.v0.CalculationPlanResponse
    types.flexible_calculation.v0.AssemblyScenarioConfigurationResponse:
      type: object
      required:
        - assembly_id
        - sourcing_scenario
        - manufacturing_scenario
        - batch_size
      properties:
        assembly_id:
          type: string
          format: uuid
        batch_size:
          type: integer
          format: int32
        manufacturing_scenario:
          type: string
          format: uuid
        sourcing_scenario:
          type: string
          format: uuid
    types.flexible_calculation.v0.CalculationPlanLineItemResponse:
      type: object
      required:
        - id
        - name
        - display_only
        - value
        - lock_mode
      properties:
        display_only:
          type: boolean
        exported_variable_id:
          type:
            - string
            - 'null'
          format: uuid
        id:
          type: string
          format: uuid
        lock_mode:
          $ref: '#/components/schemas/types.flexible_calculation.v0.LockModeResponse'
        name:
          type: string
        note:
          type:
            - string
            - 'null'
        value:
          $ref: >-
            #/components/schemas/types.flexible_calculation.v0.LineItemValueResponse
    types.flexible_calculation.v0.CalculationPlanResponse:
      type: object
      required:
        - id
        - name
        - rfq_id
        - currency
        - main_assembly
        - scenarios
        - sections
        - frozen
        - raw_template
        - selected_template
        - created_at
        - updated_at
      properties:
        created_at:
          type: string
          format: date-time
        currency:
          type: string
        frozen:
          type: boolean
        frozen_result: {}
        id:
          type: string
          format: uuid
        main_assembly:
          type: string
          format: uuid
        name:
          type: string
        raw_template: {}
        rfq_id:
          type: string
          format: uuid
        scenarios:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.flexible_calculation.v0.CalculationScenarioResponse
        sections:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.flexible_calculation.v0.CalculationPlanSectionResponse
        selected_template:
          type: string
        updated_at:
          type: string
          format: date-time
    types.flexible_calculation.v0.CalculationPlanSectionResponse:
      type: object
      required:
        - id
        - name
        - line_items
        - lock_mode
      properties:
        id:
          type: string
          format: uuid
        line_items:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.flexible_calculation.v0.CalculationPlanLineItemResponse
        lock_mode:
          $ref: '#/components/schemas/types.flexible_calculation.v0.LockModeResponse'
        name:
          type: string
        note:
          type:
            - string
            - 'null'
    types.flexible_calculation.v0.CalculationScenarioResponse:
      type: object
      required:
        - id
        - name
        - assembly_configurations
      properties:
        assembly_configurations:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.flexible_calculation.v0.AssemblyScenarioConfigurationResponse
        id:
          type: string
          format: uuid
        name:
          type: string
    types.flexible_calculation.v0.ComparisonResponse:
      oneOf:
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            op:
              type: string
              enum:
                - greater_than
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            op:
              type: string
              enum:
                - greater_than_or_equal
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            op:
              type: string
              enum:
                - less_than
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            op:
              type: string
              enum:
                - less_than_or_equal
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            op:
              type: string
              enum:
                - equal
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            op:
              type: string
              enum:
                - not_equal
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.ComparisonResponse
            op:
              type: string
              enum:
                - and
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.ComparisonResponse
        - type: object
          required:
            - left
            - right
            - op
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.ComparisonResponse
            op:
              type: string
              enum:
                - or
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.ComparisonResponse
    types.flexible_calculation.v0.CostLevelResponse:
      type: string
      enum:
        - unit
        - batch
        - project
    types.flexible_calculation.v0.FixedItemValueResponse:
      type: object
      required:
        - value
      properties:
        value:
          type: number
          format: double
    types.flexible_calculation.v0.FormulaDisplayUnitResponse:
      type: string
      enum:
        - percentage
        - number
        - monetary_value
    types.flexible_calculation.v0.FormulaNodeResponse:
      oneOf:
        - type: object
          required:
            - value
            - type
          properties:
            type:
              type: string
              enum:
                - number
            value:
              type: number
              format: double
        - type: object
          required:
            - reference
            - type
          properties:
            reference:
              type: string
              format: uuid
            type:
              type: string
              enum:
                - line_item
        - type: object
          required:
            - driver
            - type
          properties:
            driver: {}
            type:
              type: string
              enum:
                - driver
        - type: object
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - batch_size
        - type: object
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - order_size
        - type: object
          required:
            - left
            - right
            - type
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - sum
        - type: object
          required:
            - left
            - right
            - type
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - subtract
        - type: object
          required:
            - left
            - right
            - type
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - multiply
        - type: object
          required:
            - left
            - right
            - type
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - divide
        - type: object
          required:
            - test
            - then
            - else_
            - type
          properties:
            else_:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            test:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.ComparisonResponse
            then:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - if
        - type: object
          required:
            - operand
            - decimal_places
            - type
          properties:
            decimal_places:
              type: integer
              format: int32
              minimum: 0
            operand:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - round
        - type: object
          required:
            - operand
            - type
          properties:
            operand:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - log_e
        - type: object
          required:
            - operand
            - type
          properties:
            operand:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - floor
        - type: object
          required:
            - operand
            - type
          properties:
            operand:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - ceil
        - type: object
          required:
            - left
            - right
            - type
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - min
        - type: object
          required:
            - left
            - right
            - type
          properties:
            left:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            right:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - max
        - type: object
          required:
            - base
            - exponent
            - type
          properties:
            base:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            exponent:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            type:
              type: string
              enum:
                - pow
    types.flexible_calculation.v0.LineItemValueResponse:
      oneOf:
        - type: object
          required:
            - level
            - values
            - type
          properties:
            level:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.CostLevelResponse
            type:
              type: string
              enum:
                - fixed
            values:
              type: object
              additionalProperties:
                $ref: >-
                  #/components/schemas/types.flexible_calculation.v0.FixedItemValueResponse
              propertyNames:
                type: string
                format: uuid
        - type: object
          required:
            - reference_items
            - values
            - type
          properties:
            reference_items:
              type: array
              items:
                $ref: '#/components/schemas/CalculationLineItemId'
              uniqueItems: true
            type:
              type: string
              enum:
                - percentage
            values:
              type: object
              additionalProperties:
                $ref: >-
                  #/components/schemas/types.flexible_calculation.v0.PercentageItemValueResponse
              propertyNames:
                type: string
                format: uuid
        - type: object
          required:
            - reference_item
            - values
            - type
          properties:
            reference_item:
              type: string
              format: uuid
            type:
              type: string
              enum:
                - reverse_percentage
            values:
              type: object
              additionalProperties:
                $ref: >-
                  #/components/schemas/types.flexible_calculation.v0.PercentageItemValueResponse
              propertyNames:
                type: string
                format: uuid
        - type: object
          required:
            - scope
            - range
            - type
          properties:
            range:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.SubtotalRangeResponse
            scope:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.SubtotalScopeResponse
            type:
              type: string
              enum:
                - subtotal
        - type: object
          required:
            - level
            - formula
            - display_unit
            - type
          properties:
            assembly:
              type:
                - string
                - 'null'
              format: uuid
            display_unit:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaDisplayUnitResponse
            formula:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse
            level:
              $ref: >-
                #/components/schemas/types.flexible_calculation.v0.CostLevelResponse
            type:
              type: string
              enum:
                - formula
        - allOf:
            - $ref: >-
                #/components/schemas/types.flexible_calculation.v0.VariableLineItemResponse
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  enum:
                    - variable
        - type: object
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - notes
    types.flexible_calculation.v0.LockModeResponse:
      type: string
      enum:
        - none
        - partial
        - full
    types.flexible_calculation.v0.ManufacturingVariableLineItemResponse:
      oneOf:
        - type: object
          required:
            - assembly_id
            - show_process_breakdown
            - variable
          properties:
            assembly_id:
              type: string
              format: uuid
            show_process_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - unit_costs
        - type: object
          required:
            - assembly_id
            - show_process_breakdown
            - variable
          properties:
            assembly_id:
              type: string
              format: uuid
            show_process_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - batch_costs
        - type: object
          required:
            - assembly_id
            - show_process_breakdown
            - variable
          properties:
            assembly_id:
              type: string
              format: uuid
            show_process_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - total_cost
        - type: object
          required:
            - assembly_id
            - show_process_breakdown
            - variable
          properties:
            assembly_id:
              type: string
              format: uuid
            show_process_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - project_costs
        - type: object
          required:
            - assembly_id
            - show_process_breakdown
            - variable
          properties:
            assembly_id:
              type: string
              format: uuid
            show_process_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - total_cost_with_project_costs
    types.flexible_calculation.v0.PercentageItemValueResponse:
      type: object
      required:
        - fractional_value
      properties:
        fractional_value:
          type: number
          format: double
    types.flexible_calculation.v0.SourcingVariableLineItemResponse:
      oneOf:
        - type: object
          required:
            - assembly
            - show_pcb_breakdown
            - variable
          properties:
            assembly:
              type: string
              format: uuid
            show_pcb_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - total_price
        - type: object
          required:
            - assembly
            - show_pcb_breakdown
            - variable
          properties:
            assembly:
              type: string
              format: uuid
            show_pcb_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - unit_price
        - type: object
          required:
            - assembly
            - variable
          properties:
            assembly:
              type: string
              format: uuid
            variable:
              type: string
              enum:
                - excess_material_cost
        - type: object
          required:
            - assembly
            - variable
          properties:
            assembly:
              type: string
              format: uuid
            variable:
              type: string
              enum:
                - scrap_cost
        - type: object
          required:
            - assembly
            - show_one_time_cost_breakdown
            - variable
          properties:
            assembly:
              type: string
              format: uuid
            show_one_time_cost_breakdown:
              type: boolean
            variable:
              type: string
              enum:
                - one_time_cost
    types.flexible_calculation.v0.SubtotalRangeResponse:
      type: string
      enum:
        - from_previous_subtotal
        - from_beginning
    types.flexible_calculation.v0.SubtotalScopeResponse:
      type: string
      enum:
        - current_section
        - all_sections
    types.flexible_calculation.v0.VariableLineItemResponse:
      oneOf:
        - allOf:
            - $ref: >-
                #/components/schemas/types.flexible_calculation.v0.SourcingVariableLineItemResponse
            - type: object
              required:
                - variable_type
              properties:
                variable_type:
                  type: string
                  enum:
                    - sourcing
        - allOf:
            - $ref: >-
                #/components/schemas/types.flexible_calculation.v0.ManufacturingVariableLineItemResponse
            - type: object
              required:
                - variable_type
              properties:
                variable_type:
                  type: string
                  enum:
                    - manufacturing
        - type: object
          required:
            - calculation
            - scenario_mapping
            - exported_variable_id
            - variable_type
          properties:
            calculation:
              type: string
              format: uuid
            exported_variable_id:
              type: string
              format: uuid
            scenario_mapping:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/CalculationScenarioId'
              propertyNames:
                type: string
                format: uuid
            variable_type:
              type: string
              enum:
                - calculation
    types.ipn.v1.ComponentRiskResponse:
      type: object
      required:
        - components
      properties:
        components:
          type: array
          items:
            $ref: '#/components/schemas/types.ipn.v1.SingleComponentRiskResponse'
    types.ipn.v1.InternalPartNumberIdentifiers:
      type: object
      required:
        - value
      properties:
        revision:
          type:
            - string
            - 'null'
        value:
          type: string
    types.ipn.v1.SingleComponentRiskResponse:
      type: object
      required:
        - ipn
        - rohs_compliant
        - reach_compliant
      properties:
        aecq_compliant:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.compliance.v1.ComplianceStatus'
        ipn:
          type: string
        lifecycle_status:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.lifecycle.v1.LifecycleEnum'
        lifecycle_yteol:
          type:
            - number
            - 'null'
          format: double
        reach_compliant:
          $ref: '#/components/schemas/types.compliance.v1.ComplianceStatus'
        revision:
          type:
            - string
            - 'null'
        rohs_compliant:
          $ref: '#/components/schemas/types.compliance.v1.ComplianceStatus'
        std_factory_lead_time:
          type:
            - integer
            - 'null'
          format: int64
    types.lifecycle.v1.LifecycleEnum:
      type: string
      enum:
        - Unknown
        - PreRelease
        - Acquired
        - Active
        - NotRecommendedForNewDesigns
        - EndOfLife
        - Aftermarket
        - Obsolete
    types.manufacturing.resource.v1.ResourceInput:
      type: object
      required:
        - name
        - type
        - cost_per_hour
      properties:
        cost_per_hour:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        description:
          type:
            - string
            - 'null'
        internal_number:
          type:
            - string
            - 'null'
        name:
          type: string
        site_id:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SiteId'
        type:
          $ref: '#/components/schemas/types.manufacturing.resource.v1.ResourceType'
    types.manufacturing.resource.v1.ResourceResponse:
      type: object
      required:
        - id
        - name
        - type
        - cost_per_hour
        - status
      properties:
        cost_per_hour:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.ConvertedMonetaryValue
        description:
          type:
            - string
            - 'null'
        id:
          type: string
          format: uuid
        internal_number:
          type:
            - string
            - 'null'
        name:
          type: string
        site_id:
          type:
            - string
            - 'null'
          format: uuid
        status:
          $ref: >-
            #/components/schemas/types.manufacturing.v1.ManufacturingEntityStatus
        type:
          $ref: '#/components/schemas/types.manufacturing.resource.v1.ResourceType'
    types.manufacturing.resource.v1.ResourceType:
      type: string
      enum:
        - Machine
        - Person
    types.manufacturing.resource.v1.ResourceUpdate:
      type: object
      properties:
        cost_per_hour:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        description:
          type:
            - string
            - 'null'
        internal_number:
          type:
            - string
            - 'null'
        name:
          type:
            - string
            - 'null'
        site_id:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SiteId'
        status:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.manufacturing.v1.ManufacturingEntityStatus
        type:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.manufacturing.resource.v1.ResourceType
    types.manufacturing.v1.ManufacturingEntityStatus:
      type: string
      enum:
        - Active
        - Inactive
    types.order_management.order_selection_option.v1.CustomOrderSelectionOptionInput:
      type: object
      required:
        - external_id
        - order_size
        - batch_size
        - price
        - lead_time_in_days
      properties:
        batch_size:
          type: integer
          format: int32
        external_id:
          type: string
        lead_time_in_days:
          type: integer
          format: int32
        order_size:
          type: integer
          format: int32
        price:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.order_management.order_selection_option.v1.CustomOrderSelectionOptionsRequest:
      type: object
      required:
        - rfq
        - options
      properties:
        custom_text:
          type:
            - string
            - 'null'
        custom_text_header:
          type:
            - string
            - 'null'
        options:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.order_management.order_selection_option.v1.CustomOrderSelectionOptionInput
        rfq:
          type: string
          format: uuid
        valid_until:
          type:
            - string
            - 'null'
          format: date-time
    types.order_management.orders.v1.GetOrdersResponse:
      type: object
      properties:
        data:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.order_management.orders.v1.OrderOverview
    types.order_management.orders.v1.OrderOverview:
      type: object
      required:
        - id
        - customer_id
        - customer_name
        - order_size
        - total_price
      properties:
        customer_id:
          type: string
          format: uuid
        customer_name:
          type: string
        customer_number:
          type:
            - string
            - 'null'
        estimated_lead_time_in_days:
          type:
            - integer
            - 'null'
          format: int32
        external_id:
          type:
            - string
            - 'null'
        id:
          type: string
          format: uuid
        order_size:
          type: integer
          format: int32
        rfq_number:
          type:
            - string
            - 'null'
        total_price:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.parts.generic.v1.Dielectric:
      oneOf:
        - type: object
          required:
            - dielectric
            - type
          properties:
            dielectric:
              oneOf:
                - type: 'null'
                - $ref: >-
                    #/components/schemas/types.parts.generic.v1.DielectricCeramic
            type:
              type: string
              enum:
                - Ceramic
    types.parts.generic.v1.DielectricCeramic:
      type: string
      enum:
        - X8R
        - C0G
        - NP0
        - X7R
        - X5R
        - X8L
        - Y5V
        - X6S
        - Z5U
        - X7S
        - Y5U
        - C0H
        - Y5R
        - Y5P
        - Y5T
        - U2J
        - Z5V
        - Z5P
        - K4000
        - X6T
        - X7T
        - Z5F
    types.pnp.v1.BulkPnpItemsResponse:
      type: object
      required:
        - warnings
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.pnp.v1.PnpItemResponse'
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/types.pnp.v1.Warning'
    types.pnp.v1.ColumnMapping:
      type: object
      properties:
        designator:
          type:
            - integer
            - 'null'
          minimum: 0
        side:
          type:
            - integer
            - 'null'
          minimum: 0
    types.pnp.v1.PnpColumn:
      type: string
      enum:
        - Side
        - Designator
    types.pnp.v1.PnpFileResponse:
      type: object
      required:
        - id
        - assembly_id
        - file_name
        - state
      properties:
        assembly_id:
          $ref: '#/components/schemas/AssemblyId'
        column_mapping:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.pnp.v1.ColumnMapping'
        file_name:
          type: string
        id:
          $ref: '#/components/schemas/PnpFileId'
        state:
          $ref: '#/components/schemas/types.pnp.v1.PnpFileState'
        url:
          type:
            - string
            - 'null'
    types.pnp.v1.PnpFileState:
      type: string
      enum:
        - Created
        - Uploaded
        - Parsed
    types.pnp.v1.PnpItemResponse:
      type: object
      required:
        - id
        - pnp_file
        - designator
      properties:
        design_item:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DesignItemId'
        designator:
          $ref: '#/components/schemas/String'
        id:
          $ref: '#/components/schemas/PnpItemId'
        mounting:
          type:
            - string
            - 'null'
        pnp_file:
          $ref: '#/components/schemas/PnpFileId'
        side:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.pnp.v1.Side'
    types.pnp.v1.PnpResponse:
      oneOf:
        - type: object
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - PnpNotUploaded
        - type: object
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - ColumnMappingNotSubmitted
        - type: object
          required:
            - data
            - type
          properties:
            data:
              $ref: '#/components/schemas/types.pnp.v1.BulkPnpItemsResponse'
            type:
              type: string
              enum:
                - PnpUploaded
        - type: object
          required:
            - data
            - type
          properties:
            data:
              $ref: '#/components/schemas/types.pnp.v1.PnpFileResponse'
            type:
              type: string
              enum:
                - PnpUploadedButNotImported
    types.pnp.v1.Side:
      type: string
      enum:
        - Top
        - Bottom
    types.pnp.v1.Warning:
      oneOf:
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - column_type
                - row
                - col
              properties:
                col:
                  type: integer
                  minimum: 0
                column_type:
                  $ref: '#/components/schemas/types.pnp.v1.PnpColumn'
                row:
                  type: integer
                  minimum: 0
            type:
              type: string
              enum:
                - UnableToParseCell
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: integer
              minimum: 0
            type:
              type: string
              enum:
                - DesignatorMissing
        - type: object
          required:
            - data
            - type
          properties:
            data:
              $ref: '#/components/schemas/types.pnp.v1.PnpColumn'
            type:
              type: string
              enum:
                - ColumnMissing
        - type: object
          required:
            - data
            - type
          properties:
            data:
              $ref: '#/components/schemas/String'
            type:
              type: string
              enum:
                - DuplicateDesignatorData
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - row
                - col_count
                - expected_col_count
              properties:
                col_count:
                  type: integer
                  minimum: 0
                expected_col_count:
                  type: integer
                  minimum: 0
                row:
                  type: integer
                  minimum: 0
            type:
              type: string
              enum:
                - VaryingColumnNumber
    types.primitives.monetary_value.v1.ConvertedMonetaryValue:
      type: object
      required:
        - converted_mv
      properties:
        converted_mv:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.primitives.monetary_value.v1.Currency:
      type: string
      enum:
        - EUR
        - USD
        - AUD
        - BGN
        - BRL
        - CAD
        - CHF
        - CNY
        - CZK
        - DKK
        - GBP
        - HKD
        - HRK
        - HUF
        - IDR
        - ILS
        - INR
        - ISK
        - JPY
        - KRW
        - MXN
        - MYR
        - NOK
        - NZD
        - PHP
        - PLN
        - RON
        - RUB
        - SEK
        - SGD
        - THB
        - TND
        - TRY
        - ZAR
        - TWD
        - VND
        - LKR
        - MAD
    types.primitives.monetary_value.v1.FloatingPointMoneyValue:
      type: object
      required:
        - amount
        - currency
      properties:
        amount:
          type: number
          format: double
        currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
    types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair:
      type: object
      required:
        - converted_mv
        - original_mv
      properties:
        converted_mv:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
        original_mv:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue
    types.primitives.monetary_value.v1.MonetaryValue:
      type: object
      required:
        - amount
        - currency
      properties:
        amount:
          type: string
        currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
    types.primitives.quantity_unit.v1.QuantityUnit:
      oneOf:
        - type: object
          required:
            - quantity
            - unit
          properties:
            quantity:
              type: number
              format: double
            unit:
              type: string
              enum:
                - Kg
        - type: object
          required:
            - quantity
            - unit
          properties:
            quantity:
              type: number
              format: double
            unit:
              type: string
              enum:
                - Meters
        - type: object
          required:
            - quantity
            - unit
          properties:
            quantity:
              type: number
              format: double
            unit:
              type: string
              enum:
                - Liters
        - type: object
          required:
            - quantity
            - unit
          properties:
            quantity:
              type: number
              format: double
            unit:
              type: string
              enum:
                - Pieces
    types.primitives.quantity_unit.v1.UnitOfMeasurement:
      type: object
      required:
        - quantity_unit
      properties:
        quantity_unit:
          $ref: '#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit'
    types.resource.v1.ResourceUrlResponse:
      type: object
      required:
        - urls
      properties:
        urls:
          type: array
          items:
            type: string
    types.rfq.costed_bom.v1.BomSupplierInfo:
      type: object
      required:
        - supplier
      properties:
        supplier:
          type: string
        supplier_number:
          type:
            - string
            - 'null'
        supplier_part_number:
          type:
            - string
            - 'null'
    types.rfq.costed_bom.v1.CostedBOMComplianceInfo:
      type: object
      required:
        - rohs_compliant
        - china_rohs
        - reach_compliant
        - svhc_cas_number
        - prop65
        - conflict_mineral_status
        - eccn
      properties:
        china_rohs:
          type: string
        conflict_mineral_status:
          type: string
        eccn:
          type: string
        hts_code:
          type:
            - string
            - 'null'
        prop65:
          type: string
        reach_compliant:
          type: string
        rohs_compliant:
          type: string
        rohs_version:
          type:
            - string
            - 'null'
        svhc_cas_number:
          type: string
    types.rfq.costed_bom.v1.CostedBOMLifecycleInfo:
      type: object
      properties:
        last_time_buy_date:
          type:
            - string
            - 'null'
        last_time_delivery_date:
          type:
            - string
            - 'null'
        lifecycle_yteol:
          type:
            - string
            - 'null'
        lifecycle_yteol_range:
          type:
            - string
            - 'null'
    types.rfq.costed_bom.v1.CostedBom:
      type: object
      required:
        - rfq_id
        - creation_date
        - top_level_assemblies
        - sourcing_scenarios
      properties:
        creation_date:
          type: string
          format: date-time
        rfq_id:
          type: string
          format: uuid
        sourcing_scenarios:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.rfq.costed_bom.v1.CostedSourcingScenario
        top_level_assemblies:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedBomAssembly'
    types.rfq.costed_bom.v1.CostedBomAssembly:
      type: object
      required:
        - name
        - type
        - notes
      properties:
        name:
          type: string
        notes:
          type: string
        type:
          type: string
    types.rfq.costed_bom.v1.CostedBomComponent:
      type: object
      required:
        - approved_parts
        - pending_parts
        - selected_parts
        - per_assembly_data
        - designators
        - manufacturer_part_number_bom
        - internal_part_number_bom
        - customer_part_number_bom
        - notes
        - do_not_place
        - manufacturer_free
        - consignment
      properties:
        approved_parts:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedBomParts'
        consignment:
          type: boolean
        customer_part_number_bom:
          type: array
          items:
            type: string
          description: The raw data from the BOMs tagged with `CPN`
        designators:
          type: array
          items:
            type: string
        do_not_place:
          type: boolean
        internal_part_number_bom:
          type: array
          items:
            type: string
          description: The raw data from the BOMs tagged with `IPN`
        manufacturer_free:
          type: string
          description: 'Possible values: "Yes", "Partially", "No" or empty string'
        manufacturer_part_number_bom:
          type: array
          items:
            type: string
          description: The raw data from the BOMs tagged with `MPN`
        notes:
          type: string
        pending_parts:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedBomParts'
        per_assembly_data:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.PerAssemblyData'
        selected_parts:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.SelectedBomParts'
    types.rfq.costed_bom.v1.CostedBomParts:
      oneOf:
        - type: object
          required:
            - items
            - part_type
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/types.rfq.costed_bom.v1.OTSOrGenericPart'
            part_type:
              type: string
              enum:
                - OffTheShelf
        - type: object
          required:
            - items
            - part_type
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/types.rfq.costed_bom.v1.CustomPart'
            part_type:
              type: string
              enum:
                - Custom
    types.rfq.costed_bom.v1.CostedPrice:
      type: object
      required:
        - one_time_costs
      properties:
        currency_exchange_rate:
          type:
            - string
            - 'null'
        moq:
          type:
            - number
            - 'null'
          format: double
        mpq:
          type:
            - number
            - 'null'
          format: double
        one_time_costs:
          type: array
          items:
            $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.Cost'
        price_type:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.sourcing_scenario.v1.PriceType
        unit_price:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        unit_price_original_currency:
          type:
            - string
            - 'null'
    types.rfq.costed_bom.v1.CostedSourcingScenario:
      type: object
      required:
        - name
        - solution_preference
        - summaries
        - components
      properties:
        components:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedBomComponent'
        name:
          type: string
        solution_preference:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference
        summaries:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.rfq.costed_bom.v1.CostedSourcingScenarioSummary
    types.rfq.costed_bom.v1.CostedSourcingScenarioSummary:
      type: object
      required:
        - assembly_name
        - order_size
        - status_counters
      properties:
        assembly_name:
          type: string
        one_time_costs:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        order_size:
          type: integer
          format: int32
        status_counters:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.SolutionStatusCount'
        total_excess_material:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        total_price:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        unit_price:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.rfq.costed_bom.v1.CustomPart:
      type: object
      required:
        - id
        - internal_part_numbers
        - part_description
        - part_type
        - reach_compliant
        - rohs_compliant
      properties:
        id:
          type: string
          format: uuid
        internal_part_numbers:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.IpnInfo'
        part_description:
          type: string
        part_type:
          type: string
        reach_compliant:
          type: string
        rohs_compliant:
          type: string
    types.rfq.costed_bom.v1.GenericPart:
      type: object
      required:
        - internal_part_numbers
        - generic_part_spec
      properties:
        generic_part_spec:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.GenericPartSpec'
        internal_part_numbers:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.IpnInfo'
    types.rfq.costed_bom.v1.GenericPartSpec:
      oneOf:
        - type: object
          required:
            - resistance_ohms
            - power_rating_watts
            - temperature_coefficient_ppmk
            - tolerance_percent
            - voltage_rating_volts
            - type
          properties:
            power_rating_watts:
              type: string
            resistance_ohms:
              type: string
            temperature_coefficient_ppmk:
              type: string
            tolerance_percent:
              type: string
            type:
              type: string
              enum:
                - Resistor
            voltage_rating_volts:
              type: string
        - type: object
          required:
            - capacitance_farads
            - tolerance_percent
            - voltage_rating_volts
            - dielectric
            - type
          properties:
            capacitance_farads:
              type: string
            dielectric:
              $ref: '#/components/schemas/types.parts.generic.v1.Dielectric'
            tolerance_percent:
              type: string
            type:
              type: string
              enum:
                - Capacitor
            voltage_rating_volts:
              type: string
    types.rfq.costed_bom.v1.IpnInfo:
      type: object
      required:
        - value
        - revision
      properties:
        revision:
          type: string
        value:
          type: string
    types.rfq.costed_bom.v1.OTSOrGenericPart:
      oneOf:
        - type: object
          required:
            - bound_to_mpn
          properties:
            bound_to_mpn:
              $ref: '#/components/schemas/types.rfq.costed_bom.v1.OTSPart'
        - type: object
          required:
            - generic
          properties:
            generic:
              $ref: '#/components/schemas/types.rfq.costed_bom.v1.GenericPart'
    types.rfq.costed_bom.v1.OTSPart:
      type: object
      required:
        - internal_part_numbers
        - manufacturer_part_number
        - manufacturer
      properties:
        internal_part_numbers:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.IpnInfo'
        manufacturer:
          type: string
        manufacturer_part_number:
          type: string
    types.rfq.costed_bom.v1.OfferId:
      oneOf:
        - type: object
          required:
            - offer
            - offer_type
          properties:
            offer:
              type: string
              format: uuid
            offer_type:
              type: string
              enum:
                - Other
        - type: object
          required:
            - offer
            - offer_type
          properties:
            offer:
              type: string
              format: uuid
            offer_type:
              type: string
              enum:
                - CustomPart
        - type: object
          required:
            - offer
            - offer_type
          properties:
            offer:
              type: string
              format: uuid
            offer_type:
              type: string
              enum:
                - Inventory
        - type: object
          required:
            - offer
            - offer_type
          properties:
            offer:
              type: string
              format: uuid
            offer_type:
              type: string
              enum:
                - CustomPartInventory
        - type: object
          required:
            - offer
            - offer_type
          properties:
            offer:
              type: string
              format: uuid
            offer_type:
              type: string
              enum:
                - Consigned
        - type: object
          required:
            - offer
            - offer_type
          properties:
            offer:
              type: string
              format: uuid
            offer_type:
              type: string
              enum:
                - Aggregated
    types.rfq.costed_bom.v1.PartInfo:
      type: object
      required:
        - package
        - mounting
        - category
        - compliance
        - lifecycle
        - description
        - datasheet_url
        - part_warnings
        - country_of_origin
        - type
      properties:
        category:
          type: string
        compliance:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedBOMComplianceInfo'
        country_of_origin:
          type: string
        datasheet_url:
          type: string
        description:
          type: string
        lifecycle:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedBOMLifecycleInfo'
        mounting:
          type: string
        package:
          type: string
        part_warnings:
          type: string
        pins:
          type:
            - integer
            - 'null'
          format: int32
        type:
          type: string
    types.rfq.costed_bom.v1.PerAssemblyData:
      type: object
      required:
        - assembly_name
        - designators
        - quantity
      properties:
        assembly_name:
          type: string
        designators:
          type: array
          items:
            type: string
        excess_material_quantity:
          type:
            - number
            - 'null'
          format: double
        quantity:
          type: number
          format: double
    types.rfq.costed_bom.v1.PurchaseInfo:
      type: object
      required:
        - quantity
        - offer_id
        - scrap_quantity
        - aggregated_quantity
        - solution_warnings
        - sourcing_notes
        - excess_material
        - purchase_options
      properties:
        aggregated_quantity:
          $ref: '#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit'
        excess_material:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.PurchaseInfoExcess'
        offer_id:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.OfferId'
        purchase_options:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.PurchaseOption'
        quantity:
          type: number
          format: double
          description: |-
            Offer volume.

            Number of units to be purchased.
        scrap_quantity:
          type: number
          format: double
        solution_warnings:
          type: array
          items:
            type: string
        sourcing_notes:
          type: string
    types.rfq.costed_bom.v1.PurchaseInfoExcess:
      type: object
      properties:
        costs:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
        quantity:
          type:
            - number
            - 'null'
          format: double
    types.rfq.costed_bom.v1.PurchaseOption:
      type: object
      required:
        - offer_id
        - purchase_quantity
        - supplier
        - ncnr
        - price
        - last_updated
      properties:
        availability:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.availability.v1.AvailabilityWithShippingTime
        factory_quantity:
          type:
            - number
            - 'null'
          format: double
        last_updated:
          type: string
          format: date-time
        ncnr:
          type: boolean
        offer_id:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.OfferId'
        offer_notes:
          type:
            - string
            - 'null'
        offer_number:
          type:
            - string
            - 'null'
        origin:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.sourcing.offer.v1.OfferOrigin'
        packaging:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.sourcing_scenario.v1.Packaging
        price:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.CostedPrice'
        purchase_quantity:
          type: number
          format: double
        supplier:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.BomSupplierInfo'
        valid_until:
          type:
            - string
            - 'null'
          format: date-time
    types.rfq.costed_bom.v1.SelectedBomParts:
      oneOf:
        - type: object
          required:
            - items
            - part_type
          properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/types.rfq.costed_bom.v1.SelectedOtsPart'
            part_type:
              type: string
              enum:
                - OffTheShelf
        - type: object
          required:
            - items
            - part_type
          properties:
            items:
              type: array
              items:
                $ref: >-
                  #/components/schemas/types.rfq.costed_bom.v1.SelectedCustomPart
            part_type:
              type: string
              enum:
                - Custom
    types.rfq.costed_bom.v1.SelectedCustomPart:
      type: object
      required:
        - customer_part_numbers
        - internal_part_numbers
        - internal_part_number_description
        - description
        - part_type
        - reach_compliant
        - rohs_compliant
        - valid_solutions
        - warning_solutions
        - error_solutions
      properties:
        customer_part_numbers:
          type: array
          items:
            type: string
        description:
          type: string
        error_solutions:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.ValidSolution'
        internal_part_number_description:
          type: string
        internal_part_numbers:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.IpnInfo'
        part_type:
          type: string
        purchase_info:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.rfq.costed_bom.v1.PurchaseInfo'
        reach_compliant:
          type: string
        rohs_compliant:
          type: string
        valid_solutions:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.ValidSolution'
        warning_solutions:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.ValidSolution'
    types.rfq.costed_bom.v1.SelectedOtsPart:
      type: object
      required:
        - customer_part_numbers
        - internal_part_numbers
        - internal_part_number_description
        - manufacturer_part_number
        - manufacturer
        - valid_solutions
        - warning_solutions
        - error_solutions
      properties:
        customer_part_numbers:
          type: array
          items:
            type: string
        error_solutions:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.ValidSolution'
        internal_part_number_description:
          type: string
        internal_part_numbers:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.IpnInfo'
        manufacturer:
          type: string
        manufacturer_part_number:
          type: string
        part_info:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.rfq.costed_bom.v1.PartInfo'
        purchase_info:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.rfq.costed_bom.v1.PurchaseInfo'
        valid_solutions:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.ValidSolution'
        warning_solutions:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.costed_bom.v1.ValidSolution'
    types.rfq.costed_bom.v1.SolutionStatusCount:
      type: object
      required:
        - number_of_ok
        - number_of_warning
        - number_of_error
      properties:
        number_of_error:
          type: integer
          format: int32
          minimum: 0
        number_of_ok:
          type: integer
          format: int32
          minimum: 0
        number_of_warning:
          type: integer
          format: int32
          minimum: 0
    types.rfq.costed_bom.v1.ValidSolution:
      type: object
      required:
        - quantity
        - offer_id
        - scrap_quantity
        - aggregated_quantity
      properties:
        aggregated_quantity:
          $ref: '#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit'
        offer_id:
          $ref: '#/components/schemas/types.rfq.costed_bom.v1.OfferId'
        quantity:
          type: number
          format: double
        scrap_quantity:
          type: number
          format: double
    types.rfq.overview.v1.CustomerOverview:
      type: object
      required:
        - customer_name
      properties:
        customer_name:
          type: string
        customer_number:
          type:
            - string
            - 'null'
    types.rfq.overview.v1.SingleRfQOverview:
      type: object
      required:
        - id
        - name
        - customer
        - creation_date
        - status
        - currency
        - is_archived
      properties:
        created_by:
          type:
            - string
            - 'null'
          format: uuid
        creation_date:
          type: string
          format: date-time
        currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
        customer:
          $ref: '#/components/schemas/types.rfq.overview.v1.CustomerOverview'
        due_date:
          type:
            - string
            - 'null'
          format: date-time
        id:
          type: string
          format: uuid
        internal_number:
          type:
            - string
            - 'null'
        is_archived:
          type: boolean
        name:
          type: string
        status:
          $ref: '#/components/schemas/types.rfq.status.v1.RfQStatus'
    types.rfq.status.v1.RfQStatus:
      type: string
      enum:
        - RequestInDraft
        - QuotationInProgress
        - QuotationAvailable
        - NoQuotation
        - NoOrder
        - OrderPlaced
        - OrderConfirmed
        - PaymentFailed
        - OrderInProcurement
        - OrderInProduction
        - OrderShipped
    types.rfq.status_history.v1.AllRfqStatusHistory:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.status_history.v1.RfqStatusHistory'
    types.rfq.status_history.v1.RfqStatusChange:
      type: object
      required:
        - updated_at
        - new_status
      properties:
        new_status:
          $ref: '#/components/schemas/types.rfq.status.v1.RfQStatus'
        previous_status:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.rfq.status.v1.RfQStatus'
        updated_at:
          type: string
          format: date-time
        updated_by:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/UserId'
    types.rfq.status_history.v1.RfqStatusHistory:
      type: object
      required:
        - rfq_id
        - status_changes
      properties:
        rfq_id:
          type: string
          format: uuid
        status_changes:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.status_history.v1.RfqStatusChange'
    types.rfq.v1.AllAssembliesResponse:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.assembly.v1.SimpleAssemblyResponse'
    types.rfq.v1.AllRfQsResponse:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.rfq.overview.v1.SingleRfQOverview'
    types.rfq.v1.CustomerInfo:
      oneOf:
        - type: object
          description: If creating RfQ for an existing customer provide customer id here
          required:
            - data
            - type
          properties:
            data:
              type: string
              format: uuid
              description: >-
                If creating RfQ for an existing customer provide customer id
                here
            type:
              type: string
              enum:
                - ExistingCustomer
        - type: object
          description: If creating RfQ for a new customer, provide customer name
          required:
            - data
            - type
          properties:
            data:
              type: string
              description: If creating RfQ for a new customer, provide customer name
            type:
              type: string
              enum:
                - NewCustomer
    types.rfq.v1.QuotationUpload:
      type: object
      required:
        - filename
      properties:
        filename:
          type: string
          description: >-
            Filename including extension.


            Note that this is the name of the file as the customer will be able
            to download it for the RfQ.

            This name does not have to be related to the name of the file whose
            contents you want to upload

            to the URL given in the response payload.
          examples:
            - example_quotation.pdf
        replace_existing_quotation:
          type: boolean
          description: >-
            Optional property specifying whether the operation should replace
            the current quotation if it

            exists. If set to false and a quotation already exists, the
            operation will fail.


            Default: false
    types.rfq.v1.RfQCreation:
      type: object
      description: Describes the Rfq being created
      required:
        - customer
        - name
        - currency
      properties:
        assembly_type:
          $ref: '#/components/schemas/types.assembly.assembly_type.v1.AssemblyType'
        contributors:
          type: array
          items:
            type: string
            format: uuid
          description: Users which contribute to this Rfq, can be empty
        currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
          description: This RfQs currency
        customer:
          $ref: '#/components/schemas/types.rfq.v1.CustomerInfo'
          description: Customer which this RfQ is for
        due_date:
          type:
            - string
            - 'null'
          format: date
          description: Date when this Rfq must be finished (if any)
        ems_internal_number:
          type:
            - string
            - 'null'
          description: Internal identifier (if any)
        industry:
          $ref: >-
            #/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry
        internal_notes:
          type:
            - string
            - 'null'
        name:
          type: string
          description: Name of the RfQ
        notes:
          type:
            - string
            - 'null'
        source_assembly_ipn_revision:
          type:
            - string
            - 'null'
        source_assembly_ipn_value:
          type:
            - string
            - 'null'
          description: >-
            If present, the RfQ is created from an existing assembly identified
            by this IPN value and revision.
        volume_estimate:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.rfq.volume_estimate.v1.VolumeEstimate'
    types.rfq.v1.RfQResponse:
      type: object
      required:
        - id
        - customer
        - name
        - creation_date
        - due_date
        - status
        - sourcing_scenarios
        - design_items_count
        - assemblies_count
        - currency
        - is_archived
        - industry
      properties:
        assemblies_count:
          type: integer
          minimum: 0
        created_by:
          type:
            - string
            - 'null'
          format: uuid
        creation_date:
          type: string
          format: date-time
        currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
        customer:
          type: string
          format: uuid
        design_items_count:
          type: integer
          minimum: 0
        due_date:
          type: string
          format: date
        ems_internal_number:
          type:
            - string
            - 'null'
          description: Internal reference
        id:
          type: string
          format: uuid
        industry:
          $ref: >-
            #/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry
        internal_notes:
          type:
            - string
            - 'null'
        is_archived:
          type: boolean
        name:
          type: string
        notes:
          type:
            - string
            - 'null'
        sourcing_scenarios:
          type: array
          items:
            type: string
            format: uuid
        status:
          $ref: '#/components/schemas/types.rfq.status.v1.RfQStatus'
    types.rfq.v1.RfqUpdate:
      type: object
      properties:
        currency:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
        due_date:
          type:
            - string
            - 'null'
          format: date
        internal_notes:
          type:
            - string
            - 'null'
        internal_number:
          type:
            - string
            - 'null'
        name:
          type:
            - string
            - 'null'
        notes:
          type:
            - string
            - 'null'
        shipping_tracking_link:
          type:
            - string
            - 'null'
          description: >-
            Shipping tracking link should be present only if the status is
            OrderShipped.
        status:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.rfq.status.v1.RfQStatus'
        volume_estimate:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.rfq.volume_estimate.v1.VolumeEstimate'
    types.rfq.v1.SingleFileUrlResponse:
      type: object
      required:
        - url
      properties:
        url:
          type: string
          examples:
            - >-
              https://lumiquoteprod.blob.core.windows.net/luminovo/quotation/ee824cad-d7a6-4f48-87dc-e8461a9201c4/example_quotation.pdf?sv=2018-11-09&ss=b&srt=o
    types.rfq.volume_estimate.v1.VolumeEstimate:
      type: object
      required:
        - currency
      properties:
        currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
        lower:
          type:
            - string
            - 'null'
          format: date-time
        upper:
          type:
            - string
            - 'null'
          format: date-time
    types.sourcing.availability.v1.AggregatedAvailabilityIncludingShippingTime:
      oneOf:
        - type: object
          description: There is sufficient stock for the required quantity.
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - Stock
        - type: object
          description: >-
            There is not sufficient stock, but enough stock with on order
            quantities

            by the given lead time in days.
          required:
            - days
            - type
          properties:
            days:
              type: integer
              format: int64
              description: >-
                There is not sufficient stock, but enough stock with on order
                quantities

                by the given lead time in days.
              minimum: 0
            type:
              type: string
              enum:
                - OnOrder
        - type: object
          description: >-
            There is not sufficient stock, but enough stock with on order
            quantities

            without a given date or lead time
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - OnOrderWithUnknownLeadTime
        - type: object
          description: >-
            There is not sufficient stock, even with on order quantities, but
            there is a given

            factory lead time by which the required quantity can be obtained.
          required:
            - days
            - type
          properties:
            days:
              type: integer
              format: int64
              description: >-
                There is not sufficient stock, even with on order quantities,
                but there is a given

                factory lead time by which the required quantity can be
                obtained.
              minimum: 0
            type:
              type: string
              enum:
                - LeadTimeDays
      description: >-
        Availability of a solution or purchase option, indicating if it is in
        stock

        or the method and number of days until the required quantity is
        obtained.
    types.sourcing.availability.v1.Availability:
      oneOf:
        - type: object
          description: There is sufficient stock for the required quantity.
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - Stock
        - type: object
          description: >-
            There is not sufficient stock, but enough stock with on order
            quantities

            by the given lead time in days.
          required:
            - days
            - type
          properties:
            days:
              type: integer
              format: int64
              description: >-
                There is not sufficient stock, but enough stock with on order
                quantities

                by the given lead time in days.
              minimum: 0
            type:
              type: string
              enum:
                - OnOrder
        - type: object
          description: >-
            There is not sufficient stock, but enough stock with on order
            quantities

            without a given date or lead time
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - OnOrderWithUnknownLeadTime
        - type: object
          description: >-
            There is not sufficient stock, even with on order quantities, but
            there is a given

            factory lead time by which the required quantity can be obtained.
          required:
            - days
            - type
          properties:
            days:
              type: integer
              format: int64
              description: >-
                There is not sufficient stock, even with on order quantities,
                but there is a given

                factory lead time by which the required quantity can be
                obtained.
              minimum: 0
            type:
              type: string
              enum:
                - LeadTimeDays
      description: >-
        Availability of a solution or purchase option, indicating if it is in
        stock

        or the method and number of days until the required quantity is
        obtained.
    types.sourcing.availability.v1.AvailabilityWithShippingTime:
      allOf:
        - $ref: '#/components/schemas/types.sourcing.availability.v1.Availability'
        - type: object
          properties:
            shipping_time_in_days:
              type:
                - integer
                - 'null'
              format: int64
              minimum: 0
    types.sourcing.calculation.v1.SourcingScenarioCalculationInput:
      allOf:
        - $ref: >-
            #/components/schemas/types.sourcing.calculation.v1.SourcingScenarioCalculationInputKind
        - type: object
    types.sourcing.calculation.v1.SourcingScenarioCalculationInputKind:
      oneOf:
        - type: object
          title: Rfq
          required:
            - rfq_id
            - type
          properties:
            rfq_id:
              type: string
              format: uuid
            type:
              type: string
              enum:
                - Rfq
        - type: object
          title: SourcingScenarios
          required:
            - sourcing_scenario_ids
            - type
          properties:
            sourcing_scenario_ids:
              type: array
              items:
                type: string
                format: uuid
            type:
              type: string
              enum:
                - SourcingScenarios
    types.sourcing.offer.custom.v1.CostInput:
      type: object
      required:
        - amount
      properties:
        amount:
          type: string
        description:
          type:
            - string
            - 'null'
    types.sourcing.offer.custom.v1.CustomLinkedPart:
      oneOf:
        - type: object
          required:
            - id
            - type
          properties:
            id:
              type: string
              format: uuid
            type:
              type: string
              enum:
                - CustomPart
        - type: object
          required:
            - id
            - type
          properties:
            id:
              type: string
              format: uuid
            type:
              type: string
              enum:
                - CustomComponent
    types.sourcing.offer.custom.v1.CustomPartOffer:
      type: object
      required:
        - id
        - origin
        - supplier_and_stock_location
        - unit_of_measurement
        - price_points
        - valid_until
        - one_time_costs
        - creation_date
        - has_order_files
        - price_breaks
      properties:
        creation_date:
          type: string
          format: date-time
        has_order_files:
          type: boolean
        id:
          type: string
          format: uuid
        notes:
          type:
            - string
            - 'null'
        offer_number:
          type:
            - string
            - 'null'
        offer_url:
          type:
            - string
            - 'null'
        one_time_costs:
          type: array
          items:
            $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.Cost'
        origin:
          $ref: '#/components/schemas/types.sourcing.offer.v1.OfferOrigin'
        price_breaks:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.sourcing.offer.custom.v1.CustomPartPriceBreak
        price_points:
          type: array
          items:
            $ref: '#/components/schemas/types.sourcing.offer.custom.v1.PricePoint'
        price_type:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.offer.custom.v1.CustomPriceType
        sourcing_batch_size:
          type:
            - integer
            - 'null'
          format: int32
        sourcing_scenario_id:
          type:
            - string
            - 'null'
          format: uuid
        specification:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.offer.custom.v1.CustomPartOfferSpecificationResponse
        supplier_and_stock_location:
          type: string
          format: uuid
        total_offered_quantity:
          type:
            - number
            - 'null'
          format: double
        unit_of_measurement:
          $ref: >-
            #/components/schemas/types.primitives.quantity_unit.v1.UnitOfMeasurement
        valid_until:
          type: string
          format: date-time
    types.sourcing.offer.custom.v1.CustomPartOfferInput:
      type: object
      required:
        - linked_part
        - supplier_and_stock_location
        - unit_of_measurement
        - currency
        - price_points
        - valid_until
        - valid_from
        - one_time_costs
      properties:
        cancellation_window_in_days:
          type:
            - integer
            - 'null'
          format: int32
        currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
        linked_part:
          $ref: '#/components/schemas/types.sourcing.offer.custom.v1.CustomLinkedPart'
        notes:
          type:
            - string
            - 'null'
        offer_number:
          type:
            - string
            - 'null'
        offer_url:
          type:
            - string
            - 'null'
        one_time_costs:
          type: array
          items:
            $ref: '#/components/schemas/types.sourcing.offer.custom.v1.CostInput'
        payment_terms:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.offer.v1.OfferPaymentTermsInput
        price_points:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.sourcing.offer.custom.v1.PricePointInput
        price_type:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.offer.custom.v1.CustomPriceType
        sourcing_batch_size:
          type:
            - integer
            - 'null'
          format: int32
        sourcing_scenario_id:
          type:
            - string
            - 'null'
          format: uuid
          description: >-
            The sourcing scenario this offer is part of. Please supply this
            information!
        specification:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.offer.custom.v1.CustomPartOfferSpecification
        supplier_and_stock_location:
          type: string
          format: uuid
        total_offered_quantity:
          type:
            - number
            - 'null'
          format: double
        unit_of_measurement:
          $ref: '#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit'
        valid_from:
          type: string
          format: date-time
        valid_until:
          type: string
          format: date-time
    types.sourcing.offer.custom.v1.CustomPartOfferSpecification:
      oneOf:
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - panel
              properties:
                panel:
                  $ref: '#/components/schemas/types.custom_part.panel.v1.PanelDetails'
            type:
              type: string
              enum:
                - Pcb
    types.sourcing.offer.custom.v1.CustomPartOfferSpecificationResponse:
      oneOf:
        - type: object
          required:
            - data
            - type
          properties:
            data:
              type: object
              required:
                - panel
              properties:
                panel:
                  $ref: '#/components/schemas/types.custom_part.panel.v1.PanelDetails'
                pcb:
                  type:
                    - string
                    - 'null'
                  format: uuid
            type:
              type: string
              enum:
                - Pcb
    types.sourcing.offer.custom.v1.CustomPartPriceBreak:
      type: object
      required:
        - minimum_order_quantity
        - price_per_measurement
        - availability
      properties:
        availability:
          $ref: >-
            #/components/schemas/types.sourcing.offer.custom.v1.PricePointAvailability
        description:
          type:
            - string
            - 'null'
        minimum_order_quantity:
          type: number
          format: double
        price_per_measurement:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.sourcing.offer.custom.v1.CustomPriceType:
      type: string
      enum:
        - ListPrice
        - QuotePrice
        - ContractPrice
        - CustomerNegotiatedPrice
    types.sourcing.offer.custom.v1.PricePoint:
      type: object
      required:
        - quantity
        - unit_price
        - availability
      properties:
        availability:
          $ref: >-
            #/components/schemas/types.sourcing.offer.custom.v1.PricePointAvailability
        quantity:
          type: number
          format: double
        unit_price:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.sourcing.offer.custom.v1.PricePointAvailability:
      oneOf:
        - type: object
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - Stock
        - type: object
          required:
            - days
            - type
          properties:
            days:
              type: integer
              format: int64
              minimum: 0
            type:
              type: string
              enum:
                - LeadTimeDays
    types.sourcing.offer.custom.v1.PricePointInput:
      type: object
      required:
        - quantity
        - amount
      properties:
        amount:
          type: string
        lead_time_days:
          type:
            - integer
            - 'null'
          format: int64
          minimum: 0
        quantity:
          type: number
          format: double
    types.sourcing.offer.v1.OfferOrigin:
      oneOf:
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - Manual
        - type: object
          required:
            - origin
          properties:
            context:
              type:
                - string
                - 'null'
            origin:
              type: string
              enum:
                - Import
        - type: object
          required:
            - origin
          properties:
            negotiation_id:
              type:
                - integer
                - 'null'
              format: int32
            origin:
              type: string
              enum:
                - QuoteRequest
            quote_request_id:
              type:
                - string
                - 'null'
              format: uuid
            quote_request_line_item_id:
              type:
                - integer
                - 'null'
              format: int32
            quote_tracking_id:
              type:
                - string
                - 'null'
              format: uuid
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - Consigned
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Octopart
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Nexar
        - type: object
          required:
            - id
            - public
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - TrustedParts
            public:
              type: boolean
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Sourcengine
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Farnell
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Newark
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Element14
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Buerklin
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Mouser
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Future
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Schukat
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Digikey
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - MyArrow
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Gudeco
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Rutronik
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Tme
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Weltron
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - AvnetAbacus
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - AvnetApac
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - AvnetSilica
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - AvnetEbv
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - AvnetUsa
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Arrow
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - WuerthEisos
        - type: object
          required:
            - id
            - datasource_name
            - origin
          properties:
            datasource_name:
              type: string
            id:
              type: string
            origin:
              type: string
              enum:
                - Orbweaver
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - Wuerth
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - BetaLayout
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - SafePcb
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - IBRRingler
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - APCT
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - Gatema
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - Alba
        - type: object
          required:
            - origin
          properties:
            origin:
              type: string
              enum:
                - MultiCB
        - type: object
          required:
            - team
            - origin
          properties:
            origin:
              type: string
              enum:
                - Stackrate
            team:
              type: string
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Lcsc
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Tti
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Eve
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Samtec
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Ti
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Blume
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Heilind
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Master
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Onlinecomponents
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - AlElektronik
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Unikey
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Corestaff
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - RsComponents
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Sos
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Venkel
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Rochester
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - QuestComponents
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - ChipCart
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - WinSource
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - IcHub
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Ecomal
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - RmComponents
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Wittig
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Telcona
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - RapidElectronics
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Hexachip
        - type: object
          required:
            - id
            - origin
          properties:
            id:
              type: string
            origin:
              type: string
              enum:
                - Alfatec
    types.sourcing.offer.v1.OfferPaymentTermsInput:
      oneOf:
        - type: object
          required:
            - net_payment_due_days
            - type
          properties:
            net_payment_due_days:
              type: integer
              format: int32
              minimum: 0
            type:
              type: string
              enum:
                - net_payment
        - type: object
          required:
            - net_payment_due_days
            - early_payment_due_days
            - early_payment_discount
            - type
          properties:
            early_payment_discount:
              type: string
            early_payment_due_days:
              type: integer
              format: int32
              minimum: 0
            net_payment_due_days:
              type: integer
              format: int32
              minimum: 0
            type:
              type: string
              enum:
                - net_with_early_payment
    types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity:
      type: object
      required:
        - assembly
        - quantity
      properties:
        assembly:
          type: string
          format: uuid
        quantity:
          type: integer
          format: int32
    types.sourcing.sourcing_scenario.v1.Cost:
      type: object
      required:
        - price
      properties:
        description:
          type:
            - string
            - 'null'
        price:
          $ref: >-
            #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.sourcing.sourcing_scenario.v1.ExcessPreferences:
      type: object
      properties:
        max_ratio_percent:
          type:
            - number
            - 'null'
          format: float
        minimum_savings:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.primitives.monetary_value.v1.MonetaryValue
    types.sourcing.sourcing_scenario.v1.InventoryPreference:
      type: string
      enum:
        - PreferInventory
        - Neutral
        - PreferMarketOffers
    types.sourcing.sourcing_scenario.v1.LeadTimePreference:
      oneOf:
        - type: object
          title: BestPrice
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - BestPrice
        - type: object
          title: Fastest
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - Fastest
        - type: object
          title: BestPriceBy
          required:
            - target
            - type
          properties:
            target:
              type: string
              format: date
            type:
              type: string
              enum:
                - BestPriceBy
    types.sourcing.sourcing_scenario.v1.Limit:
      oneOf:
        - type: object
          title: Never
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - Never
        - type: object
          title: Days
          required:
            - number
            - type
          properties:
            number:
              type: integer
              format: int64
              minimum: 0
            type:
              type: string
              enum:
                - Days
    types.sourcing.sourcing_scenario.v1.OfferAgeLimit:
      type: object
      required:
        - expiring_before_validity_date
        - expired_after_validity_date
        - old_after_update
        - outdated_after_update
      properties:
        expired_after_validity_date:
          $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit'
        expiring_before_validity_date:
          $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit'
        old_after_update:
          $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit'
        outdated_after_update:
          $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit'
    types.sourcing.sourcing_scenario.v1.Packaging:
      type: string
      enum:
        - AmmoPack
        - Bag
        - Bulk
        - Reel
        - ReReel
        - Tape
        - Tray
        - Tube
        - Carton
    types.sourcing.sourcing_scenario.v1.PriceType:
      type: string
      enum:
        - PurchasePrice
        - ListPrice
        - ContractPrice
        - QuotePrice
        - StandardPrice
        - CustomerNegotiatedPrice
        - TargetPrice
    types.sourcing.sourcing_scenario.v1.SolutionPreference:
      type: object
      required:
        - lead_time_preference
        - preferred_suppliers_and_stock_locations
        - approved_suppliers_and_stock_locations
        - excess_preference
        - offer_age_limit
        - low_stock_warning_factor
        - packaging_preference
        - prefer_direct_api_integrations
        - excluded_price_types
        - inventory_preference
        - preferred_inventory_sites
        - approved_inventory_sites
        - use_unit_price
        - exclude_mismatched_price_points
        - prioritize_preferred_manufacturers
      properties:
        approved_inventory_sites:
          type: array
          items:
            type: string
            format: uuid
        approved_suppliers_and_stock_locations:
          type: array
          items:
            type: string
            format: uuid
        excess_preference:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v1.ExcessPreferences
        exclude_mismatched_price_points:
          type: boolean
        excluded_price_types:
          type: array
          items:
            $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.PriceType'
        inventory_preference:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v1.InventoryPreference
        lead_time_preference:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v1.LeadTimePreference
        low_stock_warning_factor:
          type: number
          format: double
        offer_age_limit:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v1.OfferAgeLimit
        packaging_preference:
          type: array
          items:
            $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v1.Packaging'
        prefer_customer_negotiated_prices:
          type: boolean
        prefer_direct_api_integrations:
          type: boolean
        preferred_inventory_sites:
          type: array
          items:
            type: string
            format: uuid
        preferred_suppliers_and_stock_locations:
          type: array
          items:
            type: string
            format: uuid
        prioritize_preferred_manufacturers:
          type: boolean
        use_unit_price:
          type: boolean
          description: >-
            If true, the unit price is used for sorting instead of the total
            price
    types.sourcing.sourcing_scenario.v1.SourcingScenarioInput:
      type: object
      required:
        - rfq
        - name
        - assembly_quantities
      properties:
        assembly_quantities:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity
        name:
          type: string
        rfq:
          type: string
          format: uuid
        solution_preference:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference
    types.sourcing.sourcing_scenario.v1.SourcingScenarioResponse:
      type: object
      required:
        - id
        - rfq
        - name
        - solution_preference
        - assembly_quantities
      properties:
        assembly_quantities:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity
        id:
          type: string
          format: uuid
        name:
          type: string
        rfq:
          type: string
          format: uuid
        solution_preference:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference
    types.sourcing.sourcing_scenario.v1.SourcingScenarioUpdateInput:
      type: object
      properties:
        assembly_quantities:
          type:
            - array
            - 'null'
          items:
            $ref: >-
              #/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity
        name:
          type:
            - string
            - 'null'
        solution_preference:
          oneOf:
            - type: 'null'
            - $ref: >-
                #/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference
    types.sourcing.sourcing_scenario.v2.CurrencySettingsDto:
      type: object
      description: >-
        Currency and exchange rate settings for a sourcing scenario.


        All costs in a sourcing scenario are converted to the `base_currency`
        using the

        provided exchange rates. Each rate represents how many units of the
        foreign currency

        equal one unit of the base currency.
      required:
        - base_currency
        - exchange_rates
      properties:
        base_currency:
          $ref: '#/components/schemas/types.primitives.monetary_value.v1.Currency'
          description: >-
            The base currency used for all cost calculations in this sourcing
            scenario.

            All monetary values are converted to this currency.
        exchange_rates:
          type: object
          description: >-
            Exchange rates for converting foreign currencies to the base
            currency.


            Each key is a currency code (e.g., `"USD"`, `"CNY"`), and the value
            contains

            the conversion rate and whether it was manually set.

            Rates are expressed as: 1 unit of base currency = `rate` units of
            foreign currency.
          additionalProperties:
            $ref: >-
              #/components/schemas/types.sourcing.sourcing_scenario.v2.ExchangeRateDto
          propertyNames:
            type: string
    types.sourcing.sourcing_scenario.v2.DemandDto:
      oneOf:
        - type: object
          description: Demand for an assembly (e.g., a PCB or sub-assembly).
          required:
            - id
            - name
            - quantity
            - type
          properties:
            id:
              type: string
              format: uuid
              description: Unique identifier of the assembly.
            name:
              type: string
              description: Human-readable name of the assembly (the assembly designator).
            quantity:
              $ref: >-
                #/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit
              description: >-
                The required quantity for this assembly demand, including the
                unit of measurement.
            type:
              type: string
              enum:
                - Assembly
      description: >-
        A demand associated with a sourcing scenario.


        Each demand has a `type` field discriminator indicating its kind.
        Currently only

        `"Assembly"` demands are supported. Part and Component demand types will
        be added

        in a future update without breaking this API version.
    types.sourcing.sourcing_scenario.v2.ExchangeRateDto:
      type: object
      description: >-
        An exchange rate for a single foreign currency relative to the base
        currency.
      required:
        - rate
        - is_manual
      properties:
        is_manual:
          type: boolean
          description: >-
            Whether this exchange rate was manually set by a user (`true`) or
            automatically

            fetched from a public exchange rate API (`false`).

            Manual rates take precedence over automatic rates for all cost
            conversions.
        rate:
          type: number
          format: double
          description: >-
            The conversion rate. When `is_manual` is `true`, this is the
            manually overridden rate.

            Otherwise, it is the automatically fetched rate from a public
            exchange rate provider.
    types.sourcing.sourcing_scenario.v2.ProjectDto:
      oneOf:
        - type: object
          title: Rfq
          description: The sourcing scenario belongs to an RFQ.
          required:
            - id
            - type
          properties:
            id:
              type: string
              format: uuid
              description: The sourcing scenario belongs to an RFQ.
            type:
              type: string
              enum:
                - Rfq
        - type: object
          title: Negotiation
          description: The sourcing scenario belongs to a Negotiation.
          required:
            - id
            - type
          properties:
            id:
              type: string
              format: uuid
              description: The sourcing scenario belongs to a Negotiation.
            type:
              type: string
              enum:
                - Negotiation
      description: |-
        The project a sourcing scenario is associated with.

        A project is either an RFQ (Request for Quotation) or a Negotiation.
        The `type` field indicates which kind.
    types.sourcing.sourcing_scenario.v2.SourcingScenarioResponse:
      type: object
      description: >-
        A sourcing scenario with its associated project, demands, and settings.


        A sourcing scenario defines what needs to be sourced (demands), which
        project it belongs to,

        and the currency/exchange rate settings used for cost calculations.
      required:
        - id
        - name
        - project
        - demands
        - settings
      properties:
        demands:
          type: array
          items:
            $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v2.DemandDto'
          description: >-
            The demands associated with this sourcing scenario.


            Each demand has a `type` field indicating its kind. Currently only
            `"Assembly"` demands

            are returned. Additional demand types (Part, Component) will be
            added in future versions.

            Consumers should gracefully handle or ignore unknown demand types.
        id:
          type: string
          format: uuid
          description: Unique identifier of the sourcing scenario.
        name:
          type: string
          description: Human-readable name of the sourcing scenario.
        project:
          $ref: '#/components/schemas/types.sourcing.sourcing_scenario.v2.ProjectDto'
          description: The project this sourcing scenario belongs to.
        settings:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v2.SourcingScenarioSettingsDto
          description: >-
            Settings for this sourcing scenario, including currency and exchange
            rate configuration.
    types.sourcing.sourcing_scenario.v2.SourcingScenarioSettingsDto:
      type: object
      description: >-
        Sourcing scenario settings.


        Contains configuration that controls how sourcing is performed.

        This object is extensible — additional setting groups may be added
        alongside

        `currency` in the future.
      required:
        - currency
      properties:
        currency:
          $ref: >-
            #/components/schemas/types.sourcing.sourcing_scenario.v2.CurrencySettingsDto
          description: Currency and exchange rate settings used for cost calculations.
    types.supplier.v1.BulkSupplierRequest:
      type: object
      required:
        - ids
      properties:
        ids:
          type: array
          items:
            type: string
            format: uuid
    types.supplier.v1.BulkSuppliersResponse:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.supplier.v1.SupplierResponse'
    types.supplier.v1.ImportSuppliersRequest:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.supplier.v1.SupplierImportInput'
    types.supplier.v1.ImportSuppliersResponse:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: >-
              #/components/schemas/types.supplier.v1.SupplierImportResultResponse
    types.supplier.v1.SingleSupplierResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/types.supplier.v1.SupplierResponse'
    types.supplier.v1.SupplierImportInput:
      type: object
      required:
        - supplier_number
        - name
        - supplier_part_type
        - supplier_type
      properties:
        name:
          type: string
        origin:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.supplier.v1.SupplierOriginInput'
        supplier_number:
          type: string
        supplier_part_type:
          $ref: '#/components/schemas/types.supplier.v1.SupplierPartTypeInput'
        supplier_preference:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.supplier.v1.SupplierPreferenceInput'
              description: >-
                When specified, applies this preference to all supplier
                stock-locations

                on the default sourcing template for the imported supplier
        supplier_type:
          $ref: '#/components/schemas/types.supplier.v1.SupplierTypeInput'
    types.supplier.v1.SupplierImportResultResponse:
      type: object
      required:
        - index
        - success
        - status
        - description
      properties:
        description:
          type: string
        index:
          type: integer
          minimum: 0
        status:
          type: integer
          format: int32
          minimum: 0
        success:
          type: boolean
        supplier_id:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SupplierId'
    types.supplier.v1.SupplierOrigin:
      type: string
      enum:
        - System
        - Erp
        - Manual
    types.supplier.v1.SupplierOriginInput:
      type: string
      enum:
        - Erp
        - Manual
    types.supplier.v1.SupplierPartType:
      type: string
      enum:
        - OffTheShelf
        - Pcb
        - Custom
        - Assembly
    types.supplier.v1.SupplierPartTypeInput:
      type: string
      enum:
        - OffTheShelf
        - Pcb
        - Custom
    types.supplier.v1.SupplierPreferenceInput:
      type: string
      enum:
        - NotApproved
        - Approved
        - Preferred
        - Excluded
    types.supplier.v1.SupplierResponse:
      type: object
      required:
        - id
        - name
        - alternative_names
        - manually_added
        - supplier_part_type
        - supplier_type
        - origin
      properties:
        alternative_names:
          type: array
          items:
            type: string
        id:
          type: string
          format: uuid
        manually_added:
          type: boolean
        name:
          type: string
        origin:
          $ref: '#/components/schemas/types.supplier.v1.SupplierOrigin'
        supplier_number:
          type:
            - string
            - 'null'
        supplier_part_type:
          $ref: '#/components/schemas/types.supplier.v1.SupplierPartType'
        supplier_type:
          $ref: '#/components/schemas/types.supplier.v1.SupplierType'
    types.supplier.v1.SupplierType:
      type: string
      enum:
        - Distributor
        - Manufacturer
        - Ems
    types.supplier.v1.SupplierTypeInput:
      type: string
      enum:
        - Distributor
        - Manufacturer
        - Ems
    types.supplier.v1.SupplierUpdateRequest:
      type: object
      properties:
        name:
          type:
            - string
            - 'null'
        origin:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.supplier.v1.SupplierOriginInput'
        supplier_number:
          type:
            - string
            - 'null'
        supplier_part_type:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.supplier.v1.SupplierPartTypeInput'
        supplier_preference:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.supplier.v1.SupplierPreferenceInput'
              description: >-
                When specified, applies this preference to all supplier
                stock-locations

                on the default sourcing template for the updated supplier
        supplier_type:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.supplier.v1.SupplierTypeInput'
    types.user.v1.AllUsers:
      type: object
      required:
        - items
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/types.user.v1.User'
    types.user.v1.User:
      type: object
      required:
        - id
        - first_name
        - last_name
        - email
        - user_language
      properties:
        customer:
          type:
            - string
            - 'null'
          format: uuid
        email:
          type: string
        first_name:
          type: string
        id:
          type: string
          format: uuid
        last_name:
          type: string
        phone_number:
          type:
            - string
            - 'null'
        position:
          type:
            - string
            - 'null'
        user_language:
          type: string
    types.user.v1.UserInviteInput:
      type: object
      required:
        - email
        - first_name
        - last_name
      properties:
        email:
          type: string
          description: The email address of the user to invite.
        first_name:
          type: string
          description: The first name of the user to invite.
        host:
          type:
            - string
            - 'null'
          description: >-
            Optional hostname for the invite link (e.g., "portal.tenant.com").

            Must be a valid hostname configured for your tenant. If not
            specified, a default

            hostname for your tenant will be used.
        language:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/types.customer.v1.Language'
              description: The language of the user. Defaults to English if not specified.
        last_name:
          type: string
          description: The last name of the user to invite.
        user_role:
          $ref: '#/components/schemas/types.user.v1.UserRole'
          description: The role of the user. Defaults to Member if not specified.
    types.user.v1.UserRole:
      type: string
      enum:
        - member
        - admin
    types.user.v1.UserUpdateInput:
      type: object
      properties:
        first_name:
          type:
            - string
            - 'null'
          description: The first name of the user.
        last_name:
          type:
            - string
            - 'null'
          description: The last name of the user.
        phone_number:
          type:
            - string
            - 'null'
          description: The phone number of the user.
        position:
          type:
            - string
            - 'null'
          description: The position of the user within the organization.
    types.vat.v1.CompleteVatId:
      type: object
      required:
        - id
        - id_type
      properties:
        id:
          type: string
          description: actual VAT ID
        id_type:
          $ref: '#/components/schemas/types.vat.v1.VatIdType'
          description: country / entity of issuance of that particular ID
    types.vat.v1.VatIdType:
      type: string
      description: >-
        The type of the VAT ID.


        You can read more on the [Stripe
        docs](https://stripe.com/docs/billing/customer/tax-ids).
      enum:
        - ad_nrt
        - ae_trn
        - ar_cuit
        - au_abn
        - au_arn
        - bg_uic
        - bo_tin
        - br_cnpj
        - br_cpf
        - ca_bn
        - ca_gst_hst
        - ca_pst_bc
        - ca_pst_mb
        - ca_pst_sk
        - ca_qst
        - cl_tin
        - cn_tin
        - co_nit
        - cr_tin
        - do_rcn
        - ec_ruc
        - eg_tin
        - sv_nit
        - es_cif
        - eu_oss_vat
        - eu_vat
        - ge_vat
        - hk_br
        - hu_tin
        - id_npwp
        - il_vat
        - in_gst
        - is_vat
        - jp_cn
        - jp_rn
        - jp_trn
        - ke_pin
        - li_uid
        - mx_rfc
        - my_frp
        - my_itn
        - my_sst
        - no_vat
        - nz_gst
        - pe_ruc
        - ph_tin
        - ro_tin
        - ru_kpp
        - rs_pib
        - kr_brn
        - ch_vat
        - ru_inn
        - sa_vat
        - sg_gst
        - sg_uen
        - si_tin
        - za_vat
        - tw_vat
        - th_vat
        - tr_tin
        - ua_vat
        - gb_vat
        - us_ein
        - uy_ruc
        - ve_rif
        - vn_tin
    PCB:
      required:
        - assembly
        - files
        - holes
        - specifications
        - version
      type: object
      properties:
        assembly:
          type: string
          format: uuid
        version:
          type: string
          format: uuid
        outline:
          allOf:
            - $ref: '#/components/schemas/APIOutline'
        holes:
          type: array
          items:
            type: string
        files:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/LayerFile'
        metaInfo:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        specifications:
          type: array
          items:
            type: string
            format: uuid
        defaultSpecification:
          type: string
          format: uuid
        drillSets:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/DrillSet'
        netList:
          allOf:
            - $ref: '#/components/schemas/NetList'
    HoleList:
      required:
        - tools
      type: object
      properties:
        from:
          type: number
        to:
          type: number
        tools:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Tool'
        scaling:
          type: number
        fileUnit:
          type: string
    CollectedPCB:
      required:
        - assembly
        - pcb
      type: object
      properties:
        assembly:
          allOf:
            - $ref: '#/components/schemas/Assembly'
        pcb:
          allOf:
            - $ref: '#/components/schemas/PCB'
        layerstack:
          allOf:
            - $ref: '#/components/schemas/LayerStackAPI'
        panels:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/CustomerPanelAPI'
    PCBUpdate:
      type: object
      properties:
        defaultSpecification:
          type: string
          format: uuid
    SetOutline:
      required:
        - candidate
      type: object
      properties:
        candidate:
          type: string
          format: uuid
        userChoice:
          type: boolean
    APIOutline:
      required:
        - id
        - metaInfo
        - userChoice
      type: object
      properties:
        id:
          type: string
          format: uuid
        file:
          type: string
          format: uuid
        preview:
          type: string
        userChoice:
          type: boolean
        metaInfo:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        graphic:
          allOf:
            - $ref: '#/components/schemas/Graphic'
        score:
          type: number
        width:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        height:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
    Object:
      type: object
    Graphic:
      required:
        - count
        - defs
        - format
        - paths
        - viewbox
      type: object
      properties:
        viewbox:
          allOf:
            - $ref: '#/components/schemas/Dimension'
        format:
          allOf:
            - $ref: '#/components/schemas/Format'
        count:
          type: number
        paths:
          type: array
          items:
            type: array
            items:
              allOf:
                - $ref: '#/components/schemas/GraphicElement'
        defs:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/GraphicDefinition'
    LayerFileUpdate:
      type: object
      properties:
        inverted:
          type: boolean
    LayerFile:
      required:
        - inverted
        - metaInfo
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        data:
          type: string
        format:
          allOf:
            - $ref: '#/components/schemas/Format'
        fileType:
          allOf:
            - $ref: '#/components/schemas/FileType'
        metaInfo:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        inverted:
          type: boolean
    MetaInfo:
      required:
        - bitmap$0
        - logger
        - properties
      type: object
      properties:
        properties:
          type: object
          additionalProperties:
            allOf:
              - $ref: '#/components/schemas/Property'
          description: The Map of properties
        logger:
          allOf:
            - $ref: '#/components/schemas/Logger'
        bitmap$0:
          type: boolean
    PCBStreamMessage:
      required:
        - m
        - t
      type: object
      properties:
        t:
          type: string
        m:
          allOf:
            - $ref: '#/components/schemas/Message'
        ref:
          allOf:
            - $ref: '#/components/schemas/AssemblyReference'
    PCBSpecificationApi:
      required:
        - previews
        - spec
      type: object
      properties:
        spec:
          allOf:
            - $ref: '#/components/schemas/PCBSpecification'
        previews:
          allOf:
            - $ref: '#/components/schemas/SpecificationPreviews'
    PCBSpecificationCreation:
      required:
        - alias
      type: object
      properties:
        alias:
          type: string
        template:
          type: string
          format: uuid
    PCBSpecificationUpdate:
      type: object
      properties:
        dfm:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Property'
        settings:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Property'
        user:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Property'
    byte[]:
      type: object
    PCBV2Creation:
      type: object
      properties:
        name:
          type: string
          description: |
            Name of the PCB

            The name of the PCB.
            The PCBs GID is generated based on this name
        customer:
          type: string
          description: The ID of the Customer for this PCB
          format: uuid
        contact:
          type: string
          description: The ID of the Contact for this PCB
          format: uuid
        orderId:
          type: string
          description: The External ID od the RFQ/Order
        description:
          type: string
          description: The description for the PCB
        externalReference:
          description: The External ID of the RFQ/Order
          allOf:
            - $ref: '#/components/schemas/LqReference'
        withoutFiles:
          type: boolean
          description: Set this to true if the PCB will not contain initial files
    PCBV2:
      required:
        - assembly
        - created
        - filesLocked
        - id
        - lifecycles
        - projectType
        - properties
        - specifications
      type: object
      properties:
        id:
          type: string
          description: The ID of the PCB
          format: uuid
        name:
          type: string
          description: The Name of the PCB
        assembly:
          type: string
          description: >

            The Name of the PCB

            This property exists to help identify the corresponding assembly if
            needed.
          format: uuid
        description:
          type: string
          description: The description for the PCB
        created:
          type: string
          description: The creation date of the PCB
          format: date
        files:
          type: array
          description: The files the PCB
          items:
            allOf:
              - $ref: '#/components/schemas/PCBV2File'
        filesLocked:
          type: boolean
          description: The Lock-Status of the files
        lifecycles:
          type: array
          description: The Lifecycles of the PCB
          items:
            description: The Lifecycles of the PCB
            allOf:
              - $ref: '#/components/schemas/AssemblyLifecycleStage'
        projectType:
          description: Type of PCB Project
          allOf:
            - $ref: '#/components/schemas/ProjectType'
        orderId:
          type: string
          description: The External ID od the RFQ/Order
        outline:
          type: string
          description: The name of the file used for the outline
        specifications:
          type: array
          description: The Specifications of the PCB
          items:
            description: The Specifications of the PCB
            allOf:
              - $ref: '#/components/schemas/PCBV2Specification'
        properties:
          description: The Properties of the PCB determined by stackrate
          allOf:
            - $ref: '#/components/schemas/PCBV2Properties'
        customer:
          type: string
          description: The ID of the Customer for this PCB
          format: uuid
    PCBV2SpecificationCapabilities:
      required:
        - board
        - layerStack
        - markings
        - mechanical
        - miscellaneous
        - reports
      type: object
      properties:
        board:
          allOf:
            - $ref: '#/components/schemas/PCBV2BoardCapabilities'
        layerStack:
          allOf:
            - $ref: '#/components/schemas/PCBV2LayerStackCapabilities'
        mechanical:
          allOf:
            - $ref: '#/components/schemas/PCBV2MechanicalCapabilities'
        reports:
          allOf:
            - $ref: '#/components/schemas/PCBV2ReportsCapabilities'
        markings:
          allOf:
            - $ref: '#/components/schemas/PCBV2MarkingsCapabilities'
        miscellaneous:
          allOf:
            - $ref: '#/components/schemas/PCBV2MiscellaneousCapabilities'
    NotUsed:
      type: object
    DuplicatePcb:
      required:
        - exactFiles
        - fileMatchScore
        - gid
        - pcb
        - propertyMatchScore
        - propertyMatches
        - totalScore
      type: object
      properties:
        pcb:
          allOf:
            - $ref: '#/components/schemas/PCBV2'
        gid:
          type: string
        propertyMatches:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/PropertyMatch'
        propertyMatchScore:
          type: number
          format: double
        exactFiles:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/PCBV2File'
        fileMatchScore:
          type: number
          format: double
        totalScore:
          type: number
          format: double
    PCBV2Clone:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          description: |
            Name of the PCB

            The name of the PCB.
            The PCBs GID is generated based on this name
        externalReference:
          description: The External ID od the RFQ/Order
          allOf:
            - $ref: '#/components/schemas/LqReference'
    PCBV2Id:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          format: uuid
    PCBV2Update:
      type: object
      properties:
        name:
          type: string
        settings:
          allOf:
            - $ref: '#/components/schemas/PCBV2PropertiesUpdate'
    TokenResponse:
      required:
        - authToken
      type: object
      properties:
        authToken:
          type: string
        refreshToken:
          type: string
    PCBV2StreamMessage:
      required:
        - m
        - t
      type: object
      properties:
        t:
          type: string
        m:
          allOf:
            - $ref: '#/components/schemas/MessageV2'
        ref:
          allOf:
            - $ref: '#/components/schemas/AssemblyReference'
    AssemblyLifecycleStage:
      required:
        - name
        - status
      type: object
      properties:
        name:
          type: string
          enum:
            - main
            - composition
            - dfmanalysis
            - customer-panel
            - dfm
            - reconciliation
            - analysis
            - files
            - fileanalysis
            - layerstack
            - render
            - specification-render
            - reconciled_specification-render
            - initialization
            - production-analysis
        status:
          allOf:
            - $ref: '#/components/schemas/LifecycleStageStatus'
        history:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/HistoricLifecycleState'
    PCBV2Specification:
      required:
        - hash
        - id
        - name
        - previews
        - settings
      type: object
      properties:
        id:
          type: string
          description: |-

            ID of the Specification

            Unique for this PCB
          format: uuid
        name:
          type: string
          description: |-

            Name of the Specification

            Unique for this PCB
        previews:
          description: The PCB Previews
          allOf:
            - $ref: '#/components/schemas/PCBPreviews'
        settings:
          allOf:
            - $ref: '#/components/schemas/PCBV2Properties'
        hash:
          type: string
          description: A Hash of the Specification
        status:
          description: The status of the Specification
          allOf:
            - $ref: '#/components/schemas/SpecificationStatus'
        changes:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/SpecificationChange'
    PCBPreviews:
      type: object
      properties:
        front:
          allOf:
            - $ref: '#/components/schemas/FileAccess'
        rear:
          allOf:
            - $ref: '#/components/schemas/FileAccess'
    DrillSet:
      required:
        - layers
      type: object
      properties:
        name:
          type: string
        filename:
          type: string
        layers:
          type: array
          items:
            type: string
    NetList:
      required:
        - nets
      type: object
      properties:
        nets:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Net'
    Tool:
      required:
        - diameter
        - drillType
        - drills
        - name
      type: object
      properties:
        name:
          type: string
        drillType:
          type: string
        diameter:
          type: number
        drills:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/DrillHit'
        slots:
          allOf:
            - $ref: '#/components/schemas/SlotFeatures'
    Assembly:
      required:
        - created
        - creator
        - features
        - gid
        - id
        - information
        - name
        - status
        - team
      type: object
      properties:
        team:
          type: string
        id:
          type: string
          format: uuid
        gid:
          type: string
        name:
          type: string
        creator:
          type: string
        created:
          type: string
          format: date
        information:
          allOf:
            - $ref: '#/components/schemas/AssemblyInformation'
        features:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/AssemblyFeature'
        status:
          allOf:
            - $ref: '#/components/schemas/AssemblyStatus'
        currentVersion:
          allOf:
            - $ref: '#/components/schemas/Version'
        preview:
          type: string
        mail:
          type: string
        template:
          allOf:
            - $ref: '#/components/schemas/AssemblyReference'
        externalReference:
          allOf:
            - $ref: '#/components/schemas/LqReference'
    LayerStackAPI:
      required:
        - assembly
        - definition
        - stacks
        - unmatchedFiles
      type: object
      properties:
        assembly:
          allOf:
            - $ref: '#/components/schemas/AbstractAssemblyReference'
        definition:
          allOf:
            - $ref: '#/components/schemas/LayerstackDefinitionAPI'
        stacks:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/SubStackAPI'
        unmatchedFiles:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/LayerFile'
    CustomerPanelAPI:
      required:
        - elements
        - isExistingPanel
        - name
        - spacing
      type: object
      properties:
        id:
          type: string
          format: uuid
        externalId:
          type: string
        sourcingScenario:
          type: string
          format: uuid
        name:
          type: string
        elements:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/CustomerPanelElement'
        description:
          type: string
        preview:
          type: string
        spacing:
          allOf:
            - $ref: '#/components/schemas/Spacing'
        working:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/WorkingPanelUsageAPI'
        selected:
          type: string
          format: uuid
        bestYield:
          type: string
          format: uuid
        width:
          type: number
        height:
          type: number
        weight:
          type: number
        isExistingPanel:
          type: boolean
    LengthWithUnit:
      required:
        - unit
        - value
      type: object
      properties:
        value:
          type: number
        unit:
          type: string
          enum:
            - Micrometer
            - Inch
            - Mil
            - Millimeter
            - Microinch
    Dimension:
      required:
        - max
        - min
      type: object
      properties:
        min:
          allOf:
            - $ref: '#/components/schemas/BigPoint'
        max:
          allOf:
            - $ref: '#/components/schemas/BigPoint'
    Format:
      required:
        - resolution
        - unit
      type: object
      properties:
        unit:
          type: string
        resolution:
          type: number
        dimension:
          allOf:
            - $ref: '#/components/schemas/Dimension'
        complexity:
          type: integer
          format: int32
        scaling:
          type: number
          format: double
        gerberscale:
          type: number
          format: double
    GraphicElement:
      type: object
      properties:
        path:
          type: string
        tag:
          type: string
        use:
          allOf:
            - $ref: '#/components/schemas/GraphicUsage'
        attributes:
          type: object
          additionalProperties:
            type: array
            items:
              allOf:
                - $ref: '#/components/schemas/A'
        elementIds:
          type: array
          items:
            type: string
        trace:
          type: string
        orientation:
          allOf:
            - $ref: '#/components/schemas/FlashOrientation'
    GraphicDefinition:
      required:
        - id
        - path
      type: object
      properties:
        id:
          type: string
        path:
          type: string
    FileType:
      required:
        - fileType
        - productionFile
        - service
      type: object
      properties:
        service:
          type: string
        category:
          type: string
        fileType:
          type: string
        productionFile:
          type: boolean
        mimeType:
          type: string
        index:
          type: integer
          format: int32
        from:
          type: integer
          format: int32
        to:
          type: integer
          format: int32
        matchedByLLM:
          type: boolean
    Property:
      type: object
    Logger:
      required:
        - bitmap$0
        - logger
        - modeLoggerCache
        - play$api$Logger$$isEnabled
        - underlyingLogger
      type: object
      properties:
        logger:
          allOf:
            - $ref: '#/components/schemas/Logger'
        play$api$Logger$$isEnabled:
          allOf:
            - $ref: '#/components/schemas/Function0'
        modeLoggerCache:
          allOf:
            - $ref: '#/components/schemas/Map'
        underlyingLogger:
          allOf:
            - $ref: '#/components/schemas/Logger'
        bitmap$0:
          type: boolean
    Message:
      type: object
    AssemblyReference:
      required:
        - id
        - team
        - version
      type: object
      properties:
        team:
          type: string
          description: >-

            The team of the Assembly


            Will always be set when retrieving data.

            When Posting data, this is generally ignored in favor of the current
            logged-in team 
        id:
          type: string
          description: |2-

             The Assembly UUID

             This ID is universally unique and will not change for any given assembly
          format: uuid
        gid:
          type: string
          description: |2-

             The Assembly GID (human readable ID)

             This ID is unique inside its team, and will not change for any given assembly
        version:
          type: string
          description: |2-

             The Version ID

              This ID is universally unique and will not change for any given version
          format: uuid
    PCBSpecification:
      required:
        - alias
        - assembly
        - dfm
        - id
        - settings
        - status
        - technology
      type: object
      properties:
        assembly:
          allOf:
            - $ref: '#/components/schemas/AssemblyReference'
        id:
          type: string
          format: uuid
        alias:
          type: string
        dfm:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        settings:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        user:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        status:
          allOf:
            - $ref: '#/components/schemas/SpecificationStatus'
        technology:
          type: string
        base:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        preview:
          allOf:
            - $ref: '#/components/schemas/FilePath'
        previewRear:
          allOf:
            - $ref: '#/components/schemas/FilePath'
        changes:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/SpecificationChange'
    SpecificationPreviews:
      type: object
      properties:
        front:
          type: string
        rear:
          type: string
    LqReference:
      type: object
      properties:
        rfqId:
          type: string
          format: uuid
        assemblyId:
          type: string
          format: uuid
        customPartSpecificationId:
          type: string
          format: uuid
    PCBV2File:
      required:
        - fileType
        - id
        - lifecycles
        - name
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        fileType:
          allOf:
            - $ref: '#/components/schemas/FileType'
        preview:
          type: string
        path:
          type: string
        lifecycles:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/FileLifecycleStage'
    PCBV2Properties:
      required:
        - board
        - layerStack
        - markings
        - mechanical
        - miscellaneous
        - reports
      type: object
      properties:
        board:
          allOf:
            - $ref: '#/components/schemas/PCBV2BoardProperties'
        layerStack:
          allOf:
            - $ref: '#/components/schemas/PCBV2LayerStackProperties'
        mechanical:
          allOf:
            - $ref: '#/components/schemas/PCBV2MechanicalProperties'
        reports:
          allOf:
            - $ref: '#/components/schemas/PCBV2ReportsProperties'
        markings:
          allOf:
            - $ref: '#/components/schemas/PCBV2MarkingsProperties'
        miscellaneous:
          allOf:
            - $ref: '#/components/schemas/PCBV2MiscellaneousProperties'
    ProjectType:
      type: object
    PCBV2MechanicalCapabilities:
      required:
        - aspectRatio
        - blindVias
        - buriedVias
        - chamfering
        - microVias
        - minViaDiameter
        - nphCount
        - nphMaxSize
        - nphMinSize
        - nphToolCount
        - phAnnularRing
        - phCount
        - phMaxSize
        - phMinSize
        - phSurfaceArea
        - phToolCount
        - totalDrillCount
        - viaFilling
      type: object
      properties:
        minViaDiameter:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        viaFilling:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        blindVias:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        buriedVias:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        chamfering:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        aspectRatio:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        totalDrillCount:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        microVias:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        phCount:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        phToolCount:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        nphCount:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        phMinSize:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        nphMaxSize:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        phMaxSize:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        nphToolCount:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        phAnnularRing:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        nphMinSize:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        phSurfaceArea:
          allOf:
            - $ref: '#/components/schemas/NumericAreaSpecificationCapability'
    PCBV2LayerStackCapabilities:
      required:
        - baseMaterial
        - finalThickness
        - innerCopperThickness
        - layercount
        - layerstackThicknessTolerance
        - layerstackType
        - minInnerLayerStructure
        - minOuterLayerStructure
        - numberOfLaminationCycles
        - numberOfPrepregs
        - outerCopperThickness
        - rohsCompilant
        - tgValue
        - ulLayerStack
        - ulMarkingType
      type: object
      properties:
        layerstackType:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        layerstackThicknessTolerance:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        ulLayerStack:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        ulMarkingType:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        layercount:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        finalThickness:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        baseMaterial:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        outerCopperThickness:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        innerCopperThickness:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        minOuterLayerStructure:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        minInnerLayerStructure:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        rohsCompilant:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        tgValue:
          allOf:
            - $ref: '#/components/schemas/TemperatureSpecificationCapability'
        numberOfPrepregs:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        numberOfLaminationCycles:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
    PCBV2ReportsCapabilities:
      required:
        - certificateOfConformance
        - crossSection
        - firstArticleInspection
        - xRayMeasurement
        - xRayMeasurementPoints
      type: object
      properties:
        crossSection:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        xRayMeasurement:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        xRayMeasurementPoints:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        firstArticleInspection:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        certificateOfConformance:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
    PCBV2MiscellaneousCapabilities:
      required:
        - manufacturingInformation
      type: object
      properties:
        manufacturingInformation:
          allOf:
            - $ref: '#/components/schemas/StringSpecificationCapability'
    PCBV2BoardCapabilities:
      required:
        - applicationType
        - boardHeight
        - boardWidth
        - captonTape
        - carbonPrint
        - carbonPrintSide
        - copperClearance
        - ctiClass
        - eTest
        - ecobond
        - edgeMetalization
        - enigThickness
        - exposedCopperArea
        - exposedCopperAreaBottom
        - exposedCopperAreaTop
        - flammabilityRating
        - halfCutPlatedVias
        - halogenFree
        - hardGold
        - hardGoldArea
        - hardGoldThickness
        - impedanceTested
        - impedanceTolerance
        - innerCopperClearance
        - innerTraceWidth
        - ipc600Class
        - itar
        - maxXOutsAllowed
        - numberOfLines
        - outerCopperClearance
        - outerTraceWidth
        - peelableMask
        - placementSide
        - plcClass
        - pressFit
        - pressFitTechnology
        - reports
        - silkscreenColor
        - silkscreenSide
        - soldermaskClearance
        - soldermaskColor
        - soldermaskDam
        - soldermaskSide
        - surfaceFinish
        - traceWidth
      type: object
      properties:
        boardHeight:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        boardWidth:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        silkscreenColor:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        silkscreenSide:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        surfaceFinish:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        enigThickness:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        applicationType:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        hardGold:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        hardGoldArea:
          allOf:
            - $ref: '#/components/schemas/NumericAreaSpecificationCapability'
        hardGoldThickness:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        exposedCopperArea:
          allOf:
            - $ref: '#/components/schemas/NumericAreaSpecificationCapability'
        exposedCopperAreaTop:
          allOf:
            - $ref: '#/components/schemas/NumericAreaSpecificationCapability'
        exposedCopperAreaBottom:
          allOf:
            - $ref: '#/components/schemas/NumericAreaSpecificationCapability'
        traceWidth:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        outerTraceWidth:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        innerTraceWidth:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        copperClearance:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        outerCopperClearance:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        innerCopperClearance:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        soldermaskColor:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        soldermaskSide:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        soldermaskDam:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        soldermaskClearance:
          allOf:
            - $ref: '#/components/schemas/LengthSpecificationCapability'
        ipc600Class:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        eTest:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        pressFit:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        pressFitTechnology:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        impedanceTested:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        impedanceTolerance:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        peelableMask:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        captonTape:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        reports:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        itar:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        carbonPrint:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        carbonPrintSide:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        edgeMetalization:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        flammabilityRating:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        ctiClass:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        plcClass:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        maxXOutsAllowed:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        halogenFree:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        placementSide:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        ecobond:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        numberOfLines:
          allOf:
            - $ref: '#/components/schemas/CountSpecificationCapability'
        halfCutPlatedVias:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
    PCBV2MarkingsCapabilities:
      required:
        - datamatrixCode
        - dateCode
        - fabricatorLogo
      type: object
      properties:
        dateCode:
          allOf:
            - $ref: '#/components/schemas/EnumSpecificationCapability'
        fabricatorLogo:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
        datamatrixCode:
          allOf:
            - $ref: '#/components/schemas/BooleanSpecificationCapability'
    PropertyMatch:
      required:
        - property
      type: object
      properties:
        property:
          allOf:
            - $ref: '#/components/schemas/MatchablePcbProperty'
    MessageV2:
      type: object
    LifecycleStageStatus:
      required:
        - endState
        - messages
        - name
      type: object
      properties:
        name:
          type: string
          enum:
            - unknown
            - waiting
            - progress
            - error
            - success
            - timeout
        messages:
          type: array
          items:
            type: string
        percent:
          type: integer
          format: int32
        duration:
          type: number
          format: long
          deprecated: true
        deadline:
          allOf:
            - $ref: '#/components/schemas/DeadlineDoc'
        endState:
          type: boolean
    HistoricLifecycleState:
      required:
        - name
        - start
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/StageStatusName'
        start:
          type: number
          format: long
        end:
          type: number
          format: long
    SpecificationStatus:
      type: object
    SpecificationChange:
      required:
        - newValue
        - previousValue
        - timestamp
        - userId
      type: object
      properties:
        userId:
          type: string
        timestamp:
          type: string
          format: date
        previousValue:
          allOf:
            - $ref: '#/components/schemas/PCBSpecificationValues'
        newValue:
          allOf:
            - $ref: '#/components/schemas/PCBSpecificationValues'
    FileAccess:
      required:
        - key
        - path
      type: object
      properties:
        path:
          type: string
          description: the relative path to this file
        key:
          type: string
          description: |
            a signed token allowing access to this file

              can be used as a query parameter `?k=<key>` (for instance for `<img>` tags)
              with this key a shareable link to protected files can be created without
              sharing the full token.
    PCBV2PropertiesUpdate:
      type: object
      properties:
        board:
          allOf:
            - $ref: '#/components/schemas/PCBV2BoardPropertiesUpdate'
        layerStack:
          allOf:
            - $ref: '#/components/schemas/PCBV2LayerStackPropertiesUpdate'
        mechanical:
          allOf:
            - $ref: '#/components/schemas/PCBV2MechanicalPropertiesUpdate'
        reports:
          allOf:
            - $ref: '#/components/schemas/PCBV2ReportsPropertiesUpdate'
        markings:
          allOf:
            - $ref: '#/components/schemas/PCBV2MarkingsPropertiesUpdate'
        miscellaneous:
          allOf:
            - $ref: '#/components/schemas/PCBV2MiscellaneousPropertiesUpdate'
    Net:
      required:
        - drills
        - traces
      type: object
      properties:
        traces:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/NetTrace'
        drills:
          type: array
          items:
            type: string
    DrillHit:
      required:
        - id
        - x
        - 'y'
      type: object
      properties:
        x:
          type: number
        'y':
          type: number
        id:
          type: string
        coverage:
          allOf:
            - $ref: '#/components/schemas/DrillCoverage'
    SlotFeatures:
      required:
        - slots
      type: object
      properties:
        slots:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Tuple2'
    AssemblyInformation:
      required:
        - uiStatus
      type: object
      properties:
        customer:
          type: string
          format: uuid
        orderId:
          type: string
        assignee:
          type: string
          format: uuid
        itemNo:
          type: string
        description:
          type: string
        uiStatus:
          allOf:
            - $ref: '#/components/schemas/UIStatus'
        project:
          type: string
          format: uuid
    AssemblyFeature:
      required:
        - feature
        - service
      type: object
      properties:
        service:
          type: string
        feature:
          type: string
    Version:
      required:
        - created
        - filesLocked
        - id
        - lifecycles
        - projectType
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        created:
          type: string
          format: date
        released:
          type: string
          format: date
        files:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/File'
        filesLocked:
          type: boolean
        lifecycles:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/AssemblyLifecycleStage'
        projectType:
          allOf:
            - $ref: '#/components/schemas/ProjectType'
    AssemblyStatus:
      type: object
    AbstractAssemblyReference:
      type: object
    LayerstackDefinitionAPI:
      type: object
      properties:
        id:
          type: string
          format: uuid
        team:
          type: string
        name:
          type: string
        stacks:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/SubStackDefinition'
        price:
          type: number
        metaInfo:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        creation:
          type: string
          format: date
        image:
          type: string
        default:
          type: boolean
    SubStackAPI:
      required:
        - definition
        - layers
        - metaInfo
      type: object
      properties:
        definition:
          allOf:
            - $ref: '#/components/schemas/SubStackDefinition'
        layers:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/LayerAPI'
        metaInfo:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
    CustomerPanelElement:
      type: object
    Spacing:
      type: object
      properties:
        topPadding:
          type: number
        rightPadding:
          type: number
        leftPadding:
          type: number
        bottomPadding:
          type: number
        verticalSpacing:
          type: number
        horizontalSpacing:
          type: number
    WorkingPanelUsageAPI:
      required:
        - customerBoards
        - customerPanels
        - panelYield
        - workingPanel
      type: object
      properties:
        workingPanel:
          type: string
          format: uuid
        customerPanels:
          type: integer
          format: int32
        customerBoards:
          type: integer
          format: int32
        panelYield:
          type: number
          format: double
        preview:
          type: string
    LengthUnit:
      type: object
    BigPoint:
      required:
        - x
        - 'y'
      type: object
      properties:
        x:
          type: number
        'y':
          type: number
    GraphicUsage:
      required:
        - location
        - reference
      type: object
      properties:
        reference:
          type: string
        location:
          allOf:
            - $ref: '#/components/schemas/BigPoint'
    A:
      type: object
    FlashOrientation:
      required:
        - degrees
        - mirror
      type: object
      properties:
        degrees:
          type: number
          format: double
        mirror:
          type: boolean
    FilePath:
      required:
        - base
        - filename
        - fsroot
        - logger
        - resource
        - team
      type: object
      properties:
        fsroot:
          type: string
        team:
          type: string
        resource:
          type: string
        base:
          type: string
        subPath:
          type: array
          items:
            type: string
        filename:
          type: string
        logger:
          allOf:
            - $ref: '#/components/schemas/Logger'
    FileLifecycleStage:
      required:
        - name
        - status
      type: object
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/FileLifecycleStageName'
        status:
          allOf:
            - $ref: '#/components/schemas/LifecycleStageStatus'
        history:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/HistoricLifecycleState'
    PCBV2BoardProperties:
      type: object
      properties:
        boardHeight:
          description: The height of a single PCB
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        boardWidth:
          description: The width of a single PCB
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        silkscreenColor:
          type: string
          description: Specifies the silkscreen color
          enum:
            - white
            - black
            - yellow
            - red
            - green
            - blue
        silkscreenSide:
          type: string
          description: Specifies on which side the silkscreen should be printed on
          enum:
            - none
            - top
            - bottom
            - both
        surfaceFinish:
          type: string
          description: >-
            Specifies the type of surface finish that will be applied on the PCB
            surface
          enum:
            - none
            - hal-pb
            - hal-pb-free
            - enig
            - enipig
            - is
            - it
            - osp
        enigThickness:
          description: ENIG thickness
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        applicationType:
          type: string
          description: The type of application the PCB will be used for
          enum:
            - Industrial
            - Military
            - Automotive
            - Medical
            - Consumer
            - Aerospace
        notes:
          type: string
        hardGold:
          type: boolean
          description: Defines whether galvanic hard gold is required
        hardGoldArea:
          description: Define the area for galvanic hard gold
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        hardGoldThickness:
          description: Define the thickness for galvanic hard gold in micrometer
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        exposedCopperArea:
          description: >-
            The total exposed copper area in mm² (exposed_copper_area_top +
            exposed_copper_area_bottom)
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        exposedCopperAreaTop:
          description: Exposed copper area on the top side
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        exposedCopperAreaBottom:
          description: Exposed copper area on the bottom side
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        traceWidth:
          description: The width of the trace
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        outerTraceWidth:
          description: The width of the outer trace
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        innerTraceWidth:
          description: The width of the inner trace
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        copperClearance:
          description: The copper clearance
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        outerCopperClearance:
          description: The outer copper clearance
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        innerCopperClearance:
          description: The inner copper clearance
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        soldermaskColor:
          type: string
          description: The color of the soldermask
        soldermaskSide:
          type: string
          description: The side of the soldermask
          enum:
            - none
            - top
            - bottom
            - both
        pasteSide:
          type: string
          description: The side of the paste
          enum:
            - none
            - top
            - bottom
            - both
        soldermaskDam:
          description: The dam of the soldermask
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        soldermaskClearance:
          description: The clearance of the soldermask
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        ipc600Class:
          type: string
          description: Product quality acceptance according to IPC-A-600
          enum:
            - ipcnone
            - ipc1
            - ipc2
            - ipc2+
            - ipc3
            - ipc3a
        eTest:
          type: boolean
          description: Specifies if E-Test is required
        pressFit:
          type: boolean
          description: Specifies whether press-fit components will be used
        pressFitTechnology:
          description: Specifies the press-fit technology
          allOf:
            - $ref: '#/components/schemas/PressFitTechnology'
        impedanceTested:
          type: boolean
          description: Specifies whether an impedance control is required
        impedanceTolerance:
          type: number
          description: The tolerance of the impedance testing in %
        peelableMask:
          type: string
          description: Defines whether a peelable solder mask is required
          enum:
            - none
            - top
            - bottom
            - both
        captonTape:
          type: string
          description: Defines whether capton tape is required
          enum:
            - none
            - top
            - bottom
            - both
        reports:
          type: array
          items:
            type: string
            enum:
              - cross_section_report
              - first_sample_test_report
              - impedance_report
              - coc_report
        itar:
          type: boolean
        carbonPrint:
          type: boolean
          description: Defines whether carbon print is required
        carbonPrintSide:
          type: string
          description: Defines which sides of the PCB should be carbon printed
          enum:
            - none
            - top
            - bottom
            - both
        edgeMetalization:
          type: boolean
          description: Metalization of the PCB edges with copper and the final finish
        flammabilityRating:
          type: string
          description: The flammability rating of the base material according to UL 94
          enum:
            - none
            - V-0
            - V-1
            - V-2
        ctiClass:
          type: string
          description: >-
            Describes the electrical breakdown product class according to IEC
            60601-1:2005
          enum:
            - none
            - i
            - ii
            - iiia
            - iiib
        plcClass:
          type: string
          description: >-
            Describes the Performance Level Category for electrical performance
            of base material
          enum:
            - none
            - plc0
            - plc1
            - plc2
            - plc3
        maxXOutsAllowed:
          type: number
          description: The number of accepted X-outs per delivery/customer panel
        halogenFree:
          type: boolean
          description: Defines whether the PCB is halogen-free
        placementSide:
          type: string
          description: Defines which side of the PCB should be placed on
          enum:
            - none
            - top
            - bottom
            - both
        ecobond:
          type: boolean
          description: Defines whether ecobond is required
        numberOfLines:
          type: number
          description: The number of lines on the PCB
        halfCutPlatedVias:
          type: boolean
          description: Defines whether half-cutted plated vias are required
    PCBV2MechanicalProperties:
      type: object
      properties:
        minViaDiameter:
          description: The minimum via diameter
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        viaFilling:
          type: string
          description: Via filling type according to IPC-4761
          enum:
            - none
            - Ia
            - Ib
            - IIb
            - IIIa
            - IIIb
            - IVa
            - IVb
            - V
            - VI
            - VII
        blindVias:
          type: boolean
          description: Indicates whether the PCB has blind vias or not
        blindViaCount:
          type: integer
          description: The number of blind vias
          format: int32
        buriedVias:
          type: boolean
          description: Indicates whether the PCB has buried vias or not
        buriedViaCount:
          type: integer
          description: The number of buried vias
          format: int32
        chamfering:
          type: string
          description: Describes the type of chamfering
          enum:
            - none
            - 20-PCI
            - 45-ISA
        outlineLength:
          description: 'The length of the outline path '
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        aspectRatio:
          type: number
          description: The smallest aspect-ratio found on the PCB
        totalDrillCount:
          type: number
          description: The total number of drills
        microVias:
          type: boolean
          description: Indicates whether the PCB has micro vias or not
        phCount:
          type: number
          description: The amount of plated holes (vias)
        phToolCount:
          type: number
          description: The amount of different tools used for plated holes
        nphCount:
          type: number
          description: The amount of non-plated holes (drills)
        phMinSize:
          description: The smallest non-plated hole diameter
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        nphMaxSize:
          description: The largest non-plated hole diameter
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        phMaxSize:
          description: The largest plated hole diameter
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        nphToolCount:
          type: number
          description: The amount of different tools used for non-plated holes
        phAnnularRing:
          description: >-
            The smallest annular ring between plated holes and copper, found on
            all layers of the PCB
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        nphMinSize:
          description: The smallest non-plated hole diameter
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        phSurfaceArea:
          type: number
          description: The surface area of the inside of all plated holes
    PCBV2ReportsProperties:
      type: object
      properties:
        crossSection:
          type: boolean
          description: Report of a cross-sectional analysis of the PCB layers
        xRayMeasurement:
          type: boolean
          description: Report about a X-ray inspection of the PCB
        xRayMeasurementPoints:
          type: number
          description: Number of measured points during the X-ray inspection
        firstArticleInspection:
          type: boolean
          description: Initial inspection report verifying all specifications
        certificateOfConformance:
          type: boolean
          description: >-
            Requires and official document certifying compliance with quality
            standards
    PCBV2LayerStackProperties:
      type: object
      properties:
        layerstackType:
          type: string
          description: The technology or type of materials used to build the layerstack
          enum:
            - rigid
            - flex
            - ims
            - rigid-flex
        layerstackThicknessTolerance:
          type: number
          description: Thickness tolerance of the final pcb thickness in %
        ulLayerStack:
          type: boolean
        ulMarkingType:
          type: string
          description: The UL Marking setting
          enum:
            - no-marking
            - default-marking
            - custom-marking
        layercount:
          type: number
          description: The amount of copper layers
        finalThickness:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        baseMaterial:
          type: string
          description: The base material used to build up the layer stack
          enum:
            - FR-2
            - FR-3
            - FR-4
            - CEM1
            - CEM2
            - CEM3
            - polyimide
        outerCopperThickness:
          description: The finished copper thickness on outer layers
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        innerCopperThickness:
          description: The finished copper thickness on inner layers
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        minOuterLayerStructure:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        minInnerLayerStructure:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        rohsCompilant:
          type: boolean
          description: Indicates if the product must be compliant with RoHS
        tgValue:
          description: The minimum Tg value of the base material in C°
          allOf:
            - $ref: '#/components/schemas/TemperatureWithUnit'
        numberOfPrepregs:
          type: number
          description: The number of prepreg layers
        numberOfLaminationCycles:
          type: number
          description: The number of lamination cycles
    PCBV2MiscellaneousProperties:
      type: object
      properties:
        manufacturingInformation:
          type: string
          description: General information that might be required in form of a free text
    PCBV2MarkingsProperties:
      type: object
      properties:
        dateCode:
          type: string
          description: Code indicating the manufacturing date of the PCB
          enum:
            - none
            - default
            - custom
        fabricatorLogo:
          type: boolean
          description: Logo of the PCB fabricator printed on the board
        datamatrixCode:
          type: boolean
          description: Unique datamatrix code for tracking and identification
    NumericAreaSpecificationCapability:
      required:
        - defaultUnit
        - disabled
      type: object
      properties:
        min:
          type: number
        max:
          type: number
        allowed:
          type: array
          items:
            type: number
        default:
          type: number
        disabled:
          type: boolean
        defaultUnit:
          type: string
          enum:
            - SquareMillimeter
            - SquareInch
    BooleanSpecificationCapability:
      required:
        - allowed
        - default
      type: object
      properties:
        allowed:
          type: array
          items:
            type: boolean
        default:
          type: boolean
    EnumSpecificationCapability:
      required:
        - allowed
        - default
      type: object
      properties:
        allowed:
          type: array
          items:
            type: string
        default:
          type: string
    LengthSpecificationCapability:
      required:
        - defaultUnit
        - disabled
      type: object
      properties:
        min:
          type: number
        max:
          type: number
        allowed:
          type: array
          items:
            type: number
        default:
          type: number
        disabled:
          type: boolean
        defaultUnit:
          type: string
          enum:
            - Micrometer
            - Inch
            - Mil
            - Millimeter
            - Microinch
    CountSpecificationCapability:
      required:
        - disabled
      type: object
      properties:
        min:
          type: number
        max:
          type: number
        allowed:
          type: array
          items:
            type: number
        default:
          type: number
        disabled:
          type: boolean
    TemperatureSpecificationCapability:
      required:
        - defaultUnit
        - disabled
      type: object
      properties:
        min:
          type: number
        max:
          type: number
        allowed:
          type: array
          items:
            type: number
        default:
          type: number
        disabled:
          type: boolean
        defaultUnit:
          type: string
          enum:
            - Celsius
            - Fahrenheit
    StringSpecificationCapability:
      type: object
      properties:
        allowed:
          type: array
          items:
            type: string
        default:
          type: string
    MatchablePcbProperty:
      type: object
    DeadlineDoc:
      required:
        - length
        - unit
      type: object
      properties:
        length:
          type: number
          format: long
        unit:
          type: string
          enum:
            - NANOSECONDS
            - MICROSECONDS
            - MILLISECONDS
            - SECONDS
            - MINUTES
            - HOURS
            - DAYS
    StageStatusName:
      type: object
    PCBSpecificationValues:
      type: object
      properties:
        base:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        status:
          allOf:
            - $ref: '#/components/schemas/SpecificationStatus'
    PCBV2BoardPropertiesUpdate:
      type: object
      properties:
        boardHeight:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        boardWidth:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        silkscreenColor:
          type: string
          enum:
            - white
            - black
            - yellow
            - red
            - green
            - blue
        silkscreenSide:
          type: string
          enum:
            - none
            - top
            - bottom
            - both
        surfaceFinish:
          type: string
          enum:
            - none
            - hal-pb
            - hal-pb-free
            - enig
            - enipig
            - is
            - it
            - osp
        enigThickness:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        applicationType:
          type: string
          enum:
            - Industrial
            - Military
            - Automotive
            - Medical
            - Consumer
            - Aerospace
        notes:
          type: string
        hardGold:
          type: boolean
        hardGoldArea:
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        hardGoldThickness:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        exposedCopperArea:
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        exposedCopperAreaTop:
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        exposedCopperAreaBottom:
          allOf:
            - $ref: '#/components/schemas/AreaWithUnit'
        traceWidth:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        outerTraceWidth:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        innerTraceWidth:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        copperClearance:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        outerCopperClearance:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        innerCopperClearance:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        soldermaskColor:
          type: string
        soldermaskSide:
          type: string
          enum:
            - none
            - top
            - bottom
            - both
        pasteSide:
          type: string
          enum:
            - none
            - top
            - bottom
            - both
        soldermaskDam:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        soldermaskClearance:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        ipc600Class:
          type: string
          enum:
            - ipcnone
            - ipc1
            - ipc2
            - ipc2+
            - ipc3
            - ipc3a
        eTest:
          type: boolean
        pressFit:
          type: boolean
        pressFitTechnology:
          allOf:
            - $ref: '#/components/schemas/PressFitTechnology'
        impedanceTested:
          type: boolean
        impedanceTolerance:
          type: number
        peelableMask:
          type: string
          enum:
            - none
            - top
            - bottom
            - both
        captonTape:
          type: string
          enum:
            - none
            - top
            - bottom
            - both
        reports:
          type: array
          items:
            type: string
            enum:
              - cross_section_report
              - first_sample_test_report
              - impedance_report
              - coc_report
        itar:
          type: boolean
        carbonPrint:
          type: boolean
        carbonPrintSide:
          type: string
          enum:
            - none
            - top
            - bottom
            - both
        edgeMetalization:
          type: boolean
        flammabilityRating:
          type: string
          enum:
            - none
            - V-0
            - V-1
            - V-2
        ctiClass:
          type: string
          enum:
            - none
            - i
            - ii
            - iiia
            - iiib
        plcClass:
          type: string
          enum:
            - none
            - plc0
            - plc1
            - plc2
            - plc3
        maxXOutsAllowed:
          type: number
        halogenFree:
          type: boolean
        placementSide:
          type: string
          enum:
            - none
            - top
            - bottom
            - both
        ecobond:
          type: boolean
        numberOfLines:
          type: number
        halfCutPlatedVias:
          type: boolean
    PCBV2MarkingsPropertiesUpdate:
      type: object
      properties:
        dateCode:
          type: string
          enum:
            - none
            - default
            - custom
        fabricatorLogo:
          type: boolean
        datamatrixCode:
          type: boolean
    PCBV2MechanicalPropertiesUpdate:
      type: object
      properties:
        minViaDiameter:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        viaFilling:
          type: string
          enum:
            - none
            - Ia
            - Ib
            - IIb
            - IIIa
            - IIIb
            - IVa
            - IVb
            - V
            - VI
            - VII
        blindVias:
          type: boolean
        blindViaCount:
          type: integer
          format: int32
        buriedVias:
          type: boolean
        buriedViaCount:
          type: integer
          format: int32
        chamfering:
          type: string
          enum:
            - none
            - 20-PCI
            - 45-ISA
        outlineLength:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        aspectRatio:
          type: number
        totalDrillCount:
          type: number
        microVias:
          type: boolean
        phCount:
          type: number
        phToolCount:
          type: number
        nphCount:
          type: number
        phMinSize:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        nphMaxSize:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        phMaxSize:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        nphToolCount:
          type: number
        phAnnularRing:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        nphMinSize:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        phSurfaceArea:
          type: number
    PCBV2LayerStackPropertiesUpdate:
      type: object
      properties:
        layerstackType:
          type: string
          enum:
            - rigid
            - flex
            - ims
            - rigid-flex
        layerstackThicknessTolerance:
          type: number
        ulLayerStack:
          type: boolean
        ulMarkingType:
          type: string
          enum:
            - no-marking
            - default-marking
            - custom-marking
        layercount:
          type: number
        finalThickness:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        baseMaterial:
          type: string
          enum:
            - FR-2
            - FR-3
            - FR-4
            - CEM1
            - CEM2
            - CEM3
            - polyimide
        outerCopperThickness:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        innerCopperThickness:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        minOuterLayerStructure:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        minInnerLayerStructure:
          allOf:
            - $ref: '#/components/schemas/LengthWithUnit'
        rohsCompilant:
          type: boolean
        tgValue:
          allOf:
            - $ref: '#/components/schemas/TemperatureWithUnit'
        numberOfPrepregs:
          type: number
        numberOfLaminationCycles:
          type: number
    PCBV2ReportsPropertiesUpdate:
      type: object
      properties:
        crossSection:
          type: boolean
        xRayMeasurement:
          type: boolean
        xRayMeasurementPoints:
          type: number
        firstArticleInspection:
          type: boolean
        certificateOfConformance:
          type: boolean
    PCBV2MiscellaneousPropertiesUpdate:
      type: object
      properties:
        manufacturingInformation:
          type: string
    NetTrace:
      required:
        - elements
        - id
      type: object
      properties:
        id:
          type: string
        elements:
          type: array
          items:
            type: string
    DrillCoverage:
      type: object
      properties:
        soldermaskTop:
          type: boolean
        soldermaskBottom:
          type: boolean
    Tuple2:
      required:
        - _1
        - _2
      type: object
      properties:
        _1:
          allOf:
            - $ref: '#/components/schemas/T1'
        _2:
          allOf:
            - $ref: '#/components/schemas/T2'
    UIStatus:
      required:
        - status
      type: object
      properties:
        status:
          type: string
        progress:
          type: integer
          format: int32
        messages:
          type: array
          items:
            type: string
    File:
      required:
        - created
        - detectedTypes
        - fType
        - id
        - lifecycles
        - name
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        subPath:
          type: array
          items:
            type: string
        fType:
          allOf:
            - $ref: '#/components/schemas/FileType'
        detectedTypes:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/FileType'
        created:
          type: string
          format: date
        preview:
          type: string
        lifecycles:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/FileLifecycleStage'
        hash:
          type: string
    SubStackDefinition:
      required:
        - name
      type: object
      properties:
        name:
          type: string
        layers:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/LayerDefinition'
        stackType:
          type: string
        drills:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/DrillSupport'
        offset:
          type: integer
          format: int32
    LayerAPI:
      required:
        - definition
        - metaInfo
      type: object
      properties:
        definition:
          allOf:
            - $ref: '#/components/schemas/LayerDefinition'
        files:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/LayerFile'
        metaInfo:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
    FileLifecycleStageName:
      type: object
    AreaWithUnit:
      required:
        - unit
        - value
      type: object
      properties:
        value:
          type: number
        unit:
          type: string
          enum:
            - SquareMillimeter
            - SquareInch
    PressFitTechnology:
      required:
        - value
      type: object
      properties:
        value:
          type: string
    TemperatureWithUnit:
      required:
        - unit
        - value
      type: object
      properties:
        value:
          type: number
        unit:
          type: string
          enum:
            - Celsius
            - Fahrenheit
    T1:
      type: object
    T2:
      type: object
    LayerDefinition:
      type: object
      properties:
        id:
          type: string
          format: uuid
        layerType:
          type: string
        meta:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        materialRef:
          type: string
        material:
          allOf:
            - $ref: '#/components/schemas/Material'
    DrillSupport:
      required:
        - drillType
        - from
        - to
      type: object
      properties:
        from:
          type: integer
          format: int32
        to:
          type: integer
          format: int32
        col:
          type: integer
          format: int32
        drillType:
          type: string
    Function0:
      type: object
    Map:
      type: object
    Material:
      type: object
      properties:
        team:
          type: string
        id:
          type: string
        name:
          type: string
        meta:
          allOf:
            - $ref: '#/components/schemas/MetaInfo'
        materialType:
          type: string
    FileUpload:
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http
