diff --git a/docs/cli/indicators/R/055.md b/docs/cli/indicators/R/055.md
new file mode 100644
index 0000000..33f822d
--- /dev/null
+++ b/docs/cli/indicators/R/055.md
@@ -0,0 +1,60 @@
+# TODO The title of the indicator (R055)
+
+TODO A one-sentence description of the indicator.
+
+## Methodology
+
+TODO
+
+:::{admonition} Example
+:class: seealso
+
+TODO
+:::
+
+:::{admonition} Why is this a red flag?
+:class: hint
+
+TODO
+:::
+
+Based on "TODO" in [*TODO*](TODO).
+
+## Output
+
+The indicator's value is TODO.
+
+## Configuration
+
+All configuration is optional. To override the default TODO:
+
+```ini
+[R055]
+TODO
+```
+
+## Exclusions
+
+A contracting process is excluded if:
+
+- TODO
+
+## Assumptions
+
+TODO
+
+## Demonstration
+
+*Input*
+
+:::{literalinclude} ../../../examples/R/055.jsonl
+:language: json
+:::
+
+*Output*
+
+```console
+$ ocdscardinal indicators --settings docs/examples/settings.ini --no-meta docs/examples/R/055.jsonl
+{}
+
+```
diff --git a/docs/cli/init.md b/docs/cli/init.md
index 1156fd2..c2a2c3f 100644
--- a/docs/cli/init.md
+++ b/docs/cli/init.md
@@ -118,6 +118,11 @@ $ ocdscardinal init -
; threshold = 10
; minimum_contracting_processes = 20
+[R055]
+; threshold = 66593
+; start_date = 2022-01-01
+; end_date = 2022-12-31
+
[R058]
; threshold = 0.5
diff --git a/docs/examples/R/055.jsonl b/docs/examples/R/055.jsonl
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/docs/examples/R/055.jsonl
@@ -0,0 +1 @@
+{}
diff --git a/docs/examples/settings.ini b/docs/examples/settings.ini
index fb1867d..517cfb6 100644
--- a/docs/examples/settings.ini
+++ b/docs/examples/settings.ini
@@ -8,4 +8,5 @@
[R036]
[R038]
[R048]
+[R055]
[R058]
diff --git a/src/indicators/mod.rs b/src/indicators/mod.rs
index 3a7836e..95cd3c1 100644
--- a/src/indicators/mod.rs
+++ b/src/indicators/mod.rs
@@ -8,15 +8,17 @@ pub mod r035;
pub mod r036;
pub mod r038;
pub mod r048;
+pub mod r055;
pub mod r058;
pub mod util;
use std::collections::{HashMap, HashSet};
use std::ops::AddAssign;
+use chrono::NaiveDate;
use indexmap::IndexMap;
use serde::ser::SerializeMap;
-use serde::{Deserialize, Serialize, Serializer};
+use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
use serde_json::{Map, Value};
// Settings.
@@ -119,6 +121,32 @@ pub struct R048 {
pub minimum_contracting_processes: Option,
}
+#[derive(Clone, Debug, Default, Deserialize)]
+#[serde(deny_unknown_fields)]
+pub struct R055 {
+ pub threshold: Option,
+ #[serde(deserialize_with = "naive_date_from_str")]
+ pub start_date: Option,
+ #[serde(deserialize_with = "naive_date_from_str")]
+ pub end_date: Option,
+}
+
+// https://serde.rs/field-attrs.html#deserialize_with
+fn naive_date_from_str<'de, D>(deserializer: D) -> Result