Revit Parameter Projection Demoted
An approved projection returned to `draft` because its shared-parameter-file output changed.
Purpose
Records approved → draft. Demotion is not a steward action with its own endpoint — it is an automatic consequence of an edit or a metadata resync that would change what the projection contributes to the shared parameter file. Re-review is required before it is approved again. It is a no-op when already draft and refused when archived.
Payload
Envelope is { name, occurredAt, payload } (apps/api-v1/src/modules/shared/domain/events/DomainEvent.ts). All seven RevitParameterProjection* events share one payload type; occurredAt appears both on the envelope and in the payload.
| Field | Type | Meaning |
|---|---|---|
projectionId | string | Projection domain_id |
parameterKeyId | string | The one canonical key this projection expresses |
occurredAt | Date | When demotion happened |
Raised by
RevitParameterProjection.demoteToDraft—apps/api-v1/src/modules/bim-ontology/core/domain/revit/RevitParameterProjection.ts- The
demoteApprovedIfSpfOutputChangedhelper (core/application/use-cases/demoteApprovedIfSpfOutputChanged.ts), called fromUpdateRevitParameterProjectionUseCase(RevitProjectionAuthoringUseCases.ts) and fromResyncDerivedProjectionMetadataUseCase(RevitProjectionDerivationUseCases.ts) DemoteRevitProjectionsCoveringObjectClassUseCaseafter ObjectClassDemoted — covering approved projections return todraftfor re-review- No operation demotes directly. It rides along with updateRevitParameterProjection, the resync operations, a ParameterGroupChanged / ParameterKeyUpdated resync, or an ObjectClass demotion cascade
Consumers
No subscriber in this module. No handler is registered for any of the seven projection events in bim-ontology.composition.ts; only the '*' DomainEventAuditLogger sees them.