The Newest Equipment Manual May Be Wrong for the Installed Configuration
A maintenance portal sorts manuals by upload date and presents the newest PDF. The file concerns the same model name, but a different controller revision. The search result is fresh and still wrong for the installed equipment.
A document resolver needs an applicability decision before it needs a sorting rule.
This is a hypothetical information-management design. All equipment identifiers and records are synthetic. It does not describe Zenith Eclipse software or give instructions for operating or servicing a machine.
Model the asset separately from the document
Keep a versioned equipment configuration: manufacturer identifier, model identifier, controller or firmware family where relevant, serial identity and installed options. Record the evidence and time supporting that configuration. An undocumented retrofit should leave an unresolved configuration question.
Zenith Eclipse's machinery and equipment sourcing page identifies controls, technical requirements and connections to existing machinery as enquiry inputs. In a proposed document system, those details help identify which supplier documents require review; they do not prove compatibility by themselves.
A document revision has its own identity, issuer, language, file digest, supersession relationships and applicability assertions. Upload time answers when a file entered the portal. Revision date answers when the issuer dated it. Neither establishes that it applies to an asset.
Resolve explicit candidates, then expose ambiguity
The following example uses exact model and controller-revision matching. Real manufacturer rules may instead depend on serial ranges, options or service bulletins; those need explicit interpreters.
from dataclasses import dataclass
@dataclass(frozen=True)
class Configuration:
model: str
controller: str
@dataclass(frozen=True)
class Manual:
document_id: str
model: str
controller: str
language: str
active: bool
def resolve(config, language, manuals):
candidates = [
m for m in manuals
if m.active
and m.model == config.model
and m.controller == config.controller
and m.language == language
]
if not candidates:
return ("missing", ())
if len(candidates) != 1:
return ("ambiguous", tuple(m.document_id for m in candidates))
return ("candidate", (candidates[0].document_id,))
asset = Configuration("DEMO-M1", "C2")
docs = [
Manual("manual-older", "DEMO-M1", "C2", "en", True),
Manual("manual-newer", "DEMO-M1", "C3", "en", True),
]
assert resolve(asset, "en", docs) == ("candidate", ("manual-older",))
assert resolve(asset, "fr", docs) == ("missing", ())
assert resolve(asset, "en", docs + [docs[0]])[0] == "ambiguous"
The final assertion deliberately treats duplicate input as an integrity issue. A production repository should enforce document identity uniqueness rather than depend on a resolver to clean it up.
Python's dataclasses documentation explains generated methods and frozen instances. Type annotations here do not validate incoming supplier data. Parse and validate external records before constructing these objects. The frozen flag helps prevent accidental field assignment; it does not establish issuer authenticity or enforce authorization.
Do not let supersession widen applicability
An issuer may replace one revision for a particular configuration while leaving another configuration on an older manual. Model that scope. “B supersedes A” must not automatically mean “B applies to every asset previously associated with A.”
Likewise, do not compare serial numbers lexicographically unless the manufacturer's numbering scheme supports it. A string range from “9” to “100” is not a meaningful general serial-range rule. Preserve exact serial strings and use an approved parser or explicit applicability list.
If two active manuals match, present an unresolved conflict with their evidence. Do not choose the later date to conceal the ambiguity. If the required language is missing, show that gap rather than silently serving a translation as though it were the approved edition.
Bind a work record to the reviewed result
When an authorized person selects the applicable document, store its immutable revision ID and the asset-configuration revision used in that decision. A later portal upload should not alter the evidence attached to completed work.
Reevaluate open work when the configuration changes, a document is withdrawn or an applicable bulletin is added. Keep withdrawal status separate from file availability: a PDF may remain retained for history while being prohibited for new work.
Test a controller upgrade, a missing option, two matching revisions, a withdrawn document and an unavailable language. The resolver returns candidates for authorized review. It cannot certify safety, approve a repair or replace the manufacturer's instructions.
A reliable portal should sometimes refuse to choose. An explicit applicability gap is more useful than a confidently displayed manual selected only because it arrived last.
About the publisher: Zenith Eclipse Co works across agricultural commodities, international logistics and machinery sourcing.
Comments
Join the discussionNo comments yet. Be the first to comment.