API Specifications

Complete REST API documentation for the ERP Logistics Equipment Management Module. All endpoints are integrated with the main ERP system's authentication and authorization.

Base Configuration

Base URL: https://erp.gets-company.com/api/v1/logistics
Authentication: ERP's Existing Authentication System (inherited)
Authorization: ERP's Role-Based Access Control (RBAC)
Content-Type: application/json
Date Format: ISO 8601 (yyyy-MM-dd'T'HH:mm:ss.SSSZ)
Framework: Spring Boot 3.x with Spring Data JPA

API Endpoints

Equipment Management

GET /equipment List all equipment

Description: Retrieve a list of all equipment with optional filtering

Query Parameters:

// Optional query parameters
{
  page: 1,                    // Page number (default: 1)
  limit: 20,                  // Items per page (default: 20, max: 100)
  status: "active",           // Filter by status: active, maintenance, idle, out_of_service
  ownership: "rented",        // Filter by ownership: owned, rented
  project_id: "PROJ-001",     // Filter by assigned project
  subcontractor_id: "SUB-001", // Filter by subcontractor
  equipment_type: "Excavator", // Filter by equipment type
  country: "Libya",           // Filter by country: Libya, Tunisia, Iraq
  search: "CAT 320",          // Search in name, model, serial number
  sort: "name",               // Sort field: name, type, status, daily_rate
  order: "asc"                // Sort order: asc, desc
}

Response Body:

{
  "success": true,
  "data": [
    {
      "id": "EQ-001",
      "name": "CAT 320 Excavator",
      "type": "Excavator",
      "model": "CAT 320D",
      "serialNumber": "CAT320D001",
      "ownership": "rented",
      "status": "active",
      "dailyRate": 1200.00,
      "currency": "USD",
      "projectId": "PROJ-001",
      "projectName": "Tripoli Infrastructure Project",
      "subcontractorId": "SUB-001",
      "subcontractorName": "Al-Majd Equipment Rental",
      "location": "Tripoli, Libya",
      "licenseNumber": "LIB-EX-001",
      "plateNumber": "TRP-001",
      "licenseExpiryDate": "2025-12-31",
      "certificateExpiryDate": "2025-10-15",
      "insuranceExpiryDate": "2025-09-30",
      "lastMaintenanceDate": "2025-05-15",
      "nextMaintenanceDate": "2025-08-15",
      "rentalStartDate": "2025-01-01",
      "rentalEndDate": "2025-12-31",
      "notes": "Recently serviced, excellent condition",
      "createdAt": "2025-01-01T08:00:00Z",
      "updatedAt": "2025-06-20T14:30:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 45,
    "totalPages": 3,
    "hasNext": true,
    "hasPrev": false
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
GET /equipment/{id} Get equipment by ID

Description: Retrieve detailed information about a specific equipment

Response Body:

{
  "success": true,
  "data": {
    "id": "EQ-001",
    "name": "CAT 320 Excavator",
    "type": "Excavator",
    "model": "CAT 320D",
    "serialNumber": "CAT320D001",
    "ownership": "rented",
    "status": "active",
    "dailyRate": 1200.00,
    "currency": "USD",
    "projectId": "PROJ-001",
    "projectName": "Tripoli Infrastructure Project",
    "subcontractorId": "SUB-001",
    "subcontractorName": "Al-Majd Equipment Rental",
    "location": "Tripoli, Libya",
    "licenseNumber": "LIB-EX-001",
    "plateNumber": "TRP-001",
    "licenseExpiryDate": "2025-12-31",
    "certificateExpiryDate": "2025-10-15",
    "insuranceExpiryDate": "2025-09-30",
    "insurancePolicy": "INS-001-2025",
    "lastMaintenanceDate": "2025-05-15",
    "nextMaintenanceDate": "2025-08-15",
    "maintenanceInterval": 90,
    "rentalStartDate": "2025-01-01",
    "rentalEndDate": "2025-12-31",
    "specifications": {
      "operatingWeight": "22.5 tons",
      "bucketCapacity": "1.2 cubic meters",
      "enginePower": "110 kW",
      "fuelCapacity": "400 liters"
    },
    "workStatusRates": [
      { "status": "W", "rate": 100, "description": "Working" },
      { "status": "S", "rate": 75, "description": "Standby" },
      { "status": "NW", "rate": 0, "description": "Not Working" },
      { "status": "TG", "rate": 50, "description": "Travel Loaded" },
      { "status": "TB", "rate": 30, "description": "Travel Empty" }
    ],
    "documents": [
      {
        "id": "DOC-001",
        "type": "license",
        "fileName": "equipment_license.pdf",
        "uploadDate": "2025-01-01",
        "expiryDate": "2025-12-31"
      }
    ],
    "notes": "Recently serviced, excellent condition",
    "createdAt": "2025-01-01T08:00:00Z",
    "updatedAt": "2025-06-20T14:30:00Z"
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
POST /equipment Create new equipment

Description: Create a new equipment record

Request Body:

{
  "name": "CAT 320 Excavator",
  "type": "Excavator",
  "model": "CAT 320D",
  "serialNumber": "CAT320D002",
  "ownership": "rented",
  "status": "idle",
  "dailyRate": 1200.00,
  "currency": "USD",
  "subcontractorId": "SUB-001",
  "rentalStartDate": "2025-07-01",
  "rentalEndDate": "2025-12-31",
  "location": "Warehouse - Tripoli",
  "licenseNumber": "LIB-EX-002",
  "plateNumber": "TRP-002",
  "licenseExpiryDate": "2025-12-31",
  "certificateExpiryDate": "2025-11-30",
  "insuranceExpiryDate": "2025-10-31",
  "insurancePolicy": "INS-002-2025",
  "specifications": {
    "operatingWeight": "22.5 tons",
    "bucketCapacity": "1.2 cubic meters",
    "enginePower": "110 kW",
    "fuelCapacity": "400 liters"
  },
  "workStatusRates": [
    { "status": "W", "rate": 100 },
    { "status": "S", "rate": 75 },
    { "status": "NW", "rate": 0 },
    { "status": "TG", "rate": 50 },
    { "status": "TB", "rate": 30 }
  ],
  "notes": "New equipment from Al-Majd, ready for deployment"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "EQ-002",
    "name": "CAT 320 Excavator",
    "type": "Excavator",
    "model": "CAT 320D",
    "serialNumber": "CAT320D002",
    "ownership": "rented",
    "status": "idle",
    "dailyRate": 1200.00,
    "currency": "USD",
    "subcontractorId": "SUB-001",
    "subcontractorName": "Al-Majd Equipment Rental",
    "rentalStartDate": "2025-07-01",
    "rentalEndDate": "2025-12-31",
    "location": "Warehouse - Tripoli",
    "licenseNumber": "LIB-EX-002",
    "plateNumber": "TRP-002",
    "licenseExpiryDate": "2025-12-31",
    "certificateExpiryDate": "2025-11-30",
    "insuranceExpiryDate": "2025-10-31",
    "workStatusRates": [
      { "status": "W", "rate": 100 },
      { "status": "S", "rate": 75 },
      { "status": "NW", "rate": 0 },
      { "status": "TG", "rate": 50 },
      { "status": "TB", "rate": 30 }
    ],
    "createdAt": "2025-06-23T10:30:00Z",
    "updatedAt": "2025-06-23T10:30:00Z"
  },
  "message": "Equipment created successfully",
  "timestamp": "2025-06-23T10:30:00Z"
}
PUT /equipment/{id} Update equipment

Description: Update an existing equipment record

Request Body:

{
  "status": "active",
  "projectId": "PROJ-002",
  "location": "Benghazi Construction Site",
  "dailyRate": 1250.00,
  "notes": "Deployed to Benghazi project, rate increased due to remote location"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "EQ-002",
    "status": "active",
    "projectId": "PROJ-002",
    "projectName": "Benghazi Port Development",
    "location": "Benghazi Construction Site",
    "dailyRate": 1250.00,
    "updatedAt": "2025-06-23T10:35:00Z"
  },
  "message": "Equipment updated successfully",
  "timestamp": "2025-06-23T10:35:00Z"
}

Equipment Requests

GET /equipment-requests List all requests

Description: Retrieve all equipment requests with filtering options

Query Parameters:

// Optional query parameters
{
  page: 1,
  limit: 20,
  status: "pending_pl",           // pending_pl, pending_pmo, pending_operations, pending_bod, approved, rejected
  project_id: "PROJ-001",
  submitted_by: "john.doe",
  date_from: "2025-06-01",
  date_to: "2025-06-30",
  equipment_type: "Excavator",
  urgency: "high"                 // low, medium, high
}

Response Body:

{
  "success": true,
  "data": [
    {
      "id": "REQ-001",
      "projectId": "PROJ-001",
      "projectName": "Tripoli Infrastructure Project",
      "equipmentType": "Excavator",
      "model": "CAT 320D",
      "quantity": 1,
      "constructionManagerName": "Ahmed Al-Mansouri",
      "requestorName": "John Doe",
      "requestorRole": "Project Manager",
      "startDate": "2025-07-01",
      "finishDate": "2025-09-30",
      "numberOfDays": 92,
      "urgency": "high",
      "businessJustification": "Critical for foundation excavation phase",
      "estimatedCost": 110400.00,
      "currency": "USD",
      "status": "pending_pmo",
      "submittedBy": "john.doe",
      "submittedDate": "2025-06-20",
      "approvals": [
        {
          "approverRole": "PL",
          "approverName": "Sarah Johnson",
          "status": "approved",
          "approvalDate": "2025-06-21T09:00:00Z",
          "comments": "Approved - critical for project timeline"
        },
        {
          "approverRole": "PMO",
          "status": "pending",
          "comments": null
        }
      ],
      "createdAt": "2025-06-20T14:30:00Z",
      "updatedAt": "2025-06-21T09:15:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 15,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
GET /equipment-requests/{id} Get request by ID
POST /equipment-requests Create new request

Description: Create a new equipment request

Request Body:

{
  "projectId": "PROJ-001",
  "equipmentType": "Excavator",
  "model": "CAT 320D",
  "quantity": 1,
  "constructionManagerName": "Ahmed Al-Mansouri",
  "requestorName": "John Doe",
  "requestorRole": "Project Manager",
  "contactNumber": "+218-91-1234567",
  "email": "john.doe@gets-company.com",
  "startDate": "2025-07-01",
  "finishDate": "2025-09-30",
  "urgency": "high",
  "businessJustification": "Critical equipment needed for foundation excavation phase of the Tripoli Infrastructure Project. Without this excavator, the project timeline will be delayed by 2-3 weeks.",
  "specifications": "Minimum 20-ton operating weight, 1.0-1.2 cubic meter bucket capacity, suitable for urban construction work",
  "workingHours": "10 hours per day",
  "workingConditions": "Urban construction site, good access roads",
  "operatorRequired": true,
  "maintenanceIncluded": true,
  "fuelIncluded": false,
  "transportationRequired": true,
  "siteLocation": "Tripoli Downtown, Block 15, Street 23",
  "nearestCity": "Tripoli",
  "coordinates": "32.8872° N, 13.1913° E",
  "scopeOfWork": "Foundation excavation for commercial building complex",
  "estimatedCost": 110400.00,
  "budgetCode": "PROJ-001-EQ",
  "notes": "Equipment needed urgently to maintain project schedule. Site has good access for equipment delivery."
}

Response Body:

{
  "success": true,
  "data": {
    "id": "REQ-002",
    "requestId": "REQ-002",
    "projectId": "PROJ-001",
    "projectName": "Tripoli Infrastructure Project",
    "equipmentType": "Excavator",
    "model": "CAT 320D",
    "quantity": 1,
    "constructionManagerName": "Ahmed Al-Mansouri",
    "requestorName": "John Doe",
    "startDate": "2025-07-01",
    "finishDate": "2025-09-30",
    "numberOfDays": 92,
    "estimatedCost": 110400.00,
    "status": "pending_pl",
    "submittedBy": "john.doe",
    "submittedDate": "2025-06-23",
    "approvals": [
      {
        "approverRole": "PL",
        "status": "pending"
      }
    ],
    "createdAt": "2025-06-23T10:30:00Z",
    "updatedAt": "2025-06-23T10:30:00Z"
  },
  "message": "Equipment request created successfully and sent for PL approval",
  "timestamp": "2025-06-23T10:30:00Z"
}
POST /equipment-requests/{id}/approve Approve request

Description: Approve an equipment request (role-based approval)

Request Body:

{
  "approverRole": "PMO",
  "approverName": "Michael Smith",
  "comments": "Approved with budget considerations. Ensure cost tracking.",
  "budgetApproved": true,
  "alternativeOptions": "Considered internal equipment but not available for required timeline"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "REQ-001",
    "status": "pending_operations",
    "approvals": [
      {
        "approverRole": "PL",
        "approverName": "Sarah Johnson",
        "status": "approved",
        "approvalDate": "2025-06-21T09:00:00Z",
        "comments": "Approved - critical for project timeline"
      },
      {
        "approverRole": "PMO",
        "approverName": "Michael Smith",
        "status": "approved",
        "approvalDate": "2025-06-23T10:30:00Z",
        "comments": "Approved with budget considerations. Ensure cost tracking."
      },
      {
        "approverRole": "Operations Manager",
        "status": "pending"
      }
    ],
    "nextApprovalLevel": "Operations Manager",
    "updatedAt": "2025-06-23T10:30:00Z"
  },
  "message": "Request approved and forwarded to Operations Manager",
  "timestamp": "2025-06-23T10:30:00Z"
}

Projects

GET /projects List logistics-enabled projects
GET /projects/{id}/equipment Get project equipment
GET /projects/{id}/timesheets Get project timesheets
GET /projects/{id}/requests Get project equipment requests
GET /projects/{id}/summary Get project equipment summary

Subcontractors

GET /subcontractors List all subcontractors
GET /subcontractors/{id} Get subcontractor by ID
POST /subcontractors Create new subcontractor
PUT /subcontractors/{id} Update subcontractor
DELETE /subcontractors/{id} Delete subcontractor
GET /subcontractors/{id}/equipment Get subcontractor equipment
GET /subcontractors/{id}/evaluations Get subcontractor evaluations

Evaluations

GET /evaluations List all evaluations
GET /evaluations/{id} Get evaluation by ID
POST /evaluations Create new evaluation
PUT /evaluations/{id} Update evaluation
DELETE /evaluations/{id} Delete evaluation
GET /evaluation-criteria List evaluation criteria
POST /evaluation-criteria Create evaluation criteria

Timesheets

GET /timesheets List timesheets with filters
POST /timesheets Create new timesheet

Description: Create a new timesheet entry

Request Body:

{
  "sheetDate": "2025-06-23",
  "equipmentId": "EQ-001",
  "projectId": "PROJ-001",
  "workStatus": "W",
  "operatorName": "Hassan Al-Mahmoud",
  "workingHours": 8,
  "location": "Block B, Excavation Site",
  "fuelConsumption": 38.2,
  "notes": "Excavation work for utilities installation",
  "submittedBy": "site.supervisor",
  "maintenanceNotes": "No issues reported",
  "weatherConditions": "Clear, 28°C"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "TS-002",
    "sheetDate": "2025-06-23",
    "equipmentId": "EQ-001",
    "equipmentName": "CAT 320 Excavator",
    "projectId": "PROJ-001",
    "projectName": "Tripoli Infrastructure Project",
    "workStatus": "W",
    "operatorName": "Hassan Al-Mahmoud",
    "workingHours": 8,
    "dailyRate": 1200.00,
    "rateApplied": 100,
    "dailyCost": 1200.00,
    "submittedBy": "site.supervisor",
    "submittedAt": "2025-06-23T10:30:00Z",
    "createdAt": "2025-06-23T10:30:00Z"
  },
  "message": "Timesheet created successfully",
  "timestamp": "2025-06-23T10:30:00Z"
}
DELETE /timesheets/{id} Delete timesheet
GET /timesheets/summary Get timesheet summary/reports
POST /timesheets/bulk Bulk create timesheets

Description: Create multiple timesheet entries in bulk

Request Body:

{
  "timesheets": [
    {
      "sheetDate": "2025-06-23",
      "equipmentId": "EQ-001",
      "projectId": "PROJ-001",
      "workStatus": "W",
      "operatorName": "Hassan Al-Mahmoud",
      "workingHours": 8,
      "notes": "Excavation work"
    },
    {
      "sheetDate": "2025-06-23",
      "equipmentId": "EQ-002",
      "projectId": "PROJ-001",
      "workStatus": "S",
      "operatorName": "Ali Hassan",
      "workingHours": 6,
      "notes": "Standby for material delivery"
    }
  ],
  "submittedBy": "site.supervisor"
}

Response Body:

{
  "success": true,
  "data": {
    "created": 2,
    "failed": 0,
    "entries": [
      {
        "id": "TS-003",
        "equipmentId": "EQ-001",
        "status": "created"
      },
      {
        "id": "TS-004",
        "equipmentId": "EQ-002",
        "status": "created"
      }
    ],
    "totalCost": 2100.00
  },
  "message": "2 timesheets created successfully",
  "timestamp": "2025-06-23T10:30:00Z"
}

Subcontractor Evaluations

GET /evaluations List all evaluations
GET /evaluations/{id} Get evaluation by ID
POST /evaluations Create new evaluation
PUT /evaluations/{id} Update evaluation
DELETE /evaluations/{id} Delete evaluation
GET /evaluation-criteria List evaluation criteria
POST /evaluation-criteria Create evaluation criteria

Timesheets

GET /timesheets List timesheets with filters
POST /timesheets Create new timesheet

Description: Create a new timesheet entry

Request Body:

{
  "sheetDate": "2025-06-23",
  "equipmentId": "EQ-001",
  "projectId": "PROJ-001",
  "workStatus": "W",
  "operatorName": "Hassan Al-Mahmoud",
  "workingHours": 8,
  "location": "Block B, Excavation Site",
  "fuelConsumption": 38.2,
  "notes": "Excavation work for utilities installation",
  "submittedBy": "site.supervisor",
  "maintenanceNotes": "No issues reported",
  "weatherConditions": "Clear, 28°C"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "TS-002",
    "sheetDate": "2025-06-23",
    "equipmentId": "EQ-001",
    "equipmentName": "CAT 320 Excavator",
    "projectId": "PROJ-001",
    "projectName": "Tripoli Infrastructure Project",
    "workStatus": "W",
    "operatorName": "Hassan Al-Mahmoud",
    "workingHours": 8,
    "dailyRate": 1200.00,
    "rateApplied": 100,
    "dailyCost": 1200.00,
    "submittedBy": "site.supervisor",
    "submittedAt": "2025-06-23T10:30:00Z",
    "createdAt": "2025-06-23T10:30:00Z"
  },
  "message": "Timesheet created successfully",
  "timestamp": "2025-06-23T10:30:00Z"
}
DELETE /timesheets/{id} Delete timesheet
GET /timesheets/summary Get timesheet summary/reports
POST /timesheets/bulk Bulk create timesheets

Description: Create multiple timesheet entries in bulk

Request Body:

{
  "timesheets": [
    {
      "sheetDate": "2025-06-23",
      "equipmentId": "EQ-001",
      "projectId": "PROJ-001",
      "workStatus": "W",
      "operatorName": "Hassan Al-Mahmoud",
      "workingHours": 8,
      "notes": "Excavation work"
    },
    {
      "sheetDate": "2025-06-23",
      "equipmentId": "EQ-002",
      "projectId": "PROJ-001",
      "workStatus": "S",
      "operatorName": "Ali Hassan",
      "workingHours": 6,
      "notes": "Standby for material delivery"
    }
  ],
  "submittedBy": "site.supervisor"
}

Response Body:

{
  "success": true,
  "data": {
    "created": 2,
    "failed": 0,
    "entries": [
      {
        "id": "TS-003",
        "equipmentId": "EQ-001",
        "status": "created"
      },
      {
        "id": "TS-004",
        "equipmentId": "EQ-002",
        "status": "created"
      }
    ],
    "totalCost": 2100.00
  },
  "message": "2 timesheets created successfully",
  "timestamp": "2025-06-23T10:30:00Z"
}

Subcontractor Evaluations

GET /evaluations List all evaluations
GET /evaluations/{id} Get evaluation by ID
POST /evaluations Create new evaluation
PUT /evaluations/{id} Update evaluation
DELETE /evaluations/{id} Delete evaluation
GET /evaluation-criteria List evaluation criteria
POST /evaluation-criteria Create evaluation criteria

Equipment Inspections

GET /inspections List equipment inspections
GET /inspections/{id} Get checklist by ID
POST /inspections Create new checklist
PUT /inspections/{id} Update checklist
DELETE /inspections/{id} Delete checklist
GET /inspection-templates List inspection templates
POST /inspection-templates Create inspection template

Warehouse Management

GET /warehouse/equipment List warehouse equipment
GET /warehouse/equipment/{id} Get warehouse equipment details
PUT /warehouse/equipment/{id} Update warehouse equipment
POST /warehouse/equipment/{id}/inspect Create inspection record
GET /warehouse/inspections List warehouse inspections

Equipment Extension Requests

GET /equipment-extension-requests

Description: Retrieve equipment extension requests

Query Parameters:

// Optional query parameters
{
  page: 1,
  limit: 20,
  equipment_id: "EQ-001",
  status: "pending_pl",           // pending_pl, pending_pmo, pending_operations, pending_bod, approved, rejected
  initiated_by: "john.doe",
  date_from: "2025-06-01",
  date_to: "2025-06-30"
}

Response Body:

{
  "success": true,
  "data": [
    {
      "id": "EXT-001",
      "equipmentId": "EQ-001",
      "equipmentName": "CAT 320 Excavator",
      "requestDate": "2025-06-20",
      "currentEndDate": "2025-07-31",
      "newEndDate": "2025-09-30",
      "extensionDays": 61,
      "reason": "Project timeline extended due to additional scope",
      "businessJustification": "Client requested additional foundation work requiring equipment extension",
      "status": "pending_pmo",
      "initiatedBy": "john.doe",
      "additionalCost": 73200.00,
      "currency": "USD",
      "approvals": [
        {
          "approverRole": "PL",
          "approverName": "Sarah Johnson",
          "status": "approved",
          "approvalDate": "2025-06-21T10:00:00Z",
          "comments": "Extension justified for additional scope"
        },
        {
          "approverRole": "PMO",
          "status": "pending"
        }
      ],
      "createdAt": "2025-06-20T15:30:00Z",
      "updatedAt": "2025-06-21T10:15:00Z"
    }
  ],
  "timestamp": "2025-06-23T10:30:00Z"
}
POST /equipment-extension-requests

Description: Create a new equipment extension request

Request Body:

{
  "equipmentId": "EQ-001",
  "currentEndDate": "2025-07-31",
  "newEndDate": "2025-09-30",
  "reason": "Project timeline extended due to additional scope work",
  "businessJustification": "Client has requested additional foundation work and structural modifications that require continued use of this excavator. Without the extension, project completion will be delayed by 3-4 weeks.",
  "alternativesConsidered": "Considered renting additional equipment but would increase costs significantly and site space is limited",
  "urgency": "medium",
  "additionalCost": 73200.00,
  "budgetApproved": false,
  "costCenter": "PROJ-001-EQ",
  "projectImpact": "Critical for project completion within revised timeline",
  "alternativeEquipment": false,
  "notes": "Equipment is in excellent condition and well-suited for the additional work required"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "EXT-002",
    "equipmentId": "EQ-001",
    "requestDate": "2025-06-23",
    "currentEndDate": "2025-07-31",
    "newEndDate": "2025-09-30",
    "extensionDays": 61,
    "additionalCost": 73200.00,
    "status": "pending_pl",
    "initiatedBy": "john.doe",
    "approvals": [
      {
        "approverRole": "PL",
        "status": "pending",
        "order": 1
      }
    ],
    "submissionDate": "2025-06-23T10:30:00Z",
    "createdAt": "2025-06-23T10:30:00Z"
  },
  "message": "Extension request created and sent for PL approval",
  "timestamp": "2025-06-23T10:30:00Z"
}
POST /equipment-extension-requests/{id}/approve

Description: Approve an equipment extension request

Request Body:

{
  "approverRole": "PMO",
  "approverName": "Michael Smith",
  "comments": "Extension approved with budget verification. Monitor costs closely.",
  "budgetApproved": true,
  "costCenter": "PROJ-001-EQ"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "EXT-001",
    "status": "pending_operations",
    "nextApprovalLevel": "Operations Manager",
    "approvals": [
      {
        "approverRole": "PL",
        "status": "approved",
        "approvalDate": "2025-06-21T10:00:00Z"
      },
      {
        "approverRole": "PMO",
        "approverName": "Michael Smith",
        "status": "approved",
        "approvalDate": "2025-06-23T10:30:00Z",
        "comments": "Extension approved with budget verification"
      },
      {
        "approverRole": "Operations Manager",
        "status": "pending"
      }
    ],
    "updatedAt": "2025-06-23T10:30:00Z"
  },
  "message": "Extension request approved and forwarded to Operations Manager",
  "timestamp": "2025-06-23T10:30:00Z"
}

Equipment Mobilizations

GET /equipment-mobilizations

Description: Retrieve equipment mobilization records

Response Body:

{
  "success": true,
  "data": [
    {
      "id": "MOB-001",
      "requestId": "REQ-001",
      "equipmentId": "EQ-001",
      "equipmentName": "CAT 320 Excavator",
      "projectId": "PROJ-001",
      "projectName": "Tripoli Infrastructure Project",
      "subcontractorId": "SUB-001",
      "subcontractorName": "Al-Majd Equipment Rental",
      "mobilizationDate": "2025-06-25",
      "demobilizationDate": "2025-09-30",
      "licenseNumber": "LIB-EX-001",
      "licenseExpiryDate": "2025-12-31",
      "registrationNumber": "REG-TRP-001",
      "registrationExpiryDate": "2025-11-30",
      "driverName": "Hassan Al-Mahmoud",
      "driverLicense": "DL-001-2025",
      "inspectionCertificate": "INSP-001-2025",
      "inspectionExpiryDate": "2025-10-15",
      "status": "in_progress",
      "processedBy": "operations.manager",
      "processedDate": "2025-06-22",
      "notes": "Equipment mobilized successfully. All documentation verified.",
      "documents": [
        {
          "type": "license",
          "fileName": "equipment_license.pdf",
          "uploadDate": "2025-06-22"
        },
        {
          "type": "driver_license",
          "fileName": "driver_license.pdf", 
          "uploadDate": "2025-06-22"
        }
      ],
      "createdAt": "2025-06-22T09:00:00Z",
      "updatedAt": "2025-06-22T14:30:00Z"
    }
  ],
  "timestamp": "2025-06-23T10:30:00Z"
}
POST /equipment-mobilizations

Description: Create a new equipment mobilization record

Request Body:

{
  "requestId": "REQ-001",
  "equipmentId": "EQ-002",
  "projectId": "PROJ-001",
  "subcontractorId": "SUB-001",
  "mobilizationDate": "2025-07-01",
  "demobilizationDate": "2025-09-30", 
  "licenseNumber": "LIB-EX-002",
  "licenseExpiryDate": "2025-12-31",
  "registrationNumber": "REG-TRP-002",
  "registrationExpiryDate": "2025-11-30",
  "driverName": "Ali Hassan",
  "driverLicense": "DL-002-2025",
  "inspectionCertificate": "INSP-002-2025",
  "inspectionExpiryDate": "2025-10-15",
  "processedBy": "operations.manager",
  "notes": "Equipment ready for deployment to Tripoli project site"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "MOB-002",
    "requestId": "REQ-001",
    "equipmentId": "EQ-002",
    "projectId": "PROJ-001",
    "subcontractorId": "SUB-001",
    "mobilizationDate": "2025-07-01",
    "demobilizationDate": "2025-09-30",
    "status": "pending",
    "processedBy": "operations.manager",
    "processedDate": "2025-06-23",
    "createdAt": "2025-06-23T10:30:00Z"
  },
  "message": "Equipment mobilization record created successfully",
  "timestamp": "2025-06-23T10:30:00Z"
}

Inspection Checklists

GET /inspection-checklists

Description: Retrieve inspection checklists

Response Body:

{
  "success": true,
  "data": [
    {
      "id": "CHK-001",
      "equipmentType": "Excavator",
      "name": "Excavator Safety Inspection Checklist",
      "description": "Comprehensive safety and operational inspection for excavators",
      "version": "2.1",
      "createdBy": "safety.manager",
      "createdDate": "2025-01-15",
      "lastModified": "2025-05-20",
      "isActive": true,
      "defaultFrequency": "monthly",
      "items": [
        {
          "id": "CHK-001-01",
          "name": "Engine Oil Level",
          "description": "Check engine oil level and quality",
          "category": "Engine",
          "isRequired": true,
          "inputType": "select",
          "options": ["Normal", "Low", "Very Low", "Contaminated"],
          "orderIndex": 1,
          "frequency": "daily"
        },
        {
          "id": "CHK-001-02",
          "name": "Hydraulic System Pressure",
          "description": "Check hydraulic system pressure and look for leaks",
          "category": "Hydraulics",
          "isRequired": true,
          "inputType": "number",
          "orderIndex": 2,
          "frequency": "weekly"
        }
      ],
      "totalItems": 15,
      "estimatedDuration": 45,
      "createdAt": "2025-01-15T08:00:00Z",
      "updatedAt": "2025-05-20T16:30:00Z"
    }
  ],
  "timestamp": "2025-06-23T10:30:00Z"
}
POST /inspection-checklists

Description: Create a new inspection checklist

Request Body:

{
  "equipmentType": "Wheel Loader",
  "name": "Wheel Loader Monthly Inspection",
  "description": "Monthly safety and maintenance inspection for wheel loaders",
  "version": "1.0",
  "createdBy": "maintenance.supervisor",
  "defaultFrequency": "monthly",
  "items": [
    {
      "name": "Tire Condition",
      "description": "Inspect tire condition and tread depth",
      "category": "Tires & Wheels",
      "isRequired": true,
      "inputType": "select",
      "options": ["Excellent", "Good", "Fair", "Poor"],
      "orderIndex": 1,
      "frequency": "weekly"
    },
    {
      "name": "Brake System",
      "description": "Test brake system functionality",
      "category": "Brakes",
      "isRequired": true,
      "inputType": "checkbox",
      "orderIndex": 2,
      "frequency": "monthly"
    }
  ]
}

Response Body:

{
  "success": true,
  "data": {
    "id": "CHK-002",
    "equipmentType": "Wheel Loader",
    "name": "Wheel Loader Monthly Inspection",
    "version": "1.0",
    "isActive": true,
    "totalItems": 2,
    "createdBy": "maintenance.supervisor",
    "createdDate": "2025-06-23",
    "createdAt": "2025-06-23T10:30:00Z"
  },
  "message": "Inspection checklist created successfully",
  "timestamp": "2025-06-23T10:30:00Z"
}

Payment Records

GET /payment-records

Description: Retrieve payment records

Response Body:

{
  "success": true,
  "data": [
    {
      "id": "PAY-001",
      "subcontractorId": "SUB-001",
      "subcontractorName": "Al-Majd Equipment Rental",
      "projectId": "PROJ-001",
      "projectName": "Tripoli Infrastructure Project",
      "invoiceId": "INV-001",
      "paymentPeriodStart": "2025-05-01",
      "paymentPeriodEnd": "2025-05-31",
      "totalAmount": 37200.00,
      "currency": "USD",
      "equipmentIds": ["EQ-001"],
      "equipmentDetails": [
        {
          "equipmentId": "EQ-001",
          "equipmentName": "CAT 320 Excavator",
          "days": 31,
          "dailyRate": 1200.00,
          "totalCost": 37200.00
        }
      ],
      "paymentReference": "PAY-2025-001",
      "costCenter": "CC-PROJ-001",
      "paymentMethod": "Bank Transfer",
      "status": "paid",
      "processedBy": "finance.manager",
      "approvedBy": "pmo.manager",
      "approvalDate": "2025-06-15",
      "paymentDate": "2025-06-18",
      "notes": "Payment processed for May 2025 equipment rental charges",
      "createdAt": "2025-06-10T09:00:00Z",
      "updatedAt": "2025-06-18T11:30:00Z"
    }
  ],
  "summary": {
    "totalPayments": 15,
    "totalAmount": 245000.00,
    "paidAmount": 220000.00,
    "pendingAmount": 25000.00,
    "byStatus": {
      "pending": 3,
      "approved": 2,
      "paid": 10
    }
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
POST /payment-records

Description: Create a new payment record

Request Body:

{
  "subcontractorId": "SUB-001",
  "projectId": "PROJ-001",
  "invoiceId": "INV-002",
  "paymentPeriodStart": "2025-06-01",
  "paymentPeriodEnd": "2025-06-30",
  "equipmentIds": ["EQ-001", "EQ-002"],
  "paymentReference": "PAY-2025-002",
  "costCenter": "CC-PROJ-001",
  "paymentMethod": "Bank Transfer",
  "processedBy": "finance.manager",
  "notes": "Payment for June 2025 equipment rental charges"
}

Response Body:

{
  "success": true,
  "data": {
    "id": "PAY-002",
    "subcontractorId": "SUB-001",
    "projectId": "PROJ-001",
    "invoiceId": "INV-002",
    "totalAmount": 53600.00,
    "currency": "USD",
    "status": "pending",
    "paymentReference": "PAY-2025-002",
    "processedBy": "finance.manager",
    "createdAt": "2025-06-23T10:30:00Z"
  },
  "message": "Payment record created successfully and pending approval",
  "timestamp": "2025-06-23T10:30:00Z"
}

Error Responses

Common Error Codes:

400 - Bad Request
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid input data",
    "details": {
      "field": "email",
      "message": "Invalid email format"
    }
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
401 - Unauthorized
{
  "success": false,
  "error": {
    "code": "AUTHENTICATION_REQUIRED",
    "message": "Valid authentication token required",
    "details": {
      "loginUrl": "/auth/login"
    }
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
403 - Forbidden
{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_PERMISSIONS",
    "message": "User does not have required permissions for this operation",
    "details": {
      "requiredRole": "OPERATIONS_MANAGER",
      "userRole": "PROJECT_LEADER"
    }
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
404 - Not Found
{
  "success": false,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "Equipment with ID 'EQ-999' not found",
    "details": {
      "resourceType": "Equipment",
      "resourceId": "EQ-999"
    }
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
409 - Conflict
{
  "success": false,
  "error": {
    "code": "BUSINESS_RULE_VIOLATION",
    "message": "Equipment is already assigned to another project",
    "details": {
      "equipmentId": "EQ-001",
      "currentProject": "PROJ-001",
      "requestedProject": "PROJ-002"
    }
  },
  "timestamp": "2025-06-23T10:30:00Z"
}
500 - Internal Server Error
{
  "success": false,
  "error": {
    "code": "INTERNAL_SERVER_ERROR",
    "message": "An unexpected error occurred",
    "details": {
      "errorId": "ERR-2025-06-23-001",
      "supportContact": "support@gets-company.com"
    }
  },
  "timestamp": "2025-06-23T10:30:00Z"
}