diff --git a/api/alembic/versions/0001_initial_schema.py b/api/alembic/versions/0001_initial_schema.py index 7b0c29b..c4561d8 100644 --- a/api/alembic/versions/0001_initial_schema.py +++ b/api/alembic/versions/0001_initial_schema.py @@ -762,6 +762,43 @@ def upgrade() -> None: ['code'], schema='v3', ) + create_table_if_not_exists( + 'form3_phase', + sa.Column('rf_project_report_id', sa.Integer(),primary_key=True), + sa.Column('phase_code', sa.String(), primary_key=True), + sa.Column('role', sa.String(), nullable=False), + sa.Column('column_keys', postgresql.ARRAY(sa.Text()), nullable=False), + sa.Column('opens_at', sa.DateTime(timezone=True), nullable=False), + sa.Column('closes_at', sa.DateTime(timezone=True), nullable=False), + schema='v3', + ) + + create_check_constraint_if_not_exists( + 'chk_v3_form3_phase_window', 'form3_phase', + sa.text('closes_at > opens_at'), + schema='v3', + ) + create_check_constraint_if_not_exists( + 'chk_v3_form3_phase_columns', 'form3_phase', + sa.text('cardinality(column_keys) > 0'), + schema='v3', + ) + create_check_constraint_if_not_exists( + 'chk_v3_form3_phase_no_admin', 'form3_phase', + sa.text("role != 'ADMIN'"), + schema='v3', + ) + create_index_if_not_exists( + 'ix_v3_form3_phase_active', 'form3_phase', + ['rf_project_report_id', 'role', 'opens_at', 'closes_at'], + schema='v3', + ) + create_index_if_not_exists( + 'ix_v3_form3_phase_columns_gin', 'form3_phase', + ['column_keys'], + schema='v3', + postgresql_using='gin', + ) create_table_if_not_exists( 'security_detail', sa.Column('id', sa.Integer(), diff --git a/api/alembic/versions/sql/0002_functions.sql b/api/alembic/versions/sql/0002_functions.sql index ac01682..a685ff6 100644 --- a/api/alembic/versions/sql/0002_functions.sql +++ b/api/alembic/versions/sql/0002_functions.sql @@ -4074,26 +4074,12 @@ $function$ -- DROP FUNCTION v3.v_form1_smeta(int4, int4); - -CREATE FUNCTION v3.v_form1_smeta(p_year INT, p_org_unit_id INT) -RETURNS TABLE ( - row_type VARCHAR, - depth INT, - section_code VARCHAR, - name VARCHAR, - supp_plan_q1 NUMERIC, supp_plan_q2 NUMERIC, supp_plan_q3 NUMERIC, supp_plan_q4 NUMERIC, supp_plan_year NUMERIC, - dev_plan_q1 NUMERIC, dev_plan_q2 NUMERIC, dev_plan_q3 NUMERIC, dev_plan_q4 NUMERIC, dev_plan_year NUMERIC, - total_plan_year NUMERIC, - supp_appr_q1 NUMERIC, supp_appr_q2 NUMERIC, supp_appr_q3 NUMERIC, supp_appr_q4 NUMERIC, supp_appr_year NUMERIC, - dev_appr_q1 NUMERIC, dev_appr_q2 NUMERIC, dev_appr_q3 NUMERIC, dev_appr_q4 NUMERIC, dev_appr_year NUMERIC, - total_appr_year NUMERIC, - supp_act_q1 NUMERIC, supp_act_q2 NUMERIC, supp_act_q3 NUMERIC, supp_act_q4 NUMERIC, supp_act_year NUMERIC, - dev_act_q1 NUMERIC, dev_act_q2 NUMERIC, dev_act_q3 NUMERIC, dev_act_q4 NUMERIC, dev_act_year NUMERIC, - total_act_year NUMERIC, - supp_corr_q2 NUMERIC, supp_corr_q3 NUMERIC, supp_corr_q4 NUMERIC, - dev_corr_q2 NUMERIC, dev_corr_q3 NUMERIC, dev_corr_q4 NUMERIC -) -AS $$ +CREATE OR REPLACE FUNCTION v3.v_form1_smeta(p_year integer, p_org_unit_id integer) + RETURNS TABLE(row_type character varying, depth integer, section_code character varying, name character varying, supp_plan_q1 numeric, supp_plan_q2 numeric, supp_plan_q3 numeric, supp_plan_q4 numeric, supp_plan_year numeric, dev_plan_q1 numeric, dev_plan_q2 numeric, dev_plan_q3 numeric, dev_plan_q4 numeric, dev_plan_year numeric, total_plan_year numeric, supp_appr_q1 numeric, supp_appr_q2 numeric, supp_appr_q3 numeric, supp_appr_q4 numeric, supp_appr_year numeric, dev_appr_q1 numeric, dev_appr_q2 numeric, dev_appr_q3 numeric, dev_appr_q4 numeric, dev_appr_year numeric, total_appr_year numeric, supp_act_q1 numeric, supp_act_q2 numeric, supp_act_q3 numeric, supp_act_q4 numeric, supp_act_year numeric, dev_act_q1 numeric, dev_act_q2 numeric, dev_act_q3 numeric, dev_act_q4 numeric, dev_act_year numeric, total_act_year numeric, supp_corr_q2 numeric, supp_corr_q3 numeric, supp_corr_q4 numeric, dev_corr_q2 numeric, dev_corr_q3 numeric, dev_corr_q4 numeric) + LANGUAGE plpgsql + STABLE + SET search_path TO 'v3', 'pg_catalog' +AS $function$ #variable_conflict use_column DECLARE v_ahr INT; v_cap INT; v_oper INT; @@ -4223,8 +4209,8 @@ BEGIN FROM merged m ORDER BY m.sc; END; -$$ LANGUAGE plpgsql STABLE SET search_path = v3, pg_catalog; - +$function$ +; -- DROP FUNCTION v3.v_form2_sheet_sections(int4, varchar, _text); CREATE OR REPLACE FUNCTION v3.v_form2_sheet_sections(p_form_id integer, p_sheet character varying, p_sections text[] DEFAULT NULL::text[]) @@ -7782,4 +7768,407 @@ BEGIN END; $function$ -; \ No newline at end of file +; + + + +CREATE OR REPLACE FUNCTION v3.copy_template_to_report(p_report_id INT) +RETURNS INTEGER +AS $function$ +DECLARE + v_report_type VARCHAR; + v_inserted INTEGER; +BEGIN + SELECT report_type INTO v_report_type + FROM v3.rf_project_report + WHERE id = p_report_id; + + IF NOT FOUND THEN + RAISE EXCEPTION 'rf_project_report id=% не существует', p_report_id; + END IF; + + INSERT INTO v3.form3_phase + (rf_project_report_id, phase_code, role, column_keys, opens_at, closes_at) + SELECT p_report_id, pt.phase_code, pt.role, + pt.column_keys, pt.opens_at, pt.closes_at + FROM v3.phase_template pt + WHERE pt.form_type = 'FORM_3' + AND pt.sheet = v_report_type + ON CONFLICT (rf_project_report_id, phase_code) DO NOTHING; + + GET DIAGNOSTICS v_inserted = ROW_COUNT; + RETURN v_inserted; +END; +$function$ +LANGUAGE plpgsql VOLATILE; + +CREATE OR REPLACE FUNCTION v3.user_in_report_org(p_user_id INT, p_report_id INT) +RETURNS BOOLEAN +AS $function$ +DECLARE + v_org INT; +BEGIN + SELECT p.org_unit_id + INTO v_org + FROM v3.rf_project_report r + JOIN v3.project p ON p.id = r.project_id + WHERE r.id = p_report_id; + + IF v_org IS NULL THEN + RETURN TRUE; -- проект без org_unit — пропускаем фильтр + END IF; + + RETURN EXISTS ( + SELECT 1 + FROM v3.user_org + WHERE user_id = p_user_id + AND org_unit_id = v_org + ); +END; +$function$ +LANGUAGE plpgsql STABLE; + +CREATE OR REPLACE FUNCTION v3.editable_columns_for3( + p_report_id INT, + p_user_id INT +) +RETURNS TABLE ( + column_key TEXT, + closes_at TIMESTAMPTZ +) +AS $function$ +DECLARE + v_role VARCHAR; +BEGIN + IF NOT EXISTS (SELECT 1 FROM v3.rf_project_report WHERE id = p_report_id) THEN + RAISE EXCEPTION 'rf_project_report id=% не существует', p_report_id; + END IF; + + v_role := v3.user_role_code(p_user_id); + IF v_role IS NULL THEN + RETURN; -- неизвестный/неактивный юзер → пустая маска + END IF; + + -- ADMIN: UNION всех column_keys всех фаз отчёта. + IF v_role = 'ADMIN' THEN + RETURN QUERY + SELECT ck AS column_key, + MAX(fp.closes_at) AS closes_at + FROM v3.form3_phase fp, + LATERAL unnest(fp.column_keys) AS ck + WHERE fp.rf_project_report_id = p_report_id + GROUP BY ck; + RETURN; + END IF; + + -- EXECUTOR_RF без назначения → пустая маска (default deny). + IF v_role = 'EXECUTOR_RF' AND NOT v3.user_in_report_org(p_user_id, p_report_id) THEN + RETURN; + END IF; + + RETURN QUERY + SELECT ck AS column_key, + MAX(fp.closes_at) AS closes_at + FROM v3.form3_phase fp, + LATERAL unnest(fp.column_keys) AS ck + WHERE fp.rf_project_report_id = p_report_id + AND fp.role = v_role + AND now() BETWEEN fp.opens_at AND fp.closes_at + GROUP BY ck; +END; +$function$ +LANGUAGE plpgsql STABLE; + +CREATE OR REPLACE FUNCTION v3.can_edit3( + p_report_id INT, + p_column_key TEXT, + p_user_id INT +) +RETURNS JSONB +AS $function$ +DECLARE + v_role VARCHAR; + v_active_close TIMESTAMPTZ; + v_role_has_col BOOLEAN; + v_next_open TIMESTAMPTZ; + v_last_close TIMESTAMPTZ; +BEGIN + IF NOT EXISTS (SELECT 1 FROM v3.rf_project_report WHERE id = p_report_id) THEN + RAISE EXCEPTION 'rf_project_report id=% не существует', p_report_id; + END IF; + + v_role := v3.user_role_code(p_user_id); + IF v_role IS NULL THEN + RETURN jsonb_build_object( + 'ok', false, + 'code', 'role_not_allowed', + 'detail', 'unknown or inactive user' + ); + END IF; + + -- ADMIN — bypass всех проверок. + IF v_role = 'ADMIN' THEN + RETURN jsonb_build_object('ok', true, 'admin', true); + END IF; + + -- EXECUTOR_RF: фильтр по user_org проекта отчёта. + IF v_role = 'EXECUTOR_RF' AND NOT v3.user_in_report_org(p_user_id, p_report_id) THEN + RETURN jsonb_build_object( + 'ok', false, + 'code', 'org_not_assigned', + 'detail', p_column_key + ); + END IF; + + -- 1. Активная сейчас фаза, в которой эта колонка перечислена для этой роли? + SELECT MAX(fp.closes_at) + INTO v_active_close + FROM v3.form3_phase fp + WHERE fp.rf_project_report_id = p_report_id + AND fp.role = v_role + AND p_column_key = ANY(fp.column_keys) + AND now() BETWEEN fp.opens_at AND fp.closes_at; + + IF v_active_close IS NOT NULL THEN + RETURN jsonb_build_object( + 'ok', true, + 'closes_at', v_active_close + ); + END IF; + + -- 2. Колонка В ПРИНЦИПЕ есть хоть в одной фазе этой роли на этом отчёте? + SELECT EXISTS ( + SELECT 1 + FROM v3.form3_phase fp + WHERE fp.rf_project_report_id = p_report_id + AND fp.role = v_role + AND p_column_key = ANY(fp.column_keys) + ) INTO v_role_has_col; + + IF NOT v_role_has_col THEN + RETURN jsonb_build_object( + 'ok', false, + 'code', 'role_not_allowed', + 'detail', p_column_key + ); + END IF; + + -- 3. Колонка доступна, но окно не активно. Подсказать ближайшее. + SELECT MIN(fp.opens_at) + INTO v_next_open + FROM v3.form3_phase fp + WHERE fp.rf_project_report_id = p_report_id + AND fp.role = v_role + AND p_column_key = ANY(fp.column_keys) + AND fp.opens_at > now(); + + IF v_next_open IS NOT NULL THEN + RETURN jsonb_build_object( + 'ok', false, + 'code', 'window_closed', + 'detail', p_column_key, + 'opens_at', v_next_open + ); + END IF; + + SELECT MAX(fp.closes_at) + INTO v_last_close + FROM v3.form3_phase fp + WHERE fp.rf_project_report_id = p_report_id + AND fp.role = v_role + AND p_column_key = ANY(fp.column_keys) + AND fp.closes_at <= now(); + + RETURN jsonb_build_object( + 'ok', false, + 'code', 'window_closed', + 'detail', p_column_key, + 'closes_at', v_last_close + ); +END; +$function$ +LANGUAGE plpgsql STABLE; + +-- ─── 3. Authz-обёртки upd_form3_cell/cells (доп. сигнатуры с p_user_id) ───── + +CREATE OR REPLACE FUNCTION v3.upd_form3_cells( + p_report_id INT, + p_changes JSONB, + p_user_id INT +) +RETURNS TABLE ( + row_type VARCHAR, + depth INT, + sort_order BIGINT, + data JSONB +) +AS $function$ +DECLARE + v_change JSONB; + v_column TEXT; + v_decision JSONB; + v_msg TEXT; +BEGIN + IF p_user_id IS NULL THEN + RAISE EXCEPTION 'role_not_allowed: '; + END IF; + + IF NOT EXISTS (SELECT 1 FROM v3.app_user WHERE id = p_user_id AND is_active) THEN + RAISE EXCEPTION 'role_not_allowed: unknown or inactive user %', p_user_id; + END IF; + + IF p_changes IS NULL OR jsonb_typeof(p_changes) <> 'array' THEN + RAISE EXCEPTION 'p_changes must be a JSONB array'; + END IF; + + FOR v_change IN SELECT * FROM jsonb_array_elements(p_changes) + LOOP + v_column := v_change->>'column'; + IF v_column IS NULL THEN + RAISE EXCEPTION 'change must have column: %', v_change; + END IF; + + v_decision := v3.can_edit3(p_report_id, v_column, p_user_id); + + IF NOT (v_decision->>'ok')::boolean THEN + IF v_decision->>'code' = 'role_not_allowed' THEN + RAISE EXCEPTION 'role_not_allowed: %', v_column; + + ELSIF v_decision->>'code' = 'org_not_assigned' THEN + RAISE EXCEPTION 'org_not_assigned: %', v_column; + + ELSIF v_decision->>'code' = 'window_closed' THEN + IF v_decision ? 'opens_at' THEN + v_msg := format('window_closed: %s (opens %s)', + v_column, v_decision->>'opens_at'); + ELSIF v_decision->>'closes_at' IS NOT NULL THEN + v_msg := format('window_closed: %s (closed %s)', + v_column, v_decision->>'closes_at'); + ELSE + v_msg := format('window_closed: %s (no phase)', v_column); + END IF; + RAISE EXCEPTION '%', v_msg; + + ELSE + RAISE EXCEPTION '%: %', v_decision->>'code', v_column; + END IF; + END IF; + END LOOP; + + RETURN QUERY + SELECT * FROM v3.upd_form3_cells(p_report_id, p_changes); +END; +$function$ +LANGUAGE plpgsql VOLATILE; + +CREATE OR REPLACE FUNCTION v3.upd_form3_cell( + p_report_id INT, + p_line_id INT, + p_column TEXT, + p_value JSONB, + p_user_id INT +) +RETURNS TABLE ( + row_type VARCHAR, + depth INT, + sort_order BIGINT, + data JSONB +) +AS $function$ + SELECT * FROM v3.upd_form3_cells( + p_report_id, + jsonb_build_array(jsonb_build_object( + 'line_id', p_line_id, + 'column', p_column, + 'value', p_value + )), + p_user_id + ); +$function$ +LANGUAGE sql VOLATILE; + +-- ─── 4. add_project — раскладка snapshot обоих отчётов ────────────────────── + +CREATE OR REPLACE FUNCTION v3.add_project( + p_name VARCHAR, + p_year INT, + p_org_unit_id INT, + p_level VARCHAR DEFAULT 'project', + p_parent_id INT DEFAULT NULL, + p_project_type VARCHAR DEFAULT NULL, + p_vsp_format VARCHAR DEFAULT NULL, + p_placement_type VARCHAR DEFAULT NULL, + p_object_address VARCHAR DEFAULT NULL, + p_staff_count INT DEFAULT NULL, + p_total_area NUMERIC DEFAULT NULL +) +RETURNS TABLE ( + project_id INT, + limit_report_id INT, + current_expenses_report_id INT +) +AS $function$ +DECLARE + v_pid INT; + v_lim INT; + v_cur INT; +BEGIN + IF p_name IS NULL OR length(trim(p_name)) = 0 THEN + RAISE EXCEPTION 'p_name обязателен'; + END IF; + IF p_year IS NULL THEN + RAISE EXCEPTION 'p_year обязателен'; + END IF; + IF p_org_unit_id IS NULL THEN + RAISE EXCEPTION 'p_org_unit_id обязателен'; + END IF; + IF NOT EXISTS (SELECT 1 FROM v3.org_unit WHERE id = p_org_unit_id) THEN + RAISE EXCEPTION 'org_unit id=% не существует', p_org_unit_id; + END IF; + IF p_parent_id IS NOT NULL AND + NOT EXISTS (SELECT 1 FROM v3.project WHERE id = p_parent_id AND level = 'program') THEN + RAISE EXCEPTION 'parent project id=% не существует или не имеет level=program', p_parent_id; + END IF; + + INSERT INTO v3.project ( + name, level, parent_id, org_unit_id, + project_type, vsp_format, placement_type, object_address, staff_count, total_area + ) VALUES ( + p_name, p_level, p_parent_id, p_org_unit_id, + p_project_type, p_vsp_format, p_placement_type, p_object_address, p_staff_count, p_total_area + ) RETURNING id INTO v_pid; + + INSERT INTO v3.rf_project_report (project_id, year, report_type) + VALUES (v_pid, p_year, 'LIMIT') RETURNING id INTO v_lim; + INSERT INTO v3.rf_project_report (project_id, year, report_type) + VALUES (v_pid, p_year, 'CURRENT_EXPENSES') RETURNING id INTO v_cur; + + -- Snapshot RBAC-фаз (иначе default deny — отчёт read-only). + PERFORM v3.copy_template_to_report(v_lim); + PERFORM v3.copy_template_to_report(v_cur); + + PERFORM v3.log_event( + 'PROJECT_CREATE', 'PROJECT_CREATE', + jsonb_strip_nulls(jsonb_build_object( + 'project_id', v_pid, + 'name', p_name, + 'year', p_year, + 'level', p_level, + 'parent_id', p_parent_id, + 'org_unit_id', p_org_unit_id, + 'project_type', p_project_type, + 'vsp_format', p_vsp_format, + 'placement_type', p_placement_type, + 'object_address', p_object_address, + 'staff_count', p_staff_count, + 'total_area', p_total_area, + 'limit_report_id', v_lim, + 'current_expenses_report_id', v_cur + )) + ); + + RETURN QUERY SELECT v_pid, v_lim, v_cur; +END; +$function$ +LANGUAGE plpgsql VOLATILE; + diff --git a/api/alembic/versions/sql/0003_initial_data.sql b/api/alembic/versions/sql/0003_initial_data.sql index 6c98e5e..bef1b34 100644 --- a/api/alembic/versions/sql/0003_initial_data.sql +++ b/api/alembic/versions/sql/0003_initial_data.sql @@ -4250,4 +4250,29 @@ INSERT INTO v3.expense_item_form_type (expense_item_id,form_type_code) VALUES INSERT INTO v3.expense_item_form_type (expense_item_id,form_type_code) VALUES (798,'FORM_3'); -REFRESH MATERIALIZED VIEW CONCURRENTLY v3.mv_expense_item_tree; \ No newline at end of file +REFRESH MATERIALIZED VIEW CONCURRENTLY v3.mv_expense_item_tree; + + +-- ─── 5. Seed фаз FORM_3 (идемпотентно, только FORM_3) ────────────────────── +-- DELETE скоупится на FORM_3 → фазы FORM_1/2/4 не затрагиваются. +DELETE FROM v3.phase_template WHERE form_type = 'FORM_3'; + +INSERT INTO v3.phase_template + (form_type, sheet, phase_code, role, column_keys, opens_at, closes_at) +SELECT 'FORM_3', sh, 'RF_FILL_2026', 'EXECUTOR_RF', + ARRAY[ + 'q1.adj_by_items','q1.adj_increase','q1.m1','q1.m2','q1.m3', + 'q2.adj_by_items','q2.adj_increase','q2.m1','q2.m2','q2.m3', + 'q3.adj_by_items','q3.adj_increase','q3.m1','q3.m2','q3.m3', + 'q4.adj_by_items','q4.adj_increase','q4.m1','q4.m2','q4.m3','q4.spod' + ], + '2026-01-01 00:00:00+00'::timestamptz, + '2026-12-31 23:59:59+00'::timestamptz +FROM (VALUES ('LIMIT'), ('CURRENT_EXPENSES')) AS s(sh); + +-- ─── 6. Backfill v3.form3_phase для существующих отчётов ──────────────────── +-- ON CONFLICT DO NOTHING внутри copy_template_to_report → повторный прогон +-- ничего не дублирует. +SELECT id, v3.copy_template_to_report(id) AS phases_inserted + FROM v3.rf_project_report + ORDER BY id; \ No newline at end of file diff --git a/api/src/api/v1/org_unit.py b/api/src/api/v1/org_unit.py index 725bcd9..661a5bc 100644 --- a/api/src/api/v1/org_unit.py +++ b/api/src/api/v1/org_unit.py @@ -6,7 +6,7 @@ from src.core.errors import AccessDeniedException from src.api.v1.deps import get_current_active_user, require_admin from src.db.models.app_user import AppUser from src.db.session import get_db -from src.domain.schemas import BaseListResponse, BaseSingleResponse, OrgUnitBaseSchema, OrgUnitListSchema, OrgUnitSchema, OrgUnitUpdateSchema, ResponseBase +from src.domain.schemas import BaseListResponse, BaseSingleResponse, OrgUnitCreateSchema, OrgUnitListSchema, OrgUnitSchema, OrgUnitUpdateSchema, ResponseBase from src.services.org_unit_service import OrgUnitService @@ -66,7 +66,7 @@ async def org_unit_id( @router.post("/") async def create_ssp( - org_data: OrgUnitBaseSchema, + org_data: OrgUnitCreateSchema, db: AsyncSession = Depends(get_db), current_user: AppUser = Depends(require_admin), ) -> BaseSingleResponse[OrgUnitSchema]: diff --git a/api/src/api/v1/websocket.py b/api/src/api/v1/websocket.py index d23a114..662b57c 100644 --- a/api/src/api/v1/websocket.py +++ b/api/src/api/v1/websocket.py @@ -14,6 +14,8 @@ from sqlalchemy.exc import IntegrityError from fastapi import APIRouter, WebSocket, WebSocketDisconnect, status from sqlalchemy.ext.asyncio import AsyncSession +from src.services.rf_project_report_service import RfProjectReportService +from src.services.rf_project_report_line_service import RfProjectReportLineService from src.repository.user_repository import UserRepository from src.services.budget_line_service import BudgetLineService from src.api.v1.deps import get_user_by_token @@ -490,7 +492,8 @@ class FormEventProcess: class ProjectEventProcess: def __init__(self, db: AsyncSession): self.project_service: ProjectService = ProjectService(db) - self.bf_service: BudgetFormService = BudgetFormService(db) + self.prl_service: RfProjectReportLineService = RfProjectReportLineService(db) + self.pr_service: RfProjectReportService = RfProjectReportService(db) self.user_service: UserService = UserService(db) async def process( @@ -573,11 +576,16 @@ class ProjectEventProcess: expense_item_id: Optional[int] = None } """ - project = await self.project_service.get(project_id=project_id, user=user) - if not project: + project_report = await self.pr_service.get( + year=year, + report_type=report_type, + project_id=project_id, + ) + if not project_report: return None - - return await self.project_service.add_form3_line( + + ids = await self.prl_service.get_ids(project_report_id=project_report.id) + result = await self.project_service.add_form3_line( project_id=project_id, year=year, report_type=report_type, @@ -585,6 +593,16 @@ class ProjectEventProcess: user=user, ) + final_result = { + "data": result, + "new_line_id": None, + } + for el in result: + if el[3]["line_id"] and el[3]["line_id"] not in ids: + final_result["new_line_id"] = el[3]["line_id"] + return final_result + return final_result + async def __del_row( self, event_data: dict, @@ -595,7 +613,7 @@ class ProjectEventProcess: ) -> list[tuple]: """ data = { - "line_id": int, + "row_id": int, } """ project = await self.project_service.get(project_id=project_id, user=user) @@ -606,7 +624,7 @@ class ProjectEventProcess: project_id=project_id, year=year, report_type=report_type, - line_id=event_data["line_id"], + line_id=event_data["row_id"], user=user, ) @@ -776,6 +794,7 @@ async def process_websocket( async with get_db_session(user_id=user_id) as db: processor = processor_cls(db) t0 = time.perf_counter() + data_old = data.copy() data["result"] = await processor.process( event_data=data, user_id=user_id, @@ -789,7 +808,7 @@ async def process_websocket( "time_ms": f"{db_ms:.2f}", "event": data.get("event"), } - extra.update(data) + extra.update(data_old) logger.info( f"db_time: {extra}", extra=extra, diff --git a/api/src/db/models/__init__.py b/api/src/db/models/__init__.py index b1130b0..d8e60fa 100644 --- a/api/src/db/models/__init__.py +++ b/api/src/db/models/__init__.py @@ -10,6 +10,7 @@ from src.db.models.collegial_approval import CollegialApproval from src.db.models.contract_detail import ContractDetail from src.db.models.contract_summary import ContractSummary from src.db.models.expense_item import ExpenseItem +from src.db.models.form3_phase import Form3Phase from src.db.models.form_limit import FormLimit from src.db.models.form_phase import FormPhase from src.db.models.form_type import FormType diff --git a/api/src/db/models/form3_phase.py b/api/src/db/models/form3_phase.py new file mode 100644 index 0000000..efccb10 --- /dev/null +++ b/api/src/db/models/form3_phase.py @@ -0,0 +1,27 @@ +from datetime import datetime + +from sqlalchemy import ARRAY, CheckConstraint, DateTime, ForeignKey, Index, Integer, String, Text, text +from sqlalchemy.orm import Mapped, mapped_column + +from src.db.base import Base + + +class Form3Phase(Base): + __tablename__ = "form3_phase" + __table_args__ = ( + CheckConstraint(text("cardinality(column_keys) > 0"), name="chk_v3_form3_phase_columns"), + CheckConstraint(text("role != 'ADMIN'"), name="chk_v3_form3_phase_no_admin"), + CheckConstraint(text("closes_at > opens_at"), name="chk_v3_form3_phase_window"), + Index("ix_v3_form3_phase_active", "rf_project_report_id", "role", "opens_at", "closes_at"), + Index("ix_v3_form3_phase_columns_gin", "column_keys", postgresql_using="gin"), + {"schema": "v3"}, + ) + + rf_project_report_id: Mapped[int] = mapped_column( + Integer, ForeignKey("v3.rf_project_report.id", ondelete="CASCADE"), primary_key=True + ) + phase_code: Mapped[str] = mapped_column(String, primary_key=True) + role: Mapped[str] = mapped_column(String, ForeignKey("v3.role.code")) + column_keys: Mapped[list[str]] = mapped_column(ARRAY(Text)) + opens_at: Mapped[datetime] = mapped_column(DateTime(timezone=True)) + closes_at: Mapped[datetime] = mapped_column(DateTime(timezone=True)) diff --git a/api/src/domain/schemas.py b/api/src/domain/schemas.py index 6b2dea1..47ae594 100644 --- a/api/src/domain/schemas.py +++ b/api/src/domain/schemas.py @@ -233,6 +233,10 @@ class OrgUnitBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) +class OrgUnitCreateSchema(OrgUnitBaseSchema): + title: str = Field(..., min_length=1) + + class OrgUnitUpdateSchema(OrgUnitBaseSchema): title: Optional[str] = None is_ssp: Optional[bool] = None @@ -358,7 +362,7 @@ class AddProjectBody(BaseModel): max_length=30, pattern=r"^[^+\-\/\\=&*\s]{1,30}$", ) - year: int + year: int = Field(default_factory=lambda: datetime.now().year) branch_id: int level: Literal["project", "program"] = "project" parent_id: Optional[int] = None @@ -370,6 +374,10 @@ class AddProjectBody(BaseModel): staff_count: Optional[int] = None total_area: Optional[float] = None + @field_validator("year", mode="before") + @classmethod + def optional_year(cls, v: Any) -> Any: + return v or datetime.now().year class AddLineSchema(BaseModel): expense_item_id: Optional[int] = None diff --git a/api/src/repository/budget_line_repository.py b/api/src/repository/budget_line_repository.py index 0ca3c71..ed113c0 100644 --- a/api/src/repository/budget_line_repository.py +++ b/api/src/repository/budget_line_repository.py @@ -12,7 +12,7 @@ class BudgetLineRepository: query = select(BudgetLine).where(BudgetLine.id == budget_line_id).limit(1) return (await self.db.execute(query)).scalar_one_or_none() - async def get_list(self, budget_line_ids: list[int]) -> BudgetLine | None: + async def get_list(self, budget_line_ids: list[int]) -> list[BudgetLine]: query = select(BudgetLine).where(BudgetLine.id.in_(budget_line_ids)) return (await self.db.execute(query)).scalars().all() diff --git a/api/src/repository/project_repository.py b/api/src/repository/project_repository.py index 1faae5e..f0492bf 100644 --- a/api/src/repository/project_repository.py +++ b/api/src/repository/project_repository.py @@ -14,7 +14,7 @@ class ProjectRepository: self.db = db @staticmethod - def _serialize_project(project: Project, org_unit_name: str | None, report_count: int) -> dict: + def _serialize_project(project: Project, org_unit_name: str | None, report_count: int, years: list[InterruptedError] | None = None) -> dict: return { "id": project.id, "name": project.name, @@ -29,6 +29,7 @@ class ProjectRepository: "org_unit_id": project.org_unit_id, "org_unit_name": org_unit_name, "report_count": int(report_count), + "years": years, } @staticmethod @@ -66,11 +67,19 @@ class ProjectRepository: .scalar_subquery() ) + report_years_subq = ( + select(RfProjectReport.year) + .where(RfProjectReport.project_id == Project.id) + .distinct() + .scalar_subquery() + ) + query = ( select( Project, OrgUnit.title.label("org_unit_name"), report_count_subq.label("report_count"), + func.array(report_years_subq).label("years"), ) .outerjoin(OrgUnit, OrgUnit.id == Project.org_unit_id) .order_by(Project.id) @@ -82,7 +91,7 @@ class ProjectRepository: query = query.limit(limit) rows = (await self.db.execute(query)).all() - payload = [self._serialize_project(row[0], row[1], row[2]) for row in rows] + payload = [self._serialize_project(row[0], row[1], row[2], row[3]) for row in rows] if not with_count: return payload @@ -101,11 +110,18 @@ class ProjectRepository: .where(RfProjectReport.project_id == Project.id) .scalar_subquery() ) + report_years_subq = ( + select(RfProjectReport.year) + .where(RfProjectReport.project_id == Project.id) + .distinct() + .scalar_subquery() + ) query = ( select( Project, OrgUnit.title.label("org_unit_name"), report_count_subq.label("report_count"), + func.array(report_years_subq).label("years"), ) .outerjoin(OrgUnit, OrgUnit.id == Project.org_unit_id) .where(Project.id == project_id) @@ -117,7 +133,7 @@ class ProjectRepository: row = (await self.db.execute(query)).first() if not row: return None - return self._serialize_project(row[0], row[1], row[2]) + return self._serialize_project(row[0], row[1], row[2], row[3]) async def get_reports(self, project_id: int) -> list[dict]: line_count_subq = ( diff --git a/api/src/repository/rf_project_report_line_repository.py b/api/src/repository/rf_project_report_line_repository.py new file mode 100644 index 0000000..3ec5abe --- /dev/null +++ b/api/src/repository/rf_project_report_line_repository.py @@ -0,0 +1,39 @@ +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from src.db.models.rf_project_report_line import RfProjectReportLine + + + +class RfProjectReportLineRepository: + def __init__(self, db: AsyncSession): + self.db = db + + async def get(self, line_id: int) -> RfProjectReportLine | None: + query = select( + RfProjectReportLine + ).where( + RfProjectReportLine.id == line_id + ).limit(1) + return (await self.db.execute(query)).scalar_one_or_none() + + async def get_list(self, line_ids: list[int]) -> list[RfProjectReportLine]: + query = select( + RfProjectReportLine + ).where( + RfProjectReportLine.id.in_(line_ids) + ) + return (await self.db.execute(query)).scalars().all() + + async def get_ids( + self, + project_report_id: int, + ) -> list[int]: + + query = select( + RfProjectReportLine.id + ).where( + RfProjectReportLine.rf_project_report_id == project_report_id + ) + return (await self.db.execute(query)).scalars().all() + diff --git a/api/src/repository/rf_project_report_repository.py b/api/src/repository/rf_project_report_repository.py new file mode 100644 index 0000000..6337a80 --- /dev/null +++ b/api/src/repository/rf_project_report_repository.py @@ -0,0 +1,33 @@ +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from src.db.models.rf_project_report import RfProjectReport + + + +class RfProjectReportRepository: + def __init__(self, db: AsyncSession): + self.db = db + + async def get( + self, + report_id: int | None = None, + year: int | None = None, + report_type: str | None = None, + project_id: int | None = None, + ) -> RfProjectReport | None: + assert report_id is not None or all((el is not None for el in (year, report_type, project_id))) + query = select( + RfProjectReport + ) + if report_id is not None: + query = query.where(RfProjectReport.id == report_id) + else: + query = query.where( + RfProjectReport.year == year, + RfProjectReport.report_type == report_type, + RfProjectReport.project_id == project_id + ) + + query = query.limit(1) + return (await self.db.execute(query)).scalar_one_or_none() diff --git a/api/src/services/rf_project_report_line_service.py b/api/src/services/rf_project_report_line_service.py new file mode 100644 index 0000000..e29c48d --- /dev/null +++ b/api/src/services/rf_project_report_line_service.py @@ -0,0 +1,34 @@ + +from sqlalchemy.ext.asyncio import AsyncSession + +from src.db.models.rf_project_report_line import RfProjectReportLine +from src.repository.rf_project_report_line_repository import RfProjectReportLineRepository +from src.db.models.app_user import AppUser + + + + +class RfProjectReportLineService: + def __init__(self, db: AsyncSession): + self.db = db + self.prl_repo = RfProjectReportLineRepository(db) + + async def get( + self, + user: AppUser, + line_id: int, + ) -> RfProjectReportLine | None: + return await self.prl_repo.get(line_id=line_id) + + async def get_list( + self, + user: AppUser, + line_ids: list[int], + ) -> list[RfProjectReportLine]: + return await self.prl_repo.get_list(line_ids=line_ids) + + async def get_ids( + self, + project_report_id: int, + ) -> list[int]: + return await self.prl_repo.get_ids(project_report_id=project_report_id) diff --git a/api/src/services/rf_project_report_service.py b/api/src/services/rf_project_report_service.py new file mode 100644 index 0000000..293bf03 --- /dev/null +++ b/api/src/services/rf_project_report_service.py @@ -0,0 +1,31 @@ + +from sqlalchemy.ext.asyncio import AsyncSession + +from src.db.models.rf_project_report import RfProjectReport +from src.repository.rf_project_report_repository import RfProjectReportRepository +from src.db.models.rf_project_report_line import RfProjectReportLine +from src.repository.rf_project_report_line_repository import RfProjectReportLineRepository +from src.db.models.app_user import AppUser + + + + +class RfProjectReportService: + def __init__(self, db: AsyncSession): + self.db = db + self.pr_repo = RfProjectReportRepository(db) + + async def get( + self, + user: AppUser| None = None, + report_id: int | None = None, + year: int | None = None, + report_type: str | None = None, + project_id: int | None = None, + ) -> RfProjectReport | None: + return await self.pr_repo.get( + report_id=report_id, + year=year, + report_type=report_type, + project_id=project_id, + ) diff --git a/api/tests/integration/test_projects_api_smoke.py b/api/tests/integration/test_projects_api_smoke.py index dc21b78..b480698 100644 --- a/api/tests/integration/test_projects_api_smoke.py +++ b/api/tests/integration/test_projects_api_smoke.py @@ -48,6 +48,31 @@ def _add_line(client, admin_tokens, auth_headers, project_id: int) -> int: pytest.skip("Не удалось подобрать expense_item_id для add_form3_line в текущей БД") +def test_create_project_smoke(client, admin_tokens, auth_headers): + name = f"PT_{uuid.uuid4().hex[:10]}" + response = client.post( + "/api/v1/projects", + json={"name": name, "year": None, "branch_id": 1}, + headers=auth_headers(admin_tokens), + ) + assert response.status_code == 200 + payload = response.json() + assert "project_id" in payload + assert (project_id := payload["project_id"]) is not None + response = client.get( + f"/api/v1/projects/{project_id}", + headers=auth_headers(admin_tokens), + ) + assert response.status_code == 200 + payload = response.json() + assert "result" in payload + assert "id" in payload["result"] + assert payload["result"]["id"] == project_id + assert "years" in payload["result"] + assert isinstance(payload["result"]["years"], list) + assert len(payload["result"]["years"]) == 1 + + def test_projects_write_smoke(client, admin_tokens, auth_headers): project_id, name = _create_project(client, admin_tokens, auth_headers) diff --git a/api/tests/sqls/fixture.sql b/api/tests/sqls/fixture.sql index 6aa3e65..8e6ac01 100644 --- a/api/tests/sqls/fixture.sql +++ b/api/tests/sqls/fixture.sql @@ -26,7 +26,8 @@ SELECT setval('v3.budget_line_id_seq', 1); INSERT INTO v3.form_phase (budget_form_id,sheet,phase_code,"role",column_keys,opens_at,closes_at) VALUES (1,'AHR','test','DFIP','{{plan.q1}}','2026-05-05 03:00:00+03','2026-06-06 03:00:00+03'); -INSERT INTO v3.vsp (id,branch_id,reg_number,address,format,opened_at,placement_type,staff_count,total_area,closed_at,is_active,updated_at,is_deleted,created_at,created_by,system_code,updated_by,vsp_type,notes,location_form,numbers,rent_contract_num,rent_end_date) VALUES - (1,2,'Тестовый всп 1','Тестовая 12','укукк','2026-05-07','ывс',2026,230,'2026-06-16',false,'2026-06-18 15:46:38.611903',false,'2026-06-04 14:36:59.737727',1,'1233',91,'','','встроенное помещение',NULL,'',NULL), - (2,2,'Test12 -----','Тестовая 125','формат 15 ','2026-06-08',NULL,NULL,58,NULL,true,'2026-06-16 18:53:17.986651',false,'2026-06-09 09:04:33.29858',91,'123-1234',91,'субаренда','Работает ','аренда',155,'12-45','2026-10-02'); -SELECT setval('v3.vsp_id_seq', 2); +INSERT INTO v3.vsp (id,branch_id,reg_number,address,format,opened_at,placement_type,staff_count,total_area,closed_at,is_active,updated_at,is_deleted,created_at,created_by,system_code,updated_by,vsp_type,notes,rent_contract_num,rent_end_date) VALUES + (1,2,'Тестовый всп 1','Тестовая 12','укукк','2026-05-07','ывс',2026,230,'2026-06-16',false,'2026-06-18 15:46:38.611903',false,'2026-06-04 14:36:59.737727',1,'1233',91,'','','',NULL), + (2,2,'Test12 -----','Тестовая 125','формат 15 ','2026-06-08',NULL,NULL,58,NULL,true,'2026-06-16 18:53:17.986651',false,'2026-06-09 09:04:33.29858',91,'123-1234',91,'субаренда','Работает ','12-45','2026-10-02'), + (3,2,'3434','победы 12','формат','2026-06-01','субаренда', NULL,34,NULL,true,'2026-07-01 13:32:35.327097',false,'2026-06-29 15:53:50.236062',91,'3434',NULL,'2','примечание','567','2026-07-01'); +SELECT setval('v3.vsp_id_seq', 3); diff --git a/web/src/api/dict-vsp.js b/web/src/api/dict-vsp.js index 6bf40c6..43cf247 100644 --- a/web/src/api/dict-vsp.js +++ b/web/src/api/dict-vsp.js @@ -21,7 +21,7 @@ export const DictVspApi = { responseType: "blob", }); }, - getDropdownVsp(params){ - return api.get(`/dict/info/dropdown`, params).then((r) => r.data); - } + getDropdownVsp(params) { + return api.get(`/dict/info/dropdown`, { params }).then((r) => r.data); + }, }; diff --git a/web/src/api/projects.js b/web/src/api/projects.js new file mode 100644 index 0000000..1e2397f --- /dev/null +++ b/web/src/api/projects.js @@ -0,0 +1,34 @@ +import api from "./client"; + +export const ProjectsApi = { + list: (params) => { + return api.get(`/projects`, { params }).then((r) => r.data); + }, + + get: (id) => { + return api.get(`/projects/${id}`).then((r) => r.data); + }, + + create: (data) => { + return api.post("/projects", data).then((r) => r.data); + }, + + update: (id, data) => { + return api.patch(`/projects/${id}`, data).then((r) => r.data); + }, + + delete: (id) => { + return api.delete(`/projects/${id}`).then((r) => r.data); + }, + + getTableData: (id, sheetName, year) => { + return api + .get(`/projects/${id}/report/${year}/${sheetName}`) + .then((r) => r.data); + }, + export: (id, year, sheetName) => { + return api.get(`/export/project/${id}/report/${year}/${sheetName}`, { + responseType: "blob", + }); + }, +}; diff --git a/web/src/app/Routes.jsx b/web/src/app/Routes.jsx index 2069477..d0945a3 100644 --- a/web/src/app/Routes.jsx +++ b/web/src/app/Routes.jsx @@ -17,6 +17,7 @@ import { CircularProgress } from '@mui/material'; import NewTablePage from '../pages/NewTablePage.jsx'; import TablesTest from '../pages/TablesTest.jsx'; import NewFormTablePage from '../pages/NewFormTablePage.jsx' +import ProjectsPage from '../pages/ProjectsPage/ProjectsPage.jsx'; export const PrivateRoute = () => { const { isAuthenticated, loading } = useAuth(); @@ -37,8 +38,10 @@ export const AppRoutes = () => { }> } /> } /> + }/> } /> } /> + } /> } /> } /> } /> @@ -49,7 +52,7 @@ export const AppRoutes = () => { } /> } /> } /> - } /> + } /> diff --git a/web/src/components/HeaderMenu/HeaderSwitch.jsx b/web/src/components/HeaderMenu/HeaderSwitch.jsx index dcd49f1..561da87 100644 --- a/web/src/components/HeaderMenu/HeaderSwitch.jsx +++ b/web/src/components/HeaderMenu/HeaderSwitch.jsx @@ -4,7 +4,7 @@ import { NavLink } from 'react-router-dom'; import styled from '@emotion/styled'; import { TasksSvg, AdminPanelSvg, DictSvg } from '../common/icons/icons'; import { useAuth } from '../../app/context/AuthProvider'; -import { ROLES_NAME_ID } from '../../constants'; +import { ROLES_NAME_ID } from '../../constants/constants'; const Switch = styled.div` margin-left: 1rem; diff --git a/web/src/components/RealtimeTable/Cell/Cell/Cell.jsx b/web/src/components/RealtimeTable/Cell/Cell/Cell.jsx index 2164513..50a7c4a 100644 --- a/web/src/components/RealtimeTable/Cell/Cell/Cell.jsx +++ b/web/src/components/RealtimeTable/Cell/Cell/Cell.jsx @@ -31,12 +31,13 @@ const LockBadge = styled.div` `; // Функция для подсветки текста -const highlightText = (text, searchQuery) => { - if (!searchQuery || !text) return text; - - const escapedQuery = searchQuery.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - const regex = new RegExp(`(${escapedQuery})`, 'gi'); +const highlightText = (text, searchQueries) => { + if (!text) return text; + const cleanSearchQueries = searchQueries.filter(q => (q !== undefined && q !== '')); + if (cleanSearchQueries.length == 0) return text; + const escapedQueries = cleanSearchQueries.map(query => query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); + const regex = new RegExp(`(${ escapedQueries.join('|')})`, 'gi'); const parts = text.split(regex); return parts.map((part, index) => @@ -89,7 +90,7 @@ const formatNumber = (value, asInteger = false) => { }); }; -const Cell = React.memo(({ cell, row, column, onClick, globalFilter, backgroundColor, color, isEditable }) => { +const Cell = React.memo(({ cell, row, column, onClick, globalFilter, columnFilter, backgroundColor, color, isEditable }) => { const { lockedCells } = useRealtime(); const cellKey = `${row.id}_${column.id}`; @@ -105,9 +106,10 @@ const Cell = React.memo(({ cell, row, column, onClick, globalFilter, backgroundC } const highlightedContent = useMemo(() => { - return highlightText(textValue, globalFilter); + return highlightText(textValue, [globalFilter, columnFilter]); }, [textValue, globalFilter]); + // Базовые стили для заблокированной ячейки const lockedStyles = isLocked ? { border: '2px solid #e0e0e0', diff --git a/web/src/components/RealtimeTable/Cell/EditCell/EditCell.jsx b/web/src/components/RealtimeTable/Cell/EditCell/EditCell.jsx index 5a0687c..0f87650 100644 --- a/web/src/components/RealtimeTable/Cell/EditCell/EditCell.jsx +++ b/web/src/components/RealtimeTable/Cell/EditCell/EditCell.jsx @@ -2,15 +2,18 @@ import { useEffect, useRef, useLayoutEffect, useState } from 'react'; import { isFormula, extractFormula, calculateFormula, formatNumber } from '../../utils/formulaUtils'; import { saveToStorage, loadFromStorage } from '../../utils/localStorageUtils'; +import { useRealtime } from '../../contexts/RealtimeContext'; + +const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId, table }) => { + const { endEditing: contextEndEditing } = useRealtime(); -const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId }) => { const [curValue, setCurValue] = useState(value); const [displayValue, setDisplayValue] = useState(value); const [isFormulaMode, setIsFormulaMode] = useState(false); - + // Ключ для хранения формул в localStorage const storageKey = `formula_${tableId}_${cellId}`; - + const trFrag = refCell.current.offsetParent.offsetParent; const tdFrag = refCell.current.offsetParent; const left = tdFrag.offsetLeft; @@ -69,7 +72,6 @@ const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId }) => { if (isFormula(curValue)) { // Сохраняем формулу в localStorage saveToStorage(storageKey, curValue); - // Вычисляем и сохраняем результат try { const formula = extractFormula(curValue); @@ -108,6 +110,32 @@ const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId }) => { return displayValue; }; + const finishEditing = () => { + if (!disabled) { + handleSave(); + } + const editingCell = table.getState().editingCell || null; + if (editingCell) { + contextEndEditing?.(editingCell.row, editingCell.column); + } + }; + + useEffect(() => { + const handleClickOutside = (event) => { + // Проверяем, был ли клик внутри элемента редактирования + const editElement = ref.current; + if (editElement && !editElement.contains(event.target)) { + finishEditing(); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [ref, finishEditing]); + return ( @@ -150,16 +178,10 @@ const EditCell = ({ refCell, onChange, disabled, value, tableId, cellId }) => { }} onChange={handleChangeValue} value={curValue} - onBlur={handleSave} onKeyDown={(e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); - handleSave(); - // Закрываем редактирование - if (onChange) { - // Симулируем завершение редактирования - document.activeElement?.blur(); - } + finishEditing(); } }} placeholder={isFormulaMode ? 'Введите формулу (начинается с =)' : ''} diff --git a/web/src/components/RealtimeTable/RealtimeTable.jsx b/web/src/components/RealtimeTable/RealtimeTable.jsx index 67284d0..c40ca7e 100644 --- a/web/src/components/RealtimeTable/RealtimeTable.jsx +++ b/web/src/components/RealtimeTable/RealtimeTable.jsx @@ -26,11 +26,11 @@ import { useRealtime } from './contexts/RealtimeContext'; import { toast } from 'react-toastify'; import { CircularProgress } from '@mui/material'; import { additionVspRowTable } from './constants/addingRowConfig'; -import { SelectVspModal } from './Modals/selectVspModal'; +import { SelectVspModal } from './Modals/SelectVspModal'; import { getRowId } from './utils/rowUtils'; -const RealtimeTable = ({ formType, formId, sheetName, direction }) => { - const { data, setData, isLoading: isTableLoading, editingCells: dataEditingCells } = useRealtimeData(formId, sheetName, direction); +const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => { + const { data, setData, isLoading: isTableLoading, editingCells: dataEditingCells } = useRealtimeData(formId, sheetName, direction, formType, year); const [globalFilter, setGlobalFilter] = useState(''); const [showColumnFilters, setShowColumnFilters] = useState(false); const [selectedColumnId, setSelectedColumnId] = useState(); @@ -63,7 +63,6 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => { addRow: contextAddRow, deleteRow: contextDeleteRow, startEditing: contextStartEditing, - endEditing: contextEndEditing, } = useRealtime(); const { @@ -180,8 +179,6 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => { if (cell) { if (editingCell) return; contextStartEditing?.(cell.row, cell.column); - } else { - contextEndEditing?.(editingCell.row, editingCell.column); } }, columnVirtualizerOptions: ({ table }) => ({ @@ -229,6 +226,12 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => { minHeight: '1px', maxHeight: '1px', visibility: 'hidden', + '& svg': { + height: '1px', + minHeight: '1px', + maxHeight: '1px', + visibility: 'hidden', + } }, }, muiTablePaperProps: getTablePaperStyles(), @@ -360,6 +363,8 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => { formId={formId} sheetName={sheetName} direction={direction} + year={year} + isProject={formType == 'PROJECT'} />
@@ -420,8 +425,6 @@ const RealtimeTable = ({ formType, formId, sheetName, direction }) => { onClose={() => setIsOpenModalSelectVsp(false)} formId={formId} onSelect={handleAddVspRow} - // vspOptions={} - // selectedVSP={} title="Выбор ВСП" /> diff --git a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx index 5725c84..292ee04 100644 --- a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx +++ b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx @@ -18,7 +18,7 @@ import CollapsibleTree from '../../common/CollapsibleTree'; import ZoomSlider from './ZoomSlider'; import SearchComponent from '../../common/SearchComponent'; import { ExportDefaultButton } from '../../common/Buttons/ButtonsActions'; -import { exportSheet } from '../../../utils/exportForm'; +import { exportSheet, exportSheetProject } from '../../../utils/exportFile'; const SettingPanel = ({ selectedColumnId, @@ -39,6 +39,8 @@ const SettingPanel = ({ formId, sheetName, direction, + year, + isProject, }) => { const [isPinned, setIsPinned] = useState(false); const [isExporting, setIsExporting] = useState(false); @@ -76,7 +78,16 @@ const SettingPanel = ({ const handleClickDeleteFormula = () => { }; const handleExport = async () => { - if (!formId || !sheetName || isExporting) return; + if (isExporting) return; + if (isProject) { + if (!formId || !sheetName || !year) return; + setIsExporting(true); + await exportSheetProject(formId, sheetName, year); + setIsExporting(false); + return; + } + + if (!formId || !sheetName) return; setIsExporting(true); await exportSheet(formId, sheetName, direction); setIsExporting(false); @@ -115,40 +126,26 @@ const SettingPanel = ({ - + {!isProject && + <> + + + + + + + + - - - - - - - - - - - - - - - - - {/* - - - - - - - - - - - - - - - */} + + + + + + + + + } {columns ? ( diff --git a/web/src/components/RealtimeTable/TableHead/TableHead.jsx b/web/src/components/RealtimeTable/TableHead/TableHead.jsx index 9f819d9..efd1296 100644 --- a/web/src/components/RealtimeTable/TableHead/TableHead.jsx +++ b/web/src/components/RealtimeTable/TableHead/TableHead.jsx @@ -313,10 +313,10 @@ const FilterCell = ({ column, table }) => { onChange={(e) => handleFilterChange(e.target.value)} style={{ width: '100%', - padding: '4px 6px', - fontSize: '11px', + padding: '0.25rem 0.375rem', + fontSize: '0.6875rem', border: '1px solid #ddd', - borderRadius: '4px', + borderRadius: '0.25rem', backgroundColor: 'white', }} > @@ -330,23 +330,30 @@ const FilterCell = ({ column, table }) => { ); case 'range': { - // Для диапазона можно реализовать два поля const [min, max] = column.getFilterValue() || ['', '']; return ( -
+
{/* 4px */} column.setFilterValue([e.target.value, max])} - style={{ width: '50%', padding: '4px', fontSize: '11px' }} + style={{ + width: '50%', + padding: '0.25rem', + fontSize: '0.6875rem' + }} /> column.setFilterValue([min, e.target.value])} - style={{ width: '50%', padding: '4px', fontSize: '11px' }} + style={{ + width: '50%', + padding: '0.25rem', + fontSize: '0.6875rem' + }} />
); @@ -361,10 +368,10 @@ const FilterCell = ({ column, table }) => { placeholder="Поиск..." style={{ width: '100%', - padding: '4px 6px', - fontSize: '11px', + padding: '0.25rem 0.375rem', + fontSize: '0.6875rem', border: '1px solid #ddd', - borderRadius: '4px', + borderRadius: '0.25rem', boxSizing: 'border-box', }} /> diff --git a/web/src/components/RealtimeTable/constants/FORM_2/AHR.js b/web/src/components/RealtimeTable/constants/FORM_2/AHR.js index 269dd80..f351d21 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/AHR.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/AHR.js @@ -1,3227 +1,3190 @@ -import { - greenColumn, - whiteColumn, - orangeColumn, - yellowColumn, - redColumn, - blueColumn, -} from "../columnColors"; -export const config = { - config: { - colors: { - "data.header.section_code": { - color_type: greenColumn, - accessorKey: "data.header.section_code", - }, - "data.header.item_id": { - color_type: greenColumn, - accessorKey: "data.header.item_id", - }, - "data.header.num_group": { - color_type: greenColumn, - accessorKey: "data.header.num_group", - }, - "data.header.name": { - color_type: greenColumn, - accessorKey: "data.header.name", - }, - "data.header.vsp_id": { - color_type: greenColumn, - accessorKey: "data.header.vsp_id", - }, - "data.plan.q1": { - color_type: greenColumn, - accessorKey: "data.plan.q1", - }, - "data.plan.q2": { - color_type: greenColumn, - accessorKey: "data.plan.q2", - }, - "data.plan.q3": { - color_type: greenColumn, - accessorKey: "data.plan.q3", - }, - "data.plan.q4": { - color_type: greenColumn, - accessorKey: "data.plan.q4", - }, - "data.plan.year": { - color_type: greenColumn, - accessorKey: "data.plan.year", - }, - "data.plan.comment": { - color_type: greenColumn, - accessorKey: "data.plan.comment", - }, - "data.2026_god_field_field": { - color_type: whiteColumn, - accessorKey: "data.2026_god_field_field", - }, - "data.totals.fact_year": { - color_type: greenColumn, - accessorKey: "data.totals.fact_year", - }, - "data.totals.pay_year": { - color_type: blueColumn, - accessorKey: "data.totals.pay_year", - }, - "data.seq_dfip.q1": { - color_type: greenColumn, - accessorKey: "data.seq_dfip.q1", - }, - "data.seq_dfip.q2": { - color_type: greenColumn, - accessorKey: "data.seq_dfip.q2", - }, - "data.seq_dfip.q3": { - color_type: greenColumn, - accessorKey: "data.seq_dfip.q3", - }, - "data.seq_dfip.q4": { - color_type: greenColumn, - accessorKey: "data.seq_dfip.q4", - }, - "data.seq_dfip.year": { - color_type: greenColumn, - accessorKey: "data.seq_dfip.year", - }, - "data.seq_dfip.justification": { - color_type: greenColumn, - accessorKey: "data.seq_dfip.justification", - }, - "data.seq_ssp.q1": { - color_type: greenColumn, - accessorKey: "data.seq_ssp.q1", - }, - "data.seq_ssp.q2": { - color_type: greenColumn, - accessorKey: "data.seq_ssp.q2", - }, - "data.seq_ssp.q3": { - color_type: greenColumn, - accessorKey: "data.seq_ssp.q3", - }, - "data.seq_ssp.q4": { - color_type: greenColumn, - accessorKey: "data.seq_ssp.q4", - }, - "data.seq_ssp.year": { - color_type: greenColumn, - accessorKey: "data.seq_ssp.year", + + import { + greenColumn, + whiteColumn, + orangeColumn, + yellowColumn, + redColumn, + blueColumn, + } from '../columnColors'; + export const config = { + "config":{ + "colors":{ + "data.header.section_code":{ + "color_type":greenColumn, + "accessorKey":"data.header.section_code" + }, + "data.header.item_id":{ + "color_type":greenColumn, + "accessorKey":"data.header.item_id" + }, + "data.header.num_group":{ + "color_type":greenColumn, + "accessorKey":"data.header.num_group" + }, + "data.header.name":{ + "color_type":greenColumn, + "accessorKey":"data.header.name" + }, + "data.header.vsp_id":{ + "color_type":greenColumn, + "accessorKey":"data.header.vsp_id" + }, + "data.plan.q1":{ + "color_type":greenColumn, + "accessorKey":"data.plan.q1" + }, + "data.plan.q2":{ + "color_type":greenColumn, + "accessorKey":"data.plan.q2" + }, + "data.plan.q3":{ + "color_type":greenColumn, + "accessorKey":"data.plan.q3" + }, + "data.plan.q4":{ + "color_type":greenColumn, + "accessorKey":"data.plan.q4" + }, + "data.plan.year":{ + "color_type":greenColumn, + "accessorKey":"data.plan.year" + }, + "data.plan.comment":{ + "color_type":greenColumn, + "accessorKey":"data.plan.comment" + }, + "2026_god_field_field":{ + "color_type":whiteColumn, + "accessorKey":"2026_god_field_field" + }, + "data.seq_dfip.q1":{ + "color_type":greenColumn, + "accessorKey":"data.seq_dfip.q1" + }, + "data.seq_dfip.q2":{ + "color_type":greenColumn, + "accessorKey":"data.seq_dfip.q2" + }, + "data.seq_dfip.q3":{ + "color_type":greenColumn, + "accessorKey":"data.seq_dfip.q3" + }, + "data.seq_dfip.q4":{ + "color_type":greenColumn, + "accessorKey":"data.seq_dfip.q4" + }, + "data.seq_dfip.year":{ + "color_type":greenColumn, + "accessorKey":"data.seq_dfip.year" + }, + "data.seq_dfip.justification":{ + "color_type":greenColumn, + "accessorKey":"data.seq_dfip.justification" + }, + "data.seq_ssp.q1":{ + "color_type":greenColumn, + "accessorKey":"data.seq_ssp.q1" + }, + "data.seq_ssp.q2":{ + "color_type":greenColumn, + "accessorKey":"data.seq_ssp.q2" + }, + "data.seq_ssp.q3":{ + "color_type":greenColumn, + "accessorKey":"data.seq_ssp.q3" + }, + "data.seq_ssp.q4":{ + "color_type":greenColumn, + "accessorKey":"data.seq_ssp.q4" + }, + "data.seq_ssp.year":{ + "color_type":greenColumn, + "accessorKey":"data.seq_ssp.year" + }, + "data.seq_ssp.justification":{ + "color_type":greenColumn, + "accessorKey":"data.seq_ssp.justification" + }, + "data.approved.q1":{ + "color_type":greenColumn, + "accessorKey":"data.approved.q1" }, - "data.seq_ssp.justification": { - color_type: greenColumn, - accessorKey: "data.seq_ssp.justification", + "data.approved.q2":{ + "color_type":greenColumn, + "accessorKey":"data.approved.q2" }, - "data.approved.q1": { - color_type: greenColumn, - accessorKey: "data.approved.q1", + "data.approved.q3":{ + "color_type":greenColumn, + "accessorKey":"data.approved.q3" }, - "data.approved.q2": { - color_type: greenColumn, - accessorKey: "data.approved.q2", + "data.approved.q4":{ + "color_type":greenColumn, + "accessorKey":"data.approved.q4" }, - "data.approved.q3": { - color_type: greenColumn, - accessorKey: "data.approved.q3", + "data.approved.year":{ + "color_type":greenColumn, + "accessorKey":"data.approved.year" }, - "data.approved.q4": { - color_type: greenColumn, - accessorKey: "data.approved.q4", + "data.contract.counterparty":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.counterparty" }, - "data.approved.year": { - color_type: greenColumn, - accessorKey: "data.approved.year", + "data.contract.reference":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.reference" }, - "data.contract.counterparty": { - color_type: orangeColumn, - accessorKey: "data.contract.counterparty", + "data.contract.date":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.date" }, - "data.contract.reference": { - color_type: orangeColumn, - accessorKey: "data.contract.reference", + "data.contract.subject":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.subject" }, - "data.contract.date": { - color_type: orangeColumn, - accessorKey: "data.contract.date", + "data.contract.currency":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.currency" }, - "data.contract.subject": { - color_type: orangeColumn, - accessorKey: "data.contract.subject", + "data.contract.ceiling":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.ceiling" }, - "data.contract.currency": { - color_type: orangeColumn, - accessorKey: "data.contract.currency", + "data.contract.vat_rate":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.vat_rate" }, - "data.contract.ceiling": { - color_type: orangeColumn, - accessorKey: "data.contract.ceiling", + "data.contract.deadline":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.deadline" }, - "data.contract.vat_rate": { - color_type: orangeColumn, - accessorKey: "data.contract.vat_rate", + "data.contract.scheme":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.scheme" }, - "data.contract.deadline": { - color_type: orangeColumn, - accessorKey: "data.contract.deadline", + "data.contract.act":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.act" }, - "data.contract.scheme": { - color_type: orangeColumn, - accessorKey: "data.contract.scheme", + "data.contract.comment":{ + "color_type":orangeColumn, + "accessorKey":"data.contract.comment" }, - "data.contract.act": { - color_type: orangeColumn, - accessorKey: "data.contract.act", + "data.booking.y2026.q1":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2026.q1" }, - "data.contract.comment": { - color_type: orangeColumn, - accessorKey: "data.contract.comment", + "data.booking.y2026.q2":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2026.q2" }, - "data.booking.y2026.q1": { - color_type: orangeColumn, - accessorKey: "data.booking.y2026.q1", + "data.booking.y2026.q3":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2026.q3" }, - "data.booking.y2026.q2": { - color_type: orangeColumn, - accessorKey: "data.booking.y2026.q2", + "data.booking.y2026.q4":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2026.q4" }, - "data.booking.y2026.q3": { - color_type: orangeColumn, - accessorKey: "data.booking.y2026.q3", + "data.booking.y2027.q1":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2027.q1" }, - "data.booking.y2026.q4": { - color_type: orangeColumn, - accessorKey: "data.booking.y2026.q4", + "data.booking.y2027.q2":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2027.q2" }, - "data.booking.y2027.q1": { - color_type: orangeColumn, - accessorKey: "data.booking.y2027.q1", + "data.booking.y2027.q3":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2027.q3" }, - "data.booking.y2027.q2": { - color_type: orangeColumn, - accessorKey: "data.booking.y2027.q2", + "data.booking.y2027.q4":{ + "color_type":orangeColumn, + "accessorKey":"data.booking.y2027.q4" }, - "data.booking.y2027.q3": { - color_type: orangeColumn, - accessorKey: "data.booking.y2027.q3", + "data.q1.adj_current":{ + "color_type":yellowColumn, + "accessorKey":"data.q1.adj_current" }, - "data.booking.y2027.q4": { - color_type: orangeColumn, - accessorKey: "data.booking.y2027.q4", + "data.q1.adj_ssp":{ + "color_type":yellowColumn, + "accessorKey":"data.q1.adj_ssp" }, - "data.q1.adj_current": { - color_type: yellowColumn, - accessorKey: "data.q1.adj_current", + "data.q1.adj_reserve":{ + "color_type":yellowColumn, + "accessorKey":"data.q1.adj_reserve" }, - "data.q1.adj_ssp": { - color_type: yellowColumn, - accessorKey: "data.q1.adj_ssp", + "data.q1.adj_comment":{ + "color_type":yellowColumn, + "accessorKey":"data.q1.adj_comment" }, - "data.q1.adj_reserve": { - color_type: yellowColumn, - accessorKey: "data.q1.adj_reserve", + "data.q1.corrected_plan":{ + "color_type":yellowColumn, + "accessorKey":"data.q1.corrected_plan" }, - "data.q1.adj_comment": { - color_type: yellowColumn, - accessorKey: "data.q1.adj_comment", + "1_kvartal_2026_goda_field_field":{ + "color_type":whiteColumn, + "accessorKey":"1_kvartal_2026_goda_field_field" }, - "data.q1.corrected_plan": { - color_type: yellowColumn, - accessorKey: "data.q1.corrected_plan", + "data.q1.pay_date":{ + "color_type":blueColumn, + "accessorKey":"data.q1.pay_date" }, - "data.1_kvartal_2026_goda_field_field": { - color_type: whiteColumn, - accessorKey: "data.1_kvartal_2026_goda_field_field", + "data.q1.pay_amount":{ + "color_type":blueColumn, + "accessorKey":"data.q1.pay_amount" }, - "data.q1.pay_date": { - color_type: blueColumn, - accessorKey: "data.q1.pay_date", + "data.q1.pay_comment":{ + "color_type":blueColumn, + "accessorKey":"data.q1.pay_comment" }, - "data.q1.pay_amount": { - color_type: blueColumn, - accessorKey: "data.q1.pay_amount", + "data.q1.pay_act":{ + "color_type":blueColumn, + "accessorKey":"data.q1.pay_act" }, - "data.q1.pay_comment": { - color_type: blueColumn, - accessorKey: "data.q1.pay_comment", + "data.q1.booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q1.booking" }, - "data.q1.pay_act": { - color_type: blueColumn, - accessorKey: "data.q1.pay_act", + "data.q1.actual_m1":{ + "color_type":greenColumn, + "accessorKey":"data.q1.actual_m1" }, - "data.q1.booking": { - color_type: orangeColumn, - accessorKey: "data.q1.booking", + "data.q1.actual_m2":{ + "color_type":greenColumn, + "accessorKey":"data.q1.actual_m2" }, - "data.q1.actual_m1": { - color_type: greenColumn, - accessorKey: "data.q1.actual_m1", + "data.q1.actual_m3":{ + "color_type":greenColumn, + "accessorKey":"data.q1.actual_m3" }, - "data.q1.actual_m2": { - color_type: greenColumn, - accessorKey: "data.q1.actual_m2", + "data.q1.actual_quarter":{ + "color_type":greenColumn, + "accessorKey":"data.q1.actual_quarter" }, - "data.q1.actual_m3": { - color_type: greenColumn, - accessorKey: "data.q1.actual_m3", + "data.q1.residual_after_booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q1.residual_after_booking" }, - "data.q1.actual_quarter": { - color_type: greenColumn, - accessorKey: "data.q1.actual_quarter", + "data.q1.residual_after_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q1.residual_after_actual" }, - "data.q1.residual_after_booking": { - color_type: orangeColumn, - accessorKey: "data.q1.residual_after_booking", + "data.q1.transfer_q2":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_q2" }, - "data.q1.residual_after_actual": { - color_type: greenColumn, - accessorKey: "data.q1.residual_after_actual", + "data.q1.transfer_q2_delay_acts":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_q2_delay_acts" }, - "data.q1.transfer_q2": { - color_type: redColumn, - accessorKey: "data.q1.transfer_q2", + "data.q1.transfer_q2_delay_procurement":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_q2_delay_procurement" }, - "data.q1.transfer_q2_delay_acts": { - color_type: redColumn, - accessorKey: "data.q1.transfer_q2_delay_acts", + "data.q1.transfer_q2_economy_rf":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_q2_economy_rf" }, - "data.q1.transfer_q2_delay_procurement": { - color_type: redColumn, - accessorKey: "data.q1.transfer_q2_delay_procurement", + "data.q1.transfer_next_comment":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_next_comment" }, - "data.q1.transfer_q2_economy_rf": { - color_type: redColumn, - accessorKey: "data.q1.transfer_q2_economy_rf", + "data.q1.transfer_q3":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_q3" }, - "data.q1.transfer_next_comment": { - color_type: redColumn, - accessorKey: "data.q1.transfer_next_comment", + "data.q1.transfer_q4":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_q4" }, - "data.q1.transfer_q3": { - color_type: redColumn, - accessorKey: "data.q1.transfer_q3", + "data.q1.transfer_far_comment":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_far_comment" }, - "data.q1.transfer_q4": { - color_type: redColumn, - accessorKey: "data.q1.transfer_q4", + "data.q1.transfer_econ":{ + "color_type":redColumn, + "accessorKey":"data.q1.transfer_econ" }, - "data.q1.transfer_far_comment": { - color_type: redColumn, - accessorKey: "data.q1.transfer_far_comment", + "data.q1.total":{ + "color_type":redColumn, + "accessorKey":"data.q1.total" }, - "data.q1.transfer_econ": { - color_type: redColumn, - accessorKey: "data.q1.transfer_econ", + "data.q2.target_change":{ + "color_type":redColumn, + "accessorKey":"data.q2.target_change" }, - "data.q1.total": { - color_type: redColumn, - accessorKey: "data.q1.total", + "data.q2.base_correction":{ + "color_type":redColumn, + "accessorKey":"data.q2.base_correction" }, - "data.q2.target_change": { - color_type: redColumn, - accessorKey: "data.q2.target_change", + "data.q2.base_correction_comment":{ + "color_type":redColumn, + "accessorKey":"data.q2.base_correction_comment" }, - "data.q2.base_correction": { - color_type: redColumn, - accessorKey: "data.q2.base_correction", + "data.q2.revision_inc":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.revision_inc" }, - "data.q2.base_correction_comment": { - color_type: redColumn, - accessorKey: "data.q2.base_correction_comment", + "data.q2.revision_seq":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.revision_seq" }, - "data.q2.revision_inc": { - color_type: yellowColumn, - accessorKey: "data.q2.revision_inc", + "data.q2.revision_comment":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.revision_comment" }, - "data.q2.revision_seq": { - color_type: yellowColumn, - accessorKey: "data.q2.revision_seq", + "data.q2.new_plan":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.new_plan" }, - "data.q2.revision_comment": { - color_type: yellowColumn, - accessorKey: "data.q2.revision_comment", + "2_kvartal_2026_goda_field_field":{ + "color_type":whiteColumn, + "accessorKey":"2_kvartal_2026_goda_field_field" }, - "data.q2.new_plan": { - color_type: yellowColumn, - accessorKey: "data.q2.new_plan", + "data.q2.adj_current":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.adj_current" }, - "data.2_kvartal_2026_goda_field_field": { - color_type: whiteColumn, - accessorKey: "data.2_kvartal_2026_goda_field_field", + "data.q2.adj_ssp":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.adj_ssp" }, - "data.q2.adj_current": { - color_type: yellowColumn, - accessorKey: "data.q2.adj_current", + "data.q2.adj_reserve":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.adj_reserve" }, - "data.q2.adj_ssp": { - color_type: yellowColumn, - accessorKey: "data.q2.adj_ssp", + "data.q2.adj_comment":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.adj_comment" }, - "data.q2.adj_reserve": { - color_type: yellowColumn, - accessorKey: "data.q2.adj_reserve", + "data.q2.corrected_plan":{ + "color_type":yellowColumn, + "accessorKey":"data.q2.corrected_plan" }, - "data.q2.adj_comment": { - color_type: yellowColumn, - accessorKey: "data.q2.adj_comment", + "data.q2.pay_date":{ + "color_type":blueColumn, + "accessorKey":"data.q2.pay_date" }, - "data.q2.corrected_plan": { - color_type: yellowColumn, - accessorKey: "data.q2.corrected_plan", + "data.q2.pay_amount":{ + "color_type":blueColumn, + "accessorKey":"data.q2.pay_amount" }, - "data.q2.pay_date": { - color_type: blueColumn, - accessorKey: "data.q2.pay_date", + "data.q2.pay_comment":{ + "color_type":blueColumn, + "accessorKey":"data.q2.pay_comment" }, - "data.q2.pay_amount": { - color_type: blueColumn, - accessorKey: "data.q2.pay_amount", + "data.q2.pay_act":{ + "color_type":blueColumn, + "accessorKey":"data.q2.pay_act" }, - "data.q2.pay_comment": { - color_type: blueColumn, - accessorKey: "data.q2.pay_comment", + "data.q2.booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q2.booking" }, - "data.q2.pay_act": { - color_type: blueColumn, - accessorKey: "data.q2.pay_act", + "data.q2.actual_m1":{ + "color_type":greenColumn, + "accessorKey":"data.q2.actual_m1" }, - "data.q2.booking": { - color_type: orangeColumn, - accessorKey: "data.q2.booking", + "data.q2.actual_m2":{ + "color_type":greenColumn, + "accessorKey":"data.q2.actual_m2" }, - "data.q2.actual_m1": { - color_type: greenColumn, - accessorKey: "data.q2.actual_m1", + "data.q2.actual_m3":{ + "color_type":greenColumn, + "accessorKey":"data.q2.actual_m3" }, - "data.q2.actual_m2": { - color_type: greenColumn, - accessorKey: "data.q2.actual_m2", + "data.q2.actual_quarter":{ + "color_type":greenColumn, + "accessorKey":"data.q2.actual_quarter" }, - "data.q2.actual_m3": { - color_type: greenColumn, - accessorKey: "data.q2.actual_m3", + "data.q2.residual_after_booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q2.residual_after_booking" }, - "data.q2.actual_quarter": { - color_type: greenColumn, - accessorKey: "data.q2.actual_quarter", + "data.q2.residual_after_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q2.residual_after_actual" }, - "data.q2.residual_after_booking": { - color_type: orangeColumn, - accessorKey: "data.q2.residual_after_booking", + "data.q2.transfer_q3":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_q3" }, - "data.q2.residual_after_actual": { - color_type: greenColumn, - accessorKey: "data.q2.residual_after_actual", + "data.q2.transfer_q3_delay_acts":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_q3_delay_acts" }, - "data.q2.transfer_q3": { - color_type: redColumn, - accessorKey: "data.q2.transfer_q3", + "data.q2.transfer_q3_delay_procurement":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_q3_delay_procurement" }, - "data.q2.transfer_q3_delay_acts": { - color_type: redColumn, - accessorKey: "data.q2.transfer_q3_delay_acts", + "data.q2.transfer_q3_economy_rf":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_q3_economy_rf" }, - "data.q2.transfer_q3_delay_procurement": { - color_type: redColumn, - accessorKey: "data.q2.transfer_q3_delay_procurement", + "data.q2.transfer_next_comment":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_next_comment" }, - "data.q2.transfer_q3_economy_rf": { - color_type: redColumn, - accessorKey: "data.q2.transfer_q3_economy_rf", + "data.q2.transfer_q4":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_q4" }, - "data.q2.transfer_next_comment": { - color_type: redColumn, - accessorKey: "data.q2.transfer_next_comment", + "data.q2.transfer_far_comment":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_far_comment" }, - "data.q2.transfer_q4": { - color_type: redColumn, - accessorKey: "data.q2.transfer_q4", + "data.q2.transfer_econ":{ + "color_type":redColumn, + "accessorKey":"data.q2.transfer_econ" }, - "data.q2.transfer_far_comment": { - color_type: redColumn, - accessorKey: "data.q2.transfer_far_comment", + "data.q2.total":{ + "color_type":redColumn, + "accessorKey":"data.q2.total" }, - "data.q2.transfer_econ": { - color_type: redColumn, - accessorKey: "data.q2.transfer_econ", + "data.q3.target_change":{ + "color_type":redColumn, + "accessorKey":"data.q3.target_change" }, - "data.q2.total": { - color_type: redColumn, - accessorKey: "data.q2.total", + "data.q3.base_correction":{ + "color_type":redColumn, + "accessorKey":"data.q3.base_correction" }, - "data.q3.target_change": { - color_type: redColumn, - accessorKey: "data.q3.target_change", + "data.q3.base_correction_comment":{ + "color_type":redColumn, + "accessorKey":"data.q3.base_correction_comment" }, - "data.q3.base_correction": { - color_type: redColumn, - accessorKey: "data.q3.base_correction", + "data.q3.revision_inc":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.revision_inc" }, - "data.q3.base_correction_comment": { - color_type: redColumn, - accessorKey: "data.q3.base_correction_comment", + "data.q3.revision_seq":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.revision_seq" }, - "data.q3.revision_inc": { - color_type: yellowColumn, - accessorKey: "data.q3.revision_inc", + "data.q3.revision_comment":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.revision_comment" }, - "data.q3.revision_seq": { - color_type: yellowColumn, - accessorKey: "data.q3.revision_seq", + "data.q3.new_plan":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.new_plan" }, - "data.q3.revision_comment": { - color_type: yellowColumn, - accessorKey: "data.q3.revision_comment", + "3_kvartal_2026_goda_field_field":{ + "color_type":whiteColumn, + "accessorKey":"3_kvartal_2026_goda_field_field" }, - "data.q3.new_plan": { - color_type: yellowColumn, - accessorKey: "data.q3.new_plan", + "data.q3.adj_current":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.adj_current" }, - "data.3_kvartal_2026_goda_field_field": { - color_type: whiteColumn, - accessorKey: "data.3_kvartal_2026_goda_field_field", + "data.q3.adj_ssp":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.adj_ssp" }, - "data.q3.adj_current": { - color_type: yellowColumn, - accessorKey: "data.q3.adj_current", + "data.q3.adj_reserve":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.adj_reserve" }, - "data.q3.adj_ssp": { - color_type: yellowColumn, - accessorKey: "data.q3.adj_ssp", + "data.q3.adj_comment":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.adj_comment" }, - "data.q3.adj_reserve": { - color_type: yellowColumn, - accessorKey: "data.q3.adj_reserve", + "data.q3.corrected_plan":{ + "color_type":yellowColumn, + "accessorKey":"data.q3.corrected_plan" }, - "data.q3.adj_comment": { - color_type: yellowColumn, - accessorKey: "data.q3.adj_comment", + "data.q3.pay_date":{ + "color_type":blueColumn, + "accessorKey":"data.q3.pay_date" }, - "data.q3.corrected_plan": { - color_type: yellowColumn, - accessorKey: "data.q3.corrected_plan", + "data.q3.pay_amount":{ + "color_type":blueColumn, + "accessorKey":"data.q3.pay_amount" }, - "data.q3.pay_date": { - color_type: blueColumn, - accessorKey: "data.q3.pay_date", + "data.q3.pay_comment":{ + "color_type":blueColumn, + "accessorKey":"data.q3.pay_comment" }, - "data.q3.pay_amount": { - color_type: blueColumn, - accessorKey: "data.q3.pay_amount", + "data.q3.pay_act":{ + "color_type":blueColumn, + "accessorKey":"data.q3.pay_act" }, - "data.q3.pay_comment": { - color_type: blueColumn, - accessorKey: "data.q3.pay_comment", + "data.q3.booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q3.booking" }, - "data.q3.pay_act": { - color_type: blueColumn, - accessorKey: "data.q3.pay_act", + "data.q3.actual_m1":{ + "color_type":greenColumn, + "accessorKey":"data.q3.actual_m1" }, - "data.q3.booking": { - color_type: orangeColumn, - accessorKey: "data.q3.booking", + "data.q3.actual_m2":{ + "color_type":greenColumn, + "accessorKey":"data.q3.actual_m2" }, - "data.q3.actual_m1": { - color_type: greenColumn, - accessorKey: "data.q3.actual_m1", + "data.q3.actual_m3":{ + "color_type":greenColumn, + "accessorKey":"data.q3.actual_m3" }, - "data.q3.actual_m2": { - color_type: greenColumn, - accessorKey: "data.q3.actual_m2", + "data.q3.actual_quarter":{ + "color_type":greenColumn, + "accessorKey":"data.q3.actual_quarter" }, - "data.q3.actual_m3": { - color_type: greenColumn, - accessorKey: "data.q3.actual_m3", + "data.q3.residual_after_booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q3.residual_after_booking" }, - "data.q3.actual_quarter": { - color_type: greenColumn, - accessorKey: "data.q3.actual_quarter", + "data.q3.residual_after_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q3.residual_after_actual" }, - "data.q3.residual_after_booking": { - color_type: orangeColumn, - accessorKey: "data.q3.residual_after_booking", + "data.q3.transfer_q4":{ + "color_type":redColumn, + "accessorKey":"data.q3.transfer_q4" }, - "data.q3.residual_after_actual": { - color_type: greenColumn, - accessorKey: "data.q3.residual_after_actual", + "data.q3.transfer_q4_delay_acts":{ + "color_type":redColumn, + "accessorKey":"data.q3.transfer_q4_delay_acts" }, - "data.q3.transfer_q4": { - color_type: redColumn, - accessorKey: "data.q3.transfer_q4", + "data.q3.transfer_q4_delay_procurement":{ + "color_type":redColumn, + "accessorKey":"data.q3.transfer_q4_delay_procurement" }, - "data.q3.transfer_q4_delay_acts": { - color_type: redColumn, - accessorKey: "data.q3.transfer_q4_delay_acts", + "data.q3.transfer_q4_economy_rf":{ + "color_type":redColumn, + "accessorKey":"data.q3.transfer_q4_economy_rf" }, - "data.q3.transfer_q4_delay_procurement": { - color_type: redColumn, - accessorKey: "data.q3.transfer_q4_delay_procurement", + "data.q3.transfer_next_comment":{ + "color_type":redColumn, + "accessorKey":"data.q3.transfer_next_comment" }, - "data.q3.transfer_q4_economy_rf": { - color_type: redColumn, - accessorKey: "data.q3.transfer_q4_economy_rf", + "data.q3.transfer_econ":{ + "color_type":redColumn, + "accessorKey":"data.q3.transfer_econ" }, - "data.q3.transfer_next_comment": { - color_type: redColumn, - accessorKey: "data.q3.transfer_next_comment", + "data.q3.total":{ + "color_type":redColumn, + "accessorKey":"data.q3.total" }, - "data.q3.transfer_econ": { - color_type: redColumn, - accessorKey: "data.q3.transfer_econ", + "data.q4.target_change":{ + "color_type":redColumn, + "accessorKey":"data.q4.target_change" }, - "data.q3.total": { - color_type: redColumn, - accessorKey: "data.q3.total", + "data.q4.base_correction":{ + "color_type":redColumn, + "accessorKey":"data.q4.base_correction" }, - "data.q4.target_change": { - color_type: redColumn, - accessorKey: "data.q4.target_change", + "data.q4.base_correction_comment":{ + "color_type":redColumn, + "accessorKey":"data.q4.base_correction_comment" }, - "data.q4.base_correction": { - color_type: redColumn, - accessorKey: "data.q4.base_correction", + "data.q4.revision_inc":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.revision_inc" }, - "data.q4.base_correction_comment": { - color_type: redColumn, - accessorKey: "data.q4.base_correction_comment", + "data.q4.revision_seq":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.revision_seq" }, - "data.q4.revision_inc": { - color_type: yellowColumn, - accessorKey: "data.q4.revision_inc", + "data.q4.revision_comment":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.revision_comment" }, - "data.q4.revision_seq": { - color_type: yellowColumn, - accessorKey: "data.q4.revision_seq", + "data.q4.new_plan":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.new_plan" }, - "data.q4.revision_comment": { - color_type: yellowColumn, - accessorKey: "data.q4.revision_comment", + "4_kvartal_2026_goda_field_field":{ + "color_type":whiteColumn, + "accessorKey":"4_kvartal_2026_goda_field_field" }, - "data.q4.new_plan": { - color_type: yellowColumn, - accessorKey: "data.q4.new_plan", + "data.q4.adj_current":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.adj_current" }, - "data.4_kvartal_2026_goda_field_field": { - color_type: whiteColumn, - accessorKey: "data.4_kvartal_2026_goda_field_field", + "data.q4.adj_ssp":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.adj_ssp" }, - "data.q4.adj_current": { - color_type: yellowColumn, - accessorKey: "data.q4.adj_current", + "data.q4.adj_reserve":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.adj_reserve" }, - "data.q4.adj_ssp": { - color_type: yellowColumn, - accessorKey: "data.q4.adj_ssp", + "data.q4.adj_comment":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.adj_comment" }, - "data.q4.adj_reserve": { - color_type: yellowColumn, - accessorKey: "data.q4.adj_reserve", + "data.q4.corrected_plan":{ + "color_type":yellowColumn, + "accessorKey":"data.q4.corrected_plan" }, - "data.q4.adj_comment": { - color_type: yellowColumn, - accessorKey: "data.q4.adj_comment", + "data.q4.pay_date":{ + "color_type":blueColumn, + "accessorKey":"data.q4.pay_date" }, - "data.q4.corrected_plan": { - color_type: yellowColumn, - accessorKey: "data.q4.corrected_plan", + "data.q4.pay_amount":{ + "color_type":blueColumn, + "accessorKey":"data.q4.pay_amount" }, - "data.q4.pay_date": { - color_type: blueColumn, - accessorKey: "data.q4.pay_date", + "data.q4.pay_comment":{ + "color_type":blueColumn, + "accessorKey":"data.q4.pay_comment" }, - "data.q4.pay_amount": { - color_type: blueColumn, - accessorKey: "data.q4.pay_amount", + "data.q4.pay_act":{ + "color_type":blueColumn, + "accessorKey":"data.q4.pay_act" }, - "data.q4.pay_comment": { - color_type: blueColumn, - accessorKey: "data.q4.pay_comment", + "data.q4.booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q4.booking" }, - "data.q4.pay_act": { - color_type: blueColumn, - accessorKey: "data.q4.pay_act", + "data.q4.actual_m1":{ + "color_type":greenColumn, + "accessorKey":"data.q4.actual_m1" }, - "data.q4.booking": { - color_type: orangeColumn, - accessorKey: "data.q4.booking", + "data.q4.actual_m2":{ + "color_type":greenColumn, + "accessorKey":"data.q4.actual_m2" }, - "data.q4.actual_m1": { - color_type: greenColumn, - accessorKey: "data.q4.actual_m1", + "data.q4.actual_m3":{ + "color_type":greenColumn, + "accessorKey":"data.q4.actual_m3" }, - "data.q4.actual_m2": { - color_type: greenColumn, - accessorKey: "data.q4.actual_m2", + "data.q4.actual_spod":{ + "color_type":greenColumn, + "accessorKey":"data.q4.actual_spod" }, - "data.q4.actual_m3": { - color_type: greenColumn, - accessorKey: "data.q4.actual_m3", + "data.q4.actual_quarter":{ + "color_type":greenColumn, + "accessorKey":"data.q4.actual_quarter" }, - "data.q4.actual_spod": { - color_type: greenColumn, - accessorKey: "data.q4.actual_spod", + "data.q4.residual_after_booking":{ + "color_type":orangeColumn, + "accessorKey":"data.q4.residual_after_booking" }, - "data.q4.actual_quarter": { - color_type: greenColumn, - accessorKey: "data.q4.actual_quarter", + "data.q4.residual_after_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q4.residual_after_actual" }, - "data.q4.residual_after_booking": { - color_type: orangeColumn, - accessorKey: "data.q4.residual_after_booking", + "data.q4.transfer_econ":{ + "color_type":redColumn, + "accessorKey":"data.q4.transfer_econ" }, - "data.q4.residual_after_actual": { - color_type: greenColumn, - accessorKey: "data.q4.residual_after_actual", + "data.totals.fact_year":{ + "color_type":greenColumn, + "accessorKey":"data.totals.fact_year" }, - "data.q4.transfer_econ": { - color_type: redColumn, - accessorKey: "data.q4.transfer_econ", + "2026_god_field_field_5":{ + "color_type":whiteColumn, + "accessorKey":"2026_god_field_field_5" }, + "data.totals.pay_year":{ + "color_type":blueColumn, + "accessorKey":"data.totals.pay_year" + } }, - columns: [ + "columns":[ { - header: "", - accessorKey: "field", - columns: [ + "header":" ", + "accessorKey":"field", + "columns":[ { - header: "", - accessorKey: "field_field", - columns: [ + "header":" ", + "accessorKey":"field_field", + "columns":[ { - header: "Код раздела", - accessorKey: "data.header.section_code", - columnLetter: "A", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Код раздела", + "accessorKey":"data.header.section_code", + "columnLetter":"A", + "size":150, + "filterFn":"contains" }, { - header: "ID статьи", - accessorKey: "data.header.item_id", - columnLetter: "B", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ID статьи", + "accessorKey":"data.header.item_id", + "columnLetter":"B", + "size":150, + "filterFn":"contains" }, { - header: "ID группы номенклатуры", - accessorKey: "data.header.num_group", - columnLetter: "C", - size: 220, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ID группы номенклатуры", + "accessorKey":"data.header.num_group", + "columnLetter":"C", + "size":220, + "filterFn":"contains" }, { - header: "Наименование", - accessorKey: "data.header.name", - columnLetter: "D", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Наименование", + "accessorKey":"data.header.name", + "columnLetter":"D", + "size":150, + "filterFn":"contains" }, { - header: "ВСП РФ", - accessorKey: "data.header.vsp_id", - columnLetter: "E", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"ВСП РФ", + "accessorKey":"data.header.vsp_id", + "columnLetter":"E", + "size":150, + "filterFn":"contains" + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2026 год.", - accessorKey: "2026_god", - columns: [ + "header":"2026 год", + "accessorKey":"2026_god", + "columns":[ { - header: "Планирование годовых показателей", - accessorKey: "2026_god_planirovanie_godovykh_pokazateley", - columns: [ + "header":"Планирование годовых показателей", + "accessorKey":"2026_god_planirovanie_godovykh_pokazateley", + "columns":[ { - header: "1 квартал", - accessorKey: "data.plan.q1", - columnLetter: "F", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"1 квартал", + "accessorKey":"data.plan.q1", + "columnLetter":"F", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2 квартал", - accessorKey: "data.plan.q2", - columnLetter: "G", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"2 квартал", + "accessorKey":"data.plan.q2", + "columnLetter":"G", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "3 квартал", - accessorKey: "data.plan.q3", - columnLetter: "H", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"3 квартал", + "accessorKey":"data.plan.q3", + "columnLetter":"H", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "4 квартал", - accessorKey: "data.plan.q4", - columnLetter: "I", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"4 квартал", + "accessorKey":"data.plan.q4", + "columnLetter":"I", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Год", - accessorKey: "data.plan.year", - columnLetter: "J", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Год", + "accessorKey":"data.plan.year", + "columnLetter":"J", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.plan.comment", - columnLetter: "K", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Комментарий", + "accessorKey":"data.plan.comment", + "columnLetter":"K", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Секвестирование ДФиП", - accessorKey: "2026_god_sekvestirovanie_dfip", - columns: [ + "header":"Секвестирование ДФиП", + "accessorKey":"2026_god_sekvestirovanie_dfip", + "columns":[ { - header: "1 квартал", - accessorKey: "data.seq_dfip.q1", - columnLetter: "M", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"1 квартал", + "accessorKey":"data.seq_dfip.q1", + "columnLetter":"M", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2 квартал", - accessorKey: "data.seq_dfip.q2", - columnLetter: "N", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"2 квартал", + "accessorKey":"data.seq_dfip.q2", + "columnLetter":"N", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "3 квартал", - accessorKey: "data.seq_dfip.q3", - columnLetter: "O", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"3 квартал", + "accessorKey":"data.seq_dfip.q3", + "columnLetter":"O", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "4 квартал", - accessorKey: "data.seq_dfip.q4", - columnLetter: "P", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"4 квартал", + "accessorKey":"data.seq_dfip.q4", + "columnLetter":"P", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Год", - accessorKey: "data.seq_dfip.year", - columnLetter: "Q", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Год", + "accessorKey":"data.seq_dfip.year", + "columnLetter":"Q", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Обоснование", - accessorKey: "data.seq_dfip.justification", - columnLetter: "R", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Обоснование", + "accessorKey":"data.seq_dfip.justification", + "columnLetter":"R", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Секвестирование ССП ГО", - accessorKey: "2026_god_sekvestirovanie_ssp_go", - columns: [ + "header":"Секвестирование ССП ГО", + "accessorKey":"2026_god_sekvestirovanie_ssp_go", + "columns":[ { - header: "1 квартал", - accessorKey: "data.seq_ssp.q1", - columnLetter: "T", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"1 квартал", + "accessorKey":"data.seq_ssp.q1", + "columnLetter":"T", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2 квартал", - accessorKey: "data.seq_ssp.q2", - columnLetter: "U", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"2 квартал", + "accessorKey":"data.seq_ssp.q2", + "columnLetter":"U", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "3 квартал", - accessorKey: "data.seq_ssp.q3", - columnLetter: "V", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"3 квартал", + "accessorKey":"data.seq_ssp.q3", + "columnLetter":"V", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "4 квартал", - accessorKey: "data.seq_ssp.q4", - columnLetter: "W", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"4 квартал", + "accessorKey":"data.seq_ssp.q4", + "columnLetter":"W", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Год", - accessorKey: "data.seq_ssp.year", - columnLetter: "X", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Год", + "accessorKey":"data.seq_ssp.year", + "columnLetter":"X", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Обоснование", - accessorKey: "data.seq_ssp.justification", - columnLetter: "Y", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Обоснование", + "accessorKey":"data.seq_ssp.justification", + "columnLetter":"Y", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Утвержденная смета расходов", - accessorKey: "2026_god_utverzhdennaya_smeta_raskhodov", - columns: [ + "header":"Утвержденная смета расходов", + "accessorKey":"2026_god_utverzhdennaya_smeta_raskhodov", + "columns":[ { - header: "1 квартал", - accessorKey: "data.approved.q1", - columnLetter: "AA", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"1 квартал", + "accessorKey":"data.approved.q1", + "columnLetter":"AA", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2 квартал", - accessorKey: "data.approved.q2", - columnLetter: "AB", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"2 квартал", + "accessorKey":"data.approved.q2", + "columnLetter":"AB", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "3 квартал", - accessorKey: "data.approved.q3", - columnLetter: "AC", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"3 квартал", + "accessorKey":"data.approved.q3", + "columnLetter":"AC", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "4 квартал", - accessorKey: "data.approved.q4", - columnLetter: "AD", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"4 квартал", + "accessorKey":"data.approved.q4", + "columnLetter":"AD", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Год", - accessorKey: "data.approved.year", - columnLetter: "AE", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Год", + "accessorKey":"data.approved.year", + "columnLetter":"AE", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Параметры заключенного хозяйственного договора", - accessorKey: - "2026_god_parametry_zaklyuchennogo_khozyaystvennogo_dogovora", - columns: [ + "header":"Параметры заключенного хозяйственного договора", + "accessorKey":"2026_god_parametry_zaklyuchennogo_khozyaystvennogo_dogovora", + "columns":[ { - header: "Контрагент", - accessorKey: "data.contract.counterparty", - columnLetter: "AG", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Контрагент", + "accessorKey":"data.contract.counterparty", + "columnLetter":"AG", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Номер", - accessorKey: "data.contract.reference", - columnLetter: "AH", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Номер", + "accessorKey":"data.contract.reference", + "columnLetter":"AH", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Дата", - accessorKey: "data.contract.date", - columnLetter: "AI", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Дата", + "accessorKey":"data.contract.date", + "columnLetter":"AI", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Предмет", - accessorKey: "data.contract.subject", - columnLetter: "AJ", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Предмет", + "accessorKey":"data.contract.subject", + "columnLetter":"AJ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Валюта", - accessorKey: "data.contract.currency", - columnLetter: "AK", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Валюта", + "accessorKey":"data.contract.currency", + "columnLetter":"AK", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Предельная стоимость", - accessorKey: "data.contract.ceiling", - columnLetter: "AL", - size: 200, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Предельная стоимость", + "accessorKey":"data.contract.ceiling", + "columnLetter":"AL", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Ставка НДС (%)", - accessorKey: "data.contract.vat_rate", - columnLetter: "AM", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Ставка НДС (%)", + "accessorKey":"data.contract.vat_rate", + "columnLetter":"AM", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Срок", - accessorKey: "data.contract.deadline", - columnLetter: "AN", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Срок", + "accessorKey":"data.contract.deadline", + "columnLetter":"AN", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Схема платежа", - accessorKey: "data.contract.scheme", - columnLetter: "AO", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Схема платежа", + "accessorKey":"data.contract.scheme", + "columnLetter":"AO", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "АКТ", - accessorKey: "data.contract.act", - columnLetter: "AP", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"АКТ", + "accessorKey":"data.contract.act", + "columnLetter":"AP", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.contract.comment", - columnLetter: "AQ", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.contract.comment", + "columnLetter":"AQ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "Бронь средств в 1 квартале", - accessorKey: "data.booking.y2026.q1", - columnLetter: "AR", - size: 260, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь средств в 1 квартале", + "accessorKey":"data.booking.y2026.q1", + "columnLetter":"AR", + "size":260, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Бронь средств во 2 квартале", - accessorKey: "data.booking.y2026.q2", - columnLetter: "AS", - size: 270, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь средств во 2 квартале", + "accessorKey":"data.booking.y2026.q2", + "columnLetter":"AS", + "size":270, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Бронь средств в 3 квартале", - accessorKey: "data.booking.y2026.q3", - columnLetter: "AT", - size: 260, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь средств в 3 квартале", + "accessorKey":"data.booking.y2026.q3", + "columnLetter":"AT", + "size":260, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Бронь средств в 4 квартале", - accessorKey: "data.booking.y2026.q4", - columnLetter: "AU", - size: 260, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Бронь средств в 4 квартале", + "accessorKey":"data.booking.y2026.q4", + "columnLetter":"AU", + "size":260, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2027 год.", - accessorKey: "2027_god", - columns: [ + "header":"2027 год", + "accessorKey":"2027_god", + "columns":[ { - header: "", - accessorKey: "2027_god_field", - columns: [ + "header":"", + "accessorKey":"2027_god_field", + "columns":[ { - header: "Бронь средств в 1 квартале", - accessorKey: "data.booking.y2027.q1", - columnLetter: "AV", - size: 260, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь средств в 1 квартале", + "accessorKey":"data.booking.y2027.q1", + "columnLetter":"AV", + "size":260, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Бронь средств во 2 квартале", - accessorKey: "data.booking.y2027.q2", - columnLetter: "AW", - size: 270, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь средств во 2 квартале", + "accessorKey":"data.booking.y2027.q2", + "columnLetter":"AW", + "size":270, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Бронь средств в 3 квартале", - accessorKey: "data.booking.y2027.q3", - columnLetter: "AX", - size: 260, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь средств в 3 квартале", + "accessorKey":"data.booking.y2027.q3", + "columnLetter":"AX", + "size":260, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Бронь средств в 4 квартале", - accessorKey: "data.booking.y2027.q4", - columnLetter: "AY", - size: 260, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Бронь средств в 4 квартале", + "accessorKey":"data.booking.y2027.q4", + "columnLetter":"AY", + "size":260, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "1 квартал 2026 года", - accessorKey: "1_kvartal_2026_goda", - columns: [ + "header":"1 квартал 2026 года", + "accessorKey":"1_kvartal_2026_goda", + "columns":[ { - header: "Корректировки плановых значений", - accessorKey: - "1_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", - columns: [ + "header":"Корректировки плановых значений", + "accessorKey":"1_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", + "columns":[ { - header: "Текущие( = 0)", - accessorKey: "data.q1.adj_current", - columnLetter: "BA", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Текущие( = 0)", + "accessorKey":"data.q1.adj_current", + "columnLetter":"BA", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Корректиз сметы ГО", - accessorKey: "data.q1.adj_ssp", - columnLetter: "BB", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректиз сметы ГО", + "accessorKey":"data.q1.adj_ssp", + "columnLetter":"BB", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Корректиз резерва", - accessorKey: "data.q1.adj_reserve", - columnLetter: "BC", - size: 180, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректиз резерва", + "accessorKey":"data.q1.adj_reserve", + "columnLetter":"BC", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q1.adj_comment", - columnLetter: "BD", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q1.adj_comment", + "columnLetter":"BD", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Базовый план с учетом корректировок", - accessorKey: "data.q1.corrected_plan", - columnLetter: "BE", - size: 350, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Базовый план с учетом корректировок", + "accessorKey":"data.q1.corrected_plan", + "columnLetter":"BE", + "size":350, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Согласование платежей", - accessorKey: "1_kvartal_2026_goda_soglasovanie_platezhey", - columns: [ + "header":"Согласование платежей", + "accessorKey":"1_kvartal_2026_goda_soglasovanie_platezhey", + "columns":[ { - header: "Дата платежа", - accessorKey: "data.q1.pay_date", - columnLetter: "BG", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Дата платежа", + "accessorKey":"data.q1.pay_date", + "columnLetter":"BG", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Сумма платежа", - accessorKey: "data.q1.pay_amount", - columnLetter: "BH", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Сумма платежа", + "accessorKey":"data.q1.pay_amount", + "columnLetter":"BH", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q1.pay_comment", - columnLetter: "BI", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q1.pay_comment", + "columnLetter":"BI", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Предоставление акта", - accessorKey: "data.q1.pay_act", - columnLetter: "BJ", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Предоставление акта", + "accessorKey":"data.q1.pay_act", + "columnLetter":"BJ", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Фактические расходы", - accessorKey: "1_kvartal_2026_goda_fakticheskie_raskhody", - columns: [ + "header":"Фактические расходы", + "accessorKey":"1_kvartal_2026_goda_fakticheskie_raskhody", + "columns":[ { - header: "Бронь1 квартал", - accessorKey: "data.q1.booking", - columnLetter: "BL", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь1 квартал", + "accessorKey":"data.q1.booking", + "columnLetter":"BL", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "ФактЯнварь", - accessorKey: "data.q1.actual_m1", - columnLetter: "BM", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактЯнварь", + "accessorKey":"data.q1.actual_m1", + "columnLetter":"BM", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "ФактФевраль", - accessorKey: "data.q1.actual_m2", - columnLetter: "BN", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактФевраль", + "accessorKey":"data.q1.actual_m2", + "columnLetter":"BN", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "ФактМарт", - accessorKey: "data.q1.actual_m3", - columnLetter: "BO", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактМарт", + "accessorKey":"data.q1.actual_m3", + "columnLetter":"BO", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "Факт1 квартал", - accessorKey: "data.q1.actual_quarter", - columnLetter: "BP", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Факт1 квартал", + "accessorKey":"data.q1.actual_quarter", + "columnLetter":"BP", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "Остаток после брони 1 квартала", - accessorKey: "data.q1.residual_after_booking", - columnLetter: "BQ", - size: 300, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Остаток после брони 1 квартала", + "accessorKey":"data.q1.residual_after_booking", + "columnLetter":"BQ", + "size":300, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Остаток после факта 1 квартала", - accessorKey: "data.q1.residual_after_actual", - columnLetter: "BR", - size: 300, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Остаток после факта 1 квартала", + "accessorKey":"data.q1.residual_after_actual", + "columnLetter":"BR", + "size":300, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Корректировка остатка в последующие кварталы", - accessorKey: - "1_kvartal_2026_goda_korrektirovka_ostatka_v_posleduyuschie_kvartaly", - columns: [ + "header":"Корректировка остатка в последующие кварталы", + "accessorKey":"1_kvartal_2026_goda_korrektirovka_ostatka_v_posleduyuschie_kvartaly", + "columns":[ { - header: "Перенос во 2 квартал", - accessorKey: "data.q1.transfer_q2", - columnLetter: "BT", - size: 200, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Перенос во 2 квартал", + "accessorKey":"data.q1.transfer_q2", + "columnLetter":"BT", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Задержка списания расходов / предоставления актов", - accessorKey: "data.q1.transfer_q2_delay_acts", - columnLetter: "BU", - size: 490, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Задержка списания расходов / предоставления актов", + "accessorKey":"data.q1.transfer_q2_delay_acts", + "columnLetter":"BU", + "size":490, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Задержка закупочных процедур", - accessorKey: "data.q1.transfer_q2_delay_procurement", - columnLetter: "BV", - size: 280, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Задержка закупочных процедур", + "accessorKey":"data.q1.transfer_q2_delay_procurement", + "columnLetter":"BV", + "size":280, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "экономия (будет использована РФ)", - accessorKey: "data.q1.transfer_q2_economy_rf", - columnLetter: "BW", - size: 320, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"экономия (будет использована РФ)", + "accessorKey":"data.q1.transfer_q2_economy_rf", + "columnLetter":"BW", + "size":320, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Комментарий переноса во2 квартал", - accessorKey: "data.q1.transfer_next_comment", - columnLetter: "BX", - size: 330, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий переноса во2 квартал", + "accessorKey":"data.q1.transfer_next_comment", + "columnLetter":"BX", + "size":330, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Перенос в 3 квартал", - accessorKey: "data.q1.transfer_q3", - columnLetter: "BY", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Перенос в 3 квартал", + "accessorKey":"data.q1.transfer_q3", + "columnLetter":"BY", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Перенос в 4 квартал", - accessorKey: "data.q1.transfer_q4", - columnLetter: "BZ", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Перенос в 4 квартал", + "accessorKey":"data.q1.transfer_q4", + "columnLetter":"BZ", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Комментарий переноса в3 и 4 квартал", - accessorKey: "data.q1.transfer_far_comment", - columnLetter: "CA", - size: 360, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий переноса в3 и 4 квартал", + "accessorKey":"data.q1.transfer_far_comment", + "columnLetter":"CA", + "size":360, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Перенос в фонд экономии", - accessorKey: "data.q1.transfer_econ", - columnLetter: "CB", - size: 230, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Перенос в фонд экономии", + "accessorKey":"data.q1.transfer_econ", + "columnLetter":"CB", + "size":230, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "ВСЕГО", - accessorKey: "data.q1.total", - columnLetter: "CC", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"ВСЕГО", + "accessorKey":"data.q1.total", + "columnLetter":"CC", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2 квартал 2026 года", - accessorKey: "2_kvartal_2026_goda", - columns: [ + "header":"2 квартал 2026 года", + "accessorKey":"2_kvartal_2026_goda", + "columns":[ { - header: "Корректировка базового плана", - accessorKey: "2_kvartal_2026_goda_korrektirovka_bazovogo_plana", - columns: [ + "header":"Корректировка базового плана", + "accessorKey":"2_kvartal_2026_goda_korrektirovka_bazovogo_plana", + "columns":[ { - header: - "Изменение целевого назначения перенесенной экономии ( =0)", - accessorKey: "data.q2.target_change", - columnLetter: "CE", - size: 570, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Изменение целевого назначения перенесенной экономии ( =0)", + "accessorKey":"data.q2.target_change", + "columnLetter":"CE", + "size":570, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Корректировка статей базового плана ( =0)", - accessorKey: "data.q2.base_correction", - columnLetter: "CF", - size: 410, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректировка статей базового плана ( =0)", + "accessorKey":"data.q2.base_correction", + "columnLetter":"CF", + "size":410, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Комментарий изменения базового плана", - accessorKey: "data.q2.base_correction_comment", - columnLetter: "CG", - size: 360, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий изменения базового плана", + "accessorKey":"data.q2.base_correction_comment", + "columnLetter":"CG", + "size":360, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "ДФиПУвеличение плана( >0)", - accessorKey: "data.q2.revision_inc", - columnLetter: "CH", - size: 270, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ДФиПУвеличение плана( >0)", + "accessorKey":"data.q2.revision_inc", + "columnLetter":"CH", + "size":270, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "ДФиПCеквестр плана( <0)", - accessorKey: "data.q2.revision_seq", - columnLetter: "CI", - size: 250, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ДФиПCеквестр плана( <0)", + "accessorKey":"data.q2.revision_seq", + "columnLetter":"CI", + "size":250, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q2.revision_comment", - columnLetter: "CJ", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q2.revision_comment", + "columnLetter":"CJ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Скорректированный план на подпись", - accessorKey: "data.q2.new_plan", - columnLetter: "CK", - size: 330, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Скорректированный план на подпись", + "accessorKey":"data.q2.new_plan", + "columnLetter":"CK", + "size":330, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - - { - header: "Корректировки плановых значений", - accessorKey: - "2_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", - columns: [ - { - header: "Текущие( = 0)", - accessorKey: "data.q2.adj_current", - columnLetter: "CM", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Корректиз сметы ГО", - accessorKey: "data.q2.adj_ssp", - columnLetter: "CN", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Корректиз резерва", - accessorKey: "data.q2.adj_reserve", - columnLetter: "CO", - size: 180, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Комментарий", - accessorKey: "data.q2.adj_comment", - columnLetter: "CP", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Скорректированный план с учетом корректировок", - accessorKey: "data.q2.corrected_plan", - columnLetter: "CQ", - size: 450, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Согласование платежей", - accessorKey: "2_kvartal_2026_goda_soglasovanie_platezhey", - columns: [ - { - header: "Дата платежа", - accessorKey: "data.q2.pay_date", - columnLetter: "CS", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Сумма платежа", - accessorKey: "data.q2.pay_amount", - columnLetter: "CT", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Комментарий", - accessorKey: "data.q2.pay_comment", - columnLetter: "CU", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Предоставление акта", - accessorKey: "data.q2.pay_act", - columnLetter: "CV", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Фактические расходы", - accessorKey: "2_kvartal_2026_goda_fakticheskie_raskhody", - columns: [ - { - header: "Бронь2 квартал", - accessorKey: "data.q2.booking", - columnLetter: "CX", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "ФактАпрель", - accessorKey: "data.q2.actual_m1", - columnLetter: "CY", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "ФактМай", - accessorKey: "data.q2.actual_m2", - columnLetter: "CZ", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "ФактИюнь", - accessorKey: "data.q2.actual_m3", - columnLetter: "DA", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Факт2 квартал", - accessorKey: "data.q2.actual_quarter", - columnLetter: "DB", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Остаток после брони 2 квартала", - accessorKey: "data.q2.residual_after_booking", - columnLetter: "DC", - size: 300, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Остаток после факта 2 квартала", - accessorKey: "data.q2.residual_after_actual", - columnLetter: "DD", - size: 300, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Корректировка остатка в последующие кварталы", - accessorKey: - "2_kvartal_2026_goda_korrektirovka_ostatka_v_posleduyuschie_kvartaly", - columns: [ - { - header: "Перенос в 3 квартал", - accessorKey: "data.q2.transfer_q3", - columnLetter: "DF", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Задержка списания расходов / предоставления актов", - accessorKey: "data.q2.transfer_q3_delay_acts", - columnLetter: "DG", - size: 490, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Задержка закупочных процедур", - accessorKey: "data.q2.transfer_q3_delay_procurement", - columnLetter: "DH", - size: 280, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "экономия (будет использована РФ)", - accessorKey: "data.q2.transfer_q3_economy_rf", - columnLetter: "DI", - size: 320, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Комментарий переноса в3 квартал", - accessorKey: "data.q2.transfer_next_comment", - columnLetter: "DJ", - size: 320, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Перенос в 4 квартал", - accessorKey: "data.q2.transfer_q4", - columnLetter: "DK", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Комментарий переноса в4 квартал", - accessorKey: "data.q2.transfer_far_comment", - columnLetter: "DL", - size: 320, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Перенос в фонд экономии", - accessorKey: "data.q2.transfer_econ", - columnLetter: "DM", - size: 230, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "ВСЕГО", - accessorKey: "data.q2.total", - columnLetter: "DN", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "3 квартал 2026 года", - accessorKey: "3_kvartal_2026_goda", - columns: [ - { - header: "Корректировка базового плана", - accessorKey: "3_kvartal_2026_goda_korrektirovka_bazovogo_plana", - columns: [ - { - header: - "Изменение целевого назначения перенесенной экономии ( =0)", - accessorKey: "data.q3.target_change", - columnLetter: "DP", - size: 570, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Корректировка статей базового плана ( =0)", - accessorKey: "data.q3.base_correction", - columnLetter: "DQ", - size: 410, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Комментарий изменения базового плана", - accessorKey: "data.q3.base_correction_comment", - columnLetter: "DR", - size: 360, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "ДФиПУвеличение плана( >0)", - accessorKey: "data.q3.revision_inc", - columnLetter: "DS", - size: 270, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "ДФиПCеквестр плана( <0)", - accessorKey: "data.q3.revision_seq", - columnLetter: "DT", - size: 250, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Комментарий", - accessorKey: "data.q3.revision_comment", - columnLetter: "DU", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Скорректированный план на подпись", - accessorKey: "data.q3.new_plan", - columnLetter: "DV", - size: 330, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Корректировки плановых значений", - accessorKey: - "3_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", - columns: [ + "header":"Корректировки плановых значений", + "accessorKey":"2_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", + "columns":[ { - header: "Текущие( = 0)", - accessorKey: "data.q3.adj_current", - columnLetter: "DX", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Текущие( = 0)", + "accessorKey":"data.q2.adj_current", + "columnLetter":"CM", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Корректиз сметы ГО", - accessorKey: "data.q3.adj_ssp", - columnLetter: "DY", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректиз сметы ГО", + "accessorKey":"data.q2.adj_ssp", + "columnLetter":"CN", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Корректиз резерва", - accessorKey: "data.q3.adj_reserve", - columnLetter: "DZ", - size: 180, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректиз резерва", + "accessorKey":"data.q2.adj_reserve", + "columnLetter":"CO", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q3.adj_comment", - columnLetter: "EA", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q2.adj_comment", + "columnLetter":"CP", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Скорректированный план с учетом корректировок", - accessorKey: "data.q3.corrected_plan", - columnLetter: "EB", - size: 450, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Скорректированный план с учетом корректировок", + "accessorKey":"data.q2.corrected_plan", + "columnLetter":"CQ", + "size":450, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Согласование платежей", - accessorKey: "3_kvartal_2026_goda_soglasovanie_platezhey", - columns: [ + "header":"Согласование платежей", + "accessorKey":"2_kvartal_2026_goda_soglasovanie_platezhey", + "columns":[ { - header: "Дата платежа", - accessorKey: "data.q3.pay_date", - columnLetter: "ED", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Дата платежа", + "accessorKey":"data.q2.pay_date", + "columnLetter":"CS", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Сумма платежа", - accessorKey: "data.q3.pay_amount", - columnLetter: "EE", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Сумма платежа", + "accessorKey":"data.q2.pay_amount", + "columnLetter":"CT", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q3.pay_comment", - columnLetter: "EF", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q2.pay_comment", + "columnLetter":"CU", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Предоставление акта", - accessorKey: "data.q3.pay_act", - columnLetter: "EG", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Предоставление акта", + "accessorKey":"data.q2.pay_act", + "columnLetter":"CV", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Фактические расходы", - accessorKey: "3_kvartal_2026_goda_fakticheskie_raskhody", - columns: [ + "header":"Фактические расходы", + "accessorKey":"2_kvartal_2026_goda_fakticheskie_raskhody", + "columns":[ { - header: "Бронь3 квартал", - accessorKey: "data.q3.booking", - columnLetter: "EI", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь2 квартал", + "accessorKey":"data.q2.booking", + "columnLetter":"CX", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "ФактИюль", - accessorKey: "data.q3.actual_m1", - columnLetter: "EJ", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактАпрель", + "accessorKey":"data.q2.actual_m1", + "columnLetter":"CY", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "ФактАвгуст", - accessorKey: "data.q3.actual_m2", - columnLetter: "EK", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактМай", + "accessorKey":"data.q2.actual_m2", + "columnLetter":"CZ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "ФактСентябрь", - accessorKey: "data.q3.actual_m3", - columnLetter: "EL", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактИюнь", + "accessorKey":"data.q2.actual_m3", + "columnLetter":"DA", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "Факт3 квартал", - accessorKey: "data.q3.actual_quarter", - columnLetter: "EM", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Факт2 квартал", + "accessorKey":"data.q2.actual_quarter", + "columnLetter":"DB", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "Остаток после брони 3 квартала", - accessorKey: "data.q3.residual_after_booking", - columnLetter: "EN", - size: 300, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Остаток после брони 2 квартала", + "accessorKey":"data.q2.residual_after_booking", + "columnLetter":"DC", + "size":300, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Остаток после факта 3 квартала", - accessorKey: "data.q3.residual_after_actual", - columnLetter: "EO", - size: 300, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Остаток после факта 2 квартала", + "accessorKey":"data.q2.residual_after_actual", + "columnLetter":"DD", + "size":300, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Корректировка остатка в последующий квартал", - accessorKey: - "3_kvartal_2026_goda_korrektirovka_ostatka_v_posleduyuschiy_kvartal", - columns: [ + "header":"Корректировка остатка в последующие кварталы", + "accessorKey":"2_kvartal_2026_goda_korrektirovka_ostatka_v_posleduyuschie_kvartaly", + "columns":[ { - header: "Перенос в 4 квартал", - accessorKey: "data.q3.transfer_q4", - columnLetter: "EQ", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Перенос в 3 квартал", + "accessorKey":"data.q2.transfer_q3", + "columnLetter":"DF", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Задержка списания расходов / предоставления актов", - accessorKey: "data.q3.transfer_q4_delay_acts", - columnLetter: "ER", - size: 490, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Задержка списания расходов / предоставления актов", + "accessorKey":"data.q2.transfer_q3_delay_acts", + "columnLetter":"DG", + "size":490, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Задержка закупочных процедур", - accessorKey: "data.q3.transfer_q4_delay_procurement", - columnLetter: "ES", - size: 280, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Задержка закупочных процедур", + "accessorKey":"data.q2.transfer_q3_delay_procurement", + "columnLetter":"DH", + "size":280, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "экономия (будет использована РФ)", - accessorKey: "data.q3.transfer_q4_economy_rf", - columnLetter: "ET", - size: 320, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"экономия (будет использована РФ)", + "accessorKey":"data.q2.transfer_q3_economy_rf", + "columnLetter":"DI", + "size":320, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Комментарий переноса в4 квартал", - accessorKey: "data.q3.transfer_next_comment", - columnLetter: "EU", - size: 320, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий переноса в3 квартал", + "accessorKey":"data.q2.transfer_next_comment", + "columnLetter":"DJ", + "size":320, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Перенос в фонд экономии", - accessorKey: "data.q3.transfer_econ", - columnLetter: "EV", - size: 230, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Перенос в 4 квартал", + "accessorKey":"data.q2.transfer_q4", + "columnLetter":"DK", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "ВСЕГО", - accessorKey: "data.q3.total", - columnLetter: "EW", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий переноса в4 квартал", + "accessorKey":"data.q2.transfer_far_comment", + "columnLetter":"DL", + "size":320, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, + { + "header":"Перенос в фонд экономии", + "accessorKey":"data.q2.transfer_econ", + "columnLetter":"DM", + "size":230, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + }, + { + "header":"ВСЕГО", + "accessorKey":"data.q2.total", + "columnLetter":"DN", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "4 квартал 2026 года", - accessorKey: "4_kvartal_2026_goda", - columns: [ + "header":"3 квартал 2026 года", + "accessorKey":"3_kvartal_2026_goda", + "columns":[ { - header: "Корректировка базового плана", - accessorKey: "4_kvartal_2026_goda_korrektirovka_bazovogo_plana", - columns: [ + "header":"Корректировка базового плана", + "accessorKey":"3_kvartal_2026_goda_korrektirovka_bazovogo_plana", + "columns":[ { - header: - "Изменение целевого назначения перенесенной экономии ( =0)", - accessorKey: "data.q4.target_change", - columnLetter: "EY", - size: 570, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Изменение целевого назначения перенесенной экономии ( =0)", + "accessorKey":"data.q3.target_change", + "columnLetter":"DP", + "size":570, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Корректировка статей базового плана ( =0)", - accessorKey: "data.q4.base_correction", - columnLetter: "EZ", - size: 410, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректировка статей базового плана ( =0)", + "accessorKey":"data.q3.base_correction", + "columnLetter":"DQ", + "size":410, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "Комментарий изменения базового плана", - accessorKey: "data.q4.base_correction_comment", - columnLetter: "FA", - size: 360, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий изменения базового плана", + "accessorKey":"data.q3.base_correction_comment", + "columnLetter":"DR", + "size":360, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, { - header: "ДФиПУвеличение плана( >0)", - accessorKey: "data.q4.revision_inc", - columnLetter: "FB", - size: 270, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ДФиПУвеличение плана( >0)", + "accessorKey":"data.q3.revision_inc", + "columnLetter":"DS", + "size":270, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "ДФиПCеквестр плана( <0)", - accessorKey: "data.q4.revision_seq", - columnLetter: "FC", - size: 250, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ДФиПCеквестр плана( <0)", + "accessorKey":"data.q3.revision_seq", + "columnLetter":"DT", + "size":250, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q4.revision_comment", - columnLetter: "FD", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q3.revision_comment", + "columnLetter":"DU", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Скорректированный план на подпись", - accessorKey: "data.q4.new_plan", - columnLetter: "FE", - size: 330, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Скорректированный план на подпись", + "accessorKey":"data.q3.new_plan", + "columnLetter":"DV", + "size":330, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, - + { - header: "Корректировки плановых значений", - accessorKey: - "4_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", - columns: [ + "header":"Корректировки плановых значений", + "accessorKey":"3_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", + "columns":[ { - header: "Текущие( = 0)", - accessorKey: "data.q4.adj_current", - columnLetter: "FG", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Текущие( = 0)", + "accessorKey":"data.q3.adj_current", + "columnLetter":"DX", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Корректиз сметы ГО", - accessorKey: "data.q4.adj_ssp", - columnLetter: "FH", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректиз сметы ГО", + "accessorKey":"data.q3.adj_ssp", + "columnLetter":"DY", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Корректиз резерва", - accessorKey: "data.q4.adj_reserve", - columnLetter: "FI", - size: 180, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректиз резерва", + "accessorKey":"data.q3.adj_reserve", + "columnLetter":"DZ", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q4.adj_comment", - columnLetter: "FJ", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q3.adj_comment", + "columnLetter":"EA", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, { - header: "Скорректированный план с учетом корректировок", - accessorKey: "data.q4.corrected_plan", - columnLetter: "FK", - size: 450, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Скорректированный план с учетом корректировок", + "accessorKey":"data.q3.corrected_plan", + "columnLetter":"EB", + "size":450, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Согласование платежей", - accessorKey: "4_kvartal_2026_goda_soglasovanie_platezhey", - columns: [ + "header":"Согласование платежей", + "accessorKey":"3_kvartal_2026_goda_soglasovanie_platezhey", + "columns":[ { - header: "Дата платежа", - accessorKey: "data.q4.pay_date", - columnLetter: "FM", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Дата платежа", + "accessorKey":"data.q3.pay_date", + "columnLetter":"ED", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Сумма платежа", - accessorKey: "data.q4.pay_amount", - columnLetter: "FN", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Сумма платежа", + "accessorKey":"data.q3.pay_amount", + "columnLetter":"EE", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Комментарий", - accessorKey: "data.q4.pay_comment", - columnLetter: "FO", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Комментарий", + "accessorKey":"data.q3.pay_comment", + "columnLetter":"EF", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } }, { - header: "Предоставление акта", - accessorKey: "data.q4.pay_act", - columnLetter: "FP", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Предоставление акта", + "accessorKey":"data.q3.pay_act", + "columnLetter":"EG", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Фактические расходы", - accessorKey: "4_kvartal_2026_goda_fakticheskie_raskhody", - columns: [ + "header":"Фактические расходы", + "accessorKey":"3_kvartal_2026_goda_fakticheskie_raskhody", + "columns":[ { - header: "Бронь4 квартал", - accessorKey: "data.q4.booking", - columnLetter: "FR", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Бронь3 квартал", + "accessorKey":"data.q3.booking", + "columnLetter":"EI", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "ФактОктябрь", - accessorKey: "data.q4.actual_m1", - columnLetter: "FS", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактИюль", + "accessorKey":"data.q3.actual_m1", + "columnLetter":"EJ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "ФактНоябрь", - accessorKey: "data.q4.actual_m2", - columnLetter: "FT", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактАвгуст", + "accessorKey":"data.q3.actual_m2", + "columnLetter":"EK", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "ФактДекабрь", - accessorKey: "data.q4.actual_m3", - columnLetter: "FU", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"ФактСентябрь", + "accessorKey":"data.q3.actual_m3", + "columnLetter":"EL", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "СПОД(Январь)", - accessorKey: "data.q4.actual_spod", - columnLetter: "FV", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Факт3 квартал", + "accessorKey":"data.q3.actual_quarter", + "columnLetter":"EM", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } }, { - header: "Факт4 квартал(с уч СПОД)", - accessorKey: "data.q4.actual_quarter", - columnLetter: "FW", - size: 260, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Остаток после брони 3 квартала", + "accessorKey":"data.q3.residual_after_booking", + "columnLetter":"EN", + "size":300, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } }, { - header: "Остаток после брони 4 квартала (с уч СПОД)", - accessorKey: "data.q4.residual_after_booking", - columnLetter: "FX", - size: 420, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Остаток после факта 4 квартала (с уч СПОД)", - accessorKey: "data.q4.residual_after_actual", - columnLetter: "FY", - size: 420, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "header":"Остаток после факта 3 квартала", + "accessorKey":"data.q3.residual_after_actual", + "columnLetter":"EO", + "size":300, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, { - header: "Экономия", - accessorKey: "4_kvartal_2026_goda_ekonomiya", - columns: [ + "header":"Корректировка остатка в последующий квартал", + "accessorKey":"3_kvartal_2026_goda_korrektirovka_ostatka_v_posleduyuschiy_kvartal", + "columns":[ { - header: "Перенос в фонд экономии", - accessorKey: "data.q4.transfer_econ", - columnLetter: "GA", - size: 230, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Перенос в 4 квартал", + "accessorKey":"data.q3.transfer_q4", + "columnLetter":"EQ", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, + { + "header":"Задержка списания расходов / предоставления актов", + "accessorKey":"data.q3.transfer_q4_delay_acts", + "columnLetter":"ER", + "size":490, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + }, + { + "header":"Задержка закупочных процедур", + "accessorKey":"data.q3.transfer_q4_delay_procurement", + "columnLetter":"ES", + "size":280, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + }, + { + "header":"экономия (будет использована РФ)", + "accessorKey":"data.q3.transfer_q4_economy_rf", + "columnLetter":"ET", + "size":320, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + }, + { + "header":"Комментарий переноса в4 квартал", + "accessorKey":"data.q3.transfer_next_comment", + "columnLetter":"EU", + "size":320, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + }, + { + "header":"Перенос в фонд экономии", + "accessorKey":"data.q3.transfer_econ", + "columnLetter":"EV", + "size":230, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + }, + { + "header":"ВСЕГО", + "accessorKey":"data.q3.total", + "columnLetter":"EW", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, { - header: "2026 год", - accessorKey: "2026_god_43", - columns: [ + "header":"4 квартал 2026 года", + "accessorKey":"4_kvartal_2026_goda", + "columns":[ { - header: "", - accessorKey: "2026_god_field_5", - columns: [ + "header":"Корректировка базового плана", + "accessorKey":"4_kvartal_2026_goda_korrektirovka_bazovogo_plana", + "columns":[ { - header: "Сумма фактических расходов за год", - accessorKey: "data.totals.fact_year", - columnLetter: "GC", - size: 330, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Изменение целевого назначения перенесенной экономии ( =0)", + "accessorKey":"data.q4.target_change", + "columnLetter":"EY", + "size":570, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, - { - header: "Сумма оплаты за год", - accessorKey: "data.totals.pay_year", - columnLetter: "GE", - size: 190, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "header":"Корректировка статей базового плана ( =0)", + "accessorKey":"data.q4.base_correction", + "columnLetter":"EZ", + "size":410, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } }, + { + "header":"Комментарий изменения базового плана", + "accessorKey":"data.q4.base_correction_comment", + "columnLetter":"FA", + "size":360, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + }, + { + "header":"ДФиПУвеличение плана( >0)", + "accessorKey":"data.q4.revision_inc", + "columnLetter":"FB", + "size":270, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + }, + { + "header":"ДФиПCеквестр плана( <0)", + "accessorKey":"data.q4.revision_seq", + "columnLetter":"FC", + "size":250, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + }, + { + "header":"Комментарий", + "accessorKey":"data.q4.revision_comment", + "columnLetter":"FD", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + }, + { + "header":"Скорректированный план на подпись", + "accessorKey":"data.q4.new_plan", + "columnLetter":"FE", + "size":330, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + }, + + { + "header":"Корректировки плановых значений", + "accessorKey":"4_kvartal_2026_goda_korrektirovki_planovykh_znacheniy", + "columns":[ + { + "header":"Текущие( = 0)", + "accessorKey":"data.q4.adj_current", + "columnLetter":"FG", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } }, - }, + { + "header":"Корректиз сметы ГО", + "accessorKey":"data.q4.adj_ssp", + "columnLetter":"FH", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + }, + { + "header":"Корректиз резерва", + "accessorKey":"data.q4.adj_reserve", + "columnLetter":"FI", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + }, + { + "header":"Комментарий", + "accessorKey":"data.q4.adj_comment", + "columnLetter":"FJ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + }, + { + "header":"Скорректированный план с учетом корректировок", + "accessorKey":"data.q4.corrected_plan", + "columnLetter":"FK", + "size":450, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFF66", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } }, + { + "header":"Согласование платежей", + "accessorKey":"4_kvartal_2026_goda_soglasovanie_platezhey", + "columns":[ + { + "header":"Дата платежа", + "accessorKey":"data.q4.pay_date", + "columnLetter":"FM", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + }, + { + "header":"Сумма платежа", + "accessorKey":"data.q4.pay_amount", + "columnLetter":"FN", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + }, + { + "header":"Комментарий", + "accessorKey":"data.q4.pay_comment", + "columnLetter":"FO", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + }, + { + "header":"Предоставление акта", + "accessorKey":"data.q4.pay_act", + "columnLetter":"FP", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + }, + { + "header":"Фактические расходы", + "accessorKey":"4_kvartal_2026_goda_fakticheskie_raskhody", + "columns":[ + { + "header":"Бронь4 квартал", + "accessorKey":"data.q4.booking", + "columnLetter":"FR", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } + }, + { + "header":"ФактОктябрь", + "accessorKey":"data.q4.actual_m1", + "columnLetter":"FS", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"ФактНоябрь", + "accessorKey":"data.q4.actual_m2", + "columnLetter":"FT", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"ФактДекабрь", + "accessorKey":"data.q4.actual_m3", + "columnLetter":"FU", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"СПОД(Январь)", + "accessorKey":"data.q4.actual_spod", + "columnLetter":"FV", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт4 квартал(с уч СПОД)", + "accessorKey":"data.q4.actual_quarter", + "columnLetter":"FW", + "size":260, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Остаток после брони 4 квартала (с уч СПОД)", + "accessorKey":"data.q4.residual_after_booking", + "columnLetter":"FX", + "size":420, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FABF8F", + "color":"#000000" + } + } + }, + { + "header":"Остаток после факта 4 квартала (с уч СПОД)", + "accessorKey":"data.q4.residual_after_actual", + "columnLetter":"FY", + "size":420, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + }, + { + "header":"Экономия", + "accessorKey":"4_kvartal_2026_goda_ekonomiya", + "columns":[ + { + "header":"Перенос в фонд экономии", + "accessorKey":"data.q4.transfer_econ", + "columnLetter":"GA", + "size":230, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#903C39", + "color":"#FFFFFF" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + } ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } }, - ], - }, -}; + { + "header":"2026 год.", + "accessorKey":"2026_god_43", + "columns":[ + { + "header":"", + "accessorKey":"2026_god_field_5", + "columns":[ + { + "header":"Сумма фактических расходов за год", + "accessorKey":"data.totals.fact_year", + "columnLetter":"GC", + "size":330, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Сумма оплаты за год", + "accessorKey":"data.totals.pay_year", + "columnLetter":"GE", + "size":190, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#95B3D7", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#B2A1C7", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#FFFFFF", + "color":"#000000" + } + } + } + ] + } +} \ No newline at end of file diff --git a/web/src/components/RealtimeTable/constants/FORM_2/CAP.js b/web/src/components/RealtimeTable/constants/FORM_2/CAP.js index 5fdd11c..7d1c3c7 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/CAP.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/CAP.js @@ -29,114 +29,6 @@ export const config = { color_type: orangeColumn, accessorKey: "data.header.internal_order", }, - "data.collegial.approved": { - color_type: orangeColumn, - accessorKey: "data.collegial.approved", - }, - "data.collegial.protocol": { - color_type: orangeColumn, - accessorKey: "data.collegial.protocol", - }, - field_kollegialnye_organy_field: { - color_type: orangeColumn, - accessorKey: "field_kollegialnye_organy_field", - }, - "data.collegial.note": { - color_type: orangeColumn, - accessorKey: "data.collegial.note", - }, - "data.ckk.ceiling": { - color_type: orangeColumn, - accessorKey: "data.ckk.ceiling", - }, - "data.ckk.rf_schedule": { - color_type: orangeColumn, - accessorKey: "data.ckk.rf_schedule", - }, - "data.ckk.deadline": { - color_type: orangeColumn, - accessorKey: "data.ckk.deadline", - }, - "data.ckk.proc_plan": { - color_type: orangeColumn, - accessorKey: "data.ckk.proc_plan", - }, - "data.ckk.proc_method": { - color_type: orangeColumn, - accessorKey: "data.ckk.proc_method", - }, - "data.ckk.comment": { - color_type: orangeColumn, - accessorKey: "data.ckk.comment", - }, - "data.contract_detail.counterparty": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.counterparty", - }, - "data.contract_detail.reference": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.reference", - }, - "data.contract_detail.addenda": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.addenda", - }, - "data.contract_detail.subject": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.subject", - }, - "data.contract_detail.currency": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.currency", - }, - "data.contract_detail.ceiling": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.ceiling", - }, - "data.contract_detail.rf_schedule": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.rf_schedule", - }, - "data.contract_detail.vat_rate": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.vat_rate", - }, - "data.contract_detail.exchange_rate": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.exchange_rate", - }, - "data.contract_detail.amount_foreign": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.amount_foreign", - }, - "data.contract_detail.deadline": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.deadline", - }, - "data.contract_detail.payment_scheme": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.payment_scheme", - }, - "data.contract_detail.act": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.act", - }, - "data.contract_detail.comment": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.comment", - }, - field_ref_field: { - color_type: whiteColumn, - accessorKey: "field_ref_field", - }, - "data.totals.fact_year": { - color_type: greenColumn, - accessorKey: "data.totals.fact_year", - }, - "data.totals.pay_year": { - color_type: blueColumn, - accessorKey: "data.totals.pay_year", - }, "data.plan.q1": { color_type: orangeColumn, accessorKey: "data.plan.q1", @@ -266,37 +158,133 @@ export const config = { accessorKey: "data.approved.year", }, "data.collegial.approved": { - color_type: whiteColumn, + color_type: orangeColumn, accessorKey: "data.collegial.approved", }, "data.collegial.protocol": { - color_type: whiteColumn, + color_type: orangeColumn, accessorKey: "data.collegial.protocol", }, field_kollegialnye_organy_field: { - color_type: whiteColumn, + color_type: orangeColumn, accessorKey: "field_kollegialnye_organy_field", }, "data.collegial.note": { - color_type: whiteColumn, + color_type: orangeColumn, accessorKey: "data.collegial.note", }, - field_field_field: { - color_type: whiteColumn, - accessorKey: "field_field_field", - }, "data.ckk.ceiling": { - color_type: whiteColumn, + color_type: orangeColumn, accessorKey: "data.ckk.ceiling", }, "data.ckk.q1": { color_type: orangeColumn, accessorKey: "data.ckk.q1", }, + "data.ckk.q2": { + color_type: orangeColumn, + accessorKey: "data.ckk.q2", + }, + "data.ckk.q3": { + color_type: orangeColumn, + accessorKey: "data.ckk.q3", + }, + "data.ckk.q4": { + color_type: orangeColumn, + accessorKey: "data.ckk.q4", + }, + "data.ckk.rf_schedule": { + color_type: orangeColumn, + accessorKey: "data.ckk.rf_schedule", + }, + "data.ckk.deadline": { + color_type: orangeColumn, + accessorKey: "data.ckk.deadline", + }, + "data.ckk.proc_plan": { + color_type: orangeColumn, + accessorKey: "data.ckk.proc_plan", + }, + "data.ckk.proc_method": { + color_type: orangeColumn, + accessorKey: "data.ckk.proc_method", + }, + "data.ckk.comment": { + color_type: orangeColumn, + accessorKey: "data.ckk.comment", + }, + "data.contract_detail.counterparty": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.counterparty", + }, + "data.contract_detail.reference": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.reference", + }, + "data.contract_detail.addenda": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.addenda", + }, + "data.contract_detail.subject": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.subject", + }, + "data.contract_detail.currency": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.currency", + }, + "data.contract_detail.ceiling": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.ceiling", + }, "data.contract_detail.q1": { color_type: orangeColumn, accessorKey: "data.contract_detail.q1", }, + "data.contract_detail.q2": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.q2", + }, + "data.contract_detail.q3": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.q3", + }, + "data.contract_detail.q4": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.q4", + }, + "data.contract_detail.rf_schedule": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.rf_schedule", + }, + "data.contract_detail.vat_rate": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.vat_rate", + }, + "data.contract_detail.exchange_rate": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.exchange_rate", + }, + "data.contract_detail.amount_foreign": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.amount_foreign", + }, + "data.contract_detail.deadline": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.deadline", + }, + "data.contract_detail.payment_scheme": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.payment_scheme", + }, + "data.contract_detail.act": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.act", + }, + "data.contract_detail.comment": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.comment", + }, "data.q1.adj_current": { color_type: yellowColumn, accessorKey: "data.q1.adj_current", @@ -310,12 +298,13 @@ export const config = { accessorKey: "data.q1.adj_rf", }, "data.q1.adj_reserve": { - color_type: whiteColumn, + color_type: yellowColumn, accessorKey: "data.q1.adj_reserve", }, - "1_kv_26_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc": { + "1_kvartal_2026_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc": { color_type: redColumn, - accessorKey: "1_kv_26_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc", + accessorKey: + "1_kvartal_2026_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc", }, "data.q1.adj_comment": { color_type: yellowColumn, @@ -325,6 +314,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q1.corrected_plan", }, + "1_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "1_kvartal_2026_ref_field", + }, "data.q1.pay_date": { color_type: blueColumn, accessorKey: "data.q1.pay_date", @@ -349,6 +342,10 @@ export const config = { color_type: blueColumn, accessorKey: "data.q1.pay_act", }, + "1_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "1_kvartal_2026_field_field", + }, "data.q1.booking": { color_type: orangeColumn, accessorKey: "data.q1.booking", @@ -397,14 +394,6 @@ export const config = { color_type: redColumn, accessorKey: "data.q1.total", }, - "data.ckk.q2": { - color_type: orangeColumn, - accessorKey: "data.ckk.q2", - }, - "data.contract_detail.q2": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.q2", - }, "data.q2.rev_eco": { color_type: redColumn, accessorKey: "data.q2.rev_eco", @@ -429,6 +418,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q2.new_plan", }, + "2_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "2_kvartal_2026_field_field", + }, "data.q2.adj_current": { color_type: yellowColumn, accessorKey: "data.q2.adj_current", @@ -445,14 +438,19 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q2.adj_reserve", }, - "2_kv_26_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc": { + "2_kvartal_2026_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc": { color_type: redColumn, - accessorKey: "2_kv_26_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc", + accessorKey: + "2_kvartal_2026_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc", }, "data.q2.corrected_plan": { color_type: yellowColumn, accessorKey: "data.q2.corrected_plan", }, + "2_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "2_kvartal_2026_ref_field", + }, "data.q2.pay_date": { color_type: blueColumn, accessorKey: "data.q2.pay_date", @@ -521,14 +519,6 @@ export const config = { color_type: redColumn, accessorKey: "data.q2.total", }, - "data.ckk.q3": { - color_type: orangeColumn, - accessorKey: "data.ckk.q3", - }, - "data.contract_detail.q3": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.q3", - }, "data.q3.rev_eco": { color_type: redColumn, accessorKey: "data.q3.rev_eco", @@ -553,6 +543,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q3.new_plan", }, + "3_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "3_kvartal_2026_field_field", + }, "data.q3.adj_current": { color_type: yellowColumn, accessorKey: "data.q3.adj_current", @@ -569,14 +563,19 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q3.adj_reserve", }, - "3_kv_26_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc": { + "3_kvartal_2026_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc": { color_type: redColumn, - accessorKey: "3_kv_26_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc", + accessorKey: + "3_kvartal_2026_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc", }, "data.q3.corrected_plan": { color_type: yellowColumn, accessorKey: "data.q3.corrected_plan", }, + "3_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "3_kvartal_2026_ref_field", + }, "data.q3.pay_date": { color_type: blueColumn, accessorKey: "data.q3.pay_date", @@ -641,14 +640,6 @@ export const config = { color_type: redColumn, accessorKey: "data.q3.total", }, - "data.ckk.q4": { - color_type: orangeColumn, - accessorKey: "data.ckk.q4", - }, - "data.contract_detail.q4": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.q4", - }, "data.q4.rev_eco": { color_type: redColumn, accessorKey: "data.q4.rev_eco", @@ -677,6 +668,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q4.new_plan", }, + "4_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "4_kvartal_2026_field_field", + }, "data.q4.adj_current": { color_type: yellowColumn, accessorKey: "data.q4.adj_current", @@ -697,6 +692,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q4.corrected_plan", }, + "4_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "4_kvartal_2026_ref_field", + }, "data.q4.pay_date": { color_type: blueColumn, accessorKey: "data.q4.pay_date", @@ -753,9 +752,9 @@ export const config = { color_type: greenColumn, accessorKey: "data.q4.rem_actual", }, - "4_kv_26_zakrytie_4_go_kvartala_field": { + "4_kvartal_2026_zakrytie_4_go_kvartala_field": { color_type: redColumn, - accessorKey: "4_kv_26_zakrytie_4_go_kvartala_field", + accessorKey: "4_kvartal_2026_zakrytie_4_go_kvartala_field", }, "data.q4.economy": { color_type: redColumn, @@ -765,10 +764,18 @@ export const config = { color_type: redColumn, accessorKey: "data.q4.total", }, + "data.totals.fact_year": { + color_type: greenColumn, + accessorKey: "data.totals.fact_year", + }, + "data.totals.pay_year": { + color_type: blueColumn, + accessorKey: "data.totals.pay_year", + }, }, columns: [ { - header: "", + header: " ", accessorKey: "field", columns: [ { @@ -783,12 +790,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "ID статьи", @@ -802,12 +803,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "ID группы номенклатуры", @@ -821,12 +816,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "Наименование", @@ -840,12 +829,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "Внутренний заказ", @@ -859,12 +842,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, ], muiTableHeadCellProps: { @@ -1075,7 +1052,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, @@ -1096,12 +1073,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "Назначение расхода фактической аллокации", @@ -1116,17 +1087,11 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, @@ -1234,7 +1199,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, @@ -1342,7 +1307,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, @@ -1431,13 +1396,13 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, }, { - header: "-", + header: " ", accessorKey: "field_6", columns: [ { @@ -1487,12 +1452,23 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, }, - + ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, + }, + { + header: " ", + accessorKey: "field_10", + columns: [ { header: "ЦКК", accessorKey: "field_tskk", @@ -1518,7 +1494,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1531,7 +1507,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1544,7 +1520,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1557,7 +1533,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1630,11 +1606,23 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, }, + ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, + }, + { + header: " ", + accessorKey: "field_20", + columns: [ { header: "Договор", accessorKey: "field_dogovor", @@ -1725,7 +1713,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1738,7 +1726,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1751,7 +1739,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1764,7 +1752,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1876,7 +1864,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -1913,7 +1901,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -1932,7 +1920,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -1951,7 +1939,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -1970,7 +1958,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -1990,7 +1978,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2009,7 +1997,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2027,7 +2015,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2040,7 +2028,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2053,7 +2041,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2066,7 +2054,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2079,7 +2067,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2092,7 +2080,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2100,11 +2088,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, }, + { header: "Бронь 1 кв 26", accessorKey: "1_kvartal_2026_bron_1_kv_26", @@ -2125,7 +2114,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2144,7 +2133,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2163,7 +2152,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2182,7 +2171,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2201,7 +2190,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2220,7 +2209,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2239,7 +2228,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2256,8 +2245,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2269,8 +2258,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2282,8 +2271,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2295,8 +2284,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2308,16 +2297,16 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2354,8 +2343,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2373,8 +2362,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2392,8 +2381,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2411,8 +2400,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2430,8 +2419,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2449,7 +2438,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2475,7 +2464,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2494,7 +2483,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2513,7 +2502,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2532,7 +2521,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2552,11 +2541,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Платеж и предоставление акта", accessorKey: "2_kvartal_2026_platezh_i_predostavlenie_akta", @@ -2569,7 +2559,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2582,7 +2572,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2595,7 +2585,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2608,7 +2598,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2621,7 +2611,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2634,7 +2624,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2642,7 +2632,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2667,7 +2657,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2686,7 +2676,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2705,7 +2695,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2724,7 +2714,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2743,7 +2733,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2762,7 +2752,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2781,7 +2771,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2798,8 +2788,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2811,8 +2801,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2824,8 +2814,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2837,16 +2827,16 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2883,8 +2873,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2902,8 +2892,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2921,8 +2911,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2940,8 +2930,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2959,8 +2949,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2978,7 +2968,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3004,7 +2994,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3023,7 +3013,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3042,7 +3032,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3061,7 +3051,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3081,11 +3071,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Платеж и предоставление акта", accessorKey: "3_kvartal_2026_platezh_i_predostavlenie_akta", @@ -3098,7 +3089,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3111,7 +3102,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3124,7 +3115,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3137,7 +3128,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3150,7 +3141,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3163,7 +3154,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3171,7 +3162,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3196,7 +3187,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3215,7 +3206,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3234,7 +3225,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3253,7 +3244,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3272,7 +3263,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3291,7 +3282,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3310,7 +3301,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3327,8 +3318,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3340,8 +3331,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3353,16 +3344,16 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3399,8 +3390,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3418,8 +3409,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3437,8 +3428,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3456,8 +3447,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3482,8 +3473,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3501,7 +3492,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3527,7 +3518,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3546,7 +3537,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3565,7 +3556,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3584,7 +3575,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3603,11 +3594,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Платеж и предоставление акта", accessorKey: "4_kvartal_2026_platezh_i_predostavlenie_akta", @@ -3620,7 +3612,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3633,7 +3625,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3646,7 +3638,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3659,7 +3651,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3672,7 +3664,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3685,7 +3677,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3693,7 +3685,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3718,7 +3710,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3737,7 +3729,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3756,7 +3748,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3775,7 +3767,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3794,7 +3786,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3813,7 +3805,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3832,7 +3824,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3851,7 +3843,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3868,8 +3860,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3881,16 +3873,16 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3903,12 +3895,12 @@ export const config = { }, }, { - header: "Факт", - accessorKey: "fakt", + header: " ", + accessorKey: "88", columns: [ { header: "Факт 26", - accessorKey: "fakt_fakt_26", + accessorKey: "88_fakt_26", columns: [ { header: "", @@ -3916,11 +3908,17 @@ export const config = { columnLetter: "HE", size: 150, filterFn: "contains", + muiTableHeadCellProps: { + sx: { + backgroundColor: "#C2D69B", + color: "#000000", + }, + }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3934,12 +3932,12 @@ export const config = { }, }, { - header: "Сумма", - accessorKey: "summa", + header: " ", + accessorKey: "77", columns: [ { header: "Сумма оплаты", - accessorKey: "summa_summa_oplaty", + accessorKey: "77_summa_oplaty", columns: [ { header: "", @@ -3947,11 +3945,17 @@ export const config = { columnLetter: "HG", size: 150, filterFn: "contains", + muiTableHeadCellProps: { + sx: { + backgroundColor: "#95B3D7", + color: "#000000", + }, + }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, diff --git a/web/src/components/RealtimeTable/constants/FORM_2/OPER.js b/web/src/components/RealtimeTable/constants/FORM_2/OPER.js index 07065c6..2f68548 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/OPER.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/OPER.js @@ -29,114 +29,6 @@ export const config = { color_type: blueColumn, accessorKey: "data.header.internal_order", }, - "data.collegial.approved": { - color_type: orangeColumn, - accessorKey: "data.collegial.approved", - }, - "data.collegial.protocol": { - color_type: orangeColumn, - accessorKey: "data.collegial.protocol", - }, - field_kollegialnye_organy_field: { - color_type: orangeColumn, - accessorKey: "field_kollegialnye_organy_field", - }, - "data.collegial.note": { - color_type: orangeColumn, - accessorKey: "data.collegial.note", - }, - "data.ckk.ceiling": { - color_type: orangeColumn, - accessorKey: "data.ckk.ceiling", - }, - "data.ckk.rf_schedule": { - color_type: orangeColumn, - accessorKey: "data.ckk.rf_schedule", - }, - "data.ckk.deadline": { - color_type: orangeColumn, - accessorKey: "data.ckk.deadline", - }, - "data.ckk.proc_plan": { - color_type: orangeColumn, - accessorKey: "data.ckk.proc_plan", - }, - "data.ckk.proc_method": { - color_type: orangeColumn, - accessorKey: "data.ckk.proc_method", - }, - "data.ckk.comment": { - color_type: orangeColumn, - accessorKey: "data.ckk.comment", - }, - "data.contract_detail.counterparty": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.counterparty", - }, - "data.contract_detail.reference": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.reference", - }, - "data.contract_detail.addenda": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.addenda", - }, - "data.contract_detail.subject": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.subject", - }, - "data.contract_detail.currency": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.currency", - }, - "data.contract_detail.ceiling": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.ceiling", - }, - "data.contract_detail.rf_schedule": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.rf_schedule", - }, - "data.contract_detail.vat_rate": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.vat_rate", - }, - "data.contract_detail.exchange_rate": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.exchange_rate", - }, - "data.contract_detail.amount_foreign": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.amount_foreign", - }, - "data.contract_detail.deadline": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.deadline", - }, - "data.contract_detail.payment_scheme": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.payment_scheme", - }, - "data.contract_detail.act": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.act", - }, - "data.contract_detail.comment": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.comment", - }, - field_ref_field: { - color_type: whiteColumn, - accessorKey: "field_ref_field", - }, - "data.totals.fact_year": { - color_type: greenColumn, - accessorKey: "data.totals.fact_year", - }, - "data.totals.pay_year": { - color_type: blueColumn, - accessorKey: "data.totals.pay_year", - }, "data.plan.q1": { color_type: blueColumn, accessorKey: "data.plan.q1", @@ -265,14 +157,134 @@ export const config = { color_type: blueColumn, accessorKey: "data.approved.year", }, + "data.collegial.approved": { + color_type: orangeColumn, + accessorKey: "data.collegial.approved", + }, + "data.collegial.protocol": { + color_type: orangeColumn, + accessorKey: "data.collegial.protocol", + }, + field_kollegialnye_organy_field: { + color_type: orangeColumn, + accessorKey: "field_kollegialnye_organy_field", + }, + "data.collegial.note": { + color_type: orangeColumn, + accessorKey: "data.collegial.note", + }, + "data.ckk.ceiling": { + color_type: orangeColumn, + accessorKey: "data.ckk.ceiling", + }, "data.ckk.q1": { color_type: orangeColumn, accessorKey: "data.ckk.q1", }, + "data.ckk.q2": { + color_type: orangeColumn, + accessorKey: "data.ckk.q2", + }, + "data.ckk.q3": { + color_type: orangeColumn, + accessorKey: "data.ckk.q3", + }, + "data.ckk.q4": { + color_type: orangeColumn, + accessorKey: "data.ckk.q4", + }, + "data.ckk.rf_schedule": { + color_type: orangeColumn, + accessorKey: "data.ckk.rf_schedule", + }, + "data.ckk.deadline": { + color_type: orangeColumn, + accessorKey: "data.ckk.deadline", + }, + "data.ckk.proc_plan": { + color_type: orangeColumn, + accessorKey: "data.ckk.proc_plan", + }, + "data.ckk.proc_method": { + color_type: orangeColumn, + accessorKey: "data.ckk.proc_method", + }, + "data.ckk.comment": { + color_type: orangeColumn, + accessorKey: "data.ckk.comment", + }, + "data.contract_detail.counterparty": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.counterparty", + }, + "data.contract_detail.reference": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.reference", + }, + "data.contract_detail.addenda": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.addenda", + }, + "data.contract_detail.subject": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.subject", + }, + "data.contract_detail.currency": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.currency", + }, + "data.contract_detail.ceiling": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.ceiling", + }, "data.contract_detail.q1": { color_type: orangeColumn, accessorKey: "data.contract_detail.q1", }, + "data.contract_detail.q2": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.q2", + }, + "data.contract_detail.q3": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.q3", + }, + "data.contract_detail.q4": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.q4", + }, + "data.contract_detail.rf_schedule": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.rf_schedule", + }, + "data.contract_detail.vat_rate": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.vat_rate", + }, + "data.contract_detail.exchange_rate": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.exchange_rate", + }, + "data.contract_detail.amount_foreign": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.amount_foreign", + }, + "data.contract_detail.deadline": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.deadline", + }, + "data.contract_detail.payment_scheme": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.payment_scheme", + }, + "data.contract_detail.act": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.act", + }, + "data.contract_detail.comment": { + color_type: orangeColumn, + accessorKey: "data.contract_detail.comment", + }, "data.q1.adj_current": { color_type: yellowColumn, accessorKey: "data.q1.adj_current", @@ -289,9 +301,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q1.adj_reserve", }, - "1_kv_26_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc": { + "1_kvartal_2026_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc": { color_type: redColumn, - accessorKey: "1_kv_26_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc", + accessorKey: + "1_kvartal_2026_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc", }, "data.q1.adj_comment": { color_type: yellowColumn, @@ -301,6 +314,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q1.corrected_plan", }, + "1_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "1_kvartal_2026_ref_field", + }, "data.q1.pay_date": { color_type: blueColumn, accessorKey: "data.q1.pay_date", @@ -325,6 +342,10 @@ export const config = { color_type: blueColumn, accessorKey: "data.q1.pay_act", }, + "1_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "1_kvartal_2026_field_field", + }, "data.q1.booking": { color_type: orangeColumn, accessorKey: "data.q1.booking", @@ -373,14 +394,6 @@ export const config = { color_type: redColumn, accessorKey: "data.q1.total", }, - "data.ckk.q2": { - color_type: orangeColumn, - accessorKey: "data.ckk.q2", - }, - "data.contract_detail.q2": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.q2", - }, "data.q2.rev_eco": { color_type: redColumn, accessorKey: "data.q2.rev_eco", @@ -405,6 +418,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q2.new_plan", }, + "2_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "2_kvartal_2026_field_field", + }, "data.q2.adj_current": { color_type: yellowColumn, accessorKey: "data.q2.adj_current", @@ -421,14 +438,19 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q2.adj_reserve", }, - "2_kv_26_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc": { + "2_kvartal_2026_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc": { color_type: redColumn, - accessorKey: "2_kv_26_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc", + accessorKey: + "2_kvartal_2026_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc", }, "data.q2.corrected_plan": { color_type: yellowColumn, accessorKey: "data.q2.corrected_plan", }, + "2_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "2_kvartal_2026_ref_field", + }, "data.q2.pay_date": { color_type: blueColumn, accessorKey: "data.q2.pay_date", @@ -497,14 +519,6 @@ export const config = { color_type: redColumn, accessorKey: "data.q2.total", }, - "data.ckk.q3": { - color_type: orangeColumn, - accessorKey: "data.ckk.q3", - }, - "data.contract_detail.q3": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.q3", - }, "data.q3.rev_eco": { color_type: redColumn, accessorKey: "data.q3.rev_eco", @@ -529,6 +543,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q3.new_plan", }, + "3_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "3_kvartal_2026_field_field", + }, "data.q3.adj_current": { color_type: yellowColumn, accessorKey: "data.q3.adj_current", @@ -545,14 +563,19 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q3.adj_reserve", }, - "3_kv_26_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc": { + "3_kvartal_2026_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc": { color_type: redColumn, - accessorKey: "3_kv_26_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc", + accessorKey: + "3_kvartal_2026_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc", }, "data.q3.corrected_plan": { color_type: yellowColumn, accessorKey: "data.q3.corrected_plan", }, + "3_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "3_kvartal_2026_ref_field", + }, "data.q3.pay_date": { color_type: blueColumn, accessorKey: "data.q3.pay_date", @@ -617,14 +640,6 @@ export const config = { color_type: redColumn, accessorKey: "data.q3.total", }, - "data.ckk.q4": { - color_type: orangeColumn, - accessorKey: "data.ckk.q4", - }, - "data.contract_detail.q4": { - color_type: orangeColumn, - accessorKey: "data.contract_detail.q4", - }, "data.q4.rev_eco": { color_type: redColumn, accessorKey: "data.q4.rev_eco", @@ -653,6 +668,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q4.new_plan", }, + "4_kvartal_2026_field_field": { + color_type: whiteColumn, + accessorKey: "4_kvartal_2026_field_field", + }, "data.q4.adj_current": { color_type: yellowColumn, accessorKey: "data.q4.adj_current", @@ -673,6 +692,10 @@ export const config = { color_type: yellowColumn, accessorKey: "data.q4.corrected_plan", }, + "4_kvartal_2026_ref_field": { + color_type: whiteColumn, + accessorKey: "4_kvartal_2026_ref_field", + }, "data.q4.pay_date": { color_type: blueColumn, accessorKey: "data.q4.pay_date", @@ -729,9 +752,9 @@ export const config = { color_type: greenColumn, accessorKey: "data.q4.rem_actual", }, - "4_kv_26_zakrytie_4_go_kvartala_field": { + "4_kvartal_2026_zakrytie_4_go_kvartala_field": { color_type: redColumn, - accessorKey: "4_kv_26_zakrytie_4_go_kvartala_field", + accessorKey: "4_kvartal_2026_zakrytie_4_go_kvartala_field", }, "data.q4.economy": { color_type: redColumn, @@ -741,10 +764,18 @@ export const config = { color_type: redColumn, accessorKey: "data.q4.total", }, + "data.totals.fact_year": { + color_type: greenColumn, + accessorKey: "data.totals.fact_year", + }, + "data.totals.pay_year": { + color_type: blueColumn, + accessorKey: "data.totals.pay_year", + }, }, columns: [ { - header: "", + header: " ", accessorKey: "field", columns: [ { @@ -759,12 +790,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "ID статьи", @@ -778,12 +803,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "ID группы номенклатуры", @@ -797,12 +816,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "Наименование", @@ -816,12 +829,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "Внутренний заказ", @@ -835,17 +842,17 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, { - header: "Планируемые ССП показатели сметы расходов.", + header: "Планируемые ССП показатели сметы расходов", accessorKey: "planiruemye_ssp_pokazateli_smety_raskhodov", columns: [ { @@ -1045,13 +1052,13 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, }, { - header: "Аллокация расходов.", + header: "Аллокация расходов", accessorKey: "allokatsiya_raskhodov", columns: [ { @@ -1066,12 +1073,6 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, { header: "Назначение расхода фактической аллокации", @@ -1086,23 +1087,17 @@ export const config = { filterFn: "contains", }, ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, }, { - header: "Секвестирование ДФиП.", + header: "Секвестирование ДФиП", accessorKey: "sekvestirovanie_dfip", columns: [ { @@ -1204,7 +1199,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, @@ -1312,7 +1307,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, @@ -1401,13 +1396,13 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#BFBFBF", color: "#000000", }, }, }, { - header: "-", + header: " ", accessorKey: "field_6", columns: [ { @@ -1440,19 +1435,7 @@ export const config = { }, }, }, - { - header: "", - accessorKey: "field_kollegialnye_organy_field", - columnLetter: "AU", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, + { header: "Примечание", accessorKey: "data.collegial.note", @@ -1469,36 +1452,23 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, }, - { - header: "", - accessorKey: "field_field", - columns: [ - { - header: "", - accessorKey: "field_field_field", - columnLetter: "AW", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, + ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", }, + }, + }, + { + header: " ", + accessorKey: "field_10", + columns: [ { header: "ЦКК", accessorKey: "field_tskk", @@ -1524,7 +1494,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1537,7 +1507,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1550,7 +1520,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1563,7 +1533,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1636,11 +1606,23 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, }, + ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, + }, + { + header: " ", + accessorKey: "field_20", + columns: [ { header: "Договор", accessorKey: "field_dogovor", @@ -1731,7 +1713,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1744,7 +1726,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1757,7 +1739,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1770,7 +1752,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#C5D9F1", + backgroundColor: "#748C42", color: "#000000", }, }, @@ -1882,12 +1864,18 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, { header: "1 квартал 2026", @@ -1913,7 +1901,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -1932,7 +1920,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -1951,7 +1939,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -1970,31 +1958,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Перенос во 2 кв 26", - accessorKey: "1_kvartal_2026_perenos_vo_2_kv_26", - columns: [ - { - header: "Сумма, тыс. руб. (с учетом НДC)", - accessorKey: - "1_kvartal_2026_perenos_vo_2_kv_26_summa_tys_rub_s_uchetom_ndc", - columnLetter: "CF", - size: 310, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Комментарий", accessorKey: "1_kvartal_2026_kommentariy", @@ -2009,7 +1978,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2028,26 +1997,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "", - accessorKey: "1_kvartal_2026_field", - columns: [ - { - header: "", - accessorKey: "1_kvartal_2026_field_field", - columnLetter: "CI", - size: 150, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2064,7 +2014,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2077,7 +2027,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2090,7 +2040,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2103,7 +2053,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2116,7 +2066,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2129,7 +2079,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2137,11 +2087,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, }, + { header: "Бронь 1 кв 26", accessorKey: "1_kvartal_2026_bron_1_kv_26", @@ -2162,7 +2113,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2181,7 +2132,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2200,7 +2151,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2219,7 +2170,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2238,7 +2189,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2257,7 +2208,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2276,7 +2227,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2293,8 +2244,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2306,8 +2257,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2319,8 +2270,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2332,8 +2283,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2345,20 +2296,26 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, { header: "2 квартал 2026", @@ -2385,8 +2342,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2404,8 +2361,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2423,8 +2380,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2442,8 +2399,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2461,8 +2418,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2480,30 +2437,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "", - accessorKey: "2_kvartal_2026_field", - columns: [ - { - header: "", - accessorKey: "2_kvartal_2026_field_field", - columnLetter: "DK", - size: 150, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Текущие корректировки( = 0)", accessorKey: "2_kvartal_2026_tekuschie_korrektirovki_0", @@ -2524,7 +2463,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2543,7 +2482,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2562,7 +2501,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -2581,31 +2520,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Перенос в 3 кв 26", - accessorKey: "2_kvartal_2026_perenos_v_3_kv_26", - columns: [ - { - header: "Сумма, тыс. руб. (с учетом НДC)", - accessorKey: - "2_kvartal_2026_perenos_v_3_kv_26_summa_tys_rub_s_uchetom_ndc", - columnLetter: "DP", - size: 310, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Скорр. план 2 кв. 26", accessorKey: "2_kvartal_2026_skorr_plan_2_kv_26", @@ -2620,11 +2540,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Платеж и предоставление акта", accessorKey: "2_kvartal_2026_platezh_i_predostavlenie_akta", @@ -2637,7 +2558,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2650,7 +2571,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2663,7 +2584,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2676,7 +2597,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2689,7 +2610,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2702,7 +2623,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2710,7 +2631,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -2735,7 +2656,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2754,7 +2675,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2773,7 +2694,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2792,7 +2713,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2811,7 +2732,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2830,7 +2751,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -2849,7 +2770,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -2866,8 +2787,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2879,8 +2800,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2892,8 +2813,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2905,20 +2826,26 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, { header: "3 квартал 2026", @@ -2945,8 +2872,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2964,8 +2891,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -2983,8 +2910,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3002,8 +2929,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3021,8 +2948,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3040,30 +2967,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "", - accessorKey: "3_kvartal_2026_field", - columns: [ - { - header: "", - accessorKey: "3_kvartal_2026_field_field", - columnLetter: "ET", - size: 150, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Текущие корректировки( = 0)", accessorKey: "3_kvartal_2026_tekuschie_korrektirovki_0", @@ -3084,7 +2993,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3103,7 +3012,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3122,7 +3031,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3141,31 +3050,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "Перенос в 4 кв 26", - accessorKey: "3_kvartal_2026_perenos_v_4_kv_26", - columns: [ - { - header: "Сумма, тыс. руб. (с учетом НДC)", - accessorKey: - "3_kvartal_2026_perenos_v_4_kv_26_summa_tys_rub_s_uchetom_ndc", - columnLetter: "EY", - size: 310, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Скорр. план 3 кв. 26", accessorKey: "3_kvartal_2026_skorr_plan_3_kv_26", @@ -3180,11 +3070,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Платеж и предоставление акта", accessorKey: "3_kvartal_2026_platezh_i_predostavlenie_akta", @@ -3197,7 +3088,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3210,7 +3101,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3223,7 +3114,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3236,7 +3127,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3249,7 +3140,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3262,7 +3153,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3270,7 +3161,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3295,7 +3186,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3314,7 +3205,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3333,7 +3224,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3352,7 +3243,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3371,7 +3262,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3390,7 +3281,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3409,7 +3300,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3426,8 +3317,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3439,8 +3330,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3452,20 +3343,26 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, { header: "4 квартал 2026", @@ -3492,8 +3389,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3511,8 +3408,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3530,8 +3427,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3549,8 +3446,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3575,8 +3472,8 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -3594,30 +3491,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, - { - header: "", - accessorKey: "4_kvartal_2026_field", - columns: [ - { - header: "", - accessorKey: "4_kvartal_2026_field_field", - columnLetter: "GB", - size: 150, - filterFn: "contains", - }, - ], - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Текущие корректировки( = 0)", accessorKey: "4_kvartal_2026_tekuschie_korrektirovki_0", @@ -3638,7 +3517,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3657,7 +3536,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3676,7 +3555,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3695,7 +3574,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, @@ -3714,11 +3593,12 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FFFF66", color: "#000000", }, }, }, + { header: "Платеж и предоставление акта", accessorKey: "4_kvartal_2026_platezh_i_predostavlenie_akta", @@ -3731,7 +3611,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3744,7 +3624,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3757,7 +3637,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3770,7 +3650,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3783,7 +3663,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3796,7 +3676,7 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3804,7 +3684,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, @@ -3829,7 +3709,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3848,7 +3728,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3867,7 +3747,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3886,7 +3766,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3905,7 +3785,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3924,7 +3804,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3943,7 +3823,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#FABF8F", color: "#000000", }, }, @@ -3962,7 +3842,7 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, @@ -3971,19 +3851,6 @@ export const config = { header: "Закрытие 4-го квартала", accessorKey: "4_kvartal_2026_zakrytie_4_go_kvartala", columns: [ - { - header: "", - accessorKey: "4_kvartal_2026_zakrytie_4_go_kvartala_field", - columnLetter: "GZ", - size: 150, - filterFn: "contains", - muiTableHeadCellProps: { - sx: { - backgroundColor: "#FFFFFF", - color: "#000000", - }, - }, - }, { header: "Перенос в фонд экономии", accessorKey: "data.q4.economy", @@ -3992,8 +3859,8 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, @@ -4005,28 +3872,34 @@ export const config = { filterFn: "contains", muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", - color: "#000000", + backgroundColor: "#903C39", + color: "#FFFFFF", }, }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, { - header: "Факт", - accessorKey: "fakt", + header: " ", + accessorKey: "11", columns: [ { header: "Факт 26", - accessorKey: "fakt_fakt_26", + accessorKey: "11_fakt_26", columns: [ { header: "", @@ -4038,20 +3911,26 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#C2D69B", color: "#000000", }, }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, { - header: "Сумма", - accessorKey: "summa", + header: " ", + accessorKey: "111", columns: [ { header: "Сумма оплаты", - accessorKey: "summa_summa_oplaty", + accessorKey: "111_summa_oplaty", columns: [ { header: "", @@ -4063,12 +3942,18 @@ export const config = { ], muiTableHeadCellProps: { sx: { - backgroundColor: "#FFFFFF", + backgroundColor: "#95B3D7", color: "#000000", }, }, }, ], + muiTableHeadCellProps: { + sx: { + backgroundColor: "#FFFFFF", + color: "#000000", + }, + }, }, ], }, diff --git a/web/src/components/RealtimeTable/constants/FORM_3/LP.js b/web/src/components/RealtimeTable/constants/FORM_3/LP.js deleted file mode 100644 index b283987..0000000 --- a/web/src/components/RealtimeTable/constants/FORM_3/LP.js +++ /dev/null @@ -1,555 +0,0 @@ - - import { - greenColumn, - whiteColumn, - orangeColumn, - yellowColumn, - redColumn, - blueColumn, - } from '../columnColors'; - export const config = { - "config":{ - "colors":{ - "kod_razdela_kod_razdela":{ - "color_type":whiteColumn, - "accessorKey":"kod_razdela_kod_razdela" - }, - "id_stati_id_stati":{ - "color_type":whiteColumn, - "accessorKey":"id_stati_id_stati" - }, - "id_gruppy_nomenklatury_id_gruppy_nomenklatury":{ - "color_type":whiteColumn, - "accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury" - }, - "naimenovanie_naimenovanie":{ - "color_type":whiteColumn, - "accessorKey":"naimenovanie_naimenovanie" - }, - "korrektirovka_limita_po_statyam_smety":{ - "color_type":whiteColumn, - "accessorKey":"korrektirovka_limita_po_statyam_smety" - }, - "field_uvelichenie_smety":{ - "color_type":whiteColumn, - "accessorKey":"field_uvelichenie_smety" - }, - "field_za_yanvar":{ - "color_type":whiteColumn, - "accessorKey":"field_za_yanvar" - }, - "field_za_fevral":{ - "color_type":whiteColumn, - "accessorKey":"field_za_fevral" - }, - "field_itogo_i_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_i_kvartal" - }, - "field_za_aprel":{ - "color_type":whiteColumn, - "accessorKey":"field_za_aprel" - }, - "field_za_may":{ - "color_type":whiteColumn, - "accessorKey":"field_za_may" - }, - "field_itogo_ii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_ii_kvartal" - }, - "field_za_iyul":{ - "color_type":whiteColumn, - "accessorKey":"field_za_iyul" - }, - "field_za_avgust":{ - "color_type":whiteColumn, - "accessorKey":"field_za_avgust" - }, - "field_itogo_iii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_iii_kvartal" - }, - "field_za_oktyabr":{ - "color_type":whiteColumn, - "accessorKey":"field_za_oktyabr" - }, - "field_za_noyabr":{ - "color_type":whiteColumn, - "accessorKey":"field_za_noyabr" - }, - "field_spod":{ - "color_type":whiteColumn, - "accessorKey":"field_spod" - }, - "field_itogo_iv_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_iv_kvartal" - }, - "itogo_itogo":{ - "color_type":whiteColumn, - "accessorKey":"itogo_itogo" - }, - "fakt_zamart":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zamart" - }, - "fakt_zaiyun":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zaiyun" - }, - "fakt_zasentyabr":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zasentyabr" - }, - "fakt_zadekabr":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zadekabr" - }, - "ekonomiya_pereraskhod_ekonomiya_pereraskhod":{ - "color_type":whiteColumn, - "accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod" - }, - "limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal" - }, - "limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal" - }, - "limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal" - } - }, - "columns":[ - { - "header":"Код раздела", - "accessorKey":"kod_razdela", - "columns":[ - { - "header":"Код раздела", - "accessorKey":"kod_razdela_kod_razdela", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"ID статьи", - "accessorKey":"id_stati", - "columns":[ - { - "header":"ID статьи", - "accessorKey":"id_stati_id_stati", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"ID группы номенклатуры", - "accessorKey":"id_gruppy_nomenklatury", - "columns":[ - { - "header":"ID группы номенклатуры", - "accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Наименование", - "accessorKey":"naimenovanie", - "columns":[ - { - "header":"Наименование", - "accessorKey":"naimenovanie_naimenovanie", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Корректировка лимита", - "accessorKey":"korrektirovka_limita", - "columns":[ - { - "header":"по статьям сметы *", - "accessorKey":"korrektirovka_limita_po_statyam_smety", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"", - "accessorKey":"field", - "columns":[ - { - "header":"увеличение сметы **", - "accessorKey":"field_uvelichenie_smety", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ЯНВАРЬ", - "accessorKey":"field_za_yanvar", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ФЕВРАЛЬ", - "accessorKey":"field_za_fevral", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого I квартал", - "accessorKey":"field_itogo_i_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за АПРЕЛЬ", - "accessorKey":"field_za_aprel", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за МАЙ", - "accessorKey":"field_za_may", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого II квартал", - "accessorKey":"field_itogo_ii_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ИЮЛЬ", - "accessorKey":"field_za_iyul", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за АВГУСТ", - "accessorKey":"field_za_avgust", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого III квартал", - "accessorKey":"field_itogo_iii_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ОКТЯБРЬ", - "accessorKey":"field_za_oktyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за НОЯБРЬ", - "accessorKey":"field_za_noyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"СПОД", - "accessorKey":"field_spod", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого IV квартал", - "accessorKey":"field_itogo_iv_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого", - "accessorKey":"itogo", - "columns":[ - { - "header":"Итого", - "accessorKey":"itogo_itogo", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Факт", - "accessorKey":"fakt", - "columns":[ - { - "header":"заМАРТ", - "accessorKey":"fakt_zamart", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заИЮНЬ", - "accessorKey":"fakt_zaiyun", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заСЕНТЯБРЬ", - "accessorKey":"fakt_zasentyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заДЕКАБРЬ", - "accessorKey":"fakt_zadekabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"экономия (+) перерасход (-)", - "accessorKey":"ekonomiya_pereraskhod", - "columns":[ - { - "header":"экономия (+) перерасход (-)", - "accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Лимит затрат / остаток лимита затрат на II квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal", - "columns":[ - { - "header":"Лимит затрат / остаток лимита затрат на II квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Лимит затрат / остаток лимита затрат на III квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal", - "columns":[ - { - "header":"Лимит затрат / остаток лимита затрат на III квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Лимит затрат / остаток лимита затрат на IV квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal", - "columns":[ - { - "header":"Лимит затрат / остаток лимита затрат на IV квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ] - } -} \ No newline at end of file diff --git a/web/src/components/RealtimeTable/constants/FORM_3/PROJECT.js b/web/src/components/RealtimeTable/constants/FORM_3/PROJECT.js deleted file mode 100644 index c4b84d3..0000000 --- a/web/src/components/RealtimeTable/constants/FORM_3/PROJECT.js +++ /dev/null @@ -1,577 +0,0 @@ - - import { - greenColumn, - whiteColumn, - orangeColumn, - yellowColumn, - redColumn, - blueColumn, - } from '../columnColors'; - export const config = { - "config":{ - "colors":{ - "kod_razdela_kod_razdela":{ - "color_type":whiteColumn, - "accessorKey":"kod_razdela_kod_razdela" - }, - "id_stati_id_stati":{ - "color_type":whiteColumn, - "accessorKey":"id_stati_id_stati" - }, - "id_gruppy_nomenklatury_id_gruppy_nomenklatury":{ - "color_type":whiteColumn, - "accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury" - }, - "naimenovanie_naimenovanie":{ - "color_type":whiteColumn, - "accessorKey":"naimenovanie_naimenovanie" - }, - "korrektirovka_plana_po_statyam_smety":{ - "color_type":whiteColumn, - "accessorKey":"korrektirovka_plana_po_statyam_smety" - }, - "field_uvelichenie_smety":{ - "color_type":whiteColumn, - "accessorKey":"field_uvelichenie_smety" - }, - "field_za_yanvar":{ - "color_type":whiteColumn, - "accessorKey":"field_za_yanvar" - }, - "field_za_fevral":{ - "color_type":whiteColumn, - "accessorKey":"field_za_fevral" - }, - "field_itogo_i_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_i_kvartal" - }, - "field_za_aprel":{ - "color_type":whiteColumn, - "accessorKey":"field_za_aprel" - }, - "field_za_may":{ - "color_type":whiteColumn, - "accessorKey":"field_za_may" - }, - "field_itogo_ii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_ii_kvartal" - }, - "field_za_iyul":{ - "color_type":whiteColumn, - "accessorKey":"field_za_iyul" - }, - "field_za_avgust":{ - "color_type":whiteColumn, - "accessorKey":"field_za_avgust" - }, - "field_itogo_iii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_iii_kvartal" - }, - "field_za_oktyabr":{ - "color_type":whiteColumn, - "accessorKey":"field_za_oktyabr" - }, - "field_za_noyabr":{ - "color_type":whiteColumn, - "accessorKey":"field_za_noyabr" - }, - "field_spod":{ - "color_type":whiteColumn, - "accessorKey":"field_spod" - }, - "field_itogo_iv_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_iv_kvartal" - }, - "itogo_korrektirovka_itogo_korrektirovka":{ - "color_type":whiteColumn, - "accessorKey":"itogo_korrektirovka_itogo_korrektirovka" - }, - "fakt_zamart":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zamart" - }, - "fakt_zaiyun":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zaiyun" - }, - "fakt_zasentyabr":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zasentyabr" - }, - "fakt_zadekabr":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zadekabr" - }, - "ekonomiya_pereraskhod_ekonomiya_pereraskhod":{ - "color_type":whiteColumn, - "accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod" - }, - "smeta_raskhodov_po_razvitiyu_na_ii_kvartal_smeta_raskhodov_po_razvitiyu_na_ii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_ii_kvartal_smeta_raskhodov_po_razvitiyu_na_ii_kvartal" - }, - "itogo_skorrek_smeta_itogo_skorrek_smeta":{ - "color_type":whiteColumn, - "accessorKey":"itogo_skorrek_smeta_itogo_skorrek_smeta" - }, - "smeta_raskhodov_po_razvitiyu_na_iii_kvartal_smeta_raskhodov_po_razvitiyu_na_iii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_iii_kvartal_smeta_raskhodov_po_razvitiyu_na_iii_kvartal" - }, - "smeta_raskhodov_po_razvitiyu_na_iv_kvartal_smeta_raskhodov_po_razvitiyu_na_iv_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_iv_kvartal_smeta_raskhodov_po_razvitiyu_na_iv_kvartal" - } - }, - "columns":[ - { - "header":"Код раздела", - "accessorKey":"kod_razdela", - "columns":[ - { - "header":"Код раздела", - "accessorKey":"kod_razdela_kod_razdela", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"ID статьи", - "accessorKey":"id_stati", - "columns":[ - { - "header":"ID статьи", - "accessorKey":"id_stati_id_stati", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"ID группы номенклатуры", - "accessorKey":"id_gruppy_nomenklatury", - "columns":[ - { - "header":"ID группы номенклатуры", - "accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Наименование", - "accessorKey":"naimenovanie", - "columns":[ - { - "header":"Наименование", - "accessorKey":"naimenovanie_naimenovanie", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Корректировка плана", - "accessorKey":"korrektirovka_plana", - "columns":[ - { - "header":"по статьям сметы *", - "accessorKey":"korrektirovka_plana_po_statyam_smety", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"", - "accessorKey":"field", - "columns":[ - { - "header":"увеличение сметы **", - "accessorKey":"field_uvelichenie_smety", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ЯНВАРЬ", - "accessorKey":"field_za_yanvar", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ФЕВРАЛЬ", - "accessorKey":"field_za_fevral", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого I квартал", - "accessorKey":"field_itogo_i_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за АПРЕЛЬ", - "accessorKey":"field_za_aprel", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за МАЙ", - "accessorKey":"field_za_may", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого II квартал", - "accessorKey":"field_itogo_ii_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ИЮЛЬ", - "accessorKey":"field_za_iyul", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за АВГУСТ", - "accessorKey":"field_za_avgust", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого III квартал", - "accessorKey":"field_itogo_iii_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ОКТЯБРЬ", - "accessorKey":"field_za_oktyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за НОЯБРЬ", - "accessorKey":"field_za_noyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"СПОД", - "accessorKey":"field_spod", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого IV квартал", - "accessorKey":"field_itogo_iv_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого корректировка", - "accessorKey":"itogo_korrektirovka", - "columns":[ - { - "header":"Итого корректировка", - "accessorKey":"itogo_korrektirovka_itogo_korrektirovka", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Факт", - "accessorKey":"fakt", - "columns":[ - { - "header":"заМАРТ", - "accessorKey":"fakt_zamart", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заИЮНЬ", - "accessorKey":"fakt_zaiyun", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заСЕНТЯБРЬ", - "accessorKey":"fakt_zasentyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заДЕКАБРЬ", - "accessorKey":"fakt_zadekabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"экономия (+) перерасход (-)", - "accessorKey":"ekonomiya_pereraskhod", - "columns":[ - { - "header":"экономия (+) перерасход (-)", - "accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Смета расходов по развитию на II квартал", - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_ii_kvartal", - "columns":[ - { - "header":"Смета расходов по развитию на II квартал", - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_ii_kvartal_smeta_raskhodov_po_razvitiyu_na_ii_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого скоррек. смета", - "accessorKey":"itogo_skorrek_smeta", - "columns":[ - { - "header":"Итого скоррек. смета", - "accessorKey":"itogo_skorrek_smeta_itogo_skorrek_smeta", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Смета расходов по развитию на III квартал", - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_iii_kvartal", - "columns":[ - { - "header":"Смета расходов по развитию на III квартал", - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_iii_kvartal_smeta_raskhodov_po_razvitiyu_na_iii_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Смета расходов по развитию на IV квартал", - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_iv_kvartal", - "columns":[ - { - "header":"Смета расходов по развитию на IV квартал", - "accessorKey":"smeta_raskhodov_po_razvitiyu_na_iv_kvartal_smeta_raskhodov_po_razvitiyu_na_iv_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ] - } -} \ No newline at end of file diff --git a/web/src/components/RealtimeTable/constants/FORM_3/TR.js b/web/src/components/RealtimeTable/constants/FORM_3/TR.js deleted file mode 100644 index b283987..0000000 --- a/web/src/components/RealtimeTable/constants/FORM_3/TR.js +++ /dev/null @@ -1,555 +0,0 @@ - - import { - greenColumn, - whiteColumn, - orangeColumn, - yellowColumn, - redColumn, - blueColumn, - } from '../columnColors'; - export const config = { - "config":{ - "colors":{ - "kod_razdela_kod_razdela":{ - "color_type":whiteColumn, - "accessorKey":"kod_razdela_kod_razdela" - }, - "id_stati_id_stati":{ - "color_type":whiteColumn, - "accessorKey":"id_stati_id_stati" - }, - "id_gruppy_nomenklatury_id_gruppy_nomenklatury":{ - "color_type":whiteColumn, - "accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury" - }, - "naimenovanie_naimenovanie":{ - "color_type":whiteColumn, - "accessorKey":"naimenovanie_naimenovanie" - }, - "korrektirovka_limita_po_statyam_smety":{ - "color_type":whiteColumn, - "accessorKey":"korrektirovka_limita_po_statyam_smety" - }, - "field_uvelichenie_smety":{ - "color_type":whiteColumn, - "accessorKey":"field_uvelichenie_smety" - }, - "field_za_yanvar":{ - "color_type":whiteColumn, - "accessorKey":"field_za_yanvar" - }, - "field_za_fevral":{ - "color_type":whiteColumn, - "accessorKey":"field_za_fevral" - }, - "field_itogo_i_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_i_kvartal" - }, - "field_za_aprel":{ - "color_type":whiteColumn, - "accessorKey":"field_za_aprel" - }, - "field_za_may":{ - "color_type":whiteColumn, - "accessorKey":"field_za_may" - }, - "field_itogo_ii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_ii_kvartal" - }, - "field_za_iyul":{ - "color_type":whiteColumn, - "accessorKey":"field_za_iyul" - }, - "field_za_avgust":{ - "color_type":whiteColumn, - "accessorKey":"field_za_avgust" - }, - "field_itogo_iii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_iii_kvartal" - }, - "field_za_oktyabr":{ - "color_type":whiteColumn, - "accessorKey":"field_za_oktyabr" - }, - "field_za_noyabr":{ - "color_type":whiteColumn, - "accessorKey":"field_za_noyabr" - }, - "field_spod":{ - "color_type":whiteColumn, - "accessorKey":"field_spod" - }, - "field_itogo_iv_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"field_itogo_iv_kvartal" - }, - "itogo_itogo":{ - "color_type":whiteColumn, - "accessorKey":"itogo_itogo" - }, - "fakt_zamart":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zamart" - }, - "fakt_zaiyun":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zaiyun" - }, - "fakt_zasentyabr":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zasentyabr" - }, - "fakt_zadekabr":{ - "color_type":whiteColumn, - "accessorKey":"fakt_zadekabr" - }, - "ekonomiya_pereraskhod_ekonomiya_pereraskhod":{ - "color_type":whiteColumn, - "accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod" - }, - "limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal" - }, - "limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal" - }, - "limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal":{ - "color_type":whiteColumn, - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal" - } - }, - "columns":[ - { - "header":"Код раздела", - "accessorKey":"kod_razdela", - "columns":[ - { - "header":"Код раздела", - "accessorKey":"kod_razdela_kod_razdela", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"ID статьи", - "accessorKey":"id_stati", - "columns":[ - { - "header":"ID статьи", - "accessorKey":"id_stati_id_stati", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"ID группы номенклатуры", - "accessorKey":"id_gruppy_nomenklatury", - "columns":[ - { - "header":"ID группы номенклатуры", - "accessorKey":"id_gruppy_nomenklatury_id_gruppy_nomenklatury", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Наименование", - "accessorKey":"naimenovanie", - "columns":[ - { - "header":"Наименование", - "accessorKey":"naimenovanie_naimenovanie", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Корректировка лимита", - "accessorKey":"korrektirovka_limita", - "columns":[ - { - "header":"по статьям сметы *", - "accessorKey":"korrektirovka_limita_po_statyam_smety", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"", - "accessorKey":"field", - "columns":[ - { - "header":"увеличение сметы **", - "accessorKey":"field_uvelichenie_smety", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ЯНВАРЬ", - "accessorKey":"field_za_yanvar", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ФЕВРАЛЬ", - "accessorKey":"field_za_fevral", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого I квартал", - "accessorKey":"field_itogo_i_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за АПРЕЛЬ", - "accessorKey":"field_za_aprel", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за МАЙ", - "accessorKey":"field_za_may", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого II квартал", - "accessorKey":"field_itogo_ii_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ИЮЛЬ", - "accessorKey":"field_za_iyul", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за АВГУСТ", - "accessorKey":"field_za_avgust", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого III квартал", - "accessorKey":"field_itogo_iii_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за ОКТЯБРЬ", - "accessorKey":"field_za_oktyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"за НОЯБРЬ", - "accessorKey":"field_za_noyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"СПОД", - "accessorKey":"field_spod", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого IV квартал", - "accessorKey":"field_itogo_iv_kvartal", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Итого", - "accessorKey":"itogo", - "columns":[ - { - "header":"Итого", - "accessorKey":"itogo_itogo", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Факт", - "accessorKey":"fakt", - "columns":[ - { - "header":"заМАРТ", - "accessorKey":"fakt_zamart", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заИЮНЬ", - "accessorKey":"fakt_zaiyun", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заСЕНТЯБРЬ", - "accessorKey":"fakt_zasentyabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"заДЕКАБРЬ", - "accessorKey":"fakt_zadekabr", - "size":150, - "filterFn":"contains", - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"экономия (+) перерасход (-)", - "accessorKey":"ekonomiya_pereraskhod", - "columns":[ - { - "header":"экономия (+) перерасход (-)", - "accessorKey":"ekonomiya_pereraskhod_ekonomiya_pereraskhod", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Лимит затрат / остаток лимита затрат на II квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal", - "columns":[ - { - "header":"Лимит затрат / остаток лимита затрат на II квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Лимит затрат / остаток лимита затрат на III квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal", - "columns":[ - { - "header":"Лимит затрат / остаток лимита затрат на III квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - }, - { - "header":"Лимит затрат / остаток лимита затрат на IV квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal", - "columns":[ - { - "header":"Лимит затрат / остаток лимита затрат на IV квартал", - "accessorKey":"limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal", - "size":150, - "filterFn":"contains" - } - ], - "muiTableHeadCellProps":{ - "sx":{ - "backgroundColor":"#C2D69B", - "color":"#000000" - } - } - } - ] - } -} \ No newline at end of file diff --git a/web/src/components/RealtimeTable/constants/PROJECT/CURRENT_EXPENSES.js b/web/src/components/RealtimeTable/constants/PROJECT/CURRENT_EXPENSES.js new file mode 100644 index 0000000..83d059f --- /dev/null +++ b/web/src/components/RealtimeTable/constants/PROJECT/CURRENT_EXPENSES.js @@ -0,0 +1,1003 @@ + + import { + greenColumn, + whiteColumn, + orangeColumn, + yellowColumn, + redColumn, + blueColumn, + } from '../columnColors'; + export const config = { + "config":{ + "colors":{ + "data.header.section_code":{ + "color_type":greenColumn, + "accessorKey":"data.header.section_code" + }, + "data.header.item_id":{ + "color_type":greenColumn, + "accessorKey":"data.header.item_id" + }, + "data.header.num_group_id":{ + "color_type":greenColumn, + "accessorKey":"data.header.num_group_id" + }, + "data.header.name":{ + "color_type":greenColumn, + "accessorKey":"data.header.name" + }, + "data.q1.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q1.adj_by_items" + }, + "data.q1.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q1.adj_increase" + }, + "data.q1.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q1.total_corr" + }, + "data.q1.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q1.m1" + }, + "data.q1.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q1.m2" + }, + "data.q1.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q1.m3" + }, + "data.q1.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q1.quarter_actual" + }, + "data.q1.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q1.economy" + }, + "data.q2.carryover":{ + "color_type":greenColumn, + "accessorKey":"data.q2.carryover" + }, + "data.q2.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q2.adj_by_items" + }, + "data.q2.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q2.adj_increase" + }, + "data.q2.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q2.total_corr" + }, + "data.q2.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q2.m1" + }, + "data.q2.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q2.m2" + }, + "data.q2.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q2.m3" + }, + "data.q2.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q2.quarter_actual" + }, + "data.q2.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q2.economy" + }, + "data.q3.carryover":{ + "color_type":greenColumn, + "accessorKey":"data.q3.carryover" + }, + "data.q3.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q3.adj_by_items" + }, + "data.q3.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q3.adj_increase" + }, + "data.q3.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q3.total_corr" + }, + "data.q3.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q3.m1" + }, + "data.q3.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q3.m2" + }, + "data.q3.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q3.m3" + }, + "data.q3.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q3.quarter_actual" + }, + "data.q3.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q3.economy" + }, + "data.q4.carryover":{ + "color_type":greenColumn, + "accessorKey":"data.q4.carryover" + }, + "data.q4.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q4.adj_by_items" + }, + "data.q4.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q4.adj_increase" + }, + "data.q4.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q4.total_corr" + }, + "data.q4.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q4.m1" + }, + "data.q4.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q4.m2" + }, + "data.q4.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q4.m3" + }, + "data.q4.spod":{ + "color_type":greenColumn, + "accessorKey":"data.q4.spod" + }, + "data.q4.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q4.quarter_actual" + }, + "data.q4.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q4.economy" + } + }, + "columns":[ + { + "header":"", + "accessorKey":"field", + "columns":[ + { + "header":"Код раздела", + "accessorKey":"field_kod_razdela", + "columns":[ + { + "header":"", + "accessorKey":"data.header.section_code", + "columnLetter":"A", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"ID статьи", + "accessorKey":"field_id_stati", + "columns":[ + { + "header":"", + "accessorKey":"data.header.item_id", + "columnLetter":"B", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"ID группы номенклатуры", + "accessorKey":"field_id_gruppy_nomenklatury", + "columns":[ + { + "header":"", + "accessorKey":"data.header.num_group_id", + "columnLetter":"C", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Наименование", + "accessorKey":"field_naimenovanie", + "columns":[ + { + "header":"", + "accessorKey":"data.header.name", + "columnLetter":"D", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении текущих расходов в I квартале", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_i_kvartale", + "columns":[ + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_i_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q1.adj_by_items", + "columnLetter":"E", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q1.adj_increase", + "columnLetter":"F", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_i_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q1.total_corr", + "columnLetter":"G", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_i_kvartale_fakt", + "columns":[ + { + "header":"за ЯНВАРЬ", + "accessorKey":"data.q1.m1", + "columnLetter":"H", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за ФЕВРАЛЬ", + "accessorKey":"data.q1.m2", + "columnLetter":"I", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заМАРТ", + "accessorKey":"data.q1.m3", + "columnLetter":"J", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого I квартал", + "accessorKey":"data.q1.quarter_actual", + "columnLetter":"K", + "size":160, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_i_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q1.economy", + "columnLetter":"L", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении текущих расходов в II квартале", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale", + "columns":[ + { + "header":"Лимит затрат / остаток лимита затрат на II квартал", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal", + "columns":[ + { + "header":"", + "accessorKey":"data.q2.carryover", + "columnLetter":"N", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q2.adj_by_items", + "columnLetter":"O", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q2.adj_increase", + "columnLetter":"P", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q2.total_corr", + "columnLetter":"Q", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale_fakt", + "columns":[ + { + "header":"за АПРЕЛЬ", + "accessorKey":"data.q2.m1", + "columnLetter":"R", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за МАЙ", + "accessorKey":"data.q2.m2", + "columnLetter":"S", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заИЮНЬ", + "accessorKey":"data.q2.m3", + "columnLetter":"T", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого II квартал", + "accessorKey":"data.q2.quarter_actual", + "columnLetter":"U", + "size":170, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q2.economy", + "columnLetter":"V", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении текущих расходов в III квартале", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale", + "columns":[ + { + "header":"Лимит затрат / остаток лимита затрат на III квартал", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal", + "columns":[ + { + "header":"", + "accessorKey":"data.q3.carryover", + "columnLetter":"X", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q3.adj_by_items", + "columnLetter":"Y", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q3.adj_increase", + "columnLetter":"Z", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q3.total_corr", + "columnLetter":"AA", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale_fakt", + "columns":[ + { + "header":"за ИЮЛЬ", + "accessorKey":"data.q3.m1", + "columnLetter":"AB", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за АВГУСТ", + "accessorKey":"data.q3.m2", + "columnLetter":"AC", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заСЕНТЯБРЬ", + "accessorKey":"data.q3.m3", + "columnLetter":"AD", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого III квартал", + "accessorKey":"data.q3.quarter_actual", + "columnLetter":"AE", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q3.economy", + "columnLetter":"AF", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении текущих расходов в IV квартале", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale", + "columns":[ + { + "header":"Лимит затрат / остаток лимита затрат на IV квартал", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal", + "columns":[ + { + "header":"", + "accessorKey":"data.q4.carryover", + "columnLetter":"AH", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q4.adj_by_items", + "columnLetter":"AI", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q4.adj_increase", + "columnLetter":"AJ", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q4.total_corr", + "columnLetter":"AK", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale_fakt", + "columns":[ + { + "header":"за ОКТЯБРЬ", + "accessorKey":"data.q4.m1", + "columnLetter":"AL", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за НОЯБРЬ", + "accessorKey":"data.q4.m2", + "columnLetter":"AM", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заДЕКАБРЬ", + "accessorKey":"data.q4.m3", + "columnLetter":"AN", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"СПОД", + "accessorKey":"data.q4.spod", + "columnLetter":"AO", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого IV квартал", + "accessorKey":"data.q4.quarter_actual", + "columnLetter":"AP", + "size":170, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q4.economy", + "columnLetter":"AQ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + } + ] + } +} \ No newline at end of file diff --git a/web/src/components/RealtimeTable/constants/PROJECT/LIMIT.js b/web/src/components/RealtimeTable/constants/PROJECT/LIMIT.js new file mode 100644 index 0000000..17c5234 --- /dev/null +++ b/web/src/components/RealtimeTable/constants/PROJECT/LIMIT.js @@ -0,0 +1,1003 @@ + + import { + greenColumn, + whiteColumn, + orangeColumn, + yellowColumn, + redColumn, + blueColumn, + } from '../columnColors'; + export const config = { + "config":{ + "colors":{ + "data.header.section_code":{ + "color_type":greenColumn, + "accessorKey":"data.header.section_code" + }, + "data.header.item_id":{ + "color_type":greenColumn, + "accessorKey":"data.header.item_id" + }, + "data.header.num_group_id":{ + "color_type":greenColumn, + "accessorKey":"data.header.num_group_id" + }, + "data.header.name":{ + "color_type":greenColumn, + "accessorKey":"data.header.name" + }, + "data.q1.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q1.adj_by_items" + }, + "data.q1.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q1.adj_increase" + }, + "data.q1.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q1.total_corr" + }, + "data.q1.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q1.m1" + }, + "data.q1.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q1.m2" + }, + "data.q1.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q1.m3" + }, + "data.q1.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q1.quarter_actual" + }, + "data.q1.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q1.economy" + }, + "data.q2.carryover":{ + "color_type":greenColumn, + "accessorKey":"data.q2.carryover" + }, + "data.q2.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q2.adj_by_items" + }, + "data.q2.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q2.adj_increase" + }, + "data.q2.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q2.total_corr" + }, + "data.q2.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q2.m1" + }, + "data.q2.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q2.m2" + }, + "data.q2.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q2.m3" + }, + "data.q2.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q2.quarter_actual" + }, + "data.q2.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q2.economy" + }, + "data.q3.carryover":{ + "color_type":greenColumn, + "accessorKey":"data.q3.carryover" + }, + "data.q3.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q3.adj_by_items" + }, + "data.q3.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q3.adj_increase" + }, + "data.q3.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q3.total_corr" + }, + "data.q3.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q3.m1" + }, + "data.q3.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q3.m2" + }, + "data.q3.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q3.m3" + }, + "data.q3.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q3.quarter_actual" + }, + "data.q3.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q3.economy" + }, + "data.q4.carryover":{ + "color_type":greenColumn, + "accessorKey":"data.q4.carryover" + }, + "data.q4.adj_by_items":{ + "color_type":greenColumn, + "accessorKey":"data.q4.adj_by_items" + }, + "data.q4.adj_increase":{ + "color_type":greenColumn, + "accessorKey":"data.q4.adj_increase" + }, + "data.q4.total_corr":{ + "color_type":greenColumn, + "accessorKey":"data.q4.total_corr" + }, + "data.q4.m1":{ + "color_type":greenColumn, + "accessorKey":"data.q4.m1" + }, + "data.q4.m2":{ + "color_type":greenColumn, + "accessorKey":"data.q4.m2" + }, + "data.q4.m3":{ + "color_type":greenColumn, + "accessorKey":"data.q4.m3" + }, + "data.q4.spod":{ + "color_type":greenColumn, + "accessorKey":"data.q4.spod" + }, + "data.q4.quarter_actual":{ + "color_type":greenColumn, + "accessorKey":"data.q4.quarter_actual" + }, + "data.q4.economy":{ + "color_type":greenColumn, + "accessorKey":"data.q4.economy" + } + }, + "columns":[ + { + "header":"", + "accessorKey":"field", + "columns":[ + { + "header":"Код раздела", + "accessorKey":"field_kod_razdela", + "columns":[ + { + "header":"", + "accessorKey":"data.header.section_code", + "columnLetter":"A", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"ID статьи", + "accessorKey":"field_id_stati", + "columns":[ + { + "header":"", + "accessorKey":"data.header.item_id", + "columnLetter":"B", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"ID группы номенклатуры", + "accessorKey":"field_id_gruppy_nomenklatury", + "columns":[ + { + "header":"", + "accessorKey":"data.header.num_group_id", + "columnLetter":"C", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Наименование", + "accessorKey":"field_naimenovanie", + "columns":[ + { + "header":"", + "accessorKey":"data.header.name", + "columnLetter":"D", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении лимита затрат, утвержденного Правлением Банка в I квартале", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_i_kvartale", + "columns":[ + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_i_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q1.adj_by_items", + "columnLetter":"E", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q1.adj_increase", + "columnLetter":"F", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_i_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q1.total_corr", + "columnLetter":"G", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_i_kvartale_fakt", + "columns":[ + { + "header":"за ЯНВАРЬ", + "accessorKey":"data.q1.m1", + "columnLetter":"H", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за ФЕВРАЛЬ", + "accessorKey":"data.q1.m2", + "columnLetter":"I", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заМАРТ", + "accessorKey":"data.q1.m3", + "columnLetter":"J", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого I квартал", + "accessorKey":"data.q1.quarter_actual", + "columnLetter":"K", + "size":160, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_i_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q1.economy", + "columnLetter":"L", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении лимита затрат, утвержденного Правлением Банка в II квартале", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_ii_kvartale", + "columns":[ + { + "header":"Лимит затрат / остаток лимита затрат на II квартал", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_ii_kvartale_limit_zatrat_ostatok_limita_zatrat_na_ii_kvartal", + "columns":[ + { + "header":"", + "accessorKey":"data.q2.carryover", + "columnLetter":"N", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_ii_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q2.adj_by_items", + "columnLetter":"O", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q2.adj_increase", + "columnLetter":"P", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_ii_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q2.total_corr", + "columnLetter":"Q", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_ii_kvartale_fakt", + "columns":[ + { + "header":"за АПРЕЛЬ", + "accessorKey":"data.q2.m1", + "columnLetter":"R", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за МАЙ", + "accessorKey":"data.q2.m2", + "columnLetter":"S", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заИЮНЬ", + "accessorKey":"data.q2.m3", + "columnLetter":"T", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого II квартал", + "accessorKey":"data.q2.quarter_actual", + "columnLetter":"U", + "size":170, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_ii_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q2.economy", + "columnLetter":"V", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении лимита затрат, утвержденного Правлением Банка в III квартале", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iii_kvartale", + "columns":[ + { + "header":"Лимит затрат / остаток лимита затрат на III квартал", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iii_kvartale_limit_zatrat_ostatok_limita_zatrat_na_iii_kvartal", + "columns":[ + { + "header":"", + "accessorKey":"data.q3.carryover", + "columnLetter":"X", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iii_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q3.adj_by_items", + "columnLetter":"Y", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q3.adj_increase", + "columnLetter":"Z", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iii_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q3.total_corr", + "columnLetter":"AA", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iii_kvartale_fakt", + "columns":[ + { + "header":"за ИЮЛЬ", + "accessorKey":"data.q3.m1", + "columnLetter":"AB", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за АВГУСТ", + "accessorKey":"data.q3.m2", + "columnLetter":"AC", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заСЕНТЯБРЬ", + "accessorKey":"data.q3.m3", + "columnLetter":"AD", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого III квартал", + "accessorKey":"data.q3.quarter_actual", + "columnLetter":"AE", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iii_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q3.economy", + "columnLetter":"AF", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + }, + { + "header":"Отчет об исполнении лимита затрат, утвержденного Правлением Банка в IV квартале", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iv_kvartale", + "columns":[ + { + "header":"Лимит затрат / остаток лимита затрат на IV квартал", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iv_kvartale_limit_zatrat_ostatok_limita_zatrat_na_iv_kvartal", + "columns":[ + { + "header":"", + "accessorKey":"data.q4.carryover", + "columnLetter":"AH", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Корректировка лимита", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iv_kvartale_korrektirovka_limita", + "columns":[ + { + "header":"по статьям сметы *", + "accessorKey":"data.q4.adj_by_items", + "columnLetter":"AI", + "size":180, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"увеличение сметы **", + "accessorKey":"data.q4.adj_increase", + "columnLetter":"AJ", + "size":200, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iv_kvartale_itogo", + "columns":[ + { + "header":"", + "accessorKey":"data.q4.total_corr", + "columnLetter":"AK", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Факт", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iv_kvartale_fakt", + "columns":[ + { + "header":"за ОКТЯБРЬ", + "accessorKey":"data.q4.m1", + "columnLetter":"AL", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"за НОЯБРЬ", + "accessorKey":"data.q4.m2", + "columnLetter":"AM", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"заДЕКАБРЬ", + "accessorKey":"data.q4.m3", + "columnLetter":"AN", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"СПОД", + "accessorKey":"data.q4.spod", + "columnLetter":"AO", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"Итого IV квартал", + "accessorKey":"data.q4.quarter_actual", + "columnLetter":"AP", + "size":170, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + }, + { + "header":"экономия (+) перерасход (-)", + "accessorKey":"otchet_ob_ispolnenii_limita_zatrat_utverzhdennogo_pravleniem_banka_v_iv_kvartale_ekonomiya_pereraskhod", + "columns":[ + { + "header":"", + "accessorKey":"data.q4.economy", + "columnLetter":"AQ", + "size":150, + "filterFn":"contains", + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ], + "muiTableHeadCellProps":{ + "sx":{ + "backgroundColor":"#C2D69B", + "color":"#000000" + } + } + } + ] + } + ] + } +} \ No newline at end of file diff --git a/web/src/components/RealtimeTable/contexts/RealtimeContext.js b/web/src/components/RealtimeTable/contexts/RealtimeContext.js index ff40381..5274d4f 100644 --- a/web/src/components/RealtimeTable/contexts/RealtimeContext.js +++ b/web/src/components/RealtimeTable/contexts/RealtimeContext.js @@ -25,17 +25,29 @@ export const RealtimeProvider = ({ formId, sheetName, direction, + year, userId, + isProject = false, }) => { // Формируем URL (кастомные секреты на фронте пока недоступны, делаем через REACT_APP_ROOT_PATH) - const wsUrl = `${(process.env.REACT_APP_API_URL || process.env.REACT_APP_API_URL || process.env.REACT_APP_ROOT_PATH || "ws://localhost:8000").replace(/^http/, "ws")}/api/v1/ws/form/${formId}/sheet/${sheetName}${direction ? `?direction=${direction}` : ""}`; + const wsUrl = + `${( + process.env.REACT_APP_API_URL || + process.env.REACT_APP_API_URL || + process.env.REACT_APP_ROOT_PATH || + "ws://localhost:8000" + ).replace(/^http/, "ws")}` + + (!isProject + ? `/api/v1/ws/form/${formId}/sheet/${sheetName}${direction ? `?direction=${direction}` : ""}` + : `/api/v1/ws/projects/${formId}/report/${year}/${sheetName}`); + //для ячеек которые редактируются другими пользователями const [lockedCells, setLockedCells] = useState([]); const handleMessage = useCallback((data) => { // Обработка ошибок if (data.error) { - console.log(data.error.message) - toast.error("Server error:" + data.error.message || ''); + console.log(data.error.message); + toast.error("Server error:" + data.error.message || ""); onErrorRef.current?.(data.error); return; } @@ -81,7 +93,7 @@ export const RealtimeProvider = ({ } }, []); - const { isConnected, sendMessage, disconnect, lastError } = useWebSocket( + const { isConnectedRef, isConnected, sendMessage, disconnect, lastError } = useWebSocket( wsUrl, handleMessage, ); @@ -145,13 +157,26 @@ export const RealtimeProvider = ({ } }, [isConnected]); + const addCommonField = (message) => { + if (isProject) { + message.report_type = sheetName; + message.project_id = formId; + message.year = year; + } else { + message.sheet = sheetName; + message.form_id = formId; + message.direction = direction; + } + return message; + }; + // Функция для начала редактирования ячейки const startEditing = useCallback( async (row, column) => { const columnId = column.id; const rowId = row.id; - if (!isConnected) { + if (!isConnectedRef) { onErrorRef.current?.("WebSocket не подключен"); return false; } @@ -183,7 +208,7 @@ export const RealtimeProvider = ({ const columnId = column.id; const rowId = row.id; - if (!isConnected) { + if (!isConnectedRef) { onErrorRef.current?.("WebSocket не подключен"); return false; } @@ -213,7 +238,7 @@ export const RealtimeProvider = ({ async (row, column, value) => { const columnId = column.id; const rowId = row.id; - if (!isConnected) { + if (!isConnectedRef) { onErrorRef.current?.("WebSocket не подключен"); return false; } @@ -241,7 +266,7 @@ export const RealtimeProvider = ({ const addRow = useCallback( async (rowData) => { - if (!isConnected) { + if (!isConnectedRef) { onErrorRef.current?.("Нет подключения или авторизации"); return false; } @@ -249,10 +274,9 @@ export const RealtimeProvider = ({ const message = { event: "row_added", data: rowData, - sheet: sheetName, - form_id: formId, - direction: direction, }; + addCommonField(message); + return sendMessage(message); }, [isConnected, sendMessage, sheetName, formId, direction], @@ -260,7 +284,7 @@ export const RealtimeProvider = ({ const deleteRow = useCallback( async (rowId) => { - if (!isConnected) { + if (!isConnectedRef) { onErrorRef.current?.("Нет подключения или авторизации"); return false; } @@ -268,10 +292,8 @@ export const RealtimeProvider = ({ const message = { event: "row_deleted", data: { row_id: rowId }, - sheet: sheetName, - form_id: formId, - direction: direction, }; + addCommonField(message); return sendMessage(message); }, diff --git a/web/src/components/RealtimeTable/hooks/useRealtimeData.js b/web/src/components/RealtimeTable/hooks/useRealtimeData.js index 964f1ab..0c2d101 100644 --- a/web/src/components/RealtimeTable/hooks/useRealtimeData.js +++ b/web/src/components/RealtimeTable/hooks/useRealtimeData.js @@ -4,8 +4,9 @@ import { useRealtime } from "../contexts/RealtimeContext"; import { deleteRow, insertCell, updateCells } from "../utils/cellUtils"; import { toast } from "react-toastify"; import { isVspNewRow, isVspRow } from "../utils/rowUtils"; +import { ProjectsApi } from "../../../api/projects"; -const useRealtimeData = (formId, sheetName, direction) => { +const useRealtimeData = (formId, sheetName, direction, formType, year) => { const [data, setData] = useState([]); const [isConnected, setIsConnected] = useState(false); const [error, setError] = useState(null); @@ -77,7 +78,10 @@ const useRealtimeData = (formId, sheetName, direction) => { try { setIsLoading(true); let res; - if (direction !== null) { + + if(formType == 'PROJECT'){ + res = await ProjectsApi.getTableData(formId, sheetName, year) + } else if (direction !== null) { res = await FormsSheetApi.get(formId, sheetName, { params: { direction: direction }, }); diff --git a/web/src/components/RealtimeTable/hooks/useWebSocket.js b/web/src/components/RealtimeTable/hooks/useWebSocket.js index 57e3958..55f43b0 100644 --- a/web/src/components/RealtimeTable/hooks/useWebSocket.js +++ b/web/src/components/RealtimeTable/hooks/useWebSocket.js @@ -107,30 +107,16 @@ export const useWebSocket = (url, onMessage) => { return false; }, []); - const login = useCallback( - (token) => { - if (!token) { - console.warn("No token provided for login"); - return false; - } - return sendMessage({ - event: "user_login", - data: { token }, - }); - }, - [sendMessage], - ); - useEffect(() => { connect(); return () => disconnect(); }, [connect, disconnect]); return { - isConnected: isConnectedRef, + isConnectedRef, + isConnected, error, sendMessage, - login, disconnect, }; }; diff --git a/web/src/components/RealtimeTable/tableColumns.jsx b/web/src/components/RealtimeTable/tableColumns.jsx index a47d5ce..1353217 100644 --- a/web/src/components/RealtimeTable/tableColumns.jsx +++ b/web/src/components/RealtimeTable/tableColumns.jsx @@ -3,6 +3,7 @@ import { createPortal } from 'react-dom'; import { columns as mockColumns } from '../../mocks/mockTable'; import { config } from './constants/FORM_2/AHR'; import { useParams } from 'react-router'; +import { useRealtime } from './contexts/RealtimeContext'; function EditCellPortal({ cell, @@ -20,6 +21,8 @@ function EditCellPortal({ const [isSaving, setIsSaving] = useState(false); const isDisabled = false; + const { endEditing: contextEndEditing } = useRealtime(); + useEffect(() => { if (ref.current) { const tbodyRef = ref.current.offsetParent?.offsetParent?.offsetParent; @@ -68,6 +71,7 @@ function EditCellPortal({ disabled={!isEditable} onChange={handleChange} tableId={tableKey} + table={table} cellId={cell.row.id + '_' + cell.column.id} />, refTbody, @@ -112,6 +116,7 @@ export const getTableColumns = ({ globalFilter={ table.getState().globalFilter } + columnFilter={table.getState().columnFilters?.find(f => f.id === column.id)?.value} isEditable={row.original?.row_type === 'INPUT' || false} backgroundColor={columnColors[column.id]?.color_type?.[row.original?.row_type || row.row_type]} color={columnColors[column.id]?.color_type?.['COLOR']} diff --git a/web/src/components/Stages/AddStagesModal.jsx b/web/src/components/Stages/AddStagesModal.jsx index 4b61bee..cdcec58 100644 --- a/web/src/components/Stages/AddStagesModal.jsx +++ b/web/src/components/Stages/AddStagesModal.jsx @@ -25,7 +25,7 @@ import { StageStatusChip } from './StageStatusChip'; import { formatDateForApi } from './utils'; import CollapsibleTree from '../common/CollapsibleTree'; import { collectLeafColumns } from '../RealtimeTable/utils/columnUtils'; -import { STAGE_ROLE_RUSSIAN_NAME } from '../../constants'; +import { STAGE_ROLE_RUSSIAN_NAME } from '../../constants/constants'; export const AddStagesModal = ({ isOpen, diff --git a/web/src/components/Stages/StageInfoForTooltip.jsx b/web/src/components/Stages/StageInfoForTooltip.jsx index b0e13b3..ec2ef96 100644 --- a/web/src/components/Stages/StageInfoForTooltip.jsx +++ b/web/src/components/Stages/StageInfoForTooltip.jsx @@ -1,6 +1,6 @@ import { Box, Divider, Stack } from '@mui/material'; import { UnLockedSvg } from '../common/icons/icons'; -import { ROLES_ID_RUSSIAN_NAME, EDIT_ACCESS_RUSSIAN } from '../../constants'; +import { ROLES_ID_RUSSIAN_NAME, EDIT_ACCESS_RUSSIAN } from '../../constants/constants'; export const StageInfoForTooltip = ({ stageData = [] }) => { const accessData = stageData[0] || []; diff --git a/web/src/components/Stages/StagesTable/StagesTable.jsx b/web/src/components/Stages/StagesTable/StagesTable.jsx index 8a52ce6..4cef924 100644 --- a/web/src/components/Stages/StagesTable/StagesTable.jsx +++ b/web/src/components/Stages/StagesTable/StagesTable.jsx @@ -20,7 +20,7 @@ import { import { getStageStatus, getStatusColors } from './utils'; import { formatDate } from '../../../utils/formatDate'; import { StageStatusChip } from '../StageStatusChip'; -import { ROLES_NAME_ID, SHEET_NAME, STAGE_ROLE_RUSSIAN_NAME } from '../../../constants'; +import { ROLES_NAME_ID, SHEET_NAME, STAGE_ROLE_RUSSIAN_NAME } from '../../../constants/constants'; import { useAuth } from '../../../app/context/AuthProvider'; export const StagesTable = ({ stages, onEdit, onDelete }) => { diff --git a/web/src/components/common/NavigationToggle.jsx b/web/src/components/common/NavigationToggle.jsx new file mode 100644 index 0000000..077670d --- /dev/null +++ b/web/src/components/common/NavigationToggle.jsx @@ -0,0 +1,33 @@ +// components/NavigationToggle.jsx +import React from 'react'; +import { Box, Typography } from '@mui/material'; +import { PrimaryOutlinedButton } from './Buttons/Buttons'; // Ваш компонент кнопки + +const NavigationToggle = ({ currentView, onViewChange }) => { + const handleNavigateToTasks = () => { + onViewChange('/tasks'); + }; + + const handleNavigateToProjects = () => { + onViewChange('/projects'); + }; + + return ( + + {currentView === 'tasks' ? ( + + ← К проектам + + ) : ( + + ← К задачам + + )} + + {currentView === 'tasks' ? 'Управление задачами' : 'Управление проектами'} + + + ); +}; + +export default NavigationToggle; \ No newline at end of file diff --git a/web/src/pages/TasksPage/OrgUnitsAutocompletePaper.jsx b/web/src/components/common/OrgUnitsAutocompletePaper/OrgUnitsAutocompletePaper.jsx similarity index 94% rename from web/src/pages/TasksPage/OrgUnitsAutocompletePaper.jsx rename to web/src/components/common/OrgUnitsAutocompletePaper/OrgUnitsAutocompletePaper.jsx index 07d45cd..3b039b1 100644 --- a/web/src/pages/TasksPage/OrgUnitsAutocompletePaper.jsx +++ b/web/src/components/common/OrgUnitsAutocompletePaper/OrgUnitsAutocompletePaper.jsx @@ -1,6 +1,6 @@ import { forwardRef } from 'react'; import { Box, Paper, Typography } from '@mui/material'; -import { CustomCheckbox } from '../../components/common/StyledCheckbox'; +import { CustomCheckbox } from '../StyledCheckbox'; export const OrgUnitsAutocompletePaper = forwardRef( function OrgUnitsAutocompletePaper( diff --git a/web/src/pages/TasksPage/renderOrgUnitValue.jsx b/web/src/components/common/OrgUnitsAutocompletePaper/renderOrgUnitValue.jsx similarity index 100% rename from web/src/pages/TasksPage/renderOrgUnitValue.jsx rename to web/src/components/common/OrgUnitsAutocompletePaper/renderOrgUnitValue.jsx diff --git a/web/src/components/common/PaginatedList.jsx b/web/src/components/common/PaginatedList.jsx new file mode 100644 index 0000000..2933fb1 --- /dev/null +++ b/web/src/components/common/PaginatedList.jsx @@ -0,0 +1,257 @@ +// src/components/common/PaginatedList/PaginatedList.jsx +import { useState, useEffect } from 'react'; +import { + Box, + Pagination, + PaginationItem, + Select, + MenuItem, + Typography, + Stack, +} from '@mui/material'; +import { CardsSkeleton } from './Skeleton'; +import { + ExportExitButton, + ExportWithTextButton, +} from './Buttons/ButtonsActions'; +import { exportBulkForms, exportSingleForm } from '../../utils/exportFile'; + +/** + * Универсальный компонент для отображения списка с пагинацией и экспортом + * + * @param {Object} props + * @param {Array} props.items - Массив элементов для отображения + * @param {boolean} props.loading - Состояние загрузки + * @param {number} props.totalCount - Общее количество элементов + * @param {number} props.page - Текущая страница + * @param {number} props.limit - Количество элементов на странице + * @param {Function} props.onPageChange - Обработчик изменения страницы + * @param {Function} props.onLimitChange - Обработчик изменения лимита + * @param {Function} props.renderItem - Функция рендеринга элемента + * @param {Function} props.getItemId - Функция получения ID элемента + * @param {Function} props.getItemTitle - Функция получения заголовка элемента + * @param {string} props.entityName - Название сущности (для текстов) + * @param {string} props.emptyMessage - Сообщение при пустом списке + * @param {number} props.skeletonCount - Количество силуэтов таблиц при загрузки + * @param {Object} props.extraActions - Дополнительные действия справа + * @param {boolean} props.enableExport - Включить экспорт + * @param {Array} props.limitOptions - Опции для выбора лимита + * @param {number} props.maxHeight - Максимальная высота контейнера со скроллом + * @param {boolean} props.enableScroll - Включить скролл для списка + * @param {boolean} props.filterActions - Элементы фильтрации + */ +export function PaginatedList({ + items = [], + loading = false, + totalCount = 0, + page = 1, + limit = 20, + onPageChange, + onLimitChange, + renderItem, + getItemId, + getItemTitle = (item) => `Элемент ${getItemId(item)}`, + entityName = 'элементов', + emptyMessage = 'Элементы не найдены', + skeletonCount = 20, + extraActions = null, + enableExport = true, + limitOptions = [10, 20, 50, 100, 200], + maxHeight = 'calc(100vh - 300px)', + enableScroll = true, + filterActions = null, +}) { + const [exportMode, setExportMode] = useState(false); + const [exportList, setExportList] = useState([]); + + // Сброс списка экспорта при переключении режима + useEffect(() => { + setExportList([]); + }, [exportMode]); + + const handleAddToExport = (itemId, checked) => { + if (checked) { + setExportList((prev) => [...prev, itemId]); + } else { + setExportList((prev) => prev.filter((id) => id !== itemId)); + } + }; + + const handleBulkExport = async () => { + await exportBulkForms(exportList); + setExportMode(false); + }; + + const handleSingleExport = (itemId) => { + const item = items.find((item) => getItemId(item) === itemId); + const title = item ? getItemTitle(item) : `Элемент ${itemId}`; + exportSingleForm(itemId, title); + }; + + // Если включен экспорт, передаем его пропсы в дочерние элементы + const renderItemWithExport = (item) => { + if (enableExport) { + return renderItem(item, { + exportMode, + onAddForExport: (checked) => { + handleAddToExport(getItemId(item), checked); + }, + onExportClick: () => { + handleSingleExport(getItemId(item)); + }, + isSelected: exportList.includes(getItemId(item)), + }); + } + return renderItem(item); + }; + + return ( + + {/* Верхняя панель с экспортом и дополнительными действиями */} + {enableExport && ( + +
+ {filterActions} +
+ + {exportMode && ( + + Выделено {entityName}: {exportList.length} + + )} + + + {!exportMode ? ( + <> + setExportMode(true)} + height='2.5rem' + /> + {extraActions} + + ) : ( + <> + + setExportMode(false)} /> + + )} + + + + + )} + + {/* Контейнер со скроллом для списка */} + + {/* Список элементов */} + + {loading ? ( + + ) : items.length === 0 ? ( + + + {emptyMessage} + + + ) : ( + items.map((item) => renderItemWithExport(item)) + )} + + + + {/* Пагинация */} + {!loading && items.length > 0 && ( + + + + + Показать на странице: + + + + + Всего: {totalCount} + + + + ( + + )} + /> + + + + )} + + ); +} \ No newline at end of file diff --git a/web/src/components/common/Selects/Selects.jsx b/web/src/components/common/Selects/Selects.jsx index 4787aa1..60c1e8b 100644 --- a/web/src/components/common/Selects/Selects.jsx +++ b/web/src/components/common/Selects/Selects.jsx @@ -1,5 +1,5 @@ import { useEffect, useState, useRef } from 'react'; -import { EDIT_ACCESS_RUSSIAN, ROLES_ID_RUSSIAN_NAME } from '../../../constants'; +import { EDIT_ACCESS_RUSSIAN, ROLES_ID_RUSSIAN_NAME } from '../../../constants/constants'; import { SelectWrapper, SelectContainer, diff --git a/web/src/components/common/SwitchFormTask/SwitchFormTask.jsx b/web/src/components/common/SwitchFormTask/SwitchFormTask.jsx index b48d6d9..4e2eab0 100644 --- a/web/src/components/common/SwitchFormTask/SwitchFormTask.jsx +++ b/web/src/components/common/SwitchFormTask/SwitchFormTask.jsx @@ -1,5 +1,5 @@ import { useAuth } from '../../../app/context/AuthProvider'; -import { ROLES_NAME_ID } from '../../../constants'; +import { ROLES_NAME_ID } from '../../../constants/constants'; import { Switch, Buttons, StyledNavLink } from './SwitchFormTask.style'; export function SwitchFormTask() { diff --git a/web/src/components/common/TableCard/TableCard.jsx b/web/src/components/common/TableCard/TableCard.jsx index 367d163..1ddc649 100644 --- a/web/src/components/common/TableCard/TableCard.jsx +++ b/web/src/components/common/TableCard/TableCard.jsx @@ -1,4 +1,4 @@ -import { DIRECTION_TRANSLATE, FORM_TYPE_OPTIONS } from '../../../constants'; +import { DIRECTION_TRANSLATE, FORM_TYPE_OPTIONS } from '../../../constants/constants'; import { Section, SectionStartPart, diff --git a/web/src/components/common/TableList/TableList.jsx b/web/src/components/common/TableList/TableList.jsx index e0afa57..1a9ea9f 100644 --- a/web/src/components/common/TableList/TableList.jsx +++ b/web/src/components/common/TableList/TableList.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import { Box, Stack, Typography } from '@mui/material'; import { useNavigate } from 'react-router-dom'; import TableCard from '../TableCard/TableCard'; @@ -6,10 +6,10 @@ import { toast } from 'react-toastify'; const TablesList = ({ filteredTables, - projects, query, basePath = '/table', - formInfo + formInfo, + isProject = false, }) => { const navigate = useNavigate(); @@ -22,7 +22,7 @@ const TablesList = ({ if (!formInfo){ return; } - const path = `${basePath}/form/${formInfo.id}/form-type/${formInfo.form_type_code}/${table.sheet}/${table?.direction}`; + const path = `${basePath}/form/${formInfo.id}/form-type/${isProject ? 'PROJECT' : formInfo.form_type_code}/${table.sheet}/${table?.direction}/${table?.year}`; return ( { diff --git a/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx b/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx index 60d32ed..1b56ad9 100644 --- a/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx +++ b/web/src/pages/DictVspPage/components/Modals/ModalEditAddVsp.jsx @@ -14,7 +14,7 @@ import { PrimaryButton, } from '../../../../components/common/Buttons/Buttons'; import { useAuth } from '../../../../app/context/AuthProvider'; -import { ROLES_NAME_ID } from '../../../../constants'; +import { ROLES_NAME_ID } from '../../../../constants/constants'; import { ModalContainer, FieldContainer, @@ -43,8 +43,8 @@ const ModalEditAddVsp = ({ open_date: null, close_date: null, notes: '', - location_form: '', - numbers: '', + placement_type: '', + staff_count: '', area: null, rent_contract_num: '', rent_end_date: null, @@ -94,8 +94,8 @@ const ModalEditAddVsp = ({ ? new Date(initialData.close_date) : null, notes: initialData.notes || '', - location_form: initialData.location_form || '', - numbers: initialData.numbers?.toString() || '', + placement_type: initialData.placement_type || '', + staff_count: initialData.staff_count?.toString() || '', area: initialData.area || null, rent_contract_num: initialData.rent_contract_num || '', rent_end_date: initialData.rent_end_date @@ -114,8 +114,8 @@ const ModalEditAddVsp = ({ open_date: null, close_date: null, notes: '', - location_form: '', - numbers: '', + placement_type: '', + staff_count: '', area: null, rent_contract_num: '', rent_end_date: null, @@ -215,7 +215,7 @@ const ModalEditAddVsp = ({ const submitData = { ...formData, - numbers: formData.numbers ? parseInt(formData.numbers, 10) : null, + staff_count: formData.staff_count ? parseInt(formData.staff_count, 10) : null, area: formData.area ? parseFloat(formData.area) : null, open_date: formData.open_date ? formData.open_date.toLocaleDateString('en-CA') @@ -255,8 +255,8 @@ const ModalEditAddVsp = ({ open_date: null, close_date: null, notes: '', - location_form: '', - numbers: '', + placement_type: '', + staff_count: '', area: '', rent_contract_num: '', rent_end_date: null, @@ -461,11 +461,11 @@ const ModalEditAddVsp = ({ Форма расположения ВСП Штатная численность ВСП { +const TableInfo = ({ formId, sheetName, isProject = false }) => { + const path = (isProject ? `/project/` : '/task/') + formId; const portalContent = ( - + {sheetName && ( {SHEET_NAME[sheetName] || sheetName} )} @@ -28,20 +29,29 @@ const TableInfo = ({ formId, sheetName }) => { }; export default function NewTablePage() { - const { formId, formType, sheetName, direction } = useParams(); + const { formId, formType, sheetName, direction, year } = useParams(); const { user } = useAuth(); + const isProject = formType == 'PROJECT'; return ( <> - {formId && } + {formId && } {user && ( - + )} diff --git a/web/src/pages/TaskPage/ModalCreateProject.jsx b/web/src/pages/ProjectsPage/ModalCreateProject.jsx similarity index 50% rename from web/src/pages/TaskPage/ModalCreateProject.jsx rename to web/src/pages/ProjectsPage/ModalCreateProject.jsx index 5f7034a..3ee10fe 100644 --- a/web/src/pages/TaskPage/ModalCreateProject.jsx +++ b/web/src/pages/ProjectsPage/ModalCreateProject.jsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useState, useEffect } from 'react'; import { Box, Button, Divider, TextField, Typography } from '@mui/material'; import SelectWithOptions from '../AdminPanel/components/SelectWithOptions'; import Modal from '../../components/common/Modal/Modal'; @@ -9,25 +9,98 @@ export const ModalCreateProject = ({ onClose, onCreate, config = {}, + initialData = null, + title = 'Создание проекта', + buttonText = 'Создать', }) => { const [projectData, setProjectData] = useState(() => { - const initialData = {}; + if (initialData) { + return { ...initialData }; + } + // Иначе создаем из конфига + const data = {}; Object.keys(config).forEach((key) => { - initialData[key] = config[key].defaultValue; + data[key] = config[key].defaultValue; }); - return initialData; + return data; }); + const [errors, setErrors] = useState({}); + + useEffect(() => { + if (initialData) { + setProjectData({ ...initialData }); + } else { + const data = {}; + Object.keys(config).forEach((key) => { + data[key] = config[key].defaultValue; + }); + setProjectData(data); + } + setErrors({}); + }, [initialData, config, open]); + const handleChange = (field, value) => { setProjectData((prev) => ({ ...prev, [field]: value, })); + if (errors[field]) { + setErrors((prev) => ({ + ...prev, + [field]: undefined, + })); + } + }; + + const validateField = (fieldName, config) => { + if (config.required_field) { + const value = projectData[fieldName]; + + if (config.type === 'multiselect') { + if (!value || (Array.isArray(value) && value.length === 0) || value === '') { + return `Поле "${fieldName}" обязательно для заполнения`; + } + } else if (config.type === 'text') { + if (!value || value.trim() === '') { + return `Поле "${fieldName}" обязательно для заполнения`; + } + } else if (config.type === 'number') { + if (value === null || value === undefined || value === '') { + return `Поле "${fieldName}" обязательно для заполнения`; + } + if (config.min !== undefined && Number(value) < config.min) { + return `Значение должно быть не меньше ${config.min}`; + } + if (config.max !== undefined && Number(value) > config.max) { + return `Значение должно быть не больше ${config.max}`; + } + } + } + return null; + }; + + const validateAllFields = () => { + const newErrors = {}; + let hasErrors = false; + + Object.entries(config).forEach(([fieldName, fieldConfig]) => { + const error = validateField(fieldName, fieldConfig); + if (error) { + newErrors[fieldName] = error; + hasErrors = true; + } + }); + + setErrors(newErrors); + return !hasErrors; }; const handleClickCreate = () => { - onCreate(projectData); - onClose(); + if (validateAllFields()) { + onCreate(projectData); + onClose(); + } }; const handleClose = () => { @@ -36,10 +109,14 @@ export const ModalCreateProject = ({ resetData[key] = config[key].defaultValue; }); setProjectData(resetData); + setErrors({}); onClose(); }; const renderField = (fieldName, config) => { + const hasError = !!errors[fieldName]; + const errorText = errors[fieldName]; + switch (config.type) { case 'multiselect': return ( @@ -50,9 +127,13 @@ export const ModalCreateProject = ({ fontWeight: '400', fontSize: '0.75rem', paddingBottom: '.25rem', + color: hasError ? 'var(--error-color, #d32f2f)' : 'var(--grey-dark)', }} > {fieldName} + {config.required_field && ( + * + )} handleChange(fieldName, value)} width="28.25rem" + style={{ + borderColor: hasError ? 'var(--error-color, #d32f2f)' : undefined, + borderWidth: hasError ? '2px' : undefined, + }} /> + {hasError && ( + + {errorText} + + )}
); @@ -73,11 +169,14 @@ export const ModalCreateProject = ({ sx={{ fontWeight: '400', fontSize: '0.75rem', - color: 'var(--grey-dark)', + color: hasError ? 'var(--error-color, #d32f2f)' : 'var(--grey-dark)', paddingBottom: '.25rem', }} > {fieldName} + {config.required_field && ( + * + )} handleChange(fieldName, e.target.value)} placeholder={config.placeholder} size="small" + error={hasError} + helperText={hasError ? errorText : ''} + FormHelperTextProps={{ + sx: { + marginLeft: 0, + fontSize: '0.75rem', + }, + }} />
); @@ -97,11 +204,14 @@ export const ModalCreateProject = ({ sx={{ fontWeight: '400', fontSize: '0.75rem', - color: 'var(--grey-dark)', + color: hasError ? 'var(--error-color, #d32f2f)' : 'var(--grey-dark)', paddingBottom: '.25rem', }} > {fieldName} + {config.required_field && ( + * + )} { const inputValue = e.target.value; - //только числа const isValidInput = /^\d*\.?\d*$/.test(inputValue) || inputValue === ''; if (isValidInput) { @@ -118,6 +227,8 @@ export const ModalCreateProject = ({ }} placeholder={config.placeholder} size="small" + error={hasError} + helperText={hasError ? errorText : ''} slotProps={{ htmlInput: { min: config.min, @@ -125,6 +236,12 @@ export const ModalCreateProject = ({ step: config.step || 1, }, }} + FormHelperTextProps={{ + sx: { + marginLeft: 0, + fontSize: '0.75rem', + }, + }} /> ); @@ -136,7 +253,7 @@ export const ModalCreateProject = ({ return ( - Создать + {buttonText} } @@ -180,4 +297,4 @@ export const ModalCreateProject = ({ ); -}; +}; \ No newline at end of file diff --git a/web/src/pages/ProjectsPage/ProjectCard.jsx b/web/src/pages/ProjectsPage/ProjectCard.jsx new file mode 100644 index 0000000..36ace2a --- /dev/null +++ b/web/src/pages/ProjectsPage/ProjectCard.jsx @@ -0,0 +1,349 @@ +// src/components/common/ProjectCardComponent/ProjectCardComponent.jsx +import { useEffect, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import styled from '@emotion/styled'; +import { + Button, + TextField, + FormControl, + FormLabel, + Box, + Stack, + Chip, +} from '@mui/material'; +import { ProjectsApi } from '../../api/projects'; +import { toast } from 'react-toastify'; +import { + CheckBoxCheckSvg, + CheckBoxUncheckSvg, + DateIcon, + Edit, + ExportSvg, + UserIcon, + BuildingIcon, + LocationIcon, +} from '../../components/common/icons/icons'; +import { IconWithContent } from '../../components/common/IconWithContent'; +import { ExportButton } from '../../components/common/Buttons/ButtonsActions'; +import { ModalCreateProject } from './ModalCreateProject'; + +const ProjectCard = styled.div` + width: 26.8rem; + height: 15rem; + display: flex; + padding: 1.25rem; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + box-sizing: border-box; + border: 0.06rem solid var(--Stroke, rgba(0, 0, 0, 0.1)); + border-radius: 1rem; + box-shadow: + 0rem 2rem 4rem -2rem rgba(0, 0, 0, 0.02), + 0rem 4rem 6rem -1rem rgba(0, 0, 0, 0.02); + background: var(--White, rgba(255, 255, 255, 1)); + overflow: hidden; + cursor: pointer; + position: relative; + + &:hover { + transform: translateY(-5px); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12); + } +`; + +const CardHeader = styled.div` + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const ProjectId = styled.div` + font-size: 0.75rem; + font-weight: 400; + line-height: 1rem; + letter-spacing: 0rem; + text-align: left; + color: rgba(0, 0, 0, 0.6); +`; + +const CardBody = styled.div` + width: 100%; + flex: 1; + display: flex; + flex-direction: column; + gap: 0.8125rem; + justify-content: flex-end; + height: 100%; +`; + +const ProjectTitle = styled.div` + font-size: 1rem; + font-weight: 500; + color: var(--Text-Primary, #333); + line-height: 1.63; + margin: 0; + padding: 0; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +`; + +const StatusChip = styled(Chip)` + font-size: 0.7rem; + height: 1.5rem; + background-color: ${({ status }) => { + switch (status) { + case 'active': return '#4caf50'; + case 'completed': return '#2196f3'; + case 'paused': return '#ff9800'; + case 'archived': return '#9e9e9e'; + default: return '#9e9e9e'; + } + }}; + color: white; +`; + +const LevelChip = styled(Chip)` + font-size: 0.6rem; + height: 1.25rem; + background-color: rgba(0, 0, 0, 0.08); + color: rgba(0, 0, 0, 0.7); +`; + +const ProjectInfoGrid = styled.div` + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-top: 0.25rem; +`; + +const InfoChip = styled(Chip)` + font-size: 0.6rem; + height: 1.25rem; + background-color: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.7); +`; + +const getStatusLabel = (status) => { + const statusMap = { + active: 'Активный', + completed: 'Завершен', + paused: 'Приостановлен', + archived: 'Архивирован', + }; + return statusMap[status] || status || 'Не указан'; +}; + +export const ProjectCardComponent = ({ + project, + projectDataInit, + exportMode = false, + isLoadingFile = false, + onAddForExport, + onExportClick, +}) => { + const navigate = useNavigate(); + const { + id, + name, + org_unit_name, + years, + status, + level, + project_type, + vsp_format, + placement_type, + object_address, + staff_count, + total_area, + report_count, + parent_id, + } = project; + + const [isEditModalOpen, setEditModalOpen] = useState(false); + const [currentName, setCurrentName] = useState(name || ''); + const [isChecked, setIsChecked] = useState(false); + const [editFormData, setEditFormData] = useState({}); + const [projectData, setProjectData] = useState(projectDataInit); + + useEffect(() => { + setIsChecked(false); + }, [exportMode]); + + + + // Функция для подготовки данных проекта к редактированию + const prepareProjectDataForEdit = () => { + return { + 'ССП/РФ': project.org_unit_id || null, + 'Год': years || null, + 'Тип проекта развития': project_type || null, + 'Название проекта': currentName, + 'Формат ВСП': vsp_format || null, + 'Адрес объекта': object_address || '', + 'Целевая численность, чел.': staff_count || 0, + 'Тип размещения': placement_type || null, + 'Площадь размещения, м2': total_area || 0, + }; + }; + + const handleOpenEdit = (event) => { + event.stopPropagation(); + setEditFormData(prepareProjectDataForEdit()); + setEditModalOpen(true); + }; + + const handleCloseEdit = () => { + setEditModalOpen(false); + setEditFormData({}); + }; + + const handleCheckboxClick = (event) => { + event.stopPropagation(); + if (!isLoadingFile) { + setIsChecked(!isChecked); + onAddForExport(!isChecked); + } else { + toast.warning('Файл формируется!'); + } + }; + + const handleExportProject = (event) => { + event.stopPropagation(); + onExportClick?.(id, name); + }; + + const handleNavigate = () => { + if (!exportMode) { + navigate(`/project/${id}`); + } + }; + + // Обновленная функция обновления проекта + const updateProject = async (formData) => { + try { + const projectData = { + name: formData['Название проекта'] || currentName, + project_type: formData['Тип проекта развития'] || null, + vsp_format: formData['Формат ВСП'] || null, + object_address: formData['Адрес объекта'] || '', + staff_count: Number(formData['Целевая численность, чел.']) || 0, + placement_type: formData['Тип размещения'] || null, + total_area: Number(formData['Площадь размещения, м2']) || 0, + year: formData['Год'] ? Number(formData['Год']) : null, + branch_id: formData['ССП/РФ'] || null, + }; + + await ProjectsApi.update(id, projectData); + + // Обновляем локальные данные + setCurrentName(projectData.name); + setEditModalOpen(false); + toast.success('Данные проекта успешно обновлены'); + + // Можно добавить рефреш данных или перезагрузку страницы + window.location.reload(); // или используйте callback для обновления списка + } catch (error) { + toast.error( + error?.response?.data?.detail || 'Не удалось обновить данные проекта', + ); + } + }; + + const handleSaveProject = async (formData) => { + await updateProject(formData); + }; + + const getInitials = (name) => { + if (!name) return '?'; + const words = name.split(' '); + if (words.length >= 2) { + return `${words[0][0]}${words[1][0]}`.toUpperCase(); + } + return name.substring(0, 2).toUpperCase(); + }; + + return ( + <> + + + + ID: {id} + + {!exportMode && ( + <> + {status && ( + + )} + {/* {Пока нет редактирование + экспорт} */} + {/* + */} + + )} + + + + {currentName} + + + {project_type && ( + + )} + {report_count !== undefined && report_count !== null && ( + + )} + + + + + + + }> + {years.join(', ') || 'Год не указан'} + + }> + {org_unit_name || 'Организация не указана'} + + + + {exportMode && ( +
+ {isChecked ? ( + + ) : ( + + )} +
+ )} +
+
+ + + + ); +}; \ No newline at end of file diff --git a/web/src/pages/ProjectsPage/ProjectsPage.jsx b/web/src/pages/ProjectsPage/ProjectsPage.jsx new file mode 100644 index 0000000..4b126b2 --- /dev/null +++ b/web/src/pages/ProjectsPage/ProjectsPage.jsx @@ -0,0 +1,298 @@ +import { useEffect, useMemo, useState } from 'react'; +import { ProjectsApi } from '../../api/projects'; +import { CardsSkeleton } from '../../components/common/Skeleton'; +import SearchComponent from '../../components/common/SearchComponent'; +import { ProjectCardComponent } from './ProjectCard'; +import { HeaderSwitch } from '../../components/HeaderMenu/HeaderSwitch'; +import { PageContainer, TasksContainer } from '../StyledForPage'; +import { + Box, + FormControl, + Button, + Stack, + Pagination, + PaginationItem, + Select, + MenuItem, + Typography, + IconButton, + Tooltip, + TextField, + Autocomplete, +} from '@mui/material'; +import { toast } from 'react-toastify'; +import { ModalCreateProject } from './ModalCreateProject'; +import { + ROLES_NAME_ID, +} from '../../constants/constants'; +import { useAuth } from '../../app/context/AuthProvider'; +import { PrimaryButton, PrimaryOutlinedButton } from '../../components/common/Buttons/Buttons'; +import { + ExportExitButton, + ExportWithTextButton, +} from '../../components/common/Buttons/ButtonsActions'; +import { exportBulkForms, exportSingleForm } from '../../utils/exportFile'; +import { WhitePlus } from '../../components/common/icons/icons'; +import { useNavigate } from 'react-router-dom'; +import { PaginatedList } from '../../components/common/PaginatedList'; +import { DEFAULT_PROJECT_CONFIG } from '../../constants/projectConfig'; +import { SspApi } from '../../api/ssp'; +import NavigationToggle from '../../components/common/NavigationToggle'; + +export { DEFAULT_PROJECT_CONFIG } from '../../constants/projectConfig'; + +export default function ProjectsPage() { + const navigate = useNavigate(); + const [items, setItems] = useState([]); + const [loading, setLoading] = useState(false); + const [modalOpen, setModalOpen] = useState(false); + + // Новые фильтры + const [yearFilter, setYearFilter] = useState(''); + const [branchFilter, setBranchFilter] = useState(''); + + // Pagination state + const [page, setPage] = useState(1); + const [limit, setLimit] = useState(20); + const [totalCount, setTotalCount] = useState(0); + + const { user } = useAuth(); + + const [exportMode, setExportMode] = useState(false); + const [exportList, setExportList] = useState([]); + + const [projectData, setProjectData] = useState(DEFAULT_PROJECT_CONFIG); + + // Получаем список годов для фильтра (можно динамически или задать диапазон) + const yearOptions = useMemo(() => { + const currentYear = new Date().getFullYear(); + const years = []; + for (let year = currentYear - 5; year <= currentYear + 2; year++) { + years.push(year); + } + return years; + }, []); + + useEffect(() => { + if (!user) return; + if (user.role_id == ROLES_NAME_ID.admin) { + SspApi.getAll().then(data => { + if (data.success) { + setProjectData(prev => ({ + ...prev, 'ССП/РФ': { + ...prev['ССП/РФ'], + options: data.result + } + })) + return; + } + toast.error('Ошибка при получении ССП/РФ'); + }); + return; + } + setProjectData(prev => ({ + ...prev, 'ССП/РФ': { + ...prev['ССП/РФ'], + options: user.org_units, + } + })) + }, [user]) + + const openModal = () => { + setModalOpen(true); + }; + + const mapFormDataToApi = (formData) => { + const apiData = { + name: formData['Название проекта'] || '', + project_type: formData['Тип проекта развития'] || null, + vsp_format: formData['Формат ВСП'] || null, + object_address: formData['Адрес объекта'] || '', + staff_count: formData['Целевая численность, чел.'] || 0, + placement_type: formData['Тип размещения'] || null, + total_area: formData['Площадь размещения, м2'] || 0, + year: formData['Год'] || null, + branch_id: formData['ССП/РФ'] || null, + + }; + return apiData; + }; + + const handleCreateProject = async (formData) => { + try { + const apiData = mapFormDataToApi(formData); + + await ProjectsApi.create(apiData); + + setPage(1); + loadProjects(1, limit); + + setModalOpen(false); + toast.success('Проект успешно создан'); + } catch (error) { + toast.error( + error.response?.data?.detail || + error.response?.data?.message || + 'Ошибка при создании проекта', + ); + } + }; + + const loadProjects = async (currentPage = page, currentLimit = limit) => { + setLoading(true); + try { + const skip = (currentPage - 1) * currentLimit; + const params = { + offset: skip, + limit: currentLimit, + // Добавляем фильтры в параметры запроса + ...(yearFilter && { year: parseInt(yearFilter) }), + ...(branchFilter && { branch_id: parseInt(branchFilter.id) }), + }; + + const res = await ProjectsApi.list(params); + const data = res.result; + + setItems(data); + setTotalCount(res.count); + + } catch (error) { + toast.error('Ошибка загрузки проектов'); + } finally { + setLoading(false); + } + }; + + // Сбрасываем страницу при изменении любых фильтров + useEffect(() => { + setPage(1); + loadProjects(1, limit); + }, [yearFilter, branchFilter]); + + const handlePageChange = (event, value) => { + setPage(value); + loadProjects(value, limit); + }; + + const handleLimitChange = (event) => { + const newLimit = event.target.value; + setLimit(newLimit); + setPage(1); + loadProjects(1, newLimit); + }; + + // Сброс всех фильтров + const handleClearFilters = () => { + setYearFilter(''); + setBranchFilter(''); + setPage(1); + }; + + useEffect(() => { + loadProjects(page, limit); + }, []); + + useEffect(() => { + setExportList([]); + }, [exportMode]); + + const handleChangeToExportList = (projectId, checked) => { + if (checked) { + setExportList((prev) => [...prev, projectId]); + } else { + const newExportList = exportList.filter((t) => t != projectId); + setExportList(newExportList); + } + }; + + const handleBulkExport = async () => { + await exportBulkForms(exportList); + setExportMode(false); + }; + + const handleSingleExport = (projectId, projectTitle) => { + exportSingleForm(projectId, projectTitle); + }; + + const handleRefresh = () => { + loadProjects(page, limit); + toast.info('Список проектов обновлен'); + }; + + if (!user) return null; + + return ( + <> + + + navigate(path)} /> + + ( + + )} + getItemId={(project) => project.id} + getItemTitle={(project) => project.name || 'Проект'} + extraActions={ + user.role_id === ROLES_NAME_ID.admin && ( + } height='2.5rem' > + Создать проект + + ) + } + filterActions={ + + + + option.title || option.name || '-'} + value={branchFilter} + onChange={(event, newValue) => setBranchFilter(newValue)} + sx={{ width: 200 }} + renderInput={(params) => ( + + )} + /> + Сбросить + + } + /> + + + setModalOpen(false)} + onCreate={handleCreateProject} + config={projectData} + /> + + ); +} \ No newline at end of file diff --git a/web/src/pages/StyledForPage.jsx b/web/src/pages/StyledForPage.jsx index 7db3b82..49ee02f 100644 --- a/web/src/pages/StyledForPage.jsx +++ b/web/src/pages/StyledForPage.jsx @@ -1,7 +1,8 @@ import styled from '@emotion/styled'; const PageContainer = styled.div` - padding: 2.5rem; + padding: 2rem; + padding-top: 1rem; box-sizing: border-box; display: flex; flex-direction: column; diff --git a/web/src/pages/TablePage.jsx b/web/src/pages/TablePage.jsx index d678eed..4540c9e 100644 --- a/web/src/pages/TablePage.jsx +++ b/web/src/pages/TablePage.jsx @@ -57,7 +57,7 @@ export default function TablePage() { const connection = connectToTable(tableId, user?.id, { onError: () => { - toast.error('Ошибка подключения к серверу реального времени'); + toast.error('Ошибка подключения к серверу'); }, onClose: (event) => { if (isUnmountingRef.current) { diff --git a/web/src/pages/TaskPage/TaskPage.jsx b/web/src/pages/TaskPage/TaskPage.jsx index ae3fcb7..591d23f 100644 --- a/web/src/pages/TaskPage/TaskPage.jsx +++ b/web/src/pages/TaskPage/TaskPage.jsx @@ -3,6 +3,7 @@ import { createPortal } from 'react-dom'; import { useParams, useNavigate } from 'react-router-dom'; import { TasksApi } from '../../api/tasks'; import { TablesApi } from '../../api/tables'; +import { ProjectsApi } from '../../api/projects'; // Добавьте импорт API для проектов import { TaskInfoContainer, NameTask, @@ -18,17 +19,16 @@ import { toast } from 'react-toastify'; import { SettingModal as SettingStageModal } from '../../components/Stages/SettingModal'; import { PrimaryOutlinedButton } from '../../components/common/Buttons/Buttons'; import { FormsApi } from '../../api/forms'; -import { ModalCreateProject } from './ModalCreateProject'; import { ExportWithTextButton } from '../../components/common/Buttons/ButtonsActions'; -import { exportSingleForm } from '../../utils/exportForm'; +import { exportSingleForm } from '../../utils/exportFile'; import TablesList from '../../components/common/TableList/TableList'; -import { DIRECTION_TRANSLATE, FORM_TYPE_TRANSLATE, SHEET_NAME } from '../../constants'; +import { DIRECTION_TRANSLATE, FORM_TYPE_TRANSLATE, SHEET_NAME } from '../../constants/constants'; -const TaskInfo = ({ task }) => { +const TaskInfo = ({ task, isProject }) => { const portalContent = ( - - {FORM_TYPE_TRANSLATE[task.form_type_code] || ''} + + {isProject ? 'Проект' : FORM_TYPE_TRANSLATE[task.form_type_code] || ''} ); @@ -40,9 +40,13 @@ const TaskInfo = ({ task }) => { }; export default function TaskPage() { - const { taskId } = useParams(); + const { taskId, projectId } = useParams(); const navigate = useNavigate(); - const id = Number(taskId); + + // Определяем, что у нас за ID и какой тип + const isProject = !!projectId; + const id = isProject ? Number(projectId) : Number(taskId); + const [task, setTask] = useState(null); const [tables, setTables] = useState([]); const [isLoading, setIsLoading] = useState(false); @@ -51,23 +55,42 @@ export default function TaskPage() { const [modalProjectOpen, setModalProjectOpen] = useState(false); const [tempProjects, setTempProjects] = useState([]); const [projects, setProjects] = useState([]); + const [isProjectData, setIsProjectData] = useState(false); useEffect(() => { - const getSheets = async () => { + const getData = async () => { setIsLoading(true); try { - const data = await TasksApi.getSheets(id); - // Преобразуем данные с учетом direction - const mappedTables = data.result.all_sheets.map(sheet => ({ - name: SHEET_NAME[sheet.sheet_name] || sheet.sheet_name, - sheet: sheet.sheet_name, - direction: sheet.direction, - })); - //пока скрыт - setTables(mappedTables.filter(t => t.sheet !== "OTCH9F",)); + if (isProject) { + // Получаем информацию о проекте + const projectData = await ProjectsApi.get(id); + setTask(projectData.result); + setIsProjectData(true); + + const mappedTables = projectData.result.reports.map(sheet => ({ + name: SHEET_NAME[sheet.report_type] || sheet.report_type, + sheet: sheet.report_type, + year: sheet.year, + })); + setTables(mappedTables); + } else { + // Получаем информацию о задаче + const taskData = await TasksApi.getById(id); + setTask(taskData.result); + setIsProjectData(false); + + // Получаем таблицы задачи + const tablesData = await TasksApi.getSheets(id); + const mappedTables = tablesData.result.all_sheets.map(sheet => ({ + name: SHEET_NAME[sheet.sheet_name] || sheet.sheet_name, + sheet: sheet.sheet_name, + direction: sheet.direction, + })); + setTables(mappedTables.filter(t => t.sheet !== "OTCH9F")); + } } catch (error) { toast.error( - error?.response?.data?.detail || 'Ошибка получения данных задачи', + error?.response?.data?.detail || `Ошибка получения данных ${isProject ? 'проекта' : 'задачи'}`, ); } finally { setIsLoading(false); @@ -75,27 +98,11 @@ export default function TaskPage() { }; if (Number.isFinite(id)) { - getSheets(); + getData(); } - }, [id]); + }, [id, isProject]); - useEffect(() => { - const getFormInfo = async () => { - setIsLoading(true); - try { - const data = await TasksApi.getById(id); - setTask(data.result); - } catch (error) { - // обработка ошибки - } finally { - setIsLoading(false); - } - }; - - if (Number.isFinite(id)) { - getFormInfo(); - } - }, [id]); + // Объединили два useEffect в один const handleCreateProject = (projectData) => { // логика создания проекта @@ -107,6 +114,14 @@ export default function TaskPage() { return searchString.includes(query.toLowerCase()); }); + // Функция для экспорта + const handleExport = () => { + const fileName = isProject + ? `project_${task?.title || id}` + : `form_${task?.title || taskId}`; + exportSingleForm(id, fileName); + }; + if (isLoading) { return (
@@ -117,7 +132,7 @@ export default function TaskPage() { return ( <> - {task && } + {task && } - exportSingleForm(taskId, task?.title ?? 'form')} - /> + setModalStageOpen(true)} @@ -156,9 +169,10 @@ export default function TaskPage() { setModalStageOpen(false)} - taskId={taskId} - mode="task" - formTypeCode={task?.form_type_code || ''} + taskId={isProject ? undefined : taskId} + projectId={isProject ? projectId : undefined} + mode={isProject ? "project" : "task"} + formTypeCode={ task?.form_type_code || ''} sheets={tables} /> @@ -169,8 +183,9 @@ export default function TaskPage() { query={query} projects={projects} filteredTables={filteredTables} - basePath="/table" + basePath={"/table"} formInfo={task} + isProject={isProject} /> diff --git a/web/src/pages/TasksPage/TasksPage.jsx b/web/src/pages/TasksPage/TasksPage.jsx index 00f8933..5a01f23 100644 --- a/web/src/pages/TasksPage/TasksPage.jsx +++ b/web/src/pages/TasksPage/TasksPage.jsx @@ -27,7 +27,7 @@ import { ORG_UNIT_TYPE_OPTIONS, ROLES_NAME_ID, FORM_TYPE_TRANSLATE -} from '../../constants'; +} from '../../constants/constants'; import { useAuth } from '../../app/context/AuthProvider'; import { SspApi } from '../../api/ssp'; import { PrimaryButton } from '../../components/common/Buttons/Buttons'; @@ -35,10 +35,13 @@ import { ExportExitButton, ExportWithTextButton, } from '../../components/common/Buttons/ButtonsActions'; -import { exportBulkForms, exportSingleForm } from '../../utils/exportForm'; +import { exportBulkForms, exportSingleForm } from '../../utils/exportFile'; import { WhitePlus } from '../../components/common/icons/icons'; -import { OrgUnitsAutocompletePaper } from './OrgUnitsAutocompletePaper'; -import { renderOrgUnitValue } from './renderOrgUnitValue'; +import { OrgUnitsAutocompletePaper } from '../../components/common/OrgUnitsAutocompletePaper/OrgUnitsAutocompletePaper'; +import { renderOrgUnitValue } from '../../components/common/OrgUnitsAutocompletePaper/renderOrgUnitValue'; +import { PaginatedList } from '../../components/common/PaginatedList'; +import NavigationToggle from '../../components/common/NavigationToggle'; +import { useNavigate } from 'react-router'; const modalSelectMenuProps = { sx: { zIndex: 1301 }, @@ -52,6 +55,8 @@ const modalSelectSx = { }; export default function TasksPage() { + const navigate = useNavigate(); + const [items, setItems] = useState([]); const [loading, setLoading] = useState(false); const [loadingUpdate, setLoadingUpdate] = useState(false); @@ -255,128 +260,34 @@ export default function TasksPage() { <> - - {exportMode && Выделено задач: {exportList.length}} - - -
- {/* */} -
- - {!exportMode ? ( - <> - { - setExportMode(true); - }} - > - {user.role_id == ROLES_NAME_ID.admin && ( - }> - Создать задачу - - )} - - ) : ( - <> - - setExportMode(false)} /> - - )} - -
- - {/* TODO: вернуть, когда будет реализовано на бэке */} - {/* */} - - {loading ? ( - - ) : ( - <> - {items.map((t) => ( - { - handleChangeToExportList(t.id, checked); - }} - onExportClick={handleSingleExport} - /> - ))} - - )} - - - {/* Pagination Footer */} - {!loading && items.length > 0 && ( - - - - - Показать на странице: - - - - - ( - - )} + navigate(path)} /> + ( + - {/* Spacer for symmetry */} - - )} + )} + getItemId={(task) => task.id} + getItemTitle={(task) => task.title || 'Задача'} + extraActions={ + user.role_id === ROLES_NAME_ID.admin && ( + } height={'2.5rem'}> + Создать задачу + + ) + } + />
{ + try { + const response = await TasksApi.exportTask(taskId); + await downloadFile(response, taskTitle, "xlsx"); + } catch (error) { + const message = await getApiErrorMessage( + error, + "Ошибка при скачивании файла", + ); + toast.error(message); + } +}; + +export const exportSheet = async (formId, sheetName, direction) => { + try { + const normalizedDirection = + direction && direction !== "null" ? direction : undefined; + const params = normalizedDirection + ? { direction: normalizedDirection } + : {}; + const response = await FormsSheetApi.export(formId, sheetName, params); + await downloadFile(response, sheetName, "xlsx"); + } catch (error) { + const message = await getApiErrorMessage( + error, + "Ошибка при скачивании файла", + ); + toast.error(message); + } +}; + +export const exportSheetProject = async (formId, sheetName, year) => { + try { + const response = await ProjectsApi.export(formId, year, sheetName); + await downloadFile(response, sheetName, "xlsx"); + } catch (error) { + const message = await getApiErrorMessage( + error, + "Ошибка при скачивании файла", + ); + toast.error(message); + } +}; + +export const exportBulkForms = async (formIds, fileName = "Задачи") => { + try { + const response = await TasksApi.exportTasks({ form_ids: formIds }); + await downloadFile(response, fileName, "xlsx"); + } catch (error) { + const message = await getApiErrorMessage( + error, + "Ошибка при скачивании файла", + ); + toast.error(message); + throw error; + } +}; diff --git a/web/src/utils/exportForm.js b/web/src/utils/exportForm.js deleted file mode 100644 index 56eba58..0000000 --- a/web/src/utils/exportForm.js +++ /dev/null @@ -1,48 +0,0 @@ -import { FormsSheetApi } from '../api/form_sheet'; -import { TasksApi } from '../api/tasks'; -import { downloadFile } from './downloadFile'; -import { getApiErrorMessage } from './getApiErrorMessage'; -import { toast } from 'react-toastify'; - -export const exportSingleForm = async (taskId, taskTitle) => { - try { - const response = await TasksApi.exportTask(taskId); - await downloadFile(response, taskTitle, 'xlsx'); - } catch (error) { - const message = await getApiErrorMessage( - error, - 'Ошибка при скачивании файла', - ); - toast.error(message); - } -}; - -export const exportSheet = async (formId, sheetName, direction) => { - try { - const normalizedDirection = - direction && direction !== 'null' ? direction : undefined; - const params = normalizedDirection ? { direction: normalizedDirection } : {}; - const response = await FormsSheetApi.export(formId, sheetName, params); - await downloadFile(response, sheetName, 'xlsx'); - } catch (error) { - const message = await getApiErrorMessage( - error, - 'Ошибка при скачивании файла', - ); - toast.error(message); - } -}; - -export const exportBulkForms = async (formIds, fileName = 'Задачи') => { - try { - const response = await TasksApi.exportTasks({ form_ids: formIds }); - await downloadFile(response, fileName, 'xlsx'); - } catch (error) { - const message = await getApiErrorMessage( - error, - 'Ошибка при скачивании файла', - ); - toast.error(message); - throw error; - } -};