openapi: 3.0.3
info:
  title: Nucleus eClaims API
  description: White-label API for PhilHealth eClaims 3.0 submission.
  version: 1.0.0
servers:
  - url: https://api.nucleus.io/v1
    description: Production server
paths:
  /status:
    get:
      summary: API Status Check
      security:
        - ApiKeyAuth: []
      responses:
        '200':
          description: API is online
          content:
            application/json:
              schema:
                type: object
                properties:
                  status: { type: string }
                  version: { type: string }
        '401':
          description: Unauthorized
  /claims/submit:
    post:
      summary: Submit a Claim
      security:
        - ApiKeyAuth: []
      parameters:
        - in: header
          name: Idempotency-Key
          schema: { type: string }
          required: false
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClaimSubmission'
      responses:
        '201':
          description: Claim submitted successfully
        '422':
          description: Validation Failed
        '429':
          description: Too Many Requests
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Nucleus-API-Key
  schemas:
    ClaimSubmission:
      type: object
      required:
        - facilityAccreditation
        - patient
        - admissionDate
        - dischargeDate
        - diagnosis
        - amounts
      properties:
        facilityAccreditation: { type: string }
        patient:
          type: object
          properties:
            pin: { type: string }
            firstName: { type: string }
            lastName: { type: string }
            birthDate: { type: string, format: date }
        diagnosis:
          type: object
          properties:
            primary: { type: string }
            secondary: { type: array, items: { type: string } }
        amounts:
          type: object
          properties:
            gross: { type: number }
            philhealth: { type: number }
            patient: { type: number }
