-- =============================================================================
-- 勤怠休暇管理システム（サブシステムA）DBスキーマ
-- 対象DB2: DB2 for z/OS
-- ローカル開発: SQLite（型宣言はDB2準拠、SQLiteが許容する範囲で記述）
-- =============================================================================

-- 1. EMP_MASTER（社員マスタ）
-- 全社員の基本情報。サブシステムAでは参照のみ。
CREATE TABLE EMP_MASTER (
    EMP_ID    CHAR(8)    NOT NULL PRIMARY KEY,
    DEPT_ID   CHAR(4)    NOT NULL,
    EMP_NAME  VARCHAR(50) NOT NULL,
    STATUS    CHAR(1)    NOT NULL
);

INSERT INTO EMP_MASTER VALUES ('EMP00001', 'D001', '山田太郎', '1');
INSERT INTO EMP_MASTER VALUES ('EMP00002', 'D002', '鈴木花子', '1');
INSERT INTO EMP_MASTER VALUES ('EMP00009', 'D003', '佐藤健一', '9');
INSERT INTO EMP_MASTER VALUES ('EMP00010', 'D001', '田中実',   '1');

-- 2. LEAVE_RECORDS（休暇申請記録）
-- 休暇申請の生データ。取消はDELETEで物理削除。
CREATE TABLE LEAVE_RECORDS (
    APPLICATION_ID INTEGER    NOT NULL PRIMARY KEY,
    EMP_ID         CHAR(8)    NOT NULL,
    LEAVE_TYPE     CHAR(2)    NOT NULL,
    START_DATE     CHAR(8)    NOT NULL,
    START_TIME     CHAR(4)    NOT NULL,
    END_DATE       CHAR(8)    NOT NULL,
    END_TIME       CHAR(4)    NOT NULL,
    STATUS         CHAR(1)    NOT NULL
);

INSERT INTO LEAVE_RECORDS VALUES (1, 'EMP00001', '01', '20260615', '0900', '20260616', '1800', '1');
INSERT INTO LEAVE_RECORDS VALUES (2, 'EMP00002', '02', '20260617', '0900', '20260617', '1200', '1');
INSERT INTO LEAVE_RECORDS VALUES (3, 'EMP00001', '04', '20260620', '0900', '20260620', '1800', '9');

-- 3. HOLIDAY_CALENDAR（休日カレンダー）
-- 祝日のみ列挙。土日は曜日判定で処理。
CREATE TABLE HOLIDAY_CALENDAR (
    HOLIDAY_DATE  CHAR(8)     NOT NULL PRIMARY KEY,
    DESCRIPTION   VARCHAR(50)
);

INSERT INTO HOLIDAY_CALENDAR VALUES ('20260101', '元日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260112', '成人の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260211', '建国記念の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260320', '春分の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260429', '昭和の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260503', '憲法記念日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260504', 'みどりの日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260505', 'こどもの日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260720', '海の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260811', '山の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260921', '敬老の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260922', '国民の休日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260923', '秋分の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20261012', '体育の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20261103', '文化の日');
INSERT INTO HOLIDAY_CALENDAR VALUES ('20261123', '勤労感謝の日');

-- 4. SICK_LEAVE_RATE（病欠控除率）
-- 全社員共通の病欠控除率。
CREATE TABLE SICK_LEAVE_RATE (
    LEAVE_TYPE      CHAR(2)      NOT NULL PRIMARY KEY,
    DEDUCTION_RATE  DECIMAL(3,2) NOT NULL
);

-- 5. DAILY_RECORDS（日別勤怠記録）
-- 1社員1日の勤怠情報。出勤日のみレコード存在。
CREATE TABLE DAILY_RECORDS (
    EMP_ID               CHAR(8)      NOT NULL,
    TARGET_DATE          CHAR(8)      NOT NULL,
    TIME_IN              CHAR(4)      NOT NULL,
    TIME_OUT             CHAR(4)      NOT NULL,
    ANNUAL_LEAVE_H       DECIMAL(6,1) NOT NULL,
    PERSONAL_LEAVE_H     DECIMAL(6,1) NOT NULL,
    OFFICIAL_LEAVE_H     DECIMAL(6,1) NOT NULL,
    SICK_LEAVE_H         DECIMAL(6,1) NOT NULL,
    UNAPPROVED_ABSENT_H  DECIMAL(6,1) NOT NULL,
    UPDATED_AT           TIMESTAMP    NOT NULL,
    PRIMARY KEY (EMP_ID, TARGET_DATE)
);

-- 6. MONTHLY_ABSENCE（月次統計）
-- DAILY_RECORDSの月次集計サマリ。
CREATE TABLE MONTHLY_ABSENCE (
    EMP_ID               CHAR(8)      NOT NULL,
    YEAR_MONTH           CHAR(6)      NOT NULL,
    ANNUAL_LEAVE_H       DECIMAL(6,1) NOT NULL,
    PERSONAL_LEAVE_H     DECIMAL(6,1) NOT NULL,
    OFFICIAL_LEAVE_H     DECIMAL(6,1) NOT NULL,
    SICK_LEAVE_H         DECIMAL(6,1) NOT NULL,
    UNAPPROVED_ABSENT_H  DECIMAL(6,1) NOT NULL,
    UPDATED_AT           TIMESTAMP    NOT NULL,
    PRIMARY KEY (EMP_ID, YEAR_MONTH)
);
