1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//! Slot
//!
//! URL: http://hl7.org/fhir/StructureDefinition/Slot
//!
//! Version: 5.0.0
//!
//! Slot Resource: A slot of time on a schedule that may be available for booking appointments.
//!
//! FHIR: <https://build.fhir.org/>
//!
//! UML: <https://build.fhir.org/uml.html>
// Allow unused crate::r5::types as types;
#![allow(unused_imports)]
use crate::r5::types;
use ::serde::{Deserialize, Serialize};
use fhir_derive_macros::Validate;
/// Slot represents a single, discrete interval of time on a Schedule that may be
/// available for booking appointments. In the FHIR R5 scheduling workflow, a
/// Schedule defines the overall availability of a resource such as a practitioner,
/// device, room, or healthcare service over a planning horizon, and that horizon
/// is subdivided into Slot instances that each carry a precise start and end
/// instant along with a status such as `free`, `busy`, `busy-unavailable`,
/// `busy-tentative`, or `entered-in-error`. Scheduling and patient-access systems
/// query these slots to present bookable openings, and an Appointment is created
/// against one or more free slots, at which point their status is typically
/// updated to reflect the reservation. A slot may further narrow what can be
/// booked by describing the service category, service type, specialty, and
/// appointment type, and it may be flagged as overbooked when demand exceeds the
/// nominal capacity of the interval.
///
/// # Related resources
///
/// A slot is owned by a [`Schedule`](crate::r5::resources::schedule::Schedule) via
/// its `schedule` reference, and it is consumed when creating an
/// [`Appointment`](crate::r5::resources::appointment::Appointment). Its
/// classification fields are typed as
/// [`CodeableConcept`](crate::r5::types::CodeableConcept).
///
/// # Examples
///
/// ```
/// use fhir::r5::resources::slot::Slot;
///
/// let value = Slot::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: Slot = ::serde_json::from_value(json).unwrap();
/// assert_eq!(value, back);
/// ```
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct Slot {
/// Logical id of this artifact
pub id: Option<types::String>,
/// Metadata about the resource
pub meta: Option<types::Meta>,
/// A set of rules under which this content was created
pub implicit_rules: Option<types::Uri>,
/// Language of the resource content
pub language: Option<types::Code>,
/// Text summary of the resource, for human interpretation
pub text: Option<types::Narrative>,
/// Contained, inline Resources
pub contained: Option<Vec<::serde_json::Value>>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored
pub modifier_extension: Option<Vec<types::Extension>>,
/// External Ids for this item
pub identifier: Option<Vec<types::Identifier>>,
/// A broad categorization of the service that is to be performed during this appointment
pub service_category: Option<Vec<types::CodeableConcept>>,
/// The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the Schedule resource
pub service_type: Option<Vec<types::CodeableReference>>,
/// The specialty of a practitioner that would be required to perform the service requested in this appointment
pub specialty: Option<Vec<types::CodeableConcept>>,
/// The style of appointment or patient that may be booked in the slot (not service type)
pub appointment_type: Option<Vec<types::CodeableConcept>>,
/// Reference to the Schedule resource that this slot subdivides and reports availability for; this reference is required
pub schedule: types::Reference,
/// Availability status of the interval: busy | free | busy-unavailable | busy-tentative | entered-in-error
pub status: types::Code,
/// The instant, including date, time, and timezone offset, at which this slot's interval begins
pub start: types::Instant,
/// The instant, including date, time, and timezone offset, at which this slot's interval concludes
pub end: types::Instant,
/// This slot has already been overbooked, appointments are unlikely to be accepted for this time
pub overbooked: Option<types::Boolean>,
/// Comments on the slot to describe any extended information. Such as custom constraints on the slot
pub comment: Option<types::String>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = Slot;
#[test]
fn test_default() {
let _ = T::default();
}
#[test]
fn test_serde_round_trip() {
let value = T::default();
let json = ::serde_json::to_value(&value).expect("to_value");
let back: T = ::serde_json::from_value(json).expect("from_value");
assert_eq!(value, back);
}
}