package domain import ( "errors" "strings" "git.cin.su/m/Assistant/contracts/epistemics" ) var ErrInvalidTruthBundle = errors.New("invalid truth bundle") func CompileObservedClaim(source epistemics.Source, snapshot epistemics.SourceSnapshot, excerpt epistemics.SourceExcerpt, statement string, observedAt int64, conflict epistemics.ConflictState) (epistemics.TruthBundle, error) { if strings.TrimSpace(statement) == "" || observedAt < 1 { return epistemics.TruthBundle{}, ErrInvalidTruthBundle } citation, err := epistemics.ResolveCitation(source, snapshot, excerpt, epistemics.EvidenceObserved, epistemics.CoverageComplete, conflict, observedAt) if err != nil { return epistemics.TruthBundle{}, ErrInvalidTruthBundle } observation := epistemics.Observation{ID: epistemics.ObservationID("observation:" + string(excerpt.ID)), SourceSnapshot: snapshot.ID, Excerpt: excerpt.ID, Text: excerpt.Text, ObservedAt: observedAt} claim := epistemics.Claim{ID: epistemics.ClaimID("claim:" + string(excerpt.ID)), Statement: statement, ObservationID: observation.ID, CitationID: citation.ID, Verification: epistemics.VerificationUnverified} state := epistemics.BeliefProvisional if conflict == epistemics.ConflictPresent || conflict == epistemics.ConflictUnknown { state = epistemics.BeliefConflicted } bundle := epistemics.TruthBundle{Source: source, Snapshot: snapshot, Excerpt: excerpt, Observation: observation, Claim: claim, Belief: epistemics.Belief{ID: epistemics.BeliefID("belief:" + string(excerpt.ID)), ClaimID: claim.ID, State: state}, Citation: citation} if bundle.Observation.SourceSnapshot != snapshot.ID || bundle.Claim.ObservationID != bundle.Observation.ID || bundle.Claim.CitationID != bundle.Citation.ID || bundle.Belief.ClaimID != bundle.Claim.ID { return epistemics.TruthBundle{}, ErrInvalidTruthBundle } return bundle, nil }