149 lines
5.1 KiB
Go
149 lines
5.1 KiB
Go
package growth
|
|
|
|
import "time"
|
|
|
|
const (
|
|
CatalogVersion = "1405.1"
|
|
AnalyticsVersion = "1.0.0"
|
|
|
|
MinBaselineObservations = 4
|
|
MinBaselineSessions = 100
|
|
MaterialChangeBPS = 2_000
|
|
MinSimilarityBPS = 6_000
|
|
)
|
|
|
|
type Confidence string
|
|
|
|
const (
|
|
ConfidenceHigh Confidence = "HIGH"
|
|
ConfidenceMedium Confidence = "MEDIUM"
|
|
ConfidenceInsufficientData Confidence = "INSUFFICIENT_DATA"
|
|
)
|
|
|
|
type SuppressionReason string
|
|
|
|
const (
|
|
SuppressionInsufficientObservations SuppressionReason = "INSUFFICIENT_BASELINE_OBSERVATIONS"
|
|
SuppressionInsufficientBaselineSessions SuppressionReason = "INSUFFICIENT_BASELINE_SESSIONS"
|
|
SuppressionInsufficientHistory SuppressionReason = "INSUFFICIENT_HISTORY"
|
|
SuppressionInsufficientCohort SuppressionReason = "INSUFFICIENT_COHORT"
|
|
SuppressionTerminalScope SuppressionReason = "TERMINAL_SCOPE_UNSUPPORTED"
|
|
)
|
|
|
|
type DailyPoint struct {
|
|
Date time.Time `json:"date"`
|
|
SessionCount int64 `json:"sessionCount"`
|
|
PaidSessionCount int64 `json:"paidSessionCount"`
|
|
PaidAmountRial int64 `json:"paidAmountRial"`
|
|
EventIDs []string `json:"eventIds,omitempty"`
|
|
}
|
|
|
|
type EventKind string
|
|
|
|
const (
|
|
EventOfficial EventKind = "OFFICIAL"
|
|
EventCommercial EventKind = "COMMERCIAL"
|
|
)
|
|
|
|
type Event struct {
|
|
ID string `json:"id"`
|
|
TitleFA string `json:"titleFa"`
|
|
StartDate time.Time `json:"startDate"`
|
|
EndDate time.Time `json:"endDate"`
|
|
Family string `json:"family"`
|
|
Tags []string `json:"tags"`
|
|
Source string `json:"source"`
|
|
Categories []string `json:"categories"`
|
|
Kind EventKind `json:"kind"`
|
|
}
|
|
|
|
type EventEffect struct {
|
|
EvidenceID string `json:"evidenceId"`
|
|
EventID string `json:"eventId"`
|
|
Eligible bool `json:"eligible"`
|
|
SuppressionReason SuppressionReason `json:"suppressionReason,omitempty"`
|
|
ObservationCount int `json:"observationCount"`
|
|
BaselineSessionCount int64 `json:"baselineSessionCount"`
|
|
BaselinePaidSessions int64 `json:"baselinePaidSessions"`
|
|
BaselineAmountRial int64 `json:"baselineAmountRial"`
|
|
ActualSessionCount int64 `json:"actualSessionCount"`
|
|
ActualPaidSessions int64 `json:"actualPaidSessions"`
|
|
ActualAmountRial int64 `json:"actualAmountRial"`
|
|
SessionUpliftBPS int64 `json:"sessionUpliftBps"`
|
|
PaidSessionUpliftBPS int64 `json:"paidSessionUpliftBps"`
|
|
AmountUpliftBPS int64 `json:"amountUpliftBps"`
|
|
MaterialWin bool `json:"materialWin"`
|
|
MaterialDecline bool `json:"materialDecline"`
|
|
}
|
|
|
|
type EventMatch struct {
|
|
Event Event `json:"event"`
|
|
ScoreBPS int64 `json:"scoreBps"`
|
|
MatchBasis string `json:"matchBasis"`
|
|
}
|
|
|
|
type Range struct {
|
|
P10 int64 `json:"p10"`
|
|
P50 int64 `json:"p50"`
|
|
P90 int64 `json:"p90"`
|
|
}
|
|
|
|
type ForecastPoint struct {
|
|
Date time.Time `json:"date"`
|
|
BaselineSessions int64 `json:"baselineSessions"`
|
|
BaselineAmountRial int64 `json:"baselineAmountRial"`
|
|
PaidSessions Range `json:"paidSessions"`
|
|
PaidAmountRial Range `json:"paidAmountRial"`
|
|
EventIDs []string `json:"eventIds,omitempty"`
|
|
}
|
|
|
|
type BacktestResult struct {
|
|
Origins int `json:"origins"`
|
|
SessionMAPEBPS int64 `json:"sessionMapeBps"`
|
|
AmountMAPEBPS int64 `json:"amountMapeBps"`
|
|
IntervalCoverageBPS int64 `json:"intervalCoverageBps"`
|
|
}
|
|
|
|
type Forecast struct {
|
|
StartDate time.Time `json:"startDate"`
|
|
HorizonDays int `json:"horizonDays"`
|
|
Confidence Confidence `json:"confidence"`
|
|
SuppressionReason SuppressionReason `json:"suppressionReason,omitempty"`
|
|
Points []ForecastPoint `json:"points"`
|
|
Backtest BacktestResult `json:"backtest"`
|
|
}
|
|
|
|
type Opportunity struct {
|
|
EvidenceID string `json:"evidenceId"`
|
|
EventID string `json:"eventId"`
|
|
EventTitleFA string `json:"eventTitleFa"`
|
|
Date time.Time `json:"date"`
|
|
SimilarityBPS int64 `json:"similarityBps"`
|
|
ExpectedSessions Range `json:"expectedSessions"`
|
|
ExpectedAmountRial Range `json:"expectedAmountRial"`
|
|
HistoricalEvidenceID string `json:"historicalEvidenceId"`
|
|
}
|
|
|
|
type Risk struct {
|
|
EvidenceID string `json:"evidenceId"`
|
|
Date time.Time `json:"date"`
|
|
SessionDeclineBPS int64 `json:"sessionDeclineBps"`
|
|
AmountDeclineBPS int64 `json:"amountDeclineBps"`
|
|
ExpectedSessions Range `json:"expectedSessions"`
|
|
ExpectedAmountRial Range `json:"expectedAmountRial"`
|
|
}
|
|
|
|
type EvidenceBundle struct {
|
|
Opportunities []Opportunity `json:"opportunities"`
|
|
Risks []Risk `json:"risks"`
|
|
}
|
|
|
|
type CampaignBrief struct {
|
|
HeadlineFA string `json:"headlineFa"`
|
|
GuidanceFA string `json:"guidanceFa"`
|
|
OfferFA string `json:"offerFa"`
|
|
PreparationFA string `json:"preparationFa"`
|
|
LimitationFA string `json:"limitationFa"`
|
|
EvidenceIDs []string `json:"evidenceIds"`
|
|
}
|