set search_path = budget_app, public; insert into companies (code, name, business_number) values ('JH001', '장헌건설', '123-45-67890') on conflict (code) do nothing; insert into fiscal_years (company_id, fiscal_year, start_date, end_date, is_closed) select c.id, 2026, date '2026-01-01', date '2026-12-31', false from companies c where c.code = 'JH001' on conflict (company_id, fiscal_year) do nothing; insert into departments (company_id, parent_department_id, code, name, manager_name) select c.id, null, x.code, x.name, x.manager_name from companies c cross join ( values ('HQ', '본사', '김대표'), ('SALES', '영업본부', '박영업'), ('EXEC', '실행본부', '이실행'), ('FIN', '재무팀', '최재무') ) as x(code, name, manager_name) where c.code = 'JH001' on conflict (company_id, code) do nothing; insert into employees (company_id, department_id, employee_no, name, title, email) select c.id, d.id, x.employee_no, x.name, x.title, x.email from companies c join departments d on d.company_id = c.id join ( values ('E001', '김대표', '대표', 'ceo@jh.local', 'HQ'), ('E002', '박영업', '영업이사', 'sales@jh.local', 'SALES'), ('E003', '이실행', '실행이사', 'exec@jh.local', 'EXEC'), ('E004', '최재무', '재무팀장', 'finance@jh.local', 'FIN'), ('E005', '정현장', '현장소장', 'site1@jh.local', 'EXEC') ) as x(employee_no, name, title, email, dept_code) on d.code = x.dept_code where c.code = 'JH001' on conflict (company_id, employee_no) do nothing; insert into business_units (company_id, code, name) select c.id, x.code, x.name from companies c cross join ( values ('BU001', '건축사업부'), ('BU002', '토목사업부') ) as x(code, name) where c.code = 'JH001' on conflict (company_id, code) do nothing; insert into clients (company_id, code, name, business_number, contact_name, phone, email) select c.id, x.code, x.name, x.business_number, x.contact_name, x.phone, x.email from companies c cross join ( values ('CL001', '한맥개발', '210-81-11111', '김발주', '02-1111-1111', 'client1@hmac.local'), ('CL002', '동해산업', '210-81-22222', '이발주', '02-2222-2222', 'client2@donghae.local') ) as x(code, name, business_number, contact_name, phone, email) where c.code = 'JH001' on conflict (company_id, code) do nothing; insert into vendors (company_id, code, name, business_number, contact_name, phone, email) select c.id, x.code, x.name, x.business_number, x.contact_name, x.phone, x.email from companies c cross join ( values ('VD001', '성우외주', '301-86-11111', '오외주', '031-111-1111', 'vendor1@sw.local'), ('VD002', '대한자재', '301-86-22222', '문자재', '031-222-2222', 'vendor2@dh.local'), ('VD003', '정우장비', '301-86-33333', '최장비', '031-333-3333', 'vendor3@jw.local') ) as x(code, name, business_number, contact_name, phone, email) where c.code = 'JH001' on conflict (company_id, code) do nothing; insert into account_categories (company_id, code, name, category_type, sort_order) select c.id, x.code, x.name, x.category_type, x.sort_order from companies c cross join ( values ('REV', '매출', 'revenue', 1), ('COST', '공사원가', 'cost', 2), ('EXP', '판관비', 'expense', 3) ) as x(code, name, category_type, sort_order) where c.code = 'JH001' on conflict (company_id, code) do nothing; insert into accounts (company_id, category_id, code, name, account_type) select c.id, ac.id, x.code, x.name, x.account_type from companies c join account_categories ac on ac.company_id = c.id join ( values ('REV001', '기성매출', 'revenue', 'REV'), ('REV002', '추가공사매출', 'revenue', 'REV'), ('COST001', '외주비', 'cost', 'COST'), ('COST002', '자재비', 'cost', 'COST'), ('COST003', '장비비', 'cost', 'COST'), ('EXP001', '현장관리비', 'expense', 'EXP'), ('EXP002', '본사관리비', 'expense', 'EXP') ) as x(code, name, account_type, category_code) on ac.code = x.category_code where c.code = 'JH001' on conflict (company_id, code) do nothing; insert into projects ( company_id, business_unit_id, department_id, client_id, project_code, project_name, project_type, status, contract_amount, start_date, end_date, manager_employee_id, description ) select c.id, bu.id, d.id, cl.id, x.project_code, x.project_name, x.project_type, x.status, x.contract_amount, x.start_date, x.end_date, e.id, x.description from companies c join business_units bu on bu.company_id = c.id join departments d on d.company_id = c.id join clients cl on cl.company_id = c.id join employees e on e.company_id = c.id join ( values ( 'PJT-2026-001', '장헌 오피스 신축공사', '건축', 'active', 1500000000.00, date '2026-01-10', date '2026-12-20', 'BU001', 'EXEC', 'CL001', 'E005', '오피스 신축 메인 프로젝트' ), ( 'PJT-2026-002', '동해 물류창고 증축공사', '건축', 'active', 950000000.00, date '2026-02-01', date '2026-10-30', 'BU001', 'EXEC', 'CL002', 'E003', '물류창고 증축 프로젝트' ) ) as x( project_code, project_name, project_type, status, contract_amount, start_date, end_date, bu_code, dept_code, client_code, employee_no, description ) on bu.code = x.bu_code and d.code = x.dept_code and cl.code = x.client_code and e.employee_no = x.employee_no where c.code = 'JH001' on conflict (company_id, project_code) do nothing; insert into budget_versions ( company_id, fiscal_year_id, version_name, version_no, status, created_by, approved_by, approved_at, notes ) select c.id, fy.id, '2026 본예산', 1, 'approved', e1.id, e2.id, now(), '초기 승인 예산' from companies c join fiscal_years fy on fy.company_id = c.id and fy.fiscal_year = 2026 join employees e1 on e1.company_id = c.id and e1.employee_no = 'E004' join employees e2 on e2.company_id = c.id and e2.employee_no = 'E001' where c.code = 'JH001' on conflict (company_id, fiscal_year_id, version_no) do nothing; insert into budget_items ( company_id, budget_version_id, project_id, department_id, account_id, month_no, planned_amount, memo ) select c.id, bv.id, p.id, d.id, a.id, x.month_no, x.planned_amount, x.memo from companies c join budget_versions bv on bv.company_id = c.id and bv.version_no = 1 join projects p on p.company_id = c.id join departments d on d.id = p.department_id join accounts a on a.company_id = c.id join ( values ('PJT-2026-001', 'REV001', 1, 120000000.00, '1월 기성매출'), ('PJT-2026-001', 'REV001', 2, 130000000.00, '2월 기성매출'), ('PJT-2026-001', 'REV001', 3, 150000000.00, '3월 기성매출'), ('PJT-2026-001', 'COST001', 1, 40000000.00, '1월 외주비'), ('PJT-2026-001', 'COST001', 2, 45000000.00, '2월 외주비'), ('PJT-2026-001', 'COST001', 3, 50000000.00, '3월 외주비'), ('PJT-2026-001', 'COST002', 1, 25000000.00, '1월 자재비'), ('PJT-2026-001', 'COST002', 2, 28000000.00, '2월 자재비'), ('PJT-2026-001', 'EXP001', 1, 8000000.00, '1월 현장관리비'), ('PJT-2026-001', 'EXP001', 2, 8000000.00, '2월 현장관리비'), ('PJT-2026-002', 'REV001', 2, 90000000.00, '2월 기성매출'), ('PJT-2026-002', 'REV001', 3, 110000000.00, '3월 기성매출'), ('PJT-2026-002', 'COST001', 2, 30000000.00, '2월 외주비'), ('PJT-2026-002', 'COST002', 2, 22000000.00, '2월 자재비'), ('PJT-2026-002', 'EXP001', 2, 6000000.00, '2월 현장관리비') ) as x(project_code, account_code, month_no, planned_amount, memo) on p.project_code = x.project_code and a.code = x.account_code where c.code = 'JH001' on conflict (budget_version_id, project_id, department_id, account_id, month_no) do nothing; insert into purchase_requests ( company_id, project_id, department_id, vendor_id, requester_employee_id, request_no, request_date, status, description, total_amount ) select c.id, p.id, p.department_id, v.id, e.id, x.request_no, x.request_date, x.status, x.description, x.total_amount from companies c join projects p on p.company_id = c.id join vendors v on v.company_id = c.id join employees e on e.company_id = c.id join ( values ('PR-2026-0001', date '2026-01-12', 'approved', '1차 외주 발주 요청', 38000000.00, 'PJT-2026-001', 'VD001', 'E005'), ('PR-2026-0002', date '2026-02-08', 'ordered', '자재 구매 요청', 21000000.00, 'PJT-2026-002', 'VD002', 'E003') ) as x(request_no, request_date, status, description, total_amount, project_code, vendor_code, employee_no) on p.project_code = x.project_code and v.code = x.vendor_code and e.employee_no = x.employee_no where c.code = 'JH001' on conflict (company_id, request_no) do nothing; insert into purchase_request_items ( purchase_request_id, account_id, item_name, quantity, unit_price, amount, needed_date ) select pr.id, a.id, x.item_name, x.quantity, x.unit_price, x.amount, x.needed_date from purchase_requests pr join companies c on c.id = pr.company_id join accounts a on a.company_id = c.id join ( values ('PR-2026-0001', 'COST001', '철근 가공 외주', 1.0, 38000000.00, 38000000.00, date '2026-01-20'), ('PR-2026-0002', 'COST002', '철골 자재 구매', 1.0, 21000000.00, 21000000.00, date '2026-02-15') ) as x(request_no, account_code, item_name, quantity, unit_price, amount, needed_date) on pr.request_no = x.request_no and a.code = x.account_code where c.code = 'JH001'; insert into purchase_orders ( company_id, purchase_request_id, project_id, department_id, vendor_id, order_no, order_date, status, total_amount ) select c.id, pr.id, p.id, p.department_id, v.id, x.order_no, x.order_date, x.status, x.total_amount from companies c join purchase_requests pr on pr.company_id = c.id join projects p on p.id = pr.project_id join vendors v on v.id = pr.vendor_id join ( values ('PO-2026-0001', date '2026-01-15', 'issued', 38000000.00, 'PR-2026-0001'), ('PO-2026-0002', date '2026-02-10', 'received', 21000000.00, 'PR-2026-0002') ) as x(order_no, order_date, status, total_amount, request_no) on pr.request_no = x.request_no where c.code = 'JH001' on conflict (company_id, order_no) do nothing; insert into purchase_order_items ( purchase_order_id, account_id, item_name, quantity, unit_price, amount ) select po.id, a.id, x.item_name, x.quantity, x.unit_price, x.amount from purchase_orders po join companies c on c.id = po.company_id join accounts a on a.company_id = c.id join ( values ('PO-2026-0001', 'COST001', '철근 가공 외주', 1.0, 38000000.00, 38000000.00), ('PO-2026-0002', 'COST002', '철골 자재 구매', 1.0, 21000000.00, 21000000.00) ) as x(order_no, account_code, item_name, quantity, unit_price, amount) on po.order_no = x.order_no and a.code = x.account_code where c.code = 'JH001'; insert into invoices ( company_id, project_id, department_id, vendor_id, client_id, invoice_no, invoice_type, issue_date, due_date, supply_amount, tax_amount, total_amount, status ) select c.id, p.id, p.department_id, v.id, cl.id, x.invoice_no, x.invoice_type, x.issue_date, x.due_date, x.supply_amount, x.tax_amount, x.total_amount, x.status from companies c join projects p on p.company_id = c.id left join vendors v on v.company_id = c.id left join clients cl on cl.company_id = c.id join ( values ('INV-S-2026-0001', 'sales', date '2026-01-31', date '2026-02-28', 120000000.00, 12000000.00, 132000000.00, 'issued', 'PJT-2026-001', null, 'CL001'), ('INV-P-2026-0001', 'purchase', date '2026-01-25', date '2026-02-15', 38000000.00, 3800000.00, 41800000.00, 'paid', 'PJT-2026-001', 'VD001', null), ('INV-P-2026-0002', 'purchase', date '2026-02-18', date '2026-03-10', 21000000.00, 2100000.00, 23100000.00, 'paid', 'PJT-2026-002', 'VD002', null) ) as x( invoice_no, invoice_type, issue_date, due_date, supply_amount, tax_amount, total_amount, status, project_code, vendor_code, client_code ) on p.project_code = x.project_code and (v.code = x.vendor_code or x.vendor_code is null) and (cl.code = x.client_code or x.client_code is null) where c.code = 'JH001' on conflict (company_id, invoice_no) do nothing; insert into actual_transactions ( company_id, fiscal_year_id, project_id, department_id, account_id, vendor_id, client_id, employee_id, source_type, source_id, transaction_date, month_no, transaction_type, amount, description ) select c.id, fy.id, p.id, p.department_id, a.id, v.id, cl.id, e.id, x.source_type, null, x.transaction_date, extract(month from x.transaction_date)::integer, x.transaction_type, x.amount, x.description from companies c join fiscal_years fy on fy.company_id = c.id and fy.fiscal_year = 2026 join projects p on p.company_id = c.id join accounts a on a.company_id = c.id left join vendors v on v.company_id = c.id left join clients cl on cl.company_id = c.id left join employees e on e.company_id = c.id join ( values ('PJT-2026-001', 'REV001', date '2026-01-31', 'revenue', 118000000.00, 'invoice', '1월 기성매출 실적', null, 'CL001', 'E002'), ('PJT-2026-001', 'COST001', date '2026-01-25', 'cost', 38000000.00, 'purchase_order', '1월 외주비 실적', 'VD001', null, 'E005'), ('PJT-2026-001', 'COST002', date '2026-01-27', 'cost', 24000000.00, 'manual', '1월 자재비 실적', 'VD002', null, 'E005'), ('PJT-2026-001', 'EXP001', date '2026-01-31', 'expense', 7500000.00, 'manual', '1월 현장관리비', null, null, 'E005'), ('PJT-2026-001', 'REV001', date '2026-02-28', 'revenue', 126000000.00, 'invoice', '2월 기성매출 실적', null, 'CL001', 'E002'), ('PJT-2026-001', 'COST001', date '2026-02-26', 'cost', 47000000.00, 'manual', '2월 외주비 실적', 'VD001', null, 'E005'), ('PJT-2026-001', 'EXP001', date '2026-02-28', 'expense', 8100000.00, 'manual', '2월 현장관리비', null, null, 'E005'), ('PJT-2026-002', 'REV001', date '2026-02-28', 'revenue', 92000000.00, 'invoice', '2월 기성매출 실적', null, 'CL002', 'E002'), ('PJT-2026-002', 'COST001', date '2026-02-18', 'cost', 29500000.00, 'purchase_order', '2월 외주비 실적', 'VD001', null, 'E003'), ('PJT-2026-002', 'COST002', date '2026-02-20', 'cost', 21000000.00, 'invoice', '2월 자재비 실적', 'VD002', null, 'E003'), ('PJT-2026-002', 'EXP001', date '2026-02-28', 'expense', 5900000.00, 'manual', '2월 현장관리비', null, null, 'E003') ) as x( project_code, account_code, transaction_date, transaction_type, amount, source_type, description, vendor_code, client_code, employee_no ) on p.project_code = x.project_code and a.code = x.account_code and (v.code = x.vendor_code or x.vendor_code is null) and (cl.code = x.client_code or x.client_code is null) and (e.employee_no = x.employee_no or x.employee_no is null) where c.code = 'JH001'; insert into cashflow_transactions ( company_id, project_id, department_id, transaction_date, cashflow_type, amount, description ) select c.id, p.id, p.department_id, x.transaction_date, x.cashflow_type, x.amount, x.description from companies c join projects p on p.company_id = c.id join ( values ('PJT-2026-001', date '2026-02-05', 'inflow', 132000000.00, '1월 매출 입금'), ('PJT-2026-001', date '2026-02-15', 'outflow', 41800000.00, '외주비 지급'), ('PJT-2026-002', date '2026-03-12', 'outflow', 23100000.00, '자재비 지급') ) as x(project_code, transaction_date, cashflow_type, amount, description) on p.project_code = x.project_code where c.code = 'JH001'; insert into file_import_logs ( company_id, import_type, file_name, row_count, success_count, failure_count, imported_by, notes ) select c.id, 'budget', 'budget_2026_sample.xlsx', 15, 15, 0, e.id, '샘플 예산 데이터 적재' from companies c join employees e on e.company_id = c.id and e.employee_no = 'E004' where c.code = 'JH001';