32 lines
1.8 KiB
Go
32 lines
1.8 KiB
Go
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
|
|
}
|