generic
    Days_In_Week : Positive := 5;
    Hours_In_Day : Float := 8.0;
    Days_Off_In_Year : Natural := 0;

package Work_Calendar is
    subtype Year_Number is Integer range 1901 .. 2099;
    subtype Month_Number is Integer range 1 .. 12;
    subtype Day_Number is Integer range 1 .. 31;
    subtype Hour_Number is Float range 0.0 .. Hours_In_Day;

    type Date_Type is
        record
            Month : Month_Number;
            Day : Day_Number;
            Year : Year_Number;
        end record;

    Null_Date : constant Date_Type := (2, 31, 1902);
    Underflow_Date : constant Date_Type := (2, 30, 1901);

    function "+" (Date : in Date_Type; Hours : in Float) return Date_Type;
    function "+" (Hours : in Float; Date : in Date_Type) return Date_Type;
    function "-" (Date : in Date_Type; Hours : in Float) return Date_Type;
    function "-" (Date1, Date2 : in Date_Type) return Float;
    function "<" (Date1, Date2 : in Date_Type) return Boolean;
    function "<=" (Date1, Date2 : in Date_Type) return Boolean;
    function ">" (Date1, Date2 : in Date_Type) return Boolean;
    function ">=" (Date1, Date2 : in Date_Type) return Boolean;
    function Valid (Month, Day, Year : in Integer) return Boolean;
end Work_Calendar;