2421 lines
131 KiB
JSON
2421 lines
131 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": {
|
|
"title": "InvestMoz — private existing-business intake",
|
|
"version": "1.2.0",
|
|
"description": "Internal preparation and review only. No publication, certification, legal transfer, NDA, payment or external CRM operation."
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "/api/v1/existing-business"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/listings": {
|
|
"get": {
|
|
"summary": "List own active records, 20 per page",
|
|
"parameters": [
|
|
{
|
|
"name": "page",
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
}
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"records",
|
|
"management",
|
|
"modalities"
|
|
],
|
|
"properties": {
|
|
"records": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Business"
|
|
}
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
},
|
|
"management": {
|
|
"type": "boolean"
|
|
},
|
|
"modalities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"summary": "Create private draft",
|
|
"parameters": [],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Business"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"modality",
|
|
"classification",
|
|
"reason",
|
|
"payload"
|
|
],
|
|
"properties": {
|
|
"modality": {
|
|
"type": "string"
|
|
},
|
|
"classification": {
|
|
"enum": [
|
|
"internal",
|
|
"confidential",
|
|
"restricted"
|
|
]
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 1000
|
|
},
|
|
"payload": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["title"],
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"maxLength": 200,
|
|
"description": "Proposed title"
|
|
},
|
|
"description": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10000,
|
|
"description": "Summary: what is available, sought and key conditions"
|
|
},
|
|
"declared_reason": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Reason and objective"
|
|
},
|
|
"source_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Source reference"
|
|
},
|
|
"valid_until": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Interest deadline (optional)"
|
|
},
|
|
"proponent_type": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"organization",
|
|
"sole_trader",
|
|
"person",
|
|
"public_entity",
|
|
null
|
|
],
|
|
"description": "Who is presenting the opportunity?"
|
|
},
|
|
"proponent_name": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Name"
|
|
},
|
|
"country": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2,
|
|
"description": "Country of origin or incorporation (two-letter ISO code)"
|
|
},
|
|
"tax_identifier": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 50,
|
|
"description": "NUIT or identifier (internal, when applicable)"
|
|
},
|
|
"contact_name": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Contact person name"
|
|
},
|
|
"contact_email": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 254,
|
|
"description": "Email (provide email or phone)"
|
|
},
|
|
"contact_phone": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"description": "Phone (provide phone or email)"
|
|
},
|
|
"contact_preference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"through_portal",
|
|
"approved_business_contact",
|
|
null
|
|
],
|
|
"description": "Contact preference"
|
|
},
|
|
"acting_capacity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"holder",
|
|
"representative",
|
|
null
|
|
],
|
|
"description": "Acting capacity"
|
|
},
|
|
"declared_holder": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Entity or person represented"
|
|
},
|
|
"mandate_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Authorization document reference"
|
|
},
|
|
"mandate_document_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Internal authorization document reference (do not upload here)"
|
|
},
|
|
"mandate_valid_until": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Mandate expiry"
|
|
},
|
|
"disclosure_scope": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Limits of disclosure authorization"
|
|
},
|
|
"legitimacy_declaration": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", "no", null],
|
|
"description": "I declare authority to submit"
|
|
},
|
|
"opportunity_type": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"investment_project",
|
|
"company_sale",
|
|
"asset_sale",
|
|
"business_partnership",
|
|
"financing_request",
|
|
"concession_opportunity",
|
|
"supply_opportunity",
|
|
null
|
|
],
|
|
"description": "Opportunity type"
|
|
},
|
|
"subsector_activity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Subsector and activity (by name)"
|
|
},
|
|
"project_stage": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"idea",
|
|
"study",
|
|
"preparation",
|
|
"implementation",
|
|
"operating",
|
|
"suspended",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Project or business status"
|
|
},
|
|
"project_stage_other": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Specify the status"
|
|
},
|
|
"availability": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"available",
|
|
"from_date",
|
|
"negotiating",
|
|
null
|
|
],
|
|
"description": "Availability"
|
|
},
|
|
"available_from": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Available from"
|
|
},
|
|
"asking_value": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Value"
|
|
},
|
|
"value_status": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"defined",
|
|
"indicative",
|
|
"consultation",
|
|
"unknown",
|
|
null
|
|
],
|
|
"description": "Is the value defined?"
|
|
},
|
|
"value_meaning": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"asking_price",
|
|
"investment_estimate",
|
|
"financing_sought",
|
|
null
|
|
],
|
|
"description": "Meaning of the value"
|
|
},
|
|
"value_nature": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"asking",
|
|
"indicative",
|
|
"appraised",
|
|
null
|
|
],
|
|
"description": "Value basis"
|
|
},
|
|
"currency": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"description": "Currency (three-letter code)"
|
|
},
|
|
"amount_secured": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Secured amount (projects)"
|
|
},
|
|
"investment_total": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Estimated total investment (projects)"
|
|
},
|
|
"amount_sought": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Financing sought"
|
|
},
|
|
"equity_percentage": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 8,
|
|
"description": "Available equity (%)"
|
|
},
|
|
"funds_use": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Use of funds"
|
|
},
|
|
"asset_deal_kind": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"whole_business",
|
|
"participation",
|
|
"assets",
|
|
null
|
|
],
|
|
"description": "Type of sale"
|
|
},
|
|
"partnership_contribution": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"capital",
|
|
"technology",
|
|
"management",
|
|
"equipment",
|
|
"distribution",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Contribution sought"
|
|
},
|
|
"asset_modality": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"sale",
|
|
"lease",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Asset arrangement"
|
|
},
|
|
"concession_entity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 300,
|
|
"description": "Concession authority"
|
|
},
|
|
"concession_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Official reference, procedure and deadline"
|
|
},
|
|
"supply_description": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Good or service, quantity/capacity, destination and timing"
|
|
},
|
|
"conditions": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 4000,
|
|
"description": "Additional conditions"
|
|
},
|
|
"geography_scope": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"specific",
|
|
"multiple",
|
|
"national",
|
|
"digital",
|
|
null
|
|
],
|
|
"description": "Geographic scope"
|
|
},
|
|
"province_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Province or Maputo City"
|
|
},
|
|
"district_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "District"
|
|
},
|
|
"admin_post_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Administrative post"
|
|
},
|
|
"locality_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Locality"
|
|
},
|
|
"location_notes": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Address or reference (internal)"
|
|
},
|
|
"location_unknown": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", "no", null],
|
|
"description": "I do not know the exact location"
|
|
},
|
|
"disclosure_precision": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"exact",
|
|
"approximate",
|
|
"administrative",
|
|
null
|
|
],
|
|
"description": "Disclosure precision"
|
|
},
|
|
"asset_notes": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Declared assets and rights summary"
|
|
},
|
|
"source_provider": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Who supplied the information?"
|
|
},
|
|
"source_date": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Source/information date"
|
|
},
|
|
"official_source_entity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Official source authority (if any)"
|
|
},
|
|
"official_source_document": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Related official document"
|
|
},
|
|
"official_source_url": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Official source link"
|
|
},
|
|
"official_source_period": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Official source period"
|
|
},
|
|
"document_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Document references (not validated files)"
|
|
},
|
|
"confirm_information": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I confirm the information reflects what I know and identify estimates or pending items."
|
|
},
|
|
"confirm_disclosure_authority": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I confirm I am authorized to submit the opportunity and disclose selected content."
|
|
},
|
|
"confirm_no_publication_guarantee": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I understand submission is not publication, official approval or an investment guarantee."
|
|
},
|
|
"wizard_version": {
|
|
"type": ["string", "null"],
|
|
"enum": ["1", null]
|
|
},
|
|
"wizard_step": {
|
|
"type": ["string", "null"],
|
|
"pattern": "^[1-8]$"
|
|
}
|
|
}
|
|
},
|
|
"sector_id": {
|
|
"type": ["integer", "null"],
|
|
"description": "Existing active public.sectors identifier; required on wizard submission."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients."
|
|
}
|
|
},
|
|
"/reviews": {
|
|
"get": {
|
|
"summary": "List submitted records for designated reviewers with MFA; excludes own records",
|
|
"parameters": [],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"records": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Business"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"management": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/listings/{id}": {
|
|
"get": {
|
|
"summary": "Read own record or currently reviewable submission",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"record": {
|
|
"$ref": "#/components/schemas/Business"
|
|
},
|
|
"canEdit": {
|
|
"type": "boolean"
|
|
},
|
|
"owner": {
|
|
"type": "boolean"
|
|
},
|
|
"canReview": {
|
|
"type": "boolean"
|
|
},
|
|
"history": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"version_no": {
|
|
"type": "integer"
|
|
},
|
|
"action": {
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"type": "string"
|
|
},
|
|
"note": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"verifications": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"version_no",
|
|
"check",
|
|
"outcome",
|
|
"evidence_reference",
|
|
"note"
|
|
],
|
|
"properties": {
|
|
"version_no": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"object_id": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
],
|
|
"format": "uuid"
|
|
},
|
|
"check": {
|
|
"enum": [
|
|
"identity",
|
|
"representation",
|
|
"declared_ownership",
|
|
"documentary_ownership",
|
|
"document_received",
|
|
"document_validated",
|
|
"independent_valuation",
|
|
"land_right_documented",
|
|
"license_confirmed",
|
|
"validity",
|
|
"legal_transfer",
|
|
"prior_authorization"
|
|
]
|
|
},
|
|
"outcome": {
|
|
"enum": [
|
|
"confirmed",
|
|
"rejected",
|
|
"inconclusive",
|
|
"revoked"
|
|
]
|
|
},
|
|
"evidence_reference": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 2000
|
|
},
|
|
"note": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 2000
|
|
},
|
|
"valid_until": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
],
|
|
"format": "date",
|
|
"description": "Required for confirmed findings; must be today or later."
|
|
},
|
|
"effective_outcome": {
|
|
"enum": [
|
|
"confirmed",
|
|
"rejected",
|
|
"inconclusive",
|
|
"revoked",
|
|
"stale",
|
|
"expired"
|
|
]
|
|
},
|
|
"content_version": {
|
|
"type": "integer"
|
|
},
|
|
"created_at": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"summary": "Update owned draft or request for information; optimistic version required",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Business"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"modality",
|
|
"classification",
|
|
"reason",
|
|
"payload",
|
|
"version_no"
|
|
],
|
|
"properties": {
|
|
"modality": {
|
|
"type": "string"
|
|
},
|
|
"classification": {
|
|
"enum": [
|
|
"internal",
|
|
"confidential",
|
|
"restricted"
|
|
]
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 1000
|
|
},
|
|
"payload": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["title"],
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"maxLength": 200,
|
|
"description": "Proposed title"
|
|
},
|
|
"description": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10000,
|
|
"description": "Summary: what is available, sought and key conditions"
|
|
},
|
|
"declared_reason": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Reason and objective"
|
|
},
|
|
"source_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Source reference"
|
|
},
|
|
"valid_until": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Interest deadline (optional)"
|
|
},
|
|
"proponent_type": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"organization",
|
|
"sole_trader",
|
|
"person",
|
|
"public_entity",
|
|
null
|
|
],
|
|
"description": "Who is presenting the opportunity?"
|
|
},
|
|
"proponent_name": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Name"
|
|
},
|
|
"country": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2,
|
|
"description": "Country of origin or incorporation (two-letter ISO code)"
|
|
},
|
|
"tax_identifier": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 50,
|
|
"description": "NUIT or identifier (internal, when applicable)"
|
|
},
|
|
"contact_name": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Contact person name"
|
|
},
|
|
"contact_email": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 254,
|
|
"description": "Email (provide email or phone)"
|
|
},
|
|
"contact_phone": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"description": "Phone (provide phone or email)"
|
|
},
|
|
"contact_preference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"through_portal",
|
|
"approved_business_contact",
|
|
null
|
|
],
|
|
"description": "Contact preference"
|
|
},
|
|
"acting_capacity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"holder",
|
|
"representative",
|
|
null
|
|
],
|
|
"description": "Acting capacity"
|
|
},
|
|
"declared_holder": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Entity or person represented"
|
|
},
|
|
"mandate_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Authorization document reference"
|
|
},
|
|
"mandate_document_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Internal authorization document reference (do not upload here)"
|
|
},
|
|
"mandate_valid_until": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Mandate expiry"
|
|
},
|
|
"disclosure_scope": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Limits of disclosure authorization"
|
|
},
|
|
"legitimacy_declaration": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", "no", null],
|
|
"description": "I declare authority to submit"
|
|
},
|
|
"opportunity_type": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"investment_project",
|
|
"company_sale",
|
|
"asset_sale",
|
|
"business_partnership",
|
|
"financing_request",
|
|
"concession_opportunity",
|
|
"supply_opportunity",
|
|
null
|
|
],
|
|
"description": "Opportunity type"
|
|
},
|
|
"subsector_activity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Subsector and activity (by name)"
|
|
},
|
|
"project_stage": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"idea",
|
|
"study",
|
|
"preparation",
|
|
"implementation",
|
|
"operating",
|
|
"suspended",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Project or business status"
|
|
},
|
|
"project_stage_other": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Specify the status"
|
|
},
|
|
"availability": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"available",
|
|
"from_date",
|
|
"negotiating",
|
|
null
|
|
],
|
|
"description": "Availability"
|
|
},
|
|
"available_from": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Available from"
|
|
},
|
|
"asking_value": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Value"
|
|
},
|
|
"value_status": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"defined",
|
|
"indicative",
|
|
"consultation",
|
|
"unknown",
|
|
null
|
|
],
|
|
"description": "Is the value defined?"
|
|
},
|
|
"value_meaning": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"asking_price",
|
|
"investment_estimate",
|
|
"financing_sought",
|
|
null
|
|
],
|
|
"description": "Meaning of the value"
|
|
},
|
|
"value_nature": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"asking",
|
|
"indicative",
|
|
"appraised",
|
|
null
|
|
],
|
|
"description": "Value basis"
|
|
},
|
|
"currency": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"description": "Currency (three-letter code)"
|
|
},
|
|
"amount_secured": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Secured amount (projects)"
|
|
},
|
|
"investment_total": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Estimated total investment (projects)"
|
|
},
|
|
"amount_sought": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Financing sought"
|
|
},
|
|
"equity_percentage": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 8,
|
|
"description": "Available equity (%)"
|
|
},
|
|
"funds_use": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Use of funds"
|
|
},
|
|
"asset_deal_kind": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"whole_business",
|
|
"participation",
|
|
"assets",
|
|
null
|
|
],
|
|
"description": "Type of sale"
|
|
},
|
|
"partnership_contribution": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"capital",
|
|
"technology",
|
|
"management",
|
|
"equipment",
|
|
"distribution",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Contribution sought"
|
|
},
|
|
"asset_modality": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"sale",
|
|
"lease",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Asset arrangement"
|
|
},
|
|
"concession_entity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 300,
|
|
"description": "Concession authority"
|
|
},
|
|
"concession_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Official reference, procedure and deadline"
|
|
},
|
|
"supply_description": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Good or service, quantity/capacity, destination and timing"
|
|
},
|
|
"conditions": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 4000,
|
|
"description": "Additional conditions"
|
|
},
|
|
"geography_scope": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"specific",
|
|
"multiple",
|
|
"national",
|
|
"digital",
|
|
null
|
|
],
|
|
"description": "Geographic scope"
|
|
},
|
|
"province_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Province or Maputo City"
|
|
},
|
|
"district_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "District"
|
|
},
|
|
"admin_post_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Administrative post"
|
|
},
|
|
"locality_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Locality"
|
|
},
|
|
"location_notes": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Address or reference (internal)"
|
|
},
|
|
"location_unknown": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", "no", null],
|
|
"description": "I do not know the exact location"
|
|
},
|
|
"disclosure_precision": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"exact",
|
|
"approximate",
|
|
"administrative",
|
|
null
|
|
],
|
|
"description": "Disclosure precision"
|
|
},
|
|
"asset_notes": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Declared assets and rights summary"
|
|
},
|
|
"source_provider": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Who supplied the information?"
|
|
},
|
|
"source_date": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Source/information date"
|
|
},
|
|
"official_source_entity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Official source authority (if any)"
|
|
},
|
|
"official_source_document": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Related official document"
|
|
},
|
|
"official_source_url": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Official source link"
|
|
},
|
|
"official_source_period": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Official source period"
|
|
},
|
|
"document_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Document references (not validated files)"
|
|
},
|
|
"confirm_information": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I confirm the information reflects what I know and identify estimates or pending items."
|
|
},
|
|
"confirm_disclosure_authority": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I confirm I am authorized to submit the opportunity and disclose selected content."
|
|
},
|
|
"confirm_no_publication_guarantee": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I understand submission is not publication, official approval or an investment guarantee."
|
|
},
|
|
"wizard_version": {
|
|
"type": ["string", "null"],
|
|
"enum": ["1", null]
|
|
},
|
|
"wizard_step": {
|
|
"type": ["string", "null"],
|
|
"pattern": "^[1-8]$"
|
|
}
|
|
}
|
|
},
|
|
"version_no": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"sector_id": {
|
|
"type": ["integer", "null"],
|
|
"description": "Existing active public.sectors identifier; required on wizard submission."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients."
|
|
}
|
|
},
|
|
"/listings/{id}/transitions": {
|
|
"post": {
|
|
"summary": "Submit, begin review, request information or withdraw",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Business"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": ["version_no", "action", "note"],
|
|
"properties": {
|
|
"version_no": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"action": {
|
|
"enum": [
|
|
"submitted",
|
|
"in_review",
|
|
"needs_information",
|
|
"withdrawn"
|
|
]
|
|
},
|
|
"note": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 2000
|
|
},
|
|
"review_consent": {
|
|
"type": "boolean",
|
|
"description": "Must be true for submission. Stored in encrypted review evidence. Does not authorize publication."
|
|
},
|
|
"confirmation_code": {
|
|
"type": ["string", "null"],
|
|
"description": "Exact business code required for wizard_version=1 submission, in addition to internal review consent."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients."
|
|
}
|
|
},
|
|
"/listings/{id}/objects": {
|
|
"post": {
|
|
"summary": "Declare a separate restricted object; increments aggregate version without granting verification",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"version_no": {
|
|
"type": "integer"
|
|
},
|
|
"verification_status": {
|
|
"const": "pending"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"kind",
|
|
"version_no",
|
|
"reason",
|
|
"payload"
|
|
],
|
|
"properties": {
|
|
"kind": {
|
|
"enum": [
|
|
"company",
|
|
"participation",
|
|
"asset",
|
|
"property",
|
|
"unit",
|
|
"improvement",
|
|
"agricultural_investment",
|
|
"land_right",
|
|
"contract",
|
|
"license",
|
|
"authorization",
|
|
"encumbrance",
|
|
"valuation",
|
|
"capital_request"
|
|
]
|
|
},
|
|
"version_no": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 1000
|
|
},
|
|
"payload": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"label",
|
|
"source_reference"
|
|
],
|
|
"properties": {
|
|
"label": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"declared_holder": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"document_reference": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"source_reference": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"competent_entity": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"purpose": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"location_description": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"boundaries_description": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"occupancy": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"condition": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"encumbrances": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"restrictions": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"required_authorizations": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"transfer_condition": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"contract_type": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"valid_from": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"valid_until": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"area": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"area_unit": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"amount": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"currency": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"value_kind": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"participation_percent": {
|
|
"type": ["string", "null"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients."
|
|
}
|
|
},
|
|
"/listings/{id}/objects/{object}": {
|
|
"put": {
|
|
"summary": "Update scoped object with immutable kind; amount requires currency and value kind; area requires unit",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
},
|
|
{
|
|
"name": "object",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"version_no": {
|
|
"type": "integer"
|
|
},
|
|
"verification_status": {
|
|
"const": "pending"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"kind",
|
|
"version_no",
|
|
"reason",
|
|
"payload"
|
|
],
|
|
"properties": {
|
|
"kind": {
|
|
"enum": [
|
|
"company",
|
|
"participation",
|
|
"asset",
|
|
"property",
|
|
"unit",
|
|
"improvement",
|
|
"agricultural_investment",
|
|
"land_right",
|
|
"contract",
|
|
"license",
|
|
"authorization",
|
|
"encumbrance",
|
|
"valuation",
|
|
"capital_request"
|
|
]
|
|
},
|
|
"version_no": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 1000
|
|
},
|
|
"payload": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"label",
|
|
"source_reference"
|
|
],
|
|
"properties": {
|
|
"label": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"declared_holder": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"document_reference": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"source_reference": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"competent_entity": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"purpose": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"location_description": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"boundaries_description": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"occupancy": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"condition": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"encumbrances": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"restrictions": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"required_authorizations": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"transfer_condition": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"contract_type": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"valid_from": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"valid_until": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"area": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"area_unit": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"amount": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"currency": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"value_kind": {
|
|
"type": ["string", "null"]
|
|
},
|
|
"participation_percent": {
|
|
"type": ["string", "null"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients."
|
|
}
|
|
},
|
|
"/listings/{id}/verifications": {
|
|
"post": {
|
|
"summary": "Record independent finding while in_review; immutable encrypted evidence, optimistic version and scoped object. Does not publish or certify the business.",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"security": [
|
|
{
|
|
"session": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private response; Cache-Control private, no-store",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Business"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "Account, ownership or current reviewer/MFA policy rejected"
|
|
},
|
|
"404": {
|
|
"description": "Module disabled or resource unavailable"
|
|
},
|
|
"409": {
|
|
"description": "Stale version or invalid transition"
|
|
},
|
|
"422": {
|
|
"description": "Validation error"
|
|
},
|
|
"429": {
|
|
"description": "Rate limited"
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"required": [
|
|
"version_no",
|
|
"check",
|
|
"outcome",
|
|
"evidence_reference",
|
|
"note"
|
|
],
|
|
"properties": {
|
|
"version_no": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"object_id": {
|
|
"type": ["string", "null"],
|
|
"format": "uuid"
|
|
},
|
|
"check": {
|
|
"enum": [
|
|
"identity",
|
|
"representation",
|
|
"declared_ownership",
|
|
"documentary_ownership",
|
|
"document_received",
|
|
"document_validated",
|
|
"independent_valuation",
|
|
"land_right_documented",
|
|
"license_confirmed",
|
|
"validity",
|
|
"legal_transfer",
|
|
"prior_authorization"
|
|
]
|
|
},
|
|
"outcome": {
|
|
"enum": [
|
|
"confirmed",
|
|
"rejected",
|
|
"inconclusive",
|
|
"revoked"
|
|
]
|
|
},
|
|
"evidence_reference": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 2000
|
|
},
|
|
"note": {
|
|
"type": "string",
|
|
"minLength": 10,
|
|
"maxLength": 2000
|
|
},
|
|
"valid_until": {
|
|
"type": ["string", "null"],
|
|
"format": "date",
|
|
"description": "Required for confirmed findings; must be today or later."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients."
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"securitySchemes": {
|
|
"session": {
|
|
"type": "apiKey",
|
|
"in": "cookie",
|
|
"name": "session_cookie",
|
|
"description": "Actual Laravel cookie name comes from deployment configuration; no bearer token support."
|
|
}
|
|
},
|
|
"schemas": {
|
|
"Business": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"code",
|
|
"modality",
|
|
"status",
|
|
"classification",
|
|
"version_no",
|
|
"payload"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"code": {
|
|
"type": "string"
|
|
},
|
|
"modality": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"enum": [
|
|
"draft",
|
|
"submitted",
|
|
"in_review",
|
|
"needs_information",
|
|
"withdrawn"
|
|
]
|
|
},
|
|
"classification": {
|
|
"enum": ["internal", "confidential", "restricted"]
|
|
},
|
|
"version_no": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"payload": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["title"],
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"maxLength": 200,
|
|
"description": "Proposed title"
|
|
},
|
|
"description": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10000,
|
|
"description": "Summary: what is available, sought and key conditions"
|
|
},
|
|
"declared_reason": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Reason and objective"
|
|
},
|
|
"source_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Source reference"
|
|
},
|
|
"valid_until": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Interest deadline (optional)"
|
|
},
|
|
"proponent_type": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"organization",
|
|
"sole_trader",
|
|
"person",
|
|
"public_entity",
|
|
null
|
|
],
|
|
"description": "Who is presenting the opportunity?"
|
|
},
|
|
"proponent_name": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Name"
|
|
},
|
|
"country": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2,
|
|
"description": "Country of origin or incorporation (two-letter ISO code)"
|
|
},
|
|
"tax_identifier": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 50,
|
|
"description": "NUIT or identifier (internal, when applicable)"
|
|
},
|
|
"contact_name": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Contact person name"
|
|
},
|
|
"contact_email": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 254,
|
|
"description": "Email (provide email or phone)"
|
|
},
|
|
"contact_phone": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"description": "Phone (provide phone or email)"
|
|
},
|
|
"contact_preference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"through_portal",
|
|
"approved_business_contact",
|
|
null
|
|
],
|
|
"description": "Contact preference"
|
|
},
|
|
"acting_capacity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": ["holder", "representative", null],
|
|
"description": "Acting capacity"
|
|
},
|
|
"declared_holder": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Entity or person represented"
|
|
},
|
|
"mandate_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Authorization document reference"
|
|
},
|
|
"mandate_document_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Internal authorization document reference (do not upload here)"
|
|
},
|
|
"mandate_valid_until": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Mandate expiry"
|
|
},
|
|
"disclosure_scope": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Limits of disclosure authorization"
|
|
},
|
|
"legitimacy_declaration": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", "no", null],
|
|
"description": "I declare authority to submit"
|
|
},
|
|
"opportunity_type": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"investment_project",
|
|
"company_sale",
|
|
"asset_sale",
|
|
"business_partnership",
|
|
"financing_request",
|
|
"concession_opportunity",
|
|
"supply_opportunity",
|
|
null
|
|
],
|
|
"description": "Opportunity type"
|
|
},
|
|
"subsector_activity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Subsector and activity (by name)"
|
|
},
|
|
"project_stage": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"idea",
|
|
"study",
|
|
"preparation",
|
|
"implementation",
|
|
"operating",
|
|
"suspended",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Project or business status"
|
|
},
|
|
"project_stage_other": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Specify the status"
|
|
},
|
|
"availability": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 40,
|
|
"enum": [
|
|
"available",
|
|
"from_date",
|
|
"negotiating",
|
|
null
|
|
],
|
|
"description": "Availability"
|
|
},
|
|
"available_from": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Available from"
|
|
},
|
|
"asking_value": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Value"
|
|
},
|
|
"value_status": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"defined",
|
|
"indicative",
|
|
"consultation",
|
|
"unknown",
|
|
null
|
|
],
|
|
"description": "Is the value defined?"
|
|
},
|
|
"value_meaning": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"asking_price",
|
|
"investment_estimate",
|
|
"financing_sought",
|
|
null
|
|
],
|
|
"description": "Meaning of the value"
|
|
},
|
|
"value_nature": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"asking",
|
|
"indicative",
|
|
"appraised",
|
|
null
|
|
],
|
|
"description": "Value basis"
|
|
},
|
|
"currency": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"description": "Currency (three-letter code)"
|
|
},
|
|
"amount_secured": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Secured amount (projects)"
|
|
},
|
|
"investment_total": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Estimated total investment (projects)"
|
|
},
|
|
"amount_sought": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 24,
|
|
"description": "Financing sought"
|
|
},
|
|
"equity_percentage": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 8,
|
|
"description": "Available equity (%)"
|
|
},
|
|
"funds_use": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Use of funds"
|
|
},
|
|
"asset_deal_kind": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"whole_business",
|
|
"participation",
|
|
"assets",
|
|
null
|
|
],
|
|
"description": "Type of sale"
|
|
},
|
|
"partnership_contribution": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"capital",
|
|
"technology",
|
|
"management",
|
|
"equipment",
|
|
"distribution",
|
|
"other",
|
|
null
|
|
],
|
|
"description": "Contribution sought"
|
|
},
|
|
"asset_modality": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": ["sale", "lease", "other", null],
|
|
"description": "Asset arrangement"
|
|
},
|
|
"concession_entity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 300,
|
|
"description": "Concession authority"
|
|
},
|
|
"concession_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Official reference, procedure and deadline"
|
|
},
|
|
"supply_description": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Good or service, quantity/capacity, destination and timing"
|
|
},
|
|
"conditions": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 4000,
|
|
"description": "Additional conditions"
|
|
},
|
|
"geography_scope": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"specific",
|
|
"multiple",
|
|
"national",
|
|
"digital",
|
|
null
|
|
],
|
|
"description": "Geographic scope"
|
|
},
|
|
"province_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Province or Maputo City"
|
|
},
|
|
"district_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "District"
|
|
},
|
|
"admin_post_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Administrative post"
|
|
},
|
|
"locality_id": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 36,
|
|
"description": "Locality"
|
|
},
|
|
"location_notes": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Address or reference (internal)"
|
|
},
|
|
"location_unknown": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", "no", null],
|
|
"description": "I do not know the exact location"
|
|
},
|
|
"disclosure_precision": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 30,
|
|
"enum": [
|
|
"exact",
|
|
"approximate",
|
|
"administrative",
|
|
null
|
|
],
|
|
"description": "Disclosure precision"
|
|
},
|
|
"asset_notes": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Declared assets and rights summary"
|
|
},
|
|
"source_provider": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Who supplied the information?"
|
|
},
|
|
"source_date": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 10,
|
|
"format": "date",
|
|
"description": "Source/information date"
|
|
},
|
|
"official_source_entity": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Official source authority (if any)"
|
|
},
|
|
"official_source_document": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 500,
|
|
"description": "Related official document"
|
|
},
|
|
"official_source_url": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Official source link"
|
|
},
|
|
"official_source_period": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 200,
|
|
"description": "Official source period"
|
|
},
|
|
"document_reference": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 2000,
|
|
"description": "Document references (not validated files)"
|
|
},
|
|
"confirm_information": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I confirm the information reflects what I know and identify estimates or pending items."
|
|
},
|
|
"confirm_disclosure_authority": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I confirm I am authorized to submit the opportunity and disclose selected content."
|
|
},
|
|
"confirm_no_publication_guarantee": {
|
|
"type": ["string", "null"],
|
|
"maxLength": 3,
|
|
"enum": ["yes", null],
|
|
"description": "I understand submission is not publication, official approval or an investment guarantee."
|
|
},
|
|
"wizard_version": {
|
|
"type": ["string", "null"],
|
|
"enum": ["1", null]
|
|
},
|
|
"wizard_step": {
|
|
"type": ["string", "null"],
|
|
"pattern": "^[1-8]$"
|
|
}
|
|
}
|
|
},
|
|
"sector_id": {
|
|
"type": ["integer", "null"],
|
|
"description": "Existing active public.sectors identifier; required on wizard submission."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|