import * as z from "zod/v3";
import { ClosedEnum } from "../../types/enums.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { RFCDate } from "../../types/rfcdate.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import { Address, Address$Outbound } from "./address.js";
import { Currency } from "./currency.js";
import { CustomField, CustomField$Outbound } from "./customfield.js";
import { LinkedCustomer } from "./linkedcustomer.js";
import { LinkedCustomerInput, LinkedCustomerInput$Outbound } from "./linkedcustomerinput.js";
import { LinkedTaxRate } from "./linkedtaxrate.js";
import { LinkedTaxRateInput, LinkedTaxRateInput$Outbound } from "./linkedtaxrateinput.js";
import { LinkedTrackingCategory, LinkedTrackingCategory$Outbound } from "./linkedtrackingcategory.js";
/**
 * Current status of the project
 */
export declare const ProjectProjectStatus: {
    readonly Active: "active";
    readonly Completed: "completed";
    readonly OnHold: "on_hold";
    readonly Cancelled: "cancelled";
    readonly Draft: "draft";
    readonly InProgress: "in_progress";
    readonly Approved: "approved";
    readonly Other: "other";
};
/**
 * Current status of the project
 */
export type ProjectProjectStatus = ClosedEnum<typeof ProjectProjectStatus>;
/**
 * Type or category of the project
 */
export declare const ProjectType: {
    readonly ClientProject: "client_project";
    readonly InternalProject: "internal_project";
    readonly Maintenance: "maintenance";
    readonly ResearchDevelopment: "research_development";
    readonly Training: "training";
    readonly Other: "other";
};
/**
 * Type or category of the project
 */
export type ProjectType = ClosedEnum<typeof ProjectType>;
/**
 * Priority level of the project
 */
export declare const Priority: {
    readonly Low: "low";
    readonly Medium: "medium";
    readonly High: "high";
    readonly Critical: "critical";
};
/**
 * Priority level of the project
 */
export type Priority = ClosedEnum<typeof Priority>;
/**
 * Department or organizational unit associated with the project
 */
export type ProjectDepartment = {
    /**
     * Unique identifier for the department
     */
    id?: string | undefined;
    /**
     * Name of the department
     */
    name?: string | undefined;
};
/**
 * Parent project if this is a subproject
 */
export type ParentProject = {
    /**
     * Unique identifier for the parent project
     */
    id?: string | undefined;
    /**
     * Name of the parent project
     */
    name?: string | undefined;
};
/**
 * Method used for billing this project
 */
export declare const BillingMethod: {
    readonly FixedPrice: "fixed_price";
    readonly TimeAndMaterials: "time_and_materials";
    readonly MilestoneBased: "milestone_based";
    readonly Retainer: "retainer";
    readonly NonBillable: "non_billable";
};
/**
 * Method used for billing this project
 */
export type BillingMethod = ClosedEnum<typeof BillingMethod>;
/**
 * Current phase of the project lifecycle
 */
export declare const ProjectPhase: {
    readonly Initiation: "initiation";
    readonly Planning: "planning";
    readonly Execution: "execution";
    readonly Monitoring: "monitoring";
    readonly Closure: "closure";
    readonly Other: "other";
};
/**
 * Current phase of the project lifecycle
 */
export type ProjectPhase = ClosedEnum<typeof ProjectPhase>;
/**
 * Current status of project schedule compared to plan
 */
export declare const ScheduleStatus: {
    readonly AheadOfSchedule: "ahead_of_schedule";
    readonly OnSchedule: "on_schedule";
    readonly BehindSchedule: "behind_schedule";
    readonly CriticalDelay: "critical_delay";
};
/**
 * Current status of project schedule compared to plan
 */
export type ScheduleStatus = ClosedEnum<typeof ScheduleStatus>;
export type Project = {
    /**
     * A unique identifier for an object.
     */
    id?: string | undefined;
    /**
     * The third-party API ID of original entity
     */
    downstreamId?: string | null | undefined;
    /**
     * Name of the project
     */
    name: string;
    /**
     * User-friendly project identifier
     */
    displayId?: string | null | undefined;
    /**
     * External reference identifier for the project
     */
    referenceId?: string | null | undefined;
    /**
     * Detailed description of the project
     */
    description?: string | null | undefined;
    /**
     * Current status of the project
     */
    status?: ProjectProjectStatus | null | undefined;
    /**
     * Indicates whether the project is currently active or inactive
     */
    active?: boolean | null | undefined;
    /**
     * Type or category of the project
     */
    projectType?: ProjectType | null | undefined;
    /**
     * Priority level of the project
     */
    priority?: Priority | null | undefined;
    /**
     * Percentage of project completion (0-100)
     */
    completionPercentage?: number | null | undefined;
    /**
     * Start date of the project
     */
    startDate?: RFCDate | null | undefined;
    /**
     * Expected or actual end date of the project
     */
    endDate?: RFCDate | null | undefined;
    /**
     * The customer this entity is linked to.
     */
    customer?: LinkedCustomer | null | undefined;
    /**
     * Department or organizational unit associated with the project
     */
    department?: ProjectDepartment | null | undefined;
    /**
     * The company ID the transaction belongs to
     */
    companyId?: string | null | undefined;
    /**
     * ID of the user who owns/manages this project
     */
    ownerId?: string | null | undefined;
    /**
     * Parent project if this is a subproject
     */
    parentProject?: ParentProject | null | undefined;
    /**
     * Indicates the associated currency for an amount of money. Values correspond to [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
     */
    currency?: Currency | null | undefined;
    /**
     * Total budgeted amount for the project
     */
    budgetAmount?: number | null | undefined;
    /**
     * Approved budget amount for the project
     */
    approvedAmount?: number | null | undefined;
    /**
     * Total actual amount spent on the project
     */
    actualAmount?: number | null | undefined;
    /**
     * Total budgeted hours for the project
     */
    budgetHours?: number | null | undefined;
    /**
     * Total actual hours worked on the project
     */
    actualHours?: number | null | undefined;
    /**
     * Default hourly rate for project work
     */
    hourlyRate?: number | null | undefined;
    /**
     * Method used for billing this project
     */
    billingMethod?: BillingMethod | null | undefined;
    /**
     * Indicates if the project is billable to the customer
     */
    isBillable?: boolean | null | undefined;
    /**
     * Current phase of the project lifecycle
     */
    phase?: ProjectPhase | null | undefined;
    taxRate?: LinkedTaxRate | undefined;
    /**
     * A list of linked tracking categories.
     */
    trackingCategories?: Array<LinkedTrackingCategory | null> | null | undefined;
    /**
     * Tags associated with the project
     */
    tags?: Array<string> | undefined;
    /**
     * Additional notes about the project
     */
    notes?: string | null | undefined;
    /**
     * Contract or agreement number associated with the project
     */
    contractNumber?: string | null | undefined;
    /**
     * Expected profit margin percentage for the project
     */
    profitMargin?: number | null | undefined;
    /**
     * Current status of project schedule compared to plan
     */
    scheduleStatus?: ScheduleStatus | null | undefined;
    /**
     * An array of addresses associated with the project (billing, job site, etc.)
     */
    addresses?: Array<Address> | undefined;
    /**
     * Number of team members assigned to the project
     */
    teamSize?: number | null | undefined;
    customFields?: Array<CustomField> | undefined;
    /**
     * A binary value used to detect updates to a object and prevent data conflicts. It is incremented each time an update is made to the object.
     */
    rowVersion?: string | null | undefined;
    /**
     * The user who last updated the object.
     */
    updatedBy?: string | null | undefined;
    /**
     * The user who created the object.
     */
    createdBy?: string | null | undefined;
    /**
     * The date and time when the object was created.
     */
    createdAt?: Date | null | undefined;
    /**
     * The date and time when the object was last updated.
     */
    updatedAt?: Date | null | undefined;
};
export type ProjectInput = {
    /**
     * Name of the project
     */
    name: string;
    /**
     * User-friendly project identifier
     */
    displayId?: string | null | undefined;
    /**
     * External reference identifier for the project
     */
    referenceId?: string | null | undefined;
    /**
     * Detailed description of the project
     */
    description?: string | null | undefined;
    /**
     * Current status of the project
     */
    status?: ProjectProjectStatus | null | undefined;
    /**
     * Indicates whether the project is currently active or inactive
     */
    active?: boolean | null | undefined;
    /**
     * Type or category of the project
     */
    projectType?: ProjectType | null | undefined;
    /**
     * Priority level of the project
     */
    priority?: Priority | null | undefined;
    /**
     * Percentage of project completion (0-100)
     */
    completionPercentage?: number | null | undefined;
    /**
     * Start date of the project
     */
    startDate?: RFCDate | null | undefined;
    /**
     * Expected or actual end date of the project
     */
    endDate?: RFCDate | null | undefined;
    /**
     * The customer this entity is linked to.
     */
    customer?: LinkedCustomerInput | null | undefined;
    /**
     * Department or organizational unit associated with the project
     */
    department?: ProjectDepartment | null | undefined;
    /**
     * The company ID the transaction belongs to
     */
    companyId?: string | null | undefined;
    /**
     * ID of the user who owns/manages this project
     */
    ownerId?: string | null | undefined;
    /**
     * Parent project if this is a subproject
     */
    parentProject?: ParentProject | null | undefined;
    /**
     * Indicates the associated currency for an amount of money. Values correspond to [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).
     */
    currency?: Currency | null | undefined;
    /**
     * Total budgeted amount for the project
     */
    budgetAmount?: number | null | undefined;
    /**
     * Approved budget amount for the project
     */
    approvedAmount?: number | null | undefined;
    /**
     * Total budgeted hours for the project
     */
    budgetHours?: number | null | undefined;
    /**
     * Default hourly rate for project work
     */
    hourlyRate?: number | null | undefined;
    /**
     * Method used for billing this project
     */
    billingMethod?: BillingMethod | null | undefined;
    /**
     * Indicates if the project is billable to the customer
     */
    isBillable?: boolean | null | undefined;
    /**
     * Current phase of the project lifecycle
     */
    phase?: ProjectPhase | null | undefined;
    taxRate?: LinkedTaxRateInput | undefined;
    /**
     * A list of linked tracking categories.
     */
    trackingCategories?: Array<LinkedTrackingCategory | null> | null | undefined;
    /**
     * Tags associated with the project
     */
    tags?: Array<string> | undefined;
    /**
     * Additional notes about the project
     */
    notes?: string | null | undefined;
    /**
     * Contract or agreement number associated with the project
     */
    contractNumber?: string | null | undefined;
    /**
     * Expected profit margin percentage for the project
     */
    profitMargin?: number | null | undefined;
    /**
     * Current status of project schedule compared to plan
     */
    scheduleStatus?: ScheduleStatus | null | undefined;
    /**
     * An array of addresses associated with the project (billing, job site, etc.)
     */
    addresses?: Array<Address> | undefined;
    /**
     * Number of team members assigned to the project
     */
    teamSize?: number | null | undefined;
    customFields?: Array<CustomField> | undefined;
    /**
     * A binary value used to detect updates to a object and prevent data conflicts. It is incremented each time an update is made to the object.
     */
    rowVersion?: string | null | undefined;
};
/** @internal */
export declare const ProjectProjectStatus$inboundSchema: z.ZodNativeEnum<typeof ProjectProjectStatus>;
/** @internal */
export declare const ProjectProjectStatus$outboundSchema: z.ZodNativeEnum<typeof ProjectProjectStatus>;
/** @internal */
export declare const ProjectType$inboundSchema: z.ZodNativeEnum<typeof ProjectType>;
/** @internal */
export declare const ProjectType$outboundSchema: z.ZodNativeEnum<typeof ProjectType>;
/** @internal */
export declare const Priority$inboundSchema: z.ZodNativeEnum<typeof Priority>;
/** @internal */
export declare const Priority$outboundSchema: z.ZodNativeEnum<typeof Priority>;
/** @internal */
export declare const ProjectDepartment$inboundSchema: z.ZodType<ProjectDepartment, z.ZodTypeDef, unknown>;
/** @internal */
export type ProjectDepartment$Outbound = {
    id?: string | undefined;
    name?: string | undefined;
};
/** @internal */
export declare const ProjectDepartment$outboundSchema: z.ZodType<ProjectDepartment$Outbound, z.ZodTypeDef, ProjectDepartment>;
export declare function projectDepartmentToJSON(projectDepartment: ProjectDepartment): string;
export declare function projectDepartmentFromJSON(jsonString: string): SafeParseResult<ProjectDepartment, SDKValidationError>;
/** @internal */
export declare const ParentProject$inboundSchema: z.ZodType<ParentProject, z.ZodTypeDef, unknown>;
/** @internal */
export type ParentProject$Outbound = {
    id?: string | undefined;
    name?: string | undefined;
};
/** @internal */
export declare const ParentProject$outboundSchema: z.ZodType<ParentProject$Outbound, z.ZodTypeDef, ParentProject>;
export declare function parentProjectToJSON(parentProject: ParentProject): string;
export declare function parentProjectFromJSON(jsonString: string): SafeParseResult<ParentProject, SDKValidationError>;
/** @internal */
export declare const BillingMethod$inboundSchema: z.ZodNativeEnum<typeof BillingMethod>;
/** @internal */
export declare const BillingMethod$outboundSchema: z.ZodNativeEnum<typeof BillingMethod>;
/** @internal */
export declare const ProjectPhase$inboundSchema: z.ZodNativeEnum<typeof ProjectPhase>;
/** @internal */
export declare const ProjectPhase$outboundSchema: z.ZodNativeEnum<typeof ProjectPhase>;
/** @internal */
export declare const ScheduleStatus$inboundSchema: z.ZodNativeEnum<typeof ScheduleStatus>;
/** @internal */
export declare const ScheduleStatus$outboundSchema: z.ZodNativeEnum<typeof ScheduleStatus>;
/** @internal */
export declare const Project$inboundSchema: z.ZodType<Project, z.ZodTypeDef, unknown>;
export declare function projectFromJSON(jsonString: string): SafeParseResult<Project, SDKValidationError>;
/** @internal */
export type ProjectInput$Outbound = {
    name: string;
    display_id?: string | null | undefined;
    reference_id?: string | null | undefined;
    description?: string | null | undefined;
    status?: string | null | undefined;
    active?: boolean | null | undefined;
    project_type?: string | null | undefined;
    priority?: string | null | undefined;
    completion_percentage?: number | null | undefined;
    start_date?: string | null | undefined;
    end_date?: string | null | undefined;
    customer?: LinkedCustomerInput$Outbound | null | undefined;
    department?: ProjectDepartment$Outbound | null | undefined;
    company_id?: string | null | undefined;
    owner_id?: string | null | undefined;
    parent_project?: ParentProject$Outbound | null | undefined;
    currency?: string | null | undefined;
    budget_amount?: number | null | undefined;
    approved_amount?: number | null | undefined;
    budget_hours?: number | null | undefined;
    hourly_rate?: number | null | undefined;
    billing_method?: string | null | undefined;
    is_billable: boolean | null;
    phase?: string | null | undefined;
    tax_rate?: LinkedTaxRateInput$Outbound | undefined;
    tracking_categories?: Array<LinkedTrackingCategory$Outbound | null> | null | undefined;
    tags?: Array<string> | undefined;
    notes?: string | null | undefined;
    contract_number?: string | null | undefined;
    profit_margin?: number | null | undefined;
    schedule_status?: string | null | undefined;
    addresses?: Array<Address$Outbound> | undefined;
    team_size?: number | null | undefined;
    custom_fields?: Array<CustomField$Outbound> | undefined;
    row_version?: string | null | undefined;
};
/** @internal */
export declare const ProjectInput$outboundSchema: z.ZodType<ProjectInput$Outbound, z.ZodTypeDef, ProjectInput>;
export declare function projectInputToJSON(projectInput: ProjectInput): string;
//# sourceMappingURL=project.d.ts.map