-- =============================================================================
-- 勤怠休暇管理システム（サブシステム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
);


-- 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
);


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


-- 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)
);
