]> git.r.bdr.sh - rbdr/map/blob - Map/Data/Stage.swift
Add some debouncing
[rbdr/map] / Map / Data / Stage.swift
1 // Copyright (C) 2024 Rubén Beltrán del Río
2
3 // This program is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12
13 // You should have received a copy of the GNU General Public License
14 // along with this program. If not, see https://map.tranquil.systems.
15 struct Stage {
16 let i: String
17 let ii: String
18 let iii: String
19 let iv: String
20
21 static func stages(_ type: StageType) -> Stage {
22 switch type {
23 case .general:
24 return Stage(
25 i: "Genesis", ii: "Custom", iii: "Product (+rental)", iv: "Commodity (+utility)")
26 case .practice:
27 return Stage(
28 i: "Novel", ii: "Emerging", iii: "Good", iv: "Best")
29 case .data:
30 return Stage(
31 i: "Unmodelled", ii: "Divergent", iii: "Convergent", iv: "Modelled")
32 case .knowledge:
33 return Stage(
34 i: "Concept", ii: "Hypothesis", iii: "Theory", iv: "Accepted")
35 case .ubiquity:
36 return Stage(
37 i: "Rare", ii: "Slowly Increasing", iii: "Rapidly Increasing",
38 iv: "Widespread in the applicable market / ecosystem")
39 case .certainty:
40 return Stage(
41 i: "Poorly Understood / exploring the unknown",
42 ii: "Rapid Increase In Learning / discovery becomes refining",
43 iii: "Rapid increase in use / increasing fit for purpose",
44 iv: "Commonly understood (in terms of use)")
45 case .publicationTypes:
46 return Stage(
47 i:
48 "Describe the wonder of the thing / the discovery of some marvel / a new land / an unknown frontier",
49 ii:
50 "Focused on build / construct / awareness and learning / many models of explanation / no accepted forms / a wild west",
51 iii:
52 "Maintenance / operations / installation / comparison between competing forms / feature analysis",
53 iv: "Focused on use / increasingly an accepted, almost invisible component")
54 case .market:
55 return Stage(
56 i: "Undefined Market",
57 ii: "Forming Market / an array of competing forms and models of understanding",
58 iii: "Growing Market / consolidation to a few competing but more accepted forms",
59 iv: "Mature Market / stabilised to an accepted form")
60 case .knowledgeManagement:
61 return Stage(
62 i: "Uncertain", ii: "Learning on use / focused on testing prediction",
63 iii: "Learning on operation / using prediction / verification", iv: "Known / accepted")
64 case .marketPerception:
65 return Stage(
66 i: "Chaotic (non-linear) / domain of the \"crazy\"", ii: "Domain of \"experts\"",
67 iii: "Increasing expectation of use / domain of \"professionals\"",
68 iv: "Ordered (appearance of being linear) / trivial / formula to be applied")
69 case .userPerception:
70 return Stage(
71 i: "Different / confusing / exciting / surprising / dangerous",
72 ii: "Leading edge / emerging / unceirtanty over results",
73 iii: "Increasingly common / disappointed if not used or available / feeling left behind",
74 iv: "Standard / expected / feeling of shock if not used")
75 case .perceptionInIndustry:
76 return Stage(
77 i: "Future source of competitive advantage / unpredictable / unknown",
78 ii: "Seen as a scompetitive advantage / a differential / ROI / case examples",
79 iii: "Advantage through implementation / features / this model is better than that",
80 iv: "Cost of doing business / accepted / specific defined models")
81 case .focusOfValue:
82 return Stage(
83 i: "High future worth but immediate investment",
84 ii: "Seeking ways to profit and a ROI / seeking confirmation of value",
85 iii:
86 "High profitability per unit / a valuable model / a feeling of understanding / focus on exploitation",
87 iv:
88 "High volume / reducing margin / important but invisible / an essential component of something more complex"
89 )
90 case .understanding:
91 return Stage(
92 i: "Poorly Understood / unpredictable",
93 ii: "Increasing understanding / development of measures",
94 iii: "Increasing education / constant refinement of needs / measures",
95 iv: "Believed to be well defined / stable / measurable")
96 case .comparison:
97 return Stage(
98 i: "Constantly changing / a differential / unstable",
99 ii: "Learning from others / testing the water / some evidential support",
100 iii: "Competing models / feature difference / evidential support",
101 iv: "Essential / any advantage is operational / accepted norm")
102 case .failure:
103 return Stage(
104 i: "High / tolerated / assumed to be wrong",
105 ii: "Moderate / unsurprising if wrong but disappointed",
106 iii:
107 "Not tolerated / focus on constant improvement / assumed to be in the right direction / resistance to changing the model",
108 iv: "Surprised by failure / focus on operational efficiency")
109 case .marketAction:
110 return Stage(
111 i: "Gambling / driven by gut", ii: "Exploring a \"found\" value",
112 iii: "Market analysis / listening to customers", iv: "Metric driven / build what is needed")
113 case .efficiency:
114 return Stage(
115 i: "Reducing the cost of change (experimentation)", ii: "Reducing cost of waste (Learning)",
116 iii: "Reducing cost of waste (Learning)", iv: "Reducing cost of deviation (Volume)")
117 case .decisionDrivers:
118 return Stage(
119 i: "Heritage / culture", ii: "Analyses & synthesis", iii: "Analyses & synthesis",
120 iv: "Previous Experience")
121 case .behavior:
122 return Stage(
123 i: "Uncertain when to use", ii: "Learning when to use", iii: "Learning through use",
124 iv: "Known / common usage")
125 }
126 }
127
128 static func title(_ type: StageType) -> String {
129 switch type {
130 case .general:
131 return "Activities"
132 case .practice:
133 return "Practice"
134 case .data:
135 return "Data"
136 case .knowledge:
137 return "Knowledge"
138 case .ubiquity:
139 return "Ubiquity"
140 case .certainty:
141 return "Certainty"
142 case .publicationTypes:
143 return "Publication Types"
144 case .market:
145 return "Market"
146 case .knowledgeManagement:
147 return "Knowledge Management"
148 case .marketPerception:
149 return "Market Perception"
150 case .userPerception:
151 return "User Perception"
152 case .perceptionInIndustry:
153 return "Perception In Industry"
154 case .focusOfValue:
155 return "Focus Of Value"
156 case .understanding:
157 return "Understanding"
158 case .comparison:
159 return "Comparison"
160 case .failure:
161 return "Failure"
162 case .marketAction:
163 return "Market Action"
164 case .efficiency:
165 return "Efficiency"
166 case .decisionDrivers:
167 return "Decision Drivers"
168 case .behavior:
169 return "Behavior"
170 }
171 }
172 }
173
174 enum StageType: String, CaseIterable, Identifiable {
175 case general
176 case practice
177 case data
178 case knowledge
179
180 case ubiquity
181 case certainty
182 case publicationTypes
183
184 case market
185 case knowledgeManagement
186 case marketPerception
187 case userPerception
188 case perceptionInIndustry
189 case focusOfValue
190 case understanding
191 case comparison
192 case failure
193 case marketAction
194 case efficiency
195 case decisionDrivers
196
197 case behavior
198
199 var id: String { self.rawValue }
200
201 static let types: [StageType] = [.general, .practice, .data, .knowledge]
202 static let characteristics: [StageType] = [.ubiquity, .certainty, .publicationTypes]
203 static let properties: [StageType] = [
204 .market, .knowledgeManagement, .marketPerception, .userPerception,
205 .perceptionInIndustry, .focusOfValue, .understanding, .comparison, .failure,
206 .marketAction, .efficiency, .decisionDrivers,
207 ]
208 static let custom: [StageType] = [.behavior]
209 }