DocHub
REST endpoints, database schema, and project lifecycle

API & Data Model

API Endpoints

Projects

Method Endpoint Purpose
GET /api/projects List all projects
POST /api/projects Create project
GET /api/projects/:id Get project with floors, calculations, quotes
PUT /api/projects/:id Update project details
DELETE /api/projects/:id Delete project
PUT /api/projects/:id/floors Set floor configuration (building blocks)
GET /api/projects/:id/equipment-overrides Load equipment qty/cost overrides
PUT /api/projects/:id/equipment-overrides Save equipment overrides (replace all)
GET /api/projects/:id/cost-overrides Load cost summary overrides
PUT /api/projects/:id/cost-overrides Save cost summary overrides (replace all)

Calculations

Method Endpoint Purpose
POST /api/calculations Run calculation for a project
POST /api/calculations/preview Preview calculation without saving
GET /api/calculations/project/:id Get calculation history for project
GET /api/calculations/:id Get specific calculation result

Quotes (PDF)

Method Endpoint Purpose
POST /api/quotes Generate PDF quote
GET /api/quotes/:id Get quote metadata
GET /api/quotes/:id/download Download PDF file
DELETE /api/quotes/:id Delete quote

Reference Data

Method Endpoint Purpose
GET /api/reference-data Full summary of all reference data
GET /api/reference-data/regions Regions list
GET /api/reference-data/countries Countries list
GET /api/reference-data/project-types Project types with scopes
GET /api/reference-data/building-blocks Building blocks with defaults
GET /api/reference-data/equipment Equipment items with prices
GET /api/reference-data/site-sizes Site size tiers with fees
GET /api/reference-data/scope-considerations Scope toggles
POST /api/reference-data/import Import Excel spreadsheet
GET /api/reference-data/imports Import history

Database Schema (Key Tables)

Reference Data Tables

  • regions (4) — ASA, GCNA, EA, AME
  • countries (62) — Each linked to a region
  • site_sizes (6) — Mini to Critical, with fees (PMS, design, voice, server, WiFi, CCTV)
  • equipment_categories (9) — Network, Workstation, AV, Property, Security, etc.
  • equipment_items (~90) — Individual equipment pieces
  • equipment_prices (~360) — Regional unit costs (4 regions x ~90 items)
  • building_blocks (~89) — Workspace types with data point defaults
  • building_block_equipment_map (~122) — Equipment multipliers per building block
  • network_designs — Site-size-specific network equipment with quantity and cost overrides
  • project_types (5) — New Build, Refurbishment, Relocations, etc.
  • project_scopes (17) — Sub-types under each project type
  • cost_line_items (15) — The fixed 15-row cost summary structure
  • scope_considerations (9) — Toggle options affecting calculation
  • property_package_items (9) — Property cost categories

Project Tables

  • projects — Project details (name, region, country, site size, headcount, etc.)
  • project_floors — Floor definitions per project
  • project_floor_items — Building block quantities per floor
  • project_scope_considerations — Per-project scope toggle values
  • project_property_packages — Per-project property CAPEX values
  • project_equipment_overrides — Manual equipment qty/cost overrides per item (added 2026-02-23)
  • project_cost_overrides — Manual cell overrides (any row, any column)
  • project_calculations — Calculation results (JSON blob)
  • quotes — Generated PDF metadata

project_equipment_overrides (added 2026-02-23)

Column Type Purpose
id SERIAL PK Auto-increment
project_id INTEGER FK References projects(id) ON DELETE CASCADE
item_name VARCHAR(200) Equipment item name
category VARCHAR(100) Equipment category
quantity_override NUMERIC(10,2) Override quantity (null = keep auto value)
unit_cost_override DECIMAL(12,2) Override unit cost (null = keep regional price)
is_addition BOOLEAN false = override existing, true = new item
created_at TIMESTAMP Auto-set

Unique constraint on (project_id, item_name).

Project Lifecycle

  1. Create — POST /api/projects with project details
  2. Configure Floors — PUT /api/projects/:id/floors with building blocks per floor
  3. Calculate — POST /api/calculations with project_id
  4. Review — View in Web View or Spreadsheet View mode
  5. Override Equipment — Edit quantities/costs in tech breakdown, add new items
  6. Override Costs — Edit individual cells in cost summary table
  7. Save and Recalculate — Persist overrides to DB, recalculate with overrides applied
  8. Generate PDF — POST /api/quotes to create 3-page landscape Design Brief

Important: PostgreSQL NUMERIC

The pg driver returns NUMERIC(12,2) columns as JavaScript strings. The calculator uses a num() helper to safely parse all values. Without this, string concatenation bugs occur (e.g., “296182” + “3000.00” becomes “2961823000.00”).