klg-asutk-app/backend/migrations/006_airworthiness_core.sql

121 lines
4.6 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Migration: Airworthiness Core — AD, SB, Life Limits, Maintenance Programs, Components
-- ВК РФ ст. 36, 37, 37.2; ФАП-148; ФАП-145; EASA Part-M; ICAO Annex 6/8
CREATE TABLE IF NOT EXISTS ad_directives (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
number VARCHAR(100) NOT NULL UNIQUE,
title VARCHAR(500) NOT NULL,
issuing_authority VARCHAR(50) DEFAULT 'FATA',
aircraft_types JSONB DEFAULT '[]',
ata_chapter VARCHAR(10),
effective_date DATE NOT NULL,
compliance_type VARCHAR(20) DEFAULT 'mandatory',
compliance_deadline DATE,
repetitive BOOLEAN DEFAULT false,
repetitive_interval_hours NUMERIC(8,1),
repetitive_interval_days INTEGER,
description TEXT,
affected_parts JSONB DEFAULT '[]',
supersedes VARCHAR(100),
status VARCHAR(20) DEFAULT 'open',
compliance_date DATE,
compliance_notes TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
tenant_id UUID
);
CREATE TABLE IF NOT EXISTS service_bulletins (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
number VARCHAR(100) NOT NULL UNIQUE,
title VARCHAR(500) NOT NULL,
manufacturer VARCHAR(200) NOT NULL,
aircraft_types JSONB DEFAULT '[]',
ata_chapter VARCHAR(10),
category VARCHAR(20) DEFAULT 'recommended',
issued_date DATE NOT NULL,
compliance_deadline DATE,
estimated_manhours NUMERIC(6,1),
description TEXT,
related_ad UUID REFERENCES ad_directives(id),
status VARCHAR(20) DEFAULT 'open',
incorporation_date DATE,
incorporation_notes TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
tenant_id UUID
);
CREATE TABLE IF NOT EXISTS life_limits (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
aircraft_id UUID REFERENCES aircraft(id),
component_name VARCHAR(200) NOT NULL,
part_number VARCHAR(100) NOT NULL,
serial_number VARCHAR(100) NOT NULL,
limit_type VARCHAR(20) NOT NULL,
calendar_limit_months INTEGER,
flight_hours_limit NUMERIC(10,1),
cycles_limit INTEGER,
current_hours NUMERIC(10,1) DEFAULT 0,
current_cycles INTEGER DEFAULT 0,
install_date DATE,
last_overhaul_date DATE,
notes TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
tenant_id UUID
);
CREATE TABLE IF NOT EXISTS maintenance_programs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(300) NOT NULL,
aircraft_type VARCHAR(100) NOT NULL,
revision VARCHAR(20) DEFAULT 'Rev.0',
approved_by VARCHAR(200),
approval_date DATE,
tasks JSONB DEFAULT '[]',
created_at TIMESTAMPTZ DEFAULT now(),
tenant_id UUID
);
CREATE TABLE IF NOT EXISTS aircraft_components (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
aircraft_id UUID REFERENCES aircraft(id),
name VARCHAR(200) NOT NULL,
part_number VARCHAR(100) NOT NULL,
serial_number VARCHAR(100) NOT NULL,
ata_chapter VARCHAR(10),
manufacturer VARCHAR(200),
install_date DATE,
install_position VARCHAR(200),
current_hours NUMERIC(10,1) DEFAULT 0,
current_cycles INTEGER DEFAULT 0,
condition VARCHAR(20) DEFAULT 'serviceable',
certificate_type VARCHAR(50),
certificate_number VARCHAR(100),
last_shop_visit DATE,
next_overhaul_due DATE,
notes TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
tenant_id UUID,
UNIQUE(tenant_id, serial_number)
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_ad_status ON ad_directives(status);
CREATE INDEX IF NOT EXISTS idx_ad_type ON ad_directives USING gin(aircraft_types);
CREATE INDEX IF NOT EXISTS idx_sb_status ON service_bulletins(status);
CREATE INDEX IF NOT EXISTS idx_ll_aircraft ON life_limits(aircraft_id);
CREATE INDEX IF NOT EXISTS idx_comp_aircraft ON aircraft_components(aircraft_id);
CREATE INDEX IF NOT EXISTS idx_comp_condition ON aircraft_components(condition);
-- RLS
ALTER TABLE ad_directives ENABLE ROW LEVEL SECURITY;
ALTER TABLE service_bulletins ENABLE ROW LEVEL SECURITY;
ALTER TABLE life_limits ENABLE ROW LEVEL SECURITY;
ALTER TABLE maintenance_programs ENABLE ROW LEVEL SECURITY;
ALTER TABLE aircraft_components ENABLE ROW LEVEL SECURITY;
COMMENT ON TABLE ad_directives IS 'Директивы ЛГ (ВК РФ ст. 37; ФАП-148 п.4.3; EASA Part-M.A.301)';
COMMENT ON TABLE service_bulletins IS 'Сервисные бюллетени (ФАП-148 п.4.5; EASA Part-21.A.3B)';
COMMENT ON TABLE life_limits IS 'Ресурсы и сроки службы (ФАП-148 п.4.2; EASA Part-M.A.302)';
COMMENT ON TABLE maintenance_programs IS 'Программы ТО (ФАП-148 п.3; ICAO Annex 6 Part I 8.3)';
COMMENT ON TABLE aircraft_components IS 'Карточки компонентов (ФАП-145 п.A.42; EASA Part-M.A.501)';