ifc_schedule/lib.rs
1//! `ifc-schedule` — construction scheduling as a **view** over the model.
2//!
3//! # This crate owns no data and starts no work
4//!
5//! It borrows a `&Model` and interprets the entities that happen to be
6//! scheduling entities. It does not run jobs, touch the wall clock, or decide
7//! what "now" is: a schedule in a file is authored intent, and this crate
8//! reports that intent exactly as stated.
9//!
10//! # What is read, and what is deliberately not computed
11//!
12//! Read: plans, schedules, tasks, task times, sequences with lag, calendars
13//! with recurrence patterns, events, and the orderings those imply.
14//!
15//! Not computed: dates, durations in real time, or the critical path. Every
16//! date in IFC is an ISO 8601 string and every duration an ISO 8601 duration;
17//! turning those into a timeline needs a date library and calendar expansion.
18//! This crate depends only on `ifc-model` and the `ifc-schema` release
19//! tables, so it returns the authored strings intact and leaves arithmetic to a caller who already has a date
20//! library and knows which calendar applies.
21//!
22//! What it does supply is the part that arithmetic needs and cannot recover on
23//! its own: the sequence graph, its cycles, and a deterministic execution
24//! order.
25//!
26//! # Modules
27//!
28//! | Module | Role |
29//! | --- | --- |
30//! | [`schedule`] | `IfcWorkPlan` and `IfcWorkSchedule` |
31//! | [`task`] | `IfcTask` and `IfcTaskTime` |
32//! | [`sequence`] | `IfcRelSequence`, lag, and cycle reporting |
33//! | [`calendar`] | `IfcWorkCalendar` and recurrence patterns |
34//! | [`event`] | `IfcEvent` and `IfcEventTime` |
35//! | [`query`] | Deterministic membership and ordering queries |
36//! | [`error`] | Contradictions a file can state |
37
38pub mod authoring;
39pub mod calendar;
40pub mod error;
41pub mod event;
42pub mod query;
43mod recurrence;
44mod release;
45pub mod schedule;
46pub mod sequence;
47
48pub use authoring::{
49 assign_tasks_to_control, assign_tasks_to_control_with_owner_history, create_event,
50 create_event_time, create_event_with_owner_history, create_lag_time, create_procedure,
51 create_procedure_with_owner_history, create_recurrence_pattern, create_sequence,
52 create_sequence_with_owner_history, create_task, create_task_time, create_task_time_recurring,
53 create_task_with_owner_history, create_time_period, create_work_calendar,
54 create_work_calendar_with_owner_history, create_work_control,
55 create_work_control_with_owner_history, create_work_time, nest_tasks,
56 nest_tasks_with_owner_history, EventDraft, EventTimeDraft, ProcedureDraft, RecurrenceDraft,
57 ScheduleAuthoringResult, TaskDraft, TaskTimeDraft, WorkControlDraft,
58};
59pub use calendar::{
60 work_calendars, Recurrence, RecurrenceType, WorkCalendar, WorkTime, WorkTimeRole,
61};
62pub use error::{SequenceCycle, TaskTimeAnomaly};
63pub use event::{events, Event, EventTime};
64/// The IFC release a schedule record is written against (re-exported from
65/// `ifc-schema`).
66pub use ifc_schema::SchemaVersion;
67pub use query::{end_tasks, execution_order, start_tasks, subtasks_of, tasks_of_schedule};
68pub use schedule::{work_plans, work_schedules, WorkControl, WorkControlKind};
69pub use sequence::{
70 downstream_of, find_cycle, predecessors_of, sequences, successors_of, Lag, Sequence,
71 SequenceType, MAX_SEQUENCE_DEPTH,
72};
73pub use task::{tasks, DurationType, Task, TaskTime};
74
75pub mod task;