@hyperscale0/hsx 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,34 @@
1
+ header vehicles
2
+
3
+ instrument vehicle(listing: ref<marketplace.listing>, seller: party) {
4
+ summary: "Seller-declared vehicle identity and kilometre odometer, corrected only before publication."
5
+ fields {
6
+ listing: ref<listing>, seller: account of seller
7
+ vin: text(17, 17, "^[A-HJ-NPR-Z0-9]{17}$"), make: text(1, 80), model: text(1, 80)
8
+ year: integer(1886, 2200), odometer: integer(0, 10000000), odometerUnit: enum(kilometres) = kilometres
9
+ correctedAt: date?, correctionEvidence: text?
10
+ }
11
+ lifecycle { states: [draft, published], initial: draft }
12
+ action create {
13
+ actor: { party: seller }
14
+ requires self.listing in [draft]; requires self.seller == self.listing.seller
15
+ requires unique "listing_vehicle" on [self.listing]
16
+ }
17
+ action publish {
18
+ from: draft, to: published, actor: { parent: listing }
19
+ requires self.listing in [active]
20
+ requires unique "vehicle_identity" on [self.vin]
21
+ }
22
+ action correct {
23
+ from: draft, to: draft, actor: { party: seller }
24
+ input { make: text(1, 80), model: text(1, 80), year: integer(1886, 2200), odometer: integer(0, 10000000), evidence: text }
25
+ requires self.listing in [draft]; requires self.seller == self.listing.seller
26
+ set: { make: { field: input.make }, model: { field: input.model }, year: { field: input.year }, odometer: { field: input.odometer }, correctionEvidence: { field: input.evidence }, correctedAt: { field: self.now } }
27
+ }
28
+ action correct_identity {
29
+ from: draft, to: draft, actor: { party: seller }
30
+ input { vin: text(17, 17, "^[A-HJ-NPR-Z0-9]{17}$"), evidence: text }
31
+ requires self.listing in [draft]; requires self.seller == self.listing.seller
32
+ set: { vin: { field: input.vin }, correctionEvidence: { field: input.evidence }, correctedAt: { field: self.now } }
33
+ }
34
+ }