Skip to main content

Database Architecture

The application uses two PostgreSQL databases:

  1. OSAS Database (Primary)

    • Main operational database
    • Contains waybills, scans, users, partners, etc.
  2. ONMART Database (Secondary)

    • Marketplace-specific operations
    • Separate schema for marketplace data

Key Database Models

Core Operational Models

ModelPurposeKey Fields
scansTracking status historywaybill_id, status, location, timestamp
waybill_numbersShipment recordsawb_number, origin, destination, weight
partners3P courier partnersname, api_token, webhook_url
resi_3p3P waybill mappinginternal_awb, partner_awb, partner_id
userUser accountsusername, password_hash, role_id, agent_id

Scanning Models

ModelPurpose
delivery_scanDelivery completion records
handover_scanHub-to-hub transfers
receiving_scanPackage arrivals
problem_scanException tracking
packing_scanPackage preparation

Financial Models

ModelPurpose
billing_vip_configVIP customer pricing
xendit_paymentPayment gateway records
xendit_payoutPayout transactions
agent_commissionCommission calculations

Master Data Models

ModelPurpose
agent_locationsAgent location mapping
agent_customerCustomer-agent relationships
awb_booksAWB number allocation
courier_partnersCourier configurations
service_typesAvailable services

Additional Models (52 total)

  • Manifest management (manifest_pcp, manifest_pos)
  • Quality management (alter_weight, pod_record, pop_record)
  • Trucking operations (trucking_shipment, trucking_config)
  • Location master data (all_location_migration)
  • Marketplace integration models
  • Report configuration models

Database Relationships

User ──┐
       ├─→ Agent_Locations → Waybill_Numbers
       └─→ Role

Waybill_Numbers ──┬─→ Scans (1:many)
                  ├─→ Resi_3p
                  └─→ Delivery_Scan / Problem_Scan

Partners ─→ Resi_3p ─→ Waybill_Numbers

Agent_Customer ─→ Waybill_Numbers

Connection Pooling

// From db.config.js
pool: {
  max: DB_POOL_MAX,        // Maximum connections
  min: DB_POOL_MIN,        // Minimum connections
  acquire: DB_POOL_ACQUIRE, // Connection acquisition timeout
  idle: DB_POOL_IDLE       // Idle timeout
}