3.6 KiB
3.6 KiB
Schema Upgrade: Lifecycle, Transfer Requests, and Data Weights
Summary of Changes Applied via sync_engine.py
The following schema changes were successfully applied to the database:
1. Added data_status column to vehicle.assets table
- Column:
data_status VARCHAR(20) - Nullable: Yes (initially to handle existing rows)
- Default:
'draft' - Purpose: Tracks data completeness lifecycle (draft → verified → archived)
2. Created vehicle.vehicle_transfer_requests table
- Purpose: Tracks asset transfer requests between owners/organizations
- Columns:
id UUID PRIMARY KEYasset_id UUID REFERENCES vehicle.assets(id)requester_id INTEGER REFERENCES identity.users(id)current_owner_id INTEGER REFERENCES identity.persons(id)(nullable)status VARCHAR(20) DEFAULT 'pending'proof_document_id UUID REFERENCES system.documents(id)(nullable)requested_at TIMESTAMPTZ DEFAULT now()processed_at TIMESTAMPTZ(nullable)notes TEXT(nullable)
3. Created system.system_data_completion_weights table
- Purpose: System-wide configuration for data completion weighting
- Columns:
id INTEGER PRIMARY KEY AUTOINCREMENTentity_type VARCHAR(50)(e.g., "vehicle", "person", "organization")field_name VARCHAR(100)(e.g., "vin", "license_plate", "email")weight_percent INTEGER(0-100%)is_mandatory BOOLEAN DEFAULT falseis_active BOOLEAN DEFAULT truedescription TEXT(nullable)created_at TIMESTAMPTZ DEFAULT now()updated_at TIMESTAMPTZ DEFAULT now() ON UPDATE now()
- Unique Constraint:
(entity_type, field_name)
SQL Equivalent
-- 1. Add data_status to assets
ALTER TABLE vehicle.assets
ADD COLUMN data_status VARCHAR(20) NULL DEFAULT 'draft';
-- 2. Create vehicle_transfer_requests table
CREATE TABLE vehicle.vehicle_transfer_requests (
id UUID PRIMARY KEY,
asset_id UUID NOT NULL REFERENCES vehicle.assets(id),
requester_id INTEGER NOT NULL REFERENCES identity.users(id),
current_owner_id INTEGER REFERENCES identity.persons(id),
status VARCHAR(20) NOT NULL DEFAULT 'pending',
proof_document_id UUID REFERENCES system.documents(id),
requested_at TIMESTAMPTZ NOT NULL DEFAULT now(),
processed_at TIMESTAMPTZ,
notes TEXT,
INDEX (asset_id),
INDEX (requester_id),
INDEX (current_owner_id)
);
-- 3. Create system_data_completion_weights table
CREATE TABLE system.system_data_completion_weights (
id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
entity_type VARCHAR(50) NOT NULL,
field_name VARCHAR(100) NOT NULL,
weight_percent INTEGER NOT NULL,
is_mandatory BOOLEAN DEFAULT false,
is_active BOOLEAN DEFAULT true,
description TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (entity_type, field_name)
);
CREATE INDEX ON system.system_data_completion_weights(entity_type);
CREATE INDEX ON system.system_data_completion_weights(field_name);
Model Updates
The following Python models were updated/created:
-
backend/app/models/vehicle/asset.py:- Added
data_status: Mapped[Optional[str]]field toAssetmodel - Added
VehicleTransferRequestmodel class
- Added
-
backend/app/models/system/system.py:- Added
SystemDataCompletionWeightmodel class
- Added
Verification
The sync_engine.py script reported:
- ✅ 942 elements OK
- ✅ 3 elements fixed/created
- ⚠️ 2 extra (shadow) elements (unrelated to this migration)
All schema changes have been successfully applied to the database.