Liking cljdoc? Tell your friends :D

urpx.coerce

Coerce raw URPX parser output into typed Clojure values.

The parser (urpx.core/load-rate-plan) produces a Clojure map with namespaced keys but all-string leaf values. This namespace applies the :decode/urpx-jsonld decoders attached to urpx.schema schemas to convert those strings into BigDecimals, LocalDates, LocalTimes, LocalDateTimes, Durations, and integer month numbers — and to normalize fields that URPX permits as either a single map or a vector of maps.

Coerce raw URPX parser output into typed Clojure values.

The parser (`urpx.core/load-rate-plan`) produces a Clojure map with
namespaced keys but all-string leaf values. This namespace applies the
`:decode/urpx-jsonld` decoders attached to `urpx.schema` schemas to convert
those strings into BigDecimals, LocalDates, LocalTimes, LocalDateTimes,
Durations, and integer month numbers — and to normalize fields that URPX
permits as either a single map or a vector of maps.
raw docstring

check-coerced!clj

(check-coerced! documents who)

Throw unless every document in documents has been coerced.

who names the calling operation in the message. Reading an uncoerced document does not fail loudly on its own: dates stay strings, so anything that compares them throws deep inside, and anything that does NOT compare them quietly answers a different question. urpx.arrangements/arrangements returned 202 pairs instead of 144 that way, a plausible number rather than a refusal.

Throw unless every document in `documents` has been coerced.

`who` names the calling operation in the message. Reading an uncoerced
document does not fail loudly on its own: dates stay strings, so anything
that compares them throws deep inside, and anything that does NOT compare
them quietly answers a different question. `urpx.arrangements/arrangements`
returned 202 pairs instead of 144 that way, a plausible number rather than a
refusal.
raw docstring

coerceclj

(coerce schema raw)

Decode a raw value against schema using the URPX JSON-LD transformer. Returns the typed value. Use validate afterwards if you want a strict check.

Decode a raw value against `schema` using the URPX JSON-LD transformer.
Returns the typed value. Use `validate` afterwards if you want a strict check.
raw docstring

coerce-docclj

(coerce-doc raw)

Dispatch on the document's :jsonld/type and coerce as a RatePlan, RatePlanModifier, wrapper (urpx:URPXDocument in v0.2.x, urpx:URPXPackage from v0.3.0 on), or a top-level version snapshot (urpx:RatePlanVersion / urpx:RatePlanModifierVersion, which v0.5.1 documents may carry as siblings of the identity entity rather than nested inside it). Returns nil for unknown types.

Dispatch on the document's :jsonld/type and coerce as a RatePlan,
RatePlanModifier, wrapper (urpx:URPXDocument in v0.2.x, urpx:URPXPackage
from v0.3.0 on), or a top-level version snapshot (urpx:RatePlanVersion /
urpx:RatePlanModifierVersion, which v0.5.1 documents may carry as siblings
of the identity entity rather than nested inside it). Returns nil for
unknown types.
raw docstring

coerce-rate-planclj

(coerce-rate-plan raw)

Coerce a raw parsed URPX rate plan into the typed shape described by urpx.schema/RatePlan.

Coerce a raw parsed URPX rate plan into the typed shape described by
`urpx.schema/RatePlan`.
raw docstring

coerce-rate-plan-modifierclj

(coerce-rate-plan-modifier raw)

Coerce a raw parsed URPX rate plan modifier into the typed shape described by urpx.schema/RatePlanModifier. Modifier docs (EEC, NSE, HRA fixtures) augment or override parts of an existing RatePlan; price resolution against a modifier alone is not (yet) supported.

Coerce a raw parsed URPX rate plan modifier into the typed shape described
by `urpx.schema/RatePlanModifier`. Modifier docs (EEC, NSE, HRA fixtures)
augment or override parts of an existing RatePlan; price resolution against
a modifier alone is not (yet) supported.
raw docstring

coerce-rate-plan-modifier-versionclj

(coerce-rate-plan-modifier-version raw)

Coerce a raw top-level urpx:RatePlanModifierVersion snapshot. Parallel to coerce-rate-plan-version; the back pointer is urpx:forRatePlanModifier.

Coerce a raw top-level urpx:RatePlanModifierVersion snapshot. Parallel to
`coerce-rate-plan-version`; the back pointer is urpx:forRatePlanModifier.
raw docstring

coerce-rate-plan-versionclj

(coerce-rate-plan-version raw)

Coerce a raw top-level urpx:RatePlanVersion snapshot. v0.5.1 documents may carry the version as a sibling of the identity RatePlan rather than nested inside it; urpx.index/versions-by-plan finds it via urpx:forRatePlan.

Coerce a raw top-level urpx:RatePlanVersion snapshot. v0.5.1 documents may
carry the version as a sibling of the identity RatePlan rather than nested
inside it; `urpx.index/versions-by-plan` finds it via urpx:forRatePlan.
raw docstring

coerce-urpx-documentclj

(coerce-urpx-document raw)

Coerce a raw parsed URPX document wrapper into the typed shape described by urpx.schema/URPXDocument. Validates the document-level metadata (urpx:targetURPXVersion, dates, version, …) — inner urpx:hasRatePlan / urpx:hasRatePlanModifier payloads are passed through as raw maps and should be coerced + validated against their own schemas separately.

Coerce a raw parsed URPX document wrapper into the typed shape described
by `urpx.schema/URPXDocument`. Validates the document-level metadata
(urpx:targetURPXVersion, dates, version, …) — inner urpx:hasRatePlan /
urpx:hasRatePlanModifier payloads are passed through as raw maps and
should be coerced + validated against their own schemas separately.
raw docstring

coerce-urpx-packageclj

(coerce-urpx-package raw)

Coerce a raw parsed URPX package wrapper into the typed shape described by urpx.schema/URPXPackage, the v0.3.0 rename of urpx:URPXDocument. Same wrapper-level contract as coerce-urpx-document: inner payloads (urpx:hasRatePlan / urpx:hasRatePlanModifier / urpx:packages) pass through as raw maps and should be coerced against their own schemas separately.

Coerce a raw parsed URPX package wrapper into the typed shape described by
`urpx.schema/URPXPackage`, the v0.3.0 rename of urpx:URPXDocument. Same
wrapper-level contract as `coerce-urpx-document`: inner payloads
(urpx:hasRatePlan / urpx:hasRatePlanModifier / urpx:packages) pass through
as raw maps and should be coerced against their own schemas separately.
raw docstring

encodeclj

(encode schema typed)

Encode a typed value against schema using the URPX JSON-LD transformer. Inverse of coerce — turns BigDecimal/LocalDate/etc. back into the JSON-LD string forms for the write side. Schemas without an :encode/urpx-jsonld property pass values through unchanged (:default-encoder identity).

Encode a typed value against `schema` using the URPX JSON-LD transformer.
Inverse of `coerce` — turns BigDecimal/LocalDate/etc. back into the JSON-LD
string forms for the write side. Schemas without an :encode/urpx-jsonld
property pass values through unchanged (`:default-encoder identity`).
raw docstring

explainclj

(explain schema value)

Return a Malli explanation for why value does not validate against schema, or nil if it does.

Return a Malli explanation for why `value` does not validate against `schema`,
or nil if it does.
raw docstring

temporal-signatureclj

(temporal-signature doc)

Walk doc and report what temporal literals it carries: {:times #{} :dates #{} :date-times #{} :date-shaped-strings n}.

By java.time TYPE rather than by property name, deliberately. A name list would have to be kept in step with the vocabulary, and the one it missed would be a missing value rather than a loud failure.

THE ONE IMPLEMENTATION of this walk. urpx.schedule harvests boundary candidates from it and urpx.arrangements uses it only to tell a coerced document from an uncoerced one; two copies of the test is two chances to disagree about what "coerced" means.

Walk `doc` and report what temporal literals it carries:
`{:times #{} :dates #{} :date-times #{} :date-shaped-strings n}`.

By java.time TYPE rather than by property name, deliberately. A name list
would have to be kept in step with the vocabulary, and the one it missed
would be a missing value rather than a loud failure.

THE ONE IMPLEMENTATION of this walk. `urpx.schedule` harvests boundary
candidates from it and `urpx.arrangements` uses it only to tell a coerced
document from an uncoerced one; two copies of the test is two chances to
disagree about what "coerced" means.
raw docstring

uncoerced?clj

(uncoerced? doc)

True if doc has the SIGNATURE of a document that was never coerced: it carries date-shaped strings and no java.time values anywhere at all.

It is NOT enough that a date-shaped string exists. urpx:version is rdfs:range xsd:string and every filing in the production corpus uses its effective date as the version LABEL, so "2026-03-20" is a perfectly coerced string. A shape-based test on strings alone rejected all 33 modifier filings when urpx.schedule first tried it, which is why the test is the ABSENCE of real temporals rather than the presence of a string.

A document with no temporal content at all is not uncoerced, merely empty of dates, and reports false.

True if `doc` has the SIGNATURE of a document that was never coerced: it
carries date-shaped strings and no java.time values anywhere at all.

It is NOT enough that a date-shaped string exists. urpx:version is
`rdfs:range xsd:string` and every filing in the production corpus uses its
effective date as the version LABEL, so "2026-03-20" is a perfectly
coerced string. A shape-based test on strings alone rejected all 33 modifier
filings when `urpx.schedule` first tried it, which is why the test is the
ABSENCE of real temporals rather than the presence of a string.

A document with no temporal content at all is not uncoerced, merely empty of
dates, and reports false.
raw docstring

validateclj

(validate schema value)

Validate value against schema. Returns true on success.

Validate `value` against `schema`. Returns true on success.
raw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close