feat: orchestrate deterministic growth report generation

This commit is contained in:
2026-08-21 00:26:01 +03:30
parent 6df21d4fd0
commit 027dffb59e
11 changed files with 997 additions and 156 deletions

View File

@@ -8,17 +8,19 @@ import (
type Status string
const (
StatusQueued Status = "QUEUED"
StatusAnalyzing Status = "ANALYZING"
StatusQueued Status = "QUEUED"
StatusAnalyzing Status = "ANALYZING"
StatusGenerating Status = "GENERATING"
StatusReady Status = "READY"
StatusPartial Status = "PARTIAL"
StatusFailed Status = "FAILED"
StatusReady Status = "READY"
StatusPartial Status = "PARTIAL"
StatusFailed Status = "FAILED"
)
func (s Status) Terminal() bool { return s == StatusReady || s == StatusPartial || s == StatusFailed }
type Scope struct { TerminalID *string `json:"terminalId"` }
type Scope struct {
TerminalID *string `json:"terminalId"`
}
type CampaignBrief struct {
Headline string `json:"headline"`
@@ -30,49 +32,50 @@ type CampaignBrief struct {
EvidenceIDs []string `json:"evidenceIds"`
}
type AICopy struct { Briefs []CampaignBrief `json:"briefs"` }
type AICopy struct {
Briefs []CampaignBrief `json:"briefs"`
}
type Usage struct {
InputTokens int64 `json:"inputTokens"`
InputTokens int64 `json:"inputTokens"`
OutputTokens int64 `json:"outputTokens"`
LatencyMS int64 `json:"latencyMs"`
LatencyMS int64 `json:"latencyMs"`
}
type Report struct {
ReportID string `json:"reportId"`
Status Status `json:"status"`
Scope Scope `json:"scope"`
HorizonDays int `json:"horizonDays"`
ForecastStartDate *time.Time `json:"forecastStartDate,omitempty"`
ReportID string `json:"reportId"`
Status Status `json:"status"`
Scope Scope `json:"scope"`
HorizonDays int `json:"horizonDays"`
ForecastStartDate *time.Time `json:"forecastStartDate,omitempty"`
DeterministicEvidence json.RawMessage `json:"deterministicEvidence"`
AICopy *AICopy `json:"aiCopy,omitempty"`
FailureCode *string `json:"failureCode,omitempty"`
Cached bool `json:"cached"`
Stale bool `json:"stale"`
NextRefreshAt time.Time `json:"nextRefreshAt"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
EventsURL string `json:"eventsUrl"`
AICopy *AICopy `json:"aiCopy,omitempty"`
FailureCode *string `json:"failureCode,omitempty"`
Cached bool `json:"cached"`
Stale bool `json:"stale"`
NextRefreshAt time.Time `json:"nextRefreshAt"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
EventsURL string `json:"eventsUrl"`
}
type Record struct {
Report
MerchantID int64
TerminalDBID *int64
Fingerprint string
MerchantID int64
TerminalDBID *int64
Fingerprint string
DatasetWatermark string
CatalogVersion string
CatalogVersion string
AnalyticsVersion string
PromptVersion string
SchemaVersion string
Model string
Usage Usage
ManualRefresh bool
PromptVersion string
SchemaVersion string
Model string
Usage Usage
ManualRefresh bool
TehranRefreshDay *time.Time
}
type CreateRequest struct {
TerminalID string `json:"terminalId"`
Refresh bool `json:"refresh"`
Refresh bool `json:"refresh"`
}