
=== SCHEMA: Activity ===
Required: []
  - id: integer,string (format: int64)
  - projectId: null,integer,string (format: int64)
  - milestoneId: null,integer,string (format: int64)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - approvedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - category: null,string (format: none)
  - status: #/components/schemas/ApprovalStatus (format: none)
  - amount: number,string (format: double)
  - title: null,string (format: none)
  - description: null,string (format: none)
  - performedAt: null,string (format: date-time)

=== SCHEMA: ActivityStatus ===
Other: { type: 'integer' }

=== SCHEMA: ApprovalStatus ===
Other: { type: 'integer' }

=== SCHEMA: Award ===
Required: []
  - id: integer,string (format: int64)
  - organisationId: integer,string (format: int64)
  - programmeId: integer,string (format: int64)
  - projectId: null,integer,string (format: int64)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - approvedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - status: #/components/schemas/ApprovalStatus (format: none)
  - amount: number,string (format: double)

=== SCHEMA: Budget ===
Required: []
  - id: integer,string (format: int64)
  - projectId: integer,string (format: int64)
  - createdBy: string (format: uuid)
  - approvedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - name: null,string (format: none)
  - amount: number,string (format: double)

=== SCHEMA: Contract ===
Required: []
  - id: integer,string (format: int64)
  - awardId: integer,string (format: int64)
  - externalSignatureId: null,string (format: none)
  - signedDocumentUrl: null,string (format: none)
  - effectiveAt: null,string (format: date-time)
  - expiresAt: null,string (format: date-time)
  - totalValue: number,string (format: double)
  - status: #/components/schemas/ContractStatus (format: none)
  - createdBy: string (format: uuid)
  - createdAt: string (format: date-time)

=== SCHEMA: ContractStatus ===
Other: { type: 'integer' }

=== SCHEMA: CreateActivityRequest ===
Required: [
  'projectId',
  'milestoneId',
  'category',
  'amount',
  'title',
  'description',
  'performedAt'
]
  - projectId: integer,string (format: int64)
  - milestoneId: null,integer,string (format: int64)
  - category: string (format: none)
  - amount: number,string (format: double)
  - title: string (format: none)
  - description: string (format: none)
  - performedAt: null,string (format: date-time)

=== SCHEMA: CreateAwardRequest ===
Required: [ 'organisationId', 'programmeId', 'amount' ]
  - organisationId: integer,string (format: int64)
  - programmeId: integer,string (format: int64)
  - amount: number,string (format: double)

=== SCHEMA: CreateBudgetRequest ===
Required: [ 'projectId', 'name', 'amount' ]
  - projectId: integer,string (format: int64)
  - name: string (format: none)
  - amount: number,string (format: double)

=== SCHEMA: CreateContractRequest ===
Required: [ 'awardId', 'totalValue', 'effectiveAt', 'expiresAt' ]
  - awardId: integer,string (format: int64)
  - totalValue: number,string (format: double)
  - effectiveAt: string (format: date-time)
  - expiresAt: string (format: date-time)

=== SCHEMA: CreateDisbursementRequest ===
Required: [ 'projectId', 'milestoneId', 'amount' ]
  - projectId: integer,string (format: int64)
  - milestoneId: null,integer,string (format: int64)
  - amount: number,string (format: double)

=== SCHEMA: CreateIndicatorRequest ===
Required: [
  'projectId',
  'name',
  'unitOfMeasure',
  'baselineAmount',
  'targetAmount'
]
  - projectId: integer,string (format: int64)
  - name: string (format: none)
  - unitOfMeasure: #/components/schemas/UnitOfMeasure (format: none)
  - baselineAmount: number,string (format: double)
  - targetAmount: number,string (format: double)

=== SCHEMA: CreateMilestoneRequest ===
Required: [ 'projectId', 'dueAt', 'name', 'priority' ]
  - projectId: integer,string (format: int64)
  - dueAt: string (format: date-time)
  - name: string (format: none)
  - priority: #/components/schemas/Priority (format: none)

=== SCHEMA: CreateOrganisationRequest ===
Required: [ 'name', 'registrationNo', 'email' ]
  - name: string (format: none)
  - registrationNo: string (format: none)
  - email: string (format: none)
  - type: #/components/schemas/OrganisationType (format: none)

=== SCHEMA: CreatePortfolioRequest ===
Required: [ 'name', 'description', 'organisationId', 'ownerId' ]
  - name: string (format: none)
  - description: string (format: none)
  - organisationId: integer,string (format: int64)
  - ownerId: string (format: uuid)

=== SCHEMA: CreateProgrammeRequest ===
Required: [ 'portfolioId', 'name', 'ownerId' ]
  - portfolioId: integer,string (format: int64)
  - name: string (format: none)
  - ownerId: string (format: uuid)

=== SCHEMA: CreateProjectRequest ===
Required: [ 'programmeId', 'name', 'description', 'sector', 'projectType' ]
  - programmeId: integer,string (format: int64)
  - name: string (format: none)
  - description: string (format: none)
  - sector: #/components/schemas/IndustrySector (format: none)
  - projectType: #/components/schemas/ProjectType (format: none)

=== SCHEMA: CreateRiskRequest ===
Required: [ 'projectId', 'likelihood', 'impact', 'name', 'description' ]
  - projectId: integer,string (format: int64)
  - likelihood: #/components/schemas/RiskLikelihood (format: none)
  - impact: #/components/schemas/RiskImpact (format: none)
  - name: string (format: none)
  - description: string (format: none)

=== SCHEMA: Dashboard ===
Required: [
  'portfolioValue',
  'activeAwards',
  'disbursed',
  'onTrackPercentage',
  'atRiskCount',
  'beneficiariesReached'
]
  - portfolioValue: number,string (format: double)
  - activeAwards: integer,string (format: int32)
  - disbursed: number,string (format: double)
  - onTrackPercentage: number,string (format: double)
  - atRiskCount: integer,string (format: int32)
  - beneficiariesReached: integer,string (format: int32)

=== SCHEMA: Disbursement ===
Required: []
  - id: integer,string (format: int64)
  - projectId: integer,string (format: int64)
  - milestoneId: null,integer,string (format: int64)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - amount: number,string (format: double)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: Evidence ===
Required: []
  - id: integer,string (format: int64)
  - projectId: integer,string (format: int64)
  - milestoneId: integer,string (format: int64)
  - indicatorId: integer,string (format: int64)
  - activityId: integer,string (format: int64)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - version: integer,string (format: int32)
  - type: #/components/schemas/EvidenceType (format: none)
  - documentUrl: null,string (format: none)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: EvidenceType ===
Other: { type: 'integer' }

=== SCHEMA: ExecuteContractRequest ===
Required: [ 'contractId', 'externalSignatureId', 'signedDocumentUrl' ]
  - contractId: integer,string (format: int64)
  - externalSignatureId: string (format: none)
  - signedDocumentUrl: string (format: none)

=== SCHEMA: Indicator ===
Required: []
  - id: integer,string (format: int64)
  - projectId: integer,string (format: int64)
  - createdBy: string (format: uuid)
  - createdAt: string (format: date-time)
  - name: null,string (format: none)
  - unitOfMeasure: any (format: none)
  - baselineAmount: number,string (format: double)
  - targetAmount: number,string (format: double)
  - actualAmount: number,string (format: double)

=== SCHEMA: IndustrySector ===
Other: { type: 'integer' }

=== SCHEMA: Instrument ===
Required: []
  - id: integer,string (format: int64)
  - programmeId: integer,string (format: int64)
  - code: null,string (format: none)
  - name: null,string (format: none)
  - description: null,string (format: none)
  - status: #/components/schemas/ActivityStatus (format: none)
  - createdBy: string (format: uuid)
  - createdAt: string (format: date-time)

=== SCHEMA: Invite ===
Required: []
  - id: integer,string (format: int64)
  - organisationId: integer,string (format: int64)
  - invitedOrganisationId: integer,string (format: int64)
  - awardId: integer,string (format: int64)
  - contractId: integer,string (format: int64)
  - recipient: string (format: uuid)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)

=== SCHEMA: InviteRequest ===
Required: [
  'organisationId',
  'invitedOrganisationId',
  'awardId',
  'contractId',
  'recipient',
  'message',
  'platform'
]
  - organisationId: integer,string (format: int64)
  - invitedOrganisationId: integer,string (format: int64)
  - awardId: integer,string (format: int64)
  - contractId: integer,string (format: int64)
  - recipient: string (format: uuid)
  - message: string (format: none)
  - platform: #/components/schemas/NotificationPlatform (format: none)

=== SCHEMA: Milestone ===
Required: []
  - id: integer,string (format: int64)
  - projectId: integer,string (format: int64)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - dueAt: string (format: date-time)
  - name: null,string (format: none)
  - status: #/components/schemas/ApprovalStatus (format: none)
  - priority: #/components/schemas/Priority (format: none)

=== SCHEMA: NotificationPlatform ===
Other: { type: 'integer' }

=== SCHEMA: Organisation ===
Required: []
  - id: integer,string (format: int64)
  - createdBy: string (format: uuid)
  - createdAt: string (format: date-time)
  - registrationNo: null,string (format: none)
  - name: null,string (format: none)
  - email: null,string (format: none)
  - type: #/components/schemas/OrganisationType (format: none)
  - status: #/components/schemas/ActivityStatus (format: none)

=== SCHEMA: OrganisationType ===
Other: { type: 'integer', default: 5 }

=== SCHEMA: Portfolio ===
Required: []
  - id: integer,string (format: int64)
  - organisationId: integer,string (format: int64)
  - ownedBy: string (format: uuid)
  - createdBy: string (format: uuid)
  - createdAt: string (format: date-time)
  - name: null,string (format: none)
  - description: null,string (format: none)

=== SCHEMA: Priority ===
Other: { type: 'integer' }

=== SCHEMA: ProblemDetails ===
Required: []
  - type: null,string (format: none)
  - title: null,string (format: none)
  - status: null,integer,string (format: int32)
  - detail: null,string (format: none)
  - instance: null,string (format: none)

=== SCHEMA: Programme ===
Required: []
  - id: integer,string (format: int64)
  - portfolioId: integer,string (format: int64)
  - ownedBy: string (format: uuid)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - name: null,string (format: none)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: Project ===
Required: []
  - id: integer,string (format: int64)
  - programmeId: integer,string (format: int64)
  - createdBy: string (format: uuid)
  - updatedBy: null,string (format: uuid)
  - createdAt: string (format: date-time)
  - updatedAt: null,string (format: date-time)
  - startedAt: null,string (format: date-time)
  - endedAt: null,string (format: date-time)
  - sector: #/components/schemas/IndustrySector (format: none)
  - projectType: #/components/schemas/ProjectType (format: none)
  - name: null,string (format: none)
  - description: null,string (format: none)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: ProjectType ===
Other: { type: 'integer' }

=== SCHEMA: Risk ===
Required: []
  - id: integer,string (format: int64)
  - projectId: integer,string (format: int64)
  - createdBy: string (format: uuid)
  - createdAt: string (format: date-time)
  - likelihood: #/components/schemas/RiskLikelihood (format: none)
  - impact: #/components/schemas/RiskImpact (format: none)
  - name: null,string (format: none)
  - description: null,string (format: none)

=== SCHEMA: RiskImpact ===
Other: { type: 'integer' }

=== SCHEMA: RiskLikelihood ===
Other: { type: 'integer' }

=== SCHEMA: UnitOfMeasure ===
Other: { type: 'integer' }

=== SCHEMA: UpdateContractRequest ===
Required: [ 'contractId', 'status' ]
  - contractId: integer,string (format: int64)
  - status: #/components/schemas/ContractStatus (format: none)

=== SCHEMA: UpdateDisbursementRequest ===
Required: [ 'disbursementId', 'milestoneId', 'amount' ]
  - disbursementId: integer,string (format: int64)
  - milestoneId: null,integer,string (format: int64)
  - amount: number,string (format: double)

=== SCHEMA: UpdateEvidenceRequest ===
Required: [ 'evidenceId', 'version', 'evidenceType', 'status' ]
  - evidenceId: integer,string (format: int64)
  - version: integer,string (format: int32)
  - evidenceType: #/components/schemas/EvidenceType (format: none)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: UpdateMilestoneRequest ===
Required: [ 'milestoneId', 'dueAt', 'name', 'priority', 'status' ]
  - milestoneId: integer,string (format: int64)
  - dueAt: string (format: date-time)
  - name: string (format: none)
  - priority: #/components/schemas/Priority (format: none)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: UpdateOrganisationRequest ===
Required: [ 'organisationId', 'name', 'registrationNo', 'email', 'type' ]
  - organisationId: integer,string (format: int64)
  - name: string (format: none)
  - registrationNo: string (format: none)
  - email: string (format: none)
  - type: #/components/schemas/OrganisationType (format: none)

=== SCHEMA: UpdatePortfolioRequest ===
Required: [ 'portfolioId', 'name', 'description', 'ownerId' ]
  - portfolioId: integer,string (format: int64)
  - name: string (format: none)
  - description: string (format: none)
  - ownerId: string (format: uuid)

=== SCHEMA: UpdateProgrammeRequest ===
Required: [ 'programmeId', 'name', 'ownerId', 'status' ]
  - programmeId: integer,string (format: int64)
  - name: string (format: none)
  - ownerId: string (format: uuid)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: UpdateProjectRequest ===
Required: [
  'projectId',
  'name',
  'description',
  'startedAt',
  'endedAt',
  'sector',
  'projectType'
]
  - projectId: integer,string (format: int64)
  - name: string (format: none)
  - description: string (format: none)
  - startedAt: null,string (format: date-time)
  - endedAt: null,string (format: date-time)
  - sector: #/components/schemas/IndustrySector (format: none)
  - projectType: #/components/schemas/ProjectType (format: none)

=== SCHEMA: UpdateProjectStatusRequest ===
Required: [ 'projectId', 'status' ]
  - projectId: integer,string (format: int64)
  - status: #/components/schemas/ApprovalStatus (format: none)

=== SCHEMA: UpdateRiskRequest ===
Required: [ 'riskId', 'likelihood', 'impact', 'name', 'description' ]
  - riskId: integer,string (format: int64)
  - likelihood: #/components/schemas/RiskLikelihood (format: none)
  - impact: #/components/schemas/RiskImpact (format: none)
  - name: string (format: none)
  - description: string (format: none)

=== SCHEMA: User ===
Required: []
  - id: string (format: uuid)
  - lastLoginAt: null,string (format: date-time)
  - email: null,string (format: none)
  - status: #/components/schemas/ActivityStatus (format: none)

=== SCHEMA: UserFilterRequest ===
Required: []
  - status: any (format: none)
  - email: null,string (format: none)
  - sortBy: null,string (format: none)
  - sortDescending: boolean (format: none)
