am.noz.at.spl.expense
Schema Diff
+6 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 2 non-breaking changes.
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "am.noz.at.spl.expense:body.groupId" }
- AddedEdge AddedEdge { src: "am.noz.at.spl.expense:body", tgt: "am.noz.at.spl.expense:body.groupId", kind: "prop", name: Some("groupId") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "am.noz.at.spl.expense:body.groupId" }
Additional Notes
- Non-breaking: AddedEdge { src: "am.noz.at.spl.expense:body", tgt: "am.noz.at.spl.expense:body.groupId", kind: "prop", name: Some("groupId") }
1
1
{
2
2
"id": "am.noz.at.spl.expense",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"schemaVersion",
11
11
"expenseId",
12
12
"revisionId",
13
13
"description",
14
14
"occurredAt",
15
15
"createdAt",
16
16
"currency",
17
17
"minorUnit",
18
18
"totalMinor",
19
19
"paidBy",
20
20
"itemCount",
21
21
"voided"
22
22
],
23
23
"properties": {
24
24
"base": {
25
25
"ref": "lex:am.noz.at.spl.expense#recordRef",
26
26
"type": "ref",
27
27
"description": "The effective revision this revision was based on."
28
28
},
29
29
"notes": {
30
30
"type": "string",
31
31
"maxLength": 4000,
32
32
"maxGraphemes": 1000
33
33
},
34
34
"paidBy": {
35
35
"type": "array",
36
36
"items": {
37
37
"ref": "lex:am.noz.at.spl.expense#moneyAllocation",
38
38
"type": "ref"
39
39
},
40
40
"maxLength": 250,
41
41
"minLength": 1
42
42
},
43
43
"voided": {
44
44
"type": "boolean",
45
45
"description": "A voiding revision replaces destructive deletion in normal application flows."
46
46
},
47
+
"groupId": {
48
+
"type": "string",
49
+
"maxLength": 64,
50
+
"minLength": 1,
51
+
"description": "Optional organizational group or trip within the ledger Space. Omitted for ungrouped expenses."
52
+
},
47
53
"receipt": {
48
54
"type": "blob",
49
55
"accept": [
50
56
"image/jpeg",
51
57
"image/png",
52
58
"image/webp",
53
59
"application/pdf"
54
60
],
55
61
"maxSize": 10000000
56
62
},
57
63
"category": {
58
64
"type": "string",
59
65
"maxLength": 64,
60
66
"knownValues": [
61
67
"food",
62
68
"transport",
63
69
"accommodation",
64
70
"entertainment",
65
71
"groceries",
66
72
"utilities",
67
73
"shopping",
68
74
"other"
69
75
]
70
76
},
71
77
"currency": {
72
78
"type": "string",
73
79
"maxLength": 3,
74
80
"minLength": 3,
75
81
"description": "Uppercase ISO 4217 currency code."
76
82
},
77
83
"merchant": {
78
84
"type": "string",
79
85
"maxLength": 500,
80
86
"maxGraphemes": 120
81
87
},
82
88
"createdAt": {
83
89
"type": "string",
84
90
"format": "datetime"
85
91
},
86
92
"expenseId": {
87
93
"type": "string",
88
94
"maxLength": 64,
89
95
"minLength": 1,
90
96
"description": "Stable application identifier shared by every revision."
91
97
},
92
98
"itemCount": {
93
99
"type": "integer",
94
100
"maximum": 500,
95
101
"minimum": 1
96
102
},
97
103
"minorUnit": {
98
104
"type": "integer",
99
105
"maximum": 4,
100
106
"minimum": 0
101
107
},
102
108
"occurredAt": {
103
109
"type": "string",
104
110
"format": "datetime"
105
111
},
106
112
"receiptAlt": {
107
113
"type": "string",
108
114
"maxLength": 2000,
109
115
"maxGraphemes": 300
110
116
},
111
117
"revisionId": {
112
118
"type": "string",
113
119
"maxLength": 64,
114
120
"minLength": 1
115
121
},
116
122
"totalMinor": {
117
123
"type": "integer",
118
124
"minimum": 1,
119
125
"description": "Exact total in currency minor units; never a floating-point amount."
120
126
},
121
127
"description": {
122
128
"type": "string",
123
129
"maxLength": 1000,
124
130
"minLength": 1,
125
131
"maxGraphemes": 200
126
132
},
127
133
"schemaVersion": {
128
134
"type": "integer",
129
135
"const": 1
130
136
},
131
137
"recurringSource": {
132
138
"type": "string",
133
139
"format": "at-uri"
134
140
}
135
141
}
136
142
},
137
143
"description": "An immutable expense revision header. Items are stored in am.noz.at.spl.item records with the same expenseId and revisionId."
138
144
},
139
145
"recordRef": {
140
146
"type": "object",
141
147
"required": [
142
148
"uri",
143
149
"cid"
144
150
],
145
151
"properties": {
146
152
"cid": {
147
153
"type": "string",
148
154
"format": "cid"
149
155
},
150
156
"uri": {
151
157
"type": "string",
152
158
"format": "at-uri"
153
159
}
154
160
}
155
161
},
156
162
"moneyAllocation": {
157
163
"type": "object",
158
164
"required": [
159
165
"did",
160
166
"amountMinor"
161
167
],
162
168
"properties": {
163
169
"did": {
164
170
"type": "string",
165
171
"format": "did"
166
172
},
167
173
"amountMinor": {
168
174
"type": "integer",
169
175
"minimum": 0
170
176
}
171
177
}
172
178
}
173
179
},
174
180
"$type": "com.atproto.lexicon.schema",
175
181
"lexicon": 1
176
182
}