/api/result:
  get:
    tags: [Result]
    summary: List results
    description: Retrieve patient test results with optional filters by order or patient
    security:
      - bearerAuth: []
    parameters:
      - name: order_id
        in: query
        schema:
          type: integer
        description: Filter by internal order ID
      - name: patient_id
        in: query
        schema:
          type: integer
        description: Filter by internal patient ID (returns cumulative results)
      - name: page
        in: query
        schema:
          type: integer
          default: 1
        description: Page number for pagination
      - name: per_page
        in: query
        schema:
          type: integer
          default: 20
        description: Number of results per page
    responses:
      '200':
        description: List of results
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  example: success
                message:
                  type: string
                data:
                  type: array
                  items:
                    type: object
                    properties:
                      ResultID:
                        type: integer
                      OrderID:
                        type: integer
                      TestSiteID:
                        type: integer
                      TestSiteCode:
                        type: string
                      Result:
                        type: string
                        nullable: true
                      ResultDateTime:
                        type: string
                        format: date-time
                      RefNumID:
                        type: integer
                        nullable: true
                      RefTxtID:
                        type: integer
                        nullable: true
                      CreateDate:
                        type: string
                        format: date-time
                      TestSiteName:
                        type: string
                        nullable: true
                      Unit1:
                        type: string
                        nullable: true
                      Unit2:
                        type: string
                        nullable: true
                      Low:
                        type: number
                        nullable: true
                      High:
                        type: number
                        nullable: true
                      LowSign:
                        type: string
                        nullable: true
                      HighSign:
                        type: string
                        nullable: true
                      RefDisplay:
                        type: string
                        nullable: true

/api/result/{id}:
  get:
    tags: [Result]
    summary: Get result by ID
    description: Retrieve a specific result entry with all related data
    security:
      - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: Result ID
    responses:
      '200':
        description: Result details
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  example: success
                message:
                  type: string
                data:
                  type: object
                  properties:
                    ResultID:
                      type: integer
                    SiteID:
                      type: integer
                    OrderID:
                      type: integer
                    InternalSID:
                      type: integer
                    SID:
                      type: string
                    SampleID:
                      type: string
                    TestSiteID:
                      type: integer
                    TestSiteCode:
                      type: string
                    AspCnt:
                      type: integer
                    Result:
                      type: string
                      nullable: true
                    SampleType:
                      type: string
                      nullable: true
                    ResultDateTime:
                      type: string
                      format: date-time
                    WorkstationID:
                      type: integer
                      nullable: true
                    EquipmentID:
                      type: integer
                      nullable: true
                    RefNumID:
                      type: integer
                      nullable: true
                    RefTxtID:
                      type: integer
                      nullable: true
                    CreateDate:
                      type: string
                      format: date-time
                    TestSiteName:
                      type: string
                      nullable: true
                    Unit1:
                      type: string
                      nullable: true
                    Unit2:
                      type: string
                      nullable: true
                    Low:
                      type: number
                      nullable: true
                    High:
                      type: number
                      nullable: true
                    LowSign:
                      type: string
                      nullable: true
                    HighSign:
                      type: string
                      nullable: true
                    RefDisplay:
                      type: string
                      nullable: true
                    OrderNumber:
                      type: string
                      nullable: true
                    InternalPID:
                      type: integer
      '404':
        description: Result not found
        content:
          application/json:
            schema:
              $ref: '../components/schemas/common.yaml#/ErrorResponse'

  patch:
    tags: [Result]
    summary: Update result
    description: Update a result value with automatic validation against reference ranges. Returns calculated flag (L/H) in response but does not store it.
    security:
      - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: Result ID
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              Result:
                type: string
                description: The result value
              RefNumID:
                type: integer
                description: Reference range ID to validate against
              SampleType:
                type: string
                nullable: true
              WorkstationID:
                type: integer
                nullable: true
              EquipmentID:
                type: integer
                nullable: true
    responses:
      '200':
        description: Result updated successfully
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  example: success
                message:
                  type: string
                data:
                  type: object
                  properties:
                    result:
                      type: object
                    flag:
                      type: string
                      nullable: true
                      enum: [L, H]
                      description: Calculated flag - L for Low, H for High, null for normal
      '400':
        description: Validation failed
        content:
          application/json:
            schema:
              $ref: '../components/schemas/common.yaml#/ErrorResponse'
      '404':
        description: Result not found
        content:
          application/json:
            schema:
              $ref: '../components/schemas/common.yaml#/ErrorResponse'

  delete:
    tags: [Result]
    summary: Delete result
    description: Soft delete a result entry by setting DelDate
    security:
      - bearerAuth: []
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
        description: Result ID
    responses:
      '200':
        description: Result deleted successfully
        content:
          application/json:
            schema:
              $ref: '../components/schemas/common.yaml#/SuccessResponse'
      '404':
        description: Result not found
        content:
          application/json:
            schema:
              $ref: '../components/schemas/common.yaml#/ErrorResponse'
