function toIsoString(value) { return value instanceof Date ? value.toISOString() : value; } export function toAdminPricingObservationDto(observation) { return { id: observation.id, productId: observation.productId, inventoryItemId: observation.inventoryItemId, providerId: observation.providerId, priceMinor: observation.priceMinor, currency: observation.currency, sourceIdentifier: observation.sourceIdentifier, conditionId: observation.conditionId, sourceUrl: observation.sourceUrl ?? null, qualityScore: observation.qualityScore ?? null, isOutlier: observation.isOutlier, outlierReason: observation.outlierReason ?? null, observedAt: toIsoString(observation.observedAt), }; } export function toAdminMarketValuationDto({ valuation, observations }) { return { id: valuation.id, inventoryItemId: valuation.inventoryItemId, valueMinor: valuation.valueMinor, currency: valuation.currency, strategy: valuation.strategy, confidence: valuation.confidence, sourceCount: valuation.sourceCount, calculatedAt: toIsoString(valuation.calculatedAt), stale: Date.now() - new Date(valuation.calculatedAt).getTime() > 7 * 24 * 60 * 60 * 1000, observations: observations.map(toAdminPricingObservationDto), }; }