Добавлен столбец «СПОД» между «Декабрь» и «Итог IV кв.» на листах AHR_RENT/AHR_UTILITY/AHR_SECURITY формы 2, с переносом значения в budget_line_quarter.actual_spod синхронизируемой строки АХР (Support) и, через уже существующую логику, в итог 4 кв. и года АХР/Смет/сводов. - rent_detail/utility_detail/security_detail: колонка actual_spod (ALTER TABLE + ORM). - v3.v_form2_view: fact_q4.spod и fact_q4.total с учётом spod в ветках AHR_RENT/AHR_UTILITY/AHR_SECURITY. - v3._apply_form_cell: fact_q4.spod разрешён как обычное поле месяца. - v3._upsert_form2_ahr_detail_sync_values: DROP+CREATE с новым параметром p_actual_spod (DROP обязателен из-за неоднозначности перегрузки с DEFAULT). - v3.sync_form2_ahr_satellite_lines/line: actual_spod передаётся из rd/ud/sd в апсерт. - v3.v_svod2_go: строка аренды также считается заполненной по actual_spod. - Data-миграция: 'fact_q4.spod' добавлен в column_keys этапов, где уже есть 'fact_q4.dec' (phase_template/form_phase), идемпотентно. - Тело CREATE OR REPLACE для v_form2_view/sync_form2_ahr_satellite_* собрано вручную по миграциям 0033/0034 + regexp-патчам из 0037 (pg_get_functiondef на живой БД недоступен в этой среде — см. Rulings в PR). Тесты: node --test на новых accessorKey в конфигах фронта + unit-тест на 0049/0050 (v_svod2_go теперь засчитывает actual_spod для аренды). Интеграционные тесты добавлены, но не выполнены — нет доступа к Postgres в этой рабочей среде (см. Rulings в PR). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
45 lines
1.9 KiB
Python
45 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import date
|
|
|
|
from sqlalchemy import Date, ForeignKey, Index, Integer, Numeric, String
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from src.db.base import Base
|
|
|
|
|
|
class SecurityDetail(Base):
|
|
__tablename__ = "security_detail"
|
|
__table_args__ = (
|
|
Index("ix_v3_security_detail_line", "line_id"),
|
|
Index("ix_v3_security_detail_vsp", "vsp_id"),
|
|
{"schema": "v3"},
|
|
)
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
line_id: Mapped[int] = mapped_column(Integer, ForeignKey("v3.budget_line.id"))
|
|
vsp_id: Mapped[int] = mapped_column(Integer, ForeignKey("v3.vsp.id"))
|
|
contract_number: Mapped[str | None] = mapped_column(String)
|
|
contract_end_date: Mapped[date | None] = mapped_column(Date)
|
|
plan_q1: Mapped[float | None] = mapped_column(Numeric)
|
|
plan_q2: Mapped[float | None] = mapped_column(Numeric)
|
|
plan_q3: Mapped[float | None] = mapped_column(Numeric)
|
|
plan_q4: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_jan: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_feb: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_mar: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_apr: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_may: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_jun: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_jul: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_aug: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_sep: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_oct: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_nov: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_dec: Mapped[float | None] = mapped_column(Numeric)
|
|
actual_spod: Mapped[float | None] = mapped_column(Numeric)
|
|
comment: Mapped[str | None] = mapped_column(String)
|
|
|
|
# line = relationship("BudgetLine")
|
|
# vsp = relationship("Vsp")
|