##############################################################################
# OpenAPI 3.0 Specification – Benefits API v4 (Public Endpoints Only)
#
# Domain models sourced from:
#   com.glic.group.api.benefits.domain.internalnew.limra.*
#   com.glic.group.api.benefits.domain.statusapi.*
#
##############################################################################
---
openapi: "3.0.3"

# ---------------------------------------------------------------------------
# INFO
# ---------------------------------------------------------------------------
info:
  title: Benefits API – v4 Endpoints
  description: >
    Employee benefits enrollment, employee search, enrollment-complete
    notification, and transmission status endpoints exposed by the
    Guardian Benefits API at the **/v4** version path.
  contact:
    name: API Support
    email: API_Admin@glic.com
  version: "4.0.0"

# ---------------------------------------------------------------------------
# SERVERS  (update base URLs per environment)
# ---------------------------------------------------------------------------
servers:
  - url: https://api.guardianlife.com
    description: Production
  - url: https://api-uat.guardianlife.com
    description: UAT
  - url: https://api-sit.guardianlife.com
    description: SIT

# ---------------------------------------------------------------------------
# TAGS
# ---------------------------------------------------------------------------
tags:
  - name: Employee Enrollment
    description: Enroll or update employee / dependent benefits.
  - name: Employee Inquiry
    description: Search and retrieve employee details.
  - name: Transmission Status
    description: Retrieve the processing status of a prior enrollment transaction.
  - name: Enrollment Complete
    description: Notification from BenAdmin indicating enrollment is complete.

# ---------------------------------------------------------------------------
# PATHS
# ---------------------------------------------------------------------------
paths:

  # =========================================================================
  # 1. POST  /group/benefits/v4/policies/{group-policy-id}/employees
  #    Source: GroupBenefitsTxnController.processGroupBenefitsTxnV4()
  # =========================================================================
  /group/benefits/v4/policies/{group-policy-id}/employees:
    post:
      tags:
        - Employee Enrollment
      summary: Enroll or update employee / dependent benefits (v4).
      description: >
        Accepts a LIMRA-format Transmission payload and processes employee
        enrollment or update against the Guardian policy identified by the
        group-policy-id path parameter.  Supports both Phoenix and FINEOS
        platform routing.
      operationId: processGroupBenefitsTxnV4
      parameters:
        - $ref: "#/components/parameters/GroupPolicyIdPath"
      requestBody:
        description: >
          Payload containing Employee data including dependents and benefits
          in LIMRA Transmission format.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Transmission"
      responses:
        "200":
          description: >
            Enrollment processed successfully.  Inspect
            `TransmissionStatusCode` for the detailed outcome.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TransmissionResponse"
        "400":
          description: >
            Bad Request – validation failure (e.g. MasterAgreementNumber
            mismatch, unsupported platform indicator).
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TransmissionResponse"
        "401":
          description: Not a valid API key or Unauthorized.
        "404":
          description: >
            Not Found – the group policy could not be located in the group
            search service.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TransmissionResponse"
        "500":
          description: Internal Server Error.

  # =========================================================================
  # 2. POST  /group/benefits/v4/policies/{group-policy-id}/employees/search
  #    Source: BenefitsApi.v4PoliciesMasterAgreementNumberEmployeesSearchPost()
  # =========================================================================
  /group/benefits/v4/policies/{group-policy-id}/employees/search:
    post:
      tags:
        - Employee Inquiry
      summary: Search employees under Guardian's policy (v4).
      description: >
        Search all active demographic and benefit elections for employees
        and dependents for a specific group, bill-group location, or a
        specific employee.
      operationId: v4PoliciesMasterAgreementNumberEmployeesSearchPost
      parameters:
        - $ref: "#/components/parameters/GroupPolicyIdPath"
      requestBody:
        description: Request object containing search criteria.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EmployeeSearchRequest"
      responses:
        "200":
          description: OK – search results returned.
          content:
            application/json:
              schema:
                type: object
                description: >
                  Search results object.  Structure depends on whether a
                  synchronous or asynchronous search was triggered.
        "400":
          description: Bad Request.
        "401":
          description: Not a valid API key or Unauthorized.
        "402":
          description: Request failed.
        "500":
          description: Internal Server Error.

  # =========================================================================
  # 3. GET  /group/benefits/v4/policies/{group-policy-id}/employees/search/results/{reference-id}
  #    Source: BenefitsApi.v4GetEmployeeSearchResults()
  # =========================================================================
  /group/benefits/v4/policies/{group-policy-id}/employees/search/results/{reference-id}:
    get:
      tags:
        - Employee Inquiry
      summary: Retrieve employee search results by reference ID (v4).
      description: >
        Retrieves the results of a prior employee search API call using
        the reference ID that was returned in the initial search response.
      operationId: v4GetEmployeeSearchResults
      parameters:
        - $ref: "#/components/parameters/GroupPolicyIdPath"
        - name: reference-id
          in: path
          required: true
          description: >
            Reference ID that was returned as part of the employee search
            API response.
          schema:
            type: string
      responses:
        "200":
          description: OK – search results returned.
          content:
            application/json:
              schema:
                type: object
                description: Employee search result payload.
        "400":
          description: Bad Request.
        "401":
          description: Not a valid API key or Unauthorized.
        "402":
          description: Request failed.
        "500":
          description: Internal Server Error.

  # =========================================================================
  # 4. GET  /group/benefits/v4/policies/{master-agreement-number}/employees/transactionstatus/{transmissionGuid}
  #    Source: StatusAPI.getTransmissionResponseGetV4()
  #           StatusApiController.getTransmissionResponseGetV4()
  # =========================================================================
  /group/benefits/v4/policies/{master-agreement-number}/employees/transactionstatus/{transmissionGuid}:
    get:
      tags:
        - Transmission Status
      summary: Get enrollment / update transaction status (v4).
      description: >
        Returns the processing status for a prior enrollment or update
        transaction identified by the transmissionGuid.  Supports
        ACE / combo-group lookups across Phoenix and FINEOS platforms.
      operationId: getTransmissionResponseGetV4
      parameters:
        - name: master-agreement-number
          in: path
          required: true
          description: >
            An eight-digit carrier-assigned group number with leading zeros.
          schema:
            type: string
            minLength: 8
            maxLength: 8
            example: "00123456"
        - name: transmissionGuid
          in: path
          required: true
          description: >
            The TransmissionGUID that was submitted with the original
            enrollment request.
          schema:
            type: string
            minLength: 5
            maxLength: 50
            pattern: "^[a-zA-Z0-9\\-_:]{5,50}$"
            example: BenAdminTransactionID
      responses:
        "200":
          description: OK – current processing status / result.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TransmissionResponse"
        "400":
          description: Bad Request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponses"
        "401":
          description: Not a valid API key or Unauthorized.
        "404":
          description: >
            Not Found – no matching transaction found for the given
            transmissionGuid.
        "500":
          description: Internal Server Error.

  # =========================================================================
  # 5. POST  /group/benefits/v4/policies/{master-agreement-number}/employees/enrollment-complete
  #    Source: BenefitsApi.v4PoliciesMasterAgreementNumberEmployeesEnrollmentCompletePost()
  # =========================================================================
  /group/benefits/v4/policies/{master-agreement-number}/employees/enrollment-complete:
    post:
      tags:
        - Enrollment Complete
      summary: Notify enrollment completion (v4).
      description: >
        Notification from BenAdmin indicating that open enrollment is
        complete for the given master agreement number.
      operationId: v4PoliciesMasterAgreementNumberEmployeesEnrollmentCompletePost
      parameters:
        - name: master-agreement-number
          in: path
          required: true
          description: >
            An eight-digit carrier-assigned group number with leading zeros.
          schema:
            type: string
            minLength: 8
            maxLength: 8
            example: "00123456"
      requestBody:
        description: Payload containing information on enrollment completion status.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EnrollmentCompleteRequest"
      responses:
        "200":
          description: Request processed as expected.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EnrollmentCompleteResponse"
        "400":
          description: Bad Request.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponses"
        "401":
          description: Not a valid API key or Unauthorized.
        "404":
          description: >
            Not Found – no API endpoint or no results for the given
            parameters.
        "500":
          description: Internal Server Error.

# ---------------------------------------------------------------------------
# COMPONENTS
# ---------------------------------------------------------------------------
components:

  # -------------------------------------------------------------------------
  # Reusable Parameters
  # -------------------------------------------------------------------------
  parameters:

    GroupPolicyIdPath:
      name: group-policy-id
      in: path
      required: true
      description: >
        An eight-digit carrier-assigned group number with leading zeros.
        All individual policies or certificates at the group level roll up
        to this master group number.
      schema:
        type: string
        minLength: 8
        maxLength: 8
        example: "00123456"

  # -------------------------------------------------------------------------
  # Schemas
  # -------------------------------------------------------------------------
  schemas:

    # -----------------------------------------------------------------------
    # Transmission  (enrollment request payload)
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.Transmission
    # -----------------------------------------------------------------------
    Transmission:
      type: object
      description: >
        An instance of the electronically transmitted information, such as
        the Benefit Administrator, Insurance Carrier, version, etc.
      required:
        - TransmissionGUID
        - SenderName
        - SenderPlatformName
        - ReceiverName
        - CreationDateTime
        - TestProductionCode
        - TransmissionTypeCode
        - SchemaVersionIdentifier
        - Carrier
        - Employer
      properties:
        TransmissionGUID:
          type: string
          description: >
            Global unique identifier created by the originator for this
            instance of the electronic transmission.  This is Guardian's
            primary tracking key for the transmission.
          pattern: "^[a-zA-Z0-9\\-_:]{5,50}$"
          example: BenAdminTransactionID
        SenderName:
          type: string
          description: >
            Name of the company sending electronic benefit records on
            behalf of a Guardian Client.
          example: BenAdminName
        SenderPlatformName:
          type: string
          description: >
            Identifies the Benefit Administrator Partner's system that is
            providing the data for this data set.
          example: ClientName
        ReceiverName:
          type: string
          description: Name of the company receiving electronic benefit records.
          example: Guardian
        CreationDateTime:
          type: string
          description: UTC date and time the transmission was created.
          example: "2019-10-10 10:00:00 UTC"
        TestProductionCode:
          $ref: "#/components/schemas/TestProductionCode"
        TransmissionTypeCode:
          $ref: "#/components/schemas/TransmissionTypeCode"
        SchemaVersionIdentifier:
          type: string
          description: >
            Identifies the version of the standard that is being adhered
            to in this data set.
          example: "1.0.0"
        Carrier:
          type: array
          description: >
            An entity, such as an insurance company, sending or receiving
            the data in this transmission.
          items:
            $ref: "#/components/schemas/Carrier"
        Employer:
          type: array
          description: >
            An entity that employs people or is organised for a joint
            purpose.
          items:
            $ref: "#/components/schemas/Employer"
        Audit:
          $ref: "#/components/schemas/Audit"

    # -----------------------------------------------------------------------
    # TestProductionCode enum
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.TestProduction
    # -----------------------------------------------------------------------
    TestProductionCode:
      type: string
      description: >
        Indicates the elements contained in this data set are production
        or test data.
      enum:
        - Test
        - Production

    # -----------------------------------------------------------------------
    # TransmissionTypeCode enum
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.TransmissionType
    # -----------------------------------------------------------------------
    TransmissionTypeCode:
      type: string
      description: The type of data contained within the data set.
      enum:
        - FullFile
        - ChangesOnly
        - ActivesOnly

    # -----------------------------------------------------------------------
    # Carrier
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.Carrier
    # -----------------------------------------------------------------------
    Carrier:
      type: object
      description: >
        An entity, such as an insurance company, sending or receiving the
        data in this transmission.
      required:
        - CarrierID
        - CarrierName
      properties:
        CarrierID:
          type: string
          description: >
            A unique identifier for each instance of a Carrier established
            within the context of a given transaction.
          example: CarrierID
        CarrierName:
          type: string
          description: >
            The distinctive designation of the Carrier sending or receiving
            the data in this transmission.
          example: Guardian

    # -----------------------------------------------------------------------
    # Employer  (kept at summary level – expand as needed)
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.Employer
    # -----------------------------------------------------------------------
    Employer:
      type: object
      description: >
        An entity that employs people or is organised for a joint purpose.
        Contains carrier master agreement numbers and an array of Employee
        objects with demographics, coverages, dependents, events, etc.
      required:
        - EmployerPartyID
        - EmployerName
        - CarrierMasterAgreementNumber
        - Employee
      properties:
        EmployerPartyID:
          type: string
          description: >
            A unique identifier for each instance of an Employer within
            the context of a given transaction.
        EmployerName:
          type: string
          description: >
            The name of the entity tied to the MasterAgreementNumber.
        FederalEmployerIdentificationNumber:
          type: string
          description: Nine-digit FEIN assigned by the IRS.
        CarrierMasterAgreementNumber:
          type: array
          items:
            $ref: "#/components/schemas/CarrierMasterAgreementNumber"
        Employee:
          type: array
          items:
            type: object
            description: >
              Full employee object including demographics, employment
              information, coverages, dependents, events, beneficiary
              groups, and more.  Refer to the LIMRA schema specification
              for full field definitions.

    # -----------------------------------------------------------------------
    # CarrierMasterAgreementNumber
    # -----------------------------------------------------------------------
    CarrierMasterAgreementNumber:
      type: object
      description: >
        Carrier assigned group number.  All individual policies at the
        group level roll up to this master group number.
      required:
        - CarrierMasterAgreementNumberID
        - MasterAgreementNumber
        - CarrierID
      properties:
        CarrierMasterAgreementNumberID:
          type: string
          description: A unique identifier within the transaction.
        MasterAgreementNumber:
          type: string
          description: >
            An eight-digit carrier-assigned group number with leading zeros.
          example: "00123456"
        CarrierID:
          type: string
          description: >
            A unique identifier for the Carrier within this transaction.

    # -----------------------------------------------------------------------
    # Audit
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.Audit
    # -----------------------------------------------------------------------
    Audit:
      type: object
      description: >
        Auditable information provided to ensure accuracy and consistency
        of the exchanged information.
      required:
        - CarrierQuantity
      properties:
        AuditID:
          type: string
          description: A unique identifier for this audit instance.
        CarrierQuantity:
          type: integer
          format: int32
          description: Count of Carrier records in the transmission.
        EmployerRecordQuantity:
          type: integer
          format: int32
          description: Count of Employer records.
        EmployeeRecordQuantity:
          type: integer
          format: int32
          description: Count of Employee records.
        DependentRecordQuantity:
          type: integer
          format: int32
          description: Count of Dependent records.
        OtherPartyRecordQuantity:
          type: integer
          description: Count of Other Party records.
        BeneficiaryGroupRecordQuantity:
          type: integer
          description: Count of Beneficiary Group records.
        EventRecordQuantity:
          type: integer
          description: Count of Event records.
        CoverageRecordQuantity:
          type: integer
          format: int32
          description: Count of Coverage records.
        CoverageRiderRecordQuantity:
          type: integer
          format: int32
          description: Count of Coverage Rider records.

    # -----------------------------------------------------------------------
    # TransmissionResponse  (enrollment / status response)
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.TransmissionResponse
    # -----------------------------------------------------------------------
    TransmissionResponse:
      type: object
      description: >
        Response object returned by enrollment and transaction-status
        endpoints.
      required:
        - TransmissionGUID
        - TransmissionStatusCode
      properties:
        TransmissionGUID:
          type: string
          description: >
            Global unique identifier created by the originator for this
            instance of the electronic transmission.
          example: BenAdminTransactionID
        TransmissionStatusCode:
          type: string
          description: >
            Result associated with the entity.
              * Success  – Transaction completed successfully
              * Failure  – Unable to process the transaction
              * Partial  – Transaction required manual review
              * In Progress – Transaction is still in progress
          example: Success
          enum:
            - Success
            - Failure
            - Partial
            - In Progress
        CreationDateTime:
          type: string
          description: UTC date and time the response was created.
          example: "2019-10-10 10:00:00 UTC"
        TransactionDetail:
          type: array
          description: >
            Per-employee detail records with individual remarks.
          items:
            $ref: "#/components/schemas/TransactionDetails"
        TransactionRemark:
          type: array
          description: >
            Transmission-level remarks (warnings / errors).
          items:
            $ref: "#/components/schemas/TransactionRemarks"
        Audit:
          $ref: "#/components/schemas/Audit"

    # -----------------------------------------------------------------------
    # TransactionDetails
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.TransactionDetails
    # -----------------------------------------------------------------------
    TransactionDetails:
      type: object
      description: >
        Container for success or error messages associated with processing
        an individual entity (employee / employer).
      properties:
        EmployerID:
          type: string
          description: >
            A unique identifier for each Employer instance within the
            transaction.
          example: EmployerID
        EmployeeID:
          type: string
          description: >
            A unique identifier for each Employee instance within the
            transaction.
          example: EmployeeID
        MemberEffectiveDate:
          type: string
          description: Effective date of member in Guardian System.
          example: "2000-01-10"
        TransactionRemark:
          type: array
          items:
            $ref: "#/components/schemas/TransactionRemarks"

    # -----------------------------------------------------------------------
    # TransactionRemarks
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.TransactionRemarks
    # -----------------------------------------------------------------------
    TransactionRemarks:
      type: object
      description: >
        Individual result detail indicating information about processing
        a specific entity.
      required:
        - EntityReferenceID
      properties:
        EntityCode:
          type: string
          description: Entity enumeration to identify the object in a record.
          example: Employee
        EntityReferenceID:
          type: string
          description: >
            A unique identifier generated by the requestor for each object
            in the record.
          example: Employee
        FieldName:
          type: string
          description: The actual element name in the object.
          example: EmployeeIdentifier
        RemarkStatusCode:
          type: string
          description: "Category of the remark, e.g. 'Warning' or 'Error'."
          example: Warning
        MessageTypeCode:
          $ref: "#/components/schemas/BusinessErrorCategory"
        MessageText:
          type: string
          description: >
            A message indicating what happened or conveying information
            about the remark.
          example: Employee enrolled in Guardian system

    # -----------------------------------------------------------------------
    # BusinessErrorCategory enum
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.BusinessErrorCategory
    # -----------------------------------------------------------------------
    BusinessErrorCategory:
      type: string
      description: Identifies the business error category.
      enum:
        - AuditQuantitiesDontMatch
        - CoverageExceedsGILimit
        - CoverageExceedsMaximum
        - CoverageIneligibleAge
        - CoverageIneligibleInsured
        - DependentsRequired
        - DuplicateSSN
        - DuplicateTransmission
        - EffectiveDateOutOfRange
        - EventExpected
        - IneligibleInsured
        - InsuredTierMismatch
        - InvalidAuditQuantity
        - InvalidBeneficiaryPercentTotal
        - InvalidBenefitAmount
        - InvalidCode
        - InvalidEmploymentContact
        - InvalidEmploymentInformation
        - InvalidEmploymentSchedule
        - InvalidFormData
        - InvalidFormLink
        - InvalidFormSignatureType
        - InvalidInsuredAge
        - InvalidMasterAgreementNumber
        - InvalidReceiver
        - InvalidSender
        - InvalidWorkSchedule
        - InvalidWorkState
        - InvalidCoverage
        - MissingApplicationStatus
        - MissingCoverage
        - MissingDependent
        - MissingEmploymentContact
        - MissingEmploymentInformation
        - MissingEmploymentSchedule
        - MissingForm
        - MissingFormSignature
        - MissingRequiredInsureds
        - MissingSituationalElement
        - MissingUnderwritingDecisionCode
        - MissingWorkSchedule
        - MissingWorkState
        - Other
        - SSNorEmployeeIdentifierRequired
        - SchemaNotSupported
        - UnableToCancelOrTerminateCoverage
        - UnableToProcessBeneficiaryChange
        - UnableToProcessCoverageDecrease
        - UnableToProcessCoverageIncrease
        - UnableToProcessDemographicChange
        - UnableToReinstateCoverage
        - UnknownCoverageOrApplicant

    # -----------------------------------------------------------------------
    # EmployeeSearchRequest  (body for POST /employees/search)
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.Body
    # -----------------------------------------------------------------------
    EmployeeSearchRequest:
      type: object
      description: Search criteria for employee inquiry.
      properties:
        MasterAgreementNumber:
          type: string
          description: >
            Guardian-generated system-assigned number which gives
            uniqueness to the Group / company.  Required field.
          example: "00358028"
        BillGroupIdentification:
          type: string
          description: >
            Guardian-generated system-assigned number for the division
            within the Group / Company (e.g. HR, Corporate, Sales).
            Optional field.
          example: "0001"
        CoverageInfoRequired:
          type: string
          description: >
            Y or N value indicating if Benefit Plan and Benefit Coverages
            are required for each employee.  Optional; defaults to N.
          example: "Y"
        DependentsInfoRequired:
          type: string
          description: >
            Y or N value indicating if dependent information is required.
            Optional.
          example: "Y"
        AsOfDate:
          type: string
          description: >
            Date at which Employee Information is requested.
            MM/DD/YYYY format.  If blank, defaults to current date.
          example: "01/02/2019"
        PageSize:
          type: integer
          description: Maximum number of members per page.
          example: 20
        NextPageKey:
          type: string
          description: >
            Next Page reference.  Send in request to fetch the next page
            of results.
        EmployeesIdentification:
          type: array
          description: >
            Populate this array with specific employee(s) for whom
            enrollment status is desired.
          items:
            $ref: "#/components/schemas/EmployeesIdentification"
        EmploymentStatus:
          type: string
          description: >
            Code representing employment status filter:
              * ACTIVE_ONLY – returns active employees only
              * TERMINATED_ONLY – returns terminated employees only
              * CONTINUATION_ONLY – returns employees on continuation only
              * ALL – returns all employees
          enum:
            - ACTIVE_ONLY
            - TERMINATED_ONLY
            - CONTINUATION_ONLY
            - ALL

    # -----------------------------------------------------------------------
    # EmployeesIdentification
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.EmployeesIdentification
    # -----------------------------------------------------------------------
    EmployeesIdentification:
      type: object
      description: Identification criteria for a specific employee.
      properties:
        IdentificationNumberText:
          type: string
          description: Identification number based on the identification type.
          example: "125159520"
        IdentificationTypeCode:
          type: string
          description: >
            Code representing identification type:
              * SSN – Employee SSN or Member ID (9 digit)
              * MEMBER_ID – Member ID or Employee SSN
              * Employer_Member_ID – Plan holder employee ID (5–15 chars)
              * Tax_Identification – Employee SSN (9 digit)
              * PMI – PMI identifier
              * FIRST_NAME – Employee first name
              * LAST_NAME – Employee last name
              * DATE_OF_BIRTH – Member date of birth
              * DEPENDENT_FIRST_NAME – Dependent first name
              * DEPENDENT_LAST_NAME – Dependent last name
              * DEPENDENT_DATE_OF_BIRTH – Dependent date of birth
          enum:
            - SSN
            - MEMBER_ID
            - Employer_Member_ID
            - Tax_Identification
            - PMI
            - FIRST_NAME
            - LAST_NAME
            - DATE_OF_BIRTH
            - DEPENDENT_FIRST_NAME
            - DEPENDENT_LAST_NAME
            - DEPENDENT_DATE_OF_BIRTH
          example: Employer_Member_ID

    # -----------------------------------------------------------------------
    # EnrollmentCompleteRequest
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.EnrollmentCompleteRequest
    # -----------------------------------------------------------------------
    EnrollmentCompleteRequest:
      type: object
      description: Request parameters to submit enrollment complete notification.
      required:
        - TransmissionGUID
        - CompletedDate
      properties:
        TransmissionGUID:
          type: string
          description: >
            Unique identifier created by the originator for this instance
            of the electronic transmission.
          example: BenAdminUnqiueTransactionID
        CompletedDate:
          type: string
          description: The date on which enrollment is completed.
          example: "2000-01-10"

    # -----------------------------------------------------------------------
    # EnrollmentCompleteResponse
    # Source: com.glic.group.api.benefits.domain.internalnew.limra.EnrollmentCompleteResponse
    # -----------------------------------------------------------------------
    EnrollmentCompleteResponse:
      type: object
      description: Response of enrollment complete request.
      required:
        - TransmissionGUID
        - Status
      properties:
        TransmissionGUID:
          type: string
          description: >
            Unique identifier created by the originator for this instance
            of the electronic transmission.
          example: BenAdminUnqiueTransactionID
        Status:
          type: string
          description: Status of request.
          example: Success

    # -----------------------------------------------------------------------
    # ErrorResponses / Error  (used by status & enrollment-complete 400s)
    # Source: com.glic.group.api.benefits.domain.statusapi.ErrorResponses / Error
    # -----------------------------------------------------------------------
    ErrorResponses:
      type: object
      description: Wrapper for one or more error details.
      properties:
        errors:
          type: array
          items:
            $ref: "#/components/schemas/Error"

    Error:
      type: object
      description: Individual error detail.
      required:
        - Code
        - Message
      properties:
        Code:
          type: string
          description: Code associated with the error.
          example: "101"
        FieldName:
          type: string
          description: Element that caused the error.
          example: EmployeeID
        Value:
          type: string
          description: Data received in the message.
          example: 45786ERED
        Message:
          type: string
          description: Human-readable error message.
          example: Please enter numbers only.

  # -------------------------------------------------------------------------
  # Security Schemes  (placeholder – update per actual auth mechanism)
  # -------------------------------------------------------------------------
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Benefits API leverages Guardian's Authorization server to provide
        secure access using the JWT client credentials grant.

# ---------------------------------------------------------------------------
# Global Security  (applied to all endpoints)
# ---------------------------------------------------------------------------
security:
  - bearerAuth: []
