Initial commit: Organized PTC project structure with .gitignore and README
This commit is contained in:
584
db/seed.sql
Normal file
584
db/seed.sql
Normal file
@@ -0,0 +1,584 @@
|
||||
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';
|
||||
Reference in New Issue
Block a user