@mindflight/mindbrain-personal-studio 0.6.2 → 0.6.3

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.
Files changed (202) hide show
  1. package/README.md +16 -8
  2. package/build/client/_app/immutable/chunks/{D0UIlUGZ.js → CIErFlYG.js} +1 -1
  3. package/build/client/_app/immutable/chunks/CIErFlYG.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/CIErFlYG.js.gz +0 -0
  5. package/build/client/_app/immutable/entry/{app.CR-imLox.js → app.mURYm8o_.js} +2 -2
  6. package/build/client/_app/immutable/entry/app.mURYm8o_.js.br +0 -0
  7. package/build/client/_app/immutable/entry/app.mURYm8o_.js.gz +0 -0
  8. package/build/client/_app/immutable/entry/start.D4M9ZeGO.js +1 -0
  9. package/build/client/_app/immutable/entry/start.D4M9ZeGO.js.br +2 -0
  10. package/build/client/_app/immutable/entry/start.D4M9ZeGO.js.gz +0 -0
  11. package/build/client/_app/immutable/nodes/{1.CTEedoSY.js → 1.DHKtMeFI.js} +1 -1
  12. package/build/client/_app/immutable/nodes/1.DHKtMeFI.js.br +1 -0
  13. package/build/client/_app/immutable/nodes/1.DHKtMeFI.js.gz +0 -0
  14. package/build/client/_app/version.json +1 -1
  15. package/build/client/_app/version.json.br +0 -0
  16. package/build/client/_app/version.json.gz +0 -0
  17. package/build/handler.js +4 -4
  18. package/build/index.js +4 -4
  19. package/build/server/chunks/chunks/{internal.js-WOmQXGMa.js → internal.js-C3tV0XXj.js} +2 -2
  20. package/build/server/chunks/chunks/{internal.js-WOmQXGMa.js.map → internal.js-C3tV0XXj.js.map} +1 -1
  21. package/build/server/chunks/{handler-BIDedSZq.js → handler-DlaCCnxx.js} +3 -3
  22. package/build/server/chunks/{handler-BIDedSZq.js.map → handler-DlaCCnxx.js.map} +1 -1
  23. package/build/server/chunks/{index.js-YVPJa0so.js → index.js-BGfKWHak.js} +2 -2
  24. package/build/server/chunks/{index.js-YVPJa0so.js.map → index.js-BGfKWHak.js.map} +1 -1
  25. package/build/server/chunks/{manifest.js-aGRKuiqF.js → manifest.js-CnmaNf5D.js} +3 -3
  26. package/build/server/chunks/{manifest.js-aGRKuiqF.js.map → manifest.js-CnmaNf5D.js.map} +1 -1
  27. package/build/server/chunks/nodes/{1.js-Dhh3ErZY.js → 1.js-BypjwBYB.js} +2 -2
  28. package/build/server/chunks/nodes/{1.js-Dhh3ErZY.js.map → 1.js-BypjwBYB.js.map} +1 -1
  29. package/examples/immeuble/ACCEPTANCE.yaml +82 -0
  30. package/examples/immeuble/BIM_LITE.md +15 -0
  31. package/examples/immeuble/CHECKLIST.md +128 -0
  32. package/examples/immeuble/README.md +121 -0
  33. package/examples/immeuble/bundle/immeuble.bundle.json +22786 -0
  34. package/examples/immeuble/contracts/answer_artifacts.seed.jsonl +34 -0
  35. package/examples/immeuble/contracts/business_capabilities.seed.jsonl +25 -0
  36. package/examples/immeuble/contracts/consumer_contract.yaml +131 -0
  37. package/examples/immeuble/contracts/immeuble_structured_import_model.json +310 -0
  38. package/examples/immeuble/contracts/mapping_external_to_canonical.json +375 -0
  39. package/examples/immeuble/contracts/mapping_external_to_canonical.yaml +55 -0
  40. package/examples/immeuble/contracts/mapping_external_to_canonical_ws.json +65 -0
  41. package/examples/immeuble/contracts/model_contract.json +943 -0
  42. package/examples/immeuble/contracts/projection_catalog.yaml +366 -0
  43. package/examples/immeuble/contracts/scenarios.yaml +27 -0
  44. package/examples/immeuble/contracts/semantic_proposal.golden.json +1 -0
  45. package/examples/immeuble/contracts/source_profile.yaml +38 -0
  46. package/examples/immeuble/fake_data/DeltaFinding.csv +20 -0
  47. package/examples/immeuble/fake_data/ProjectionResult.csv +13 -0
  48. package/examples/immeuble/fake_data/ag_meeting.csv +4 -0
  49. package/examples/immeuble/fake_data/agenda_item.csv +4 -0
  50. package/examples/immeuble/fake_data/architect.csv +3 -0
  51. package/examples/immeuble/fake_data/architecture_firm.csv +2 -0
  52. package/examples/immeuble/fake_data/bank_account.csv +3 -0
  53. package/examples/immeuble/fake_data/billing_group.csv +41 -0
  54. package/examples/immeuble/fake_data/block.csv +10 -0
  55. package/examples/immeuble/fake_data/budget_line.csv +3 -0
  56. package/examples/immeuble/fake_data/building.csv +6 -0
  57. package/examples/immeuble/fake_data/cellar.csv +41 -0
  58. package/examples/immeuble/fake_data/change_order.csv +2 -0
  59. package/examples/immeuble/fake_data/charge_call.csv +58 -0
  60. package/examples/immeuble/fake_data/claim.csv +4 -0
  61. package/examples/immeuble/fake_data/coda_entry.csv +49 -0
  62. package/examples/immeuble/fake_data/compliance_certificate.csv +10 -0
  63. package/examples/immeuble/fake_data/contractor.csv +4 -0
  64. package/examples/immeuble/fake_data/decision.csv +5 -0
  65. package/examples/immeuble/fake_data/defect_reserve.csv +3 -0
  66. package/examples/immeuble/fake_data/household.csv +41 -0
  67. package/examples/immeuble/fake_data/inspection.csv +3 -0
  68. package/examples/immeuble/fake_data/insurance_policy.csv +4 -0
  69. package/examples/immeuble/fake_data/intervention.csv +13 -0
  70. package/examples/immeuble/fake_data/invoice.csv +3 -0
  71. package/examples/immeuble/fake_data/lease_contract.csv +12 -0
  72. package/examples/immeuble/fake_data/maintenance_ticket.csv +13 -0
  73. package/examples/immeuble/fake_data/meter.csv +4 -0
  74. package/examples/immeuble/fake_data/meter_reading.csv +19 -0
  75. package/examples/immeuble/fake_data/milestone.csv +3 -0
  76. package/examples/immeuble/fake_data/organization.csv +12 -0
  77. package/examples/immeuble/fake_data/parking_space.csv +8 -0
  78. package/examples/immeuble/fake_data/permit.csv +3 -0
  79. package/examples/immeuble/fake_data/person.csv +85 -0
  80. package/examples/immeuble/fake_data/private_garden.csv +7 -0
  81. package/examples/immeuble/fake_data/progress_event.csv +2 -0
  82. package/examples/immeuble/fake_data/quote.csv +3 -0
  83. package/examples/immeuble/fake_data/receipt.csv +2 -0
  84. package/examples/immeuble/fake_data/reminder.csv +11 -0
  85. package/examples/immeuble/fake_data/service_contract.csv +4 -0
  86. package/examples/immeuble/fake_data/shared_equipment.csv +8 -0
  87. package/examples/immeuble/fake_data/shared_space.csv +10 -0
  88. package/examples/immeuble/fake_data/unit.csv +41 -0
  89. package/examples/immeuble/fake_data/work_package.csv +4 -0
  90. package/examples/immeuble/fake_data/worksite_project.csv +3 -0
  91. package/examples/immeuble/gap-rules/L0-patrimoine.json +57 -0
  92. package/examples/immeuble/gap-rules/L1-syndic-naive.json +36 -0
  93. package/examples/immeuble/gap-rules/L1-syndic.json +61 -0
  94. package/examples/immeuble/gap-rules/L2-chantier.json +87 -0
  95. package/examples/immeuble/gap-rules/L2-exploitation.json +87 -0
  96. package/examples/immeuble/gap-rules/L2-finance.json +48 -0
  97. package/examples/immeuble/gap-rules/L2-maintenance.json +107 -0
  98. package/examples/immeuble/gap-rules/L2-syndic-filtered.json +39 -0
  99. package/examples/immeuble/gap-rules/L3-full.json +332 -0
  100. package/examples/immeuble/gap-rules/closed-world-contract.md +76 -0
  101. package/examples/immeuble/gap-rules/demo.json +51 -0
  102. package/examples/immeuble/gap-rules/expected-findings.yaml +100 -0
  103. package/examples/immeuble/gap-rules/gap-scenarios.yaml +79 -0
  104. package/examples/immeuble/gap-rules/motifs.json +38 -0
  105. package/examples/immeuble/gap-rules/syndic.json +40 -0
  106. package/examples/immeuble/import_manifest.yaml +25 -0
  107. package/examples/immeuble/import_ready/graph_edges_import.csv +848 -0
  108. package/examples/immeuble/import_ready/mfo_facets_import.csv +559 -0
  109. package/examples/immeuble/index.md +140 -0
  110. package/examples/immeuble/model/immeuble_model.json +418 -0
  111. package/examples/immeuble/reports/01-model.validation.json +56 -0
  112. package/examples/immeuble/reports/02-mapping.validation.json +9 -0
  113. package/examples/immeuble/reports/acceptance.validation.json +161 -0
  114. package/examples/immeuble/reports/consumer_contract.validation.json +162 -0
  115. package/examples/immeuble/reports/graph_edges.jsonl +847 -0
  116. package/examples/immeuble/reports/graph_nodes.jsonl +558 -0
  117. package/examples/immeuble/reports/hybrid-compare.json +144 -0
  118. package/examples/immeuble/reports/immeuble-import-scenario.json +233 -0
  119. package/examples/immeuble/reports/live-artifacts-refresh.validation.json +51 -0
  120. package/examples/immeuble/reports/pipeline_audit.json +59 -0
  121. package/examples/immeuble/reports/projection_audit.json +69 -0
  122. package/examples/immeuble/reports/projection_audit_immeuble.json +257 -0
  123. package/examples/immeuble/reports/projection_audit_immeuble.md +122 -0
  124. package/examples/immeuble/reports/projection_candidates.json +1596 -0
  125. package/examples/immeuble/reports/projection_candidates.md +117 -0
  126. package/examples/immeuble/reports/projection_model_validation.md +115 -0
  127. package/examples/immeuble/reports/reindex.json +4 -0
  128. package/examples/immeuble/reports/reset-immeuble-workspace.json +32 -0
  129. package/examples/immeuble/reports/schema-id-prefix-check.json +5 -0
  130. package/examples/immeuble/scripts/audit-immeuble-projections.mjs +254 -0
  131. package/examples/immeuble/scripts/build-immeuble-model.mjs +308 -0
  132. package/examples/immeuble/scripts/compare-immeuble-snapshots.sh +227 -0
  133. package/examples/immeuble/scripts/enrich-immeuble-demo.mjs +1135 -0
  134. package/examples/immeuble/scripts/reset-immeuble-workspace.mjs +139 -0
  135. package/examples/immeuble/scripts/run-immeuble-backend.sh +164 -0
  136. package/examples/immeuble/scripts/run-immeuble-import.mjs +232 -0
  137. package/examples/immeuble/scripts/run-immeuble-live-lab.sh +439 -0
  138. package/examples/immeuble/scripts/seed-immeuble-gap-rules.mjs +69 -0
  139. package/examples/immeuble/scripts/start-immeuble-demo.sh +52 -0
  140. package/examples/immeuble/scripts/starterkit/analysis-lenses.mjs +181 -0
  141. package/examples/immeuble/scripts/starterkit/analyze-projection-candidates.mjs +714 -0
  142. package/examples/immeuble/scripts/starterkit/audit-ghostcrab-projections.mjs +674 -0
  143. package/examples/immeuble/scripts/starterkit/facet-prefix.mjs +166 -0
  144. package/examples/immeuble/scripts/starterkit/sqlite-utils.mjs +131 -0
  145. package/examples/immeuble/scripts/verify-immeuble-acceptance.mjs +284 -0
  146. package/examples/immeuble/scripts/verify-immeuble-live-artifacts.mjs +140 -0
  147. package/examples/immeuble/scripts/yaml-lite.mjs +96 -0
  148. package/examples/immeuble/sources/agent-prompts/prompts/00-prerequisites-immo-mcp.md +161 -0
  149. package/examples/immeuble/sources/agent-prompts/prompts/00-prerequisites.md +39 -0
  150. package/examples/immeuble/sources/agent-prompts/prompts/01-discovery-and-model-proposal.md +42 -0
  151. package/examples/immeuble/sources/agent-prompts/prompts/02-ontology-register.md +44 -0
  152. package/examples/immeuble/sources/agent-prompts/prompts/03-gap-rules-design.md +44 -0
  153. package/examples/immeuble/sources/agent-prompts/prompts/04-document-ingest.md +40 -0
  154. package/examples/immeuble/sources/agent-prompts/prompts/05-graph-extraction.md +44 -0
  155. package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare-immo-mcp.md +109 -0
  156. package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare-test-immo-mcp3.md +30 -0
  157. package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare.md +63 -0
  158. package/examples/immeuble/sources/checklists/gap-rules-checklist.md +42 -0
  159. package/examples/immeuble/sources/checklists/ontology-checklist.md +54 -0
  160. package/examples/immeuble/sources/documents/README.md +42 -0
  161. package/examples/immeuble/sources/documents/annexes-caves-garages-jardins.md +8 -0
  162. package/examples/immeuble/sources/documents/annexes-jardins-garages.md +1 -0
  163. package/examples/immeuble/sources/documents/baux-erables.md +1 -0
  164. package/examples/immeuble/sources/documents/baux-locatifs.md +11 -0
  165. package/examples/immeuble/sources/documents/coda-janvier-2026.md +10 -0
  166. package/examples/immeuble/sources/documents/composition-menages.md +1 -0
  167. package/examples/immeuble/sources/documents/composition-occupants.md +18 -0
  168. package/examples/immeuble/sources/documents/expected-coverage.json +70 -0
  169. package/examples/immeuble/sources/documents/extrait-coda-janvier-2026.md +1 -0
  170. package/examples/immeuble/sources/documents/groupes-facturation.md +30 -0
  171. package/examples/immeuble/sources/documents/manifest.json +79 -0
  172. package/examples/immeuble/sources/documents/note-architecte-chantier-erables.md +3 -0
  173. package/examples/immeuble/sources/documents/permis-urbanisme-erables.md +3 -0
  174. package/examples/immeuble/sources/documents/procedures-operationnelles.md +3 -0
  175. package/examples/immeuble/sources/documents/pv-ag-budget-2026.md +1 -0
  176. package/examples/immeuble/sources/documents/pv-reception-reserves-erables.md +3 -0
  177. package/examples/immeuble/sources/documents/registre-coproprietaires.md +24 -0
  178. package/examples/immeuble/sources/documents/reglement-copropriete-tilleuls.md +1 -0
  179. package/examples/immeuble/sources/documents/statuts-erables.md +22 -0
  180. package/examples/immeuble/sources/documents/statuts-tilleuls.md +19 -0
  181. package/examples/immeuble/sources/documents/succession-jean-dupont.md +3 -0
  182. package/examples/immeuble/sources/documents/titre-propriete-tilleuls-a3.md +1 -0
  183. package/examples/immeuble/sources/documents/trous-pedagogiques.md +3 -0
  184. package/examples/immeuble/sources/ontology/README.md +1 -0
  185. package/examples/immeuble/sources/ontology/core.yaml +444 -0
  186. package/examples/immeuble/success-criteria.yaml +35 -0
  187. package/fixtures/immeuble-demo.sqlite +0 -0
  188. package/package.json +11 -2
  189. package/scripts/lib/sqlite-runtime.mjs +1 -1
  190. package/scripts/load-immeuble-demo.sh +103 -0
  191. package/scripts/seed-immeuble-projections.mjs +75 -148
  192. package/scripts/verify-immeuble-demo-sources.mjs +93 -0
  193. package/scripts/verify-immeuble-demo.mjs +69 -0
  194. package/build/client/_app/immutable/chunks/D0UIlUGZ.js.br +0 -0
  195. package/build/client/_app/immutable/chunks/D0UIlUGZ.js.gz +0 -0
  196. package/build/client/_app/immutable/entry/app.CR-imLox.js.br +0 -0
  197. package/build/client/_app/immutable/entry/app.CR-imLox.js.gz +0 -0
  198. package/build/client/_app/immutable/entry/start.DV-AjeAB.js +0 -1
  199. package/build/client/_app/immutable/entry/start.DV-AjeAB.js.br +0 -2
  200. package/build/client/_app/immutable/entry/start.DV-AjeAB.js.gz +0 -0
  201. package/build/client/_app/immutable/nodes/1.CTEedoSY.js.br +0 -0
  202. package/build/client/_app/immutable/nodes/1.CTEedoSY.js.gz +0 -0
@@ -0,0 +1,1596 @@
1
+ {
2
+ "workspace_id": "immeuble",
3
+ "db_path": "/tmp/immeuble-lab-starterkit-strict.sqlite",
4
+ "generated_at": "2026-06-14T14:57:25.897Z",
5
+ "active_lenses": [
6
+ "blind_spot_manager",
7
+ "jtbd_human",
8
+ "jtbd_ai"
9
+ ],
10
+ "role": "gestionnaire_syndic",
11
+ "model_contract_path": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/model_contract.json",
12
+ "summary": {
13
+ "candidate_count": 13,
14
+ "materialized_count": 0,
15
+ "unique_materialized_scope_count": 0,
16
+ "analysis_lens_count": 9,
17
+ "projection_catalog_count": 4,
18
+ "manager_questions_count": 0,
19
+ "source_table_count": 0,
20
+ "total_count": 13,
21
+ "by_artifact_kind": {
22
+ "analysis_plan": 10,
23
+ "live_answer_view": 3
24
+ }
25
+ },
26
+ "model_impacts": {
27
+ "lens_candidate_count": 9,
28
+ "by_lens": {
29
+ "blind_spot_manager": 5,
30
+ "jtbd_human": 2,
31
+ "jtbd_ai": 2
32
+ },
33
+ "required_schemas": [
34
+ "immeuble:core:building",
35
+ "immeuble:core:charge_call",
36
+ "immeuble:core:coda_entry",
37
+ "immeuble:core:decision",
38
+ "immeuble:core:household",
39
+ "immeuble:core:lease_contract",
40
+ "immeuble:core:person",
41
+ "immeuble:core:receipt",
42
+ "immeuble:core:reminder",
43
+ "immeuble:core:shared_equipment",
44
+ "immeuble:core:shared_space",
45
+ "immeuble:core:unit"
46
+ ],
47
+ "required_facets": [
48
+ "building.quota_basis",
49
+ "charge_call.amount",
50
+ "coda_entry.amount",
51
+ "coda_entry.status",
52
+ "decision.date",
53
+ "household.household_status",
54
+ "lease_contract.monthly_rent",
55
+ "lease_contract.validFrom",
56
+ "person.name",
57
+ "receipt.amount",
58
+ "reminder.amount_due",
59
+ "reminder.level",
60
+ "shared_equipment.equipment_type",
61
+ "shared_space.category",
62
+ "unit.quota_basis",
63
+ "unit.tantiemes",
64
+ "unit.usage_status"
65
+ ],
66
+ "required_edges": [
67
+ "ALLOCATED_TO",
68
+ "CONTAINS",
69
+ "LEASES",
70
+ "MATCHED_TO",
71
+ "OCCUPIES",
72
+ "OWNS",
73
+ "PRIMARY_RESIDENCE_OF",
74
+ "RENTED_TO",
75
+ "REQUIRES_REVIEW",
76
+ "USES_COMMON"
77
+ ]
78
+ },
79
+ "validation_gaps": {
80
+ "extension_schemas": [
81
+ "immeuble:core:charge_call",
82
+ "immeuble:core:decision",
83
+ "immeuble:core:household",
84
+ "immeuble:core:receipt",
85
+ "immeuble:core:reminder",
86
+ "immeuble:core:shared_equipment",
87
+ "immeuble:core:shared_space"
88
+ ],
89
+ "extension_facets": [
90
+ "charge_call.amount",
91
+ "coda_entry.status",
92
+ "decision.date",
93
+ "household.household_status",
94
+ "receipt.amount",
95
+ "reminder.amount_due",
96
+ "reminder.level",
97
+ "shared_equipment.equipment_type",
98
+ "shared_space.category"
99
+ ],
100
+ "extension_edges": [
101
+ "ALLOCATED_TO",
102
+ "OWNS",
103
+ "PRIMARY_RESIDENCE_OF",
104
+ "REQUIRES_REVIEW",
105
+ "USES_COMMON"
106
+ ],
107
+ "unknown_schemas": [],
108
+ "unknown_facets": [],
109
+ "unknown_edges": [],
110
+ "contract_checked": true
111
+ },
112
+ "by_ontology": {
113
+ "competency": [
114
+ {
115
+ "name": "immeuble_competency_questions",
116
+ "label": "Plan d'analyse immeuble — questions métier",
117
+ "ontology": "competency",
118
+ "description": "Six questions de compétence du narratif Tilleuls/Érables",
119
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
120
+ "source_section": "projection_catalog.yaml",
121
+ "expected_scope": "immeuble:competency:questions",
122
+ "suggested_proj_type": "FACT",
123
+ "suggested_artifact_kind": "analysis_plan",
124
+ "materialization_target": "ghostcrab_project",
125
+ "retrieval_jobs": [
126
+ "summary"
127
+ ],
128
+ "kpi_hints": [],
129
+ "data_dependencies": [
130
+ "immeuble:core:building",
131
+ "immeuble:core:unit",
132
+ "immeuble:core:lease_contract",
133
+ "immeuble:core:coda_entry"
134
+ ],
135
+ "materialization_status": "candidate",
136
+ "recommendation": "add",
137
+ "business_question": "Quelles questions métier le workspace immeuble doit-il pouvoir traiter ?",
138
+ "origin": "projection_catalog",
139
+ "lens": "",
140
+ "role": "",
141
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
142
+ "required_schemas": [
143
+ "immeuble:core:building",
144
+ "immeuble:core:unit",
145
+ "immeuble:core:lease_contract",
146
+ "immeuble:core:coda_entry"
147
+ ],
148
+ "required_facets": [
149
+ "building.name",
150
+ "unit.usage_status",
151
+ "lease_contract.validFrom",
152
+ "coda_entry.amount"
153
+ ],
154
+ "required_edges": [
155
+ "CONTAINS",
156
+ "LEASES",
157
+ "MATCHED_TO"
158
+ ],
159
+ "human_jobs": [],
160
+ "ai_agent_jobs": [],
161
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
162
+ "pattern_tags": [],
163
+ "confidence": 1
164
+ }
165
+ ],
166
+ "core": [
167
+ {
168
+ "name": "annuaire_coproprietes",
169
+ "label": "Annuaire immeubles gérés",
170
+ "ontology": "core",
171
+ "description": "Fiche synthétique des immeubles (buildings) du portefeuille",
172
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
173
+ "source_section": "projection_catalog.yaml",
174
+ "expected_scope": "immeuble:core:annuaire_coproprietes",
175
+ "suggested_proj_type": "FACT",
176
+ "suggested_artifact_kind": "live_answer_view",
177
+ "materialization_target": "answer_artifact_seed",
178
+ "retrieval_jobs": [
179
+ "summary"
180
+ ],
181
+ "kpi_hints": [],
182
+ "data_dependencies": [
183
+ "immeuble:core:building",
184
+ "immeuble:core:block"
185
+ ],
186
+ "materialization_status": "candidate",
187
+ "recommendation": "add",
188
+ "business_question": "Quels immeubles sont gérés et où sont-ils situés ?",
189
+ "origin": "projection_catalog",
190
+ "lens": "",
191
+ "role": "",
192
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
193
+ "required_schemas": [
194
+ "immeuble:core:building",
195
+ "immeuble:core:block"
196
+ ],
197
+ "required_facets": [
198
+ "building.address",
199
+ "building.name",
200
+ "building.quota_basis",
201
+ "block.name"
202
+ ],
203
+ "required_edges": [
204
+ "CONTAINS"
205
+ ],
206
+ "human_jobs": [],
207
+ "ai_agent_jobs": [],
208
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
209
+ "pattern_tags": [],
210
+ "confidence": 1
211
+ },
212
+ {
213
+ "name": "baux_actifs",
214
+ "label": "Baux locatifs actifs",
215
+ "ontology": "core",
216
+ "description": "Appartements loués, locataires et dates de bail",
217
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
218
+ "source_section": "projection_catalog.yaml",
219
+ "expected_scope": "immeuble:core:baux_actifs",
220
+ "suggested_proj_type": "FACT",
221
+ "suggested_artifact_kind": "live_answer_view",
222
+ "materialization_target": "answer_artifact_seed",
223
+ "retrieval_jobs": [
224
+ "summary"
225
+ ],
226
+ "kpi_hints": [],
227
+ "data_dependencies": [
228
+ "immeuble:core:unit",
229
+ "immeuble:core:lease_contract",
230
+ "immeuble:core:person"
231
+ ],
232
+ "materialization_status": "candidate",
233
+ "recommendation": "add",
234
+ "business_question": "Quels appartements sont loués, à qui, depuis quelle date ?",
235
+ "origin": "projection_catalog",
236
+ "lens": "",
237
+ "role": "",
238
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
239
+ "required_schemas": [
240
+ "immeuble:core:unit",
241
+ "immeuble:core:lease_contract",
242
+ "immeuble:core:person"
243
+ ],
244
+ "required_facets": [
245
+ "unit.usage_status",
246
+ "unit.lot",
247
+ "lease_contract.validFrom",
248
+ "lease_contract.monthly_rent",
249
+ "person.name"
250
+ ],
251
+ "required_edges": [
252
+ "LEASES",
253
+ "RENTED_TO",
254
+ "OCCUPIES"
255
+ ],
256
+ "human_jobs": [],
257
+ "ai_agent_jobs": [],
258
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
259
+ "pattern_tags": [],
260
+ "confidence": 1
261
+ },
262
+ {
263
+ "name": "quotites_par_immeuble",
264
+ "label": "Quotités par immeuble",
265
+ "ontology": "core",
266
+ "description": "Vérification quota_basis = 1000 par building",
267
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
268
+ "source_section": "projection_catalog.yaml",
269
+ "expected_scope": "immeuble:core:quotites_par_immeuble",
270
+ "suggested_proj_type": "FACT",
271
+ "suggested_artifact_kind": "live_answer_view",
272
+ "materialization_target": "answer_artifact_seed",
273
+ "retrieval_jobs": [
274
+ "summary"
275
+ ],
276
+ "kpi_hints": [],
277
+ "data_dependencies": [
278
+ "immeuble:core:building",
279
+ "immeuble:core:unit"
280
+ ],
281
+ "materialization_status": "candidate",
282
+ "recommendation": "add",
283
+ "business_question": "Les quotités de chaque immeuble totalisent-elles 1000 ?",
284
+ "origin": "projection_catalog",
285
+ "lens": "",
286
+ "role": "",
287
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
288
+ "required_schemas": [
289
+ "immeuble:core:building",
290
+ "immeuble:core:unit"
291
+ ],
292
+ "required_facets": [
293
+ "building.quota_basis",
294
+ "unit.tantiemes",
295
+ "unit.quota_basis"
296
+ ],
297
+ "required_edges": [
298
+ "CONTAINS"
299
+ ],
300
+ "human_jobs": [],
301
+ "ai_agent_jobs": [],
302
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
303
+ "pattern_tags": [],
304
+ "confidence": 1
305
+ }
306
+ ],
307
+ "gestionnaire_syndic": [
308
+ {
309
+ "name": "impayes_et_relances",
310
+ "label": "Impayes et relances en cours",
311
+ "ontology": "gestionnaire_syndic",
312
+ "description": "Detecte les impayes partiels et les relances non traitees.",
313
+ "source_file": "analysis_lens",
314
+ "source_section": "blind_spot_manager",
315
+ "expected_scope": "immeuble:gestionnaire_syndic:impayes_et_relances",
316
+ "suggested_proj_type": "CONSTRAINT",
317
+ "suggested_artifact_kind": "analysis_plan",
318
+ "materialization_target": "ghostcrab_project",
319
+ "retrieval_jobs": [
320
+ "monitor",
321
+ "summary"
322
+ ],
323
+ "kpi_hints": [
324
+ "unpaid_count",
325
+ "reminder_level_count"
326
+ ],
327
+ "data_dependencies": [
328
+ "immeuble:core:charge_call",
329
+ "immeuble:core:receipt",
330
+ "immeuble:core:reminder"
331
+ ],
332
+ "materialization_status": "candidate",
333
+ "recommendation": "add",
334
+ "business_question": "Quels coproprietaires ont des impayes ou relances actives ?",
335
+ "origin": "analysis_lens",
336
+ "lens": "blind_spot_manager",
337
+ "role": "gestionnaire_syndic",
338
+ "materialization_warning": "",
339
+ "required_schemas": [
340
+ "immeuble:core:receipt",
341
+ "immeuble:core:reminder",
342
+ "immeuble:core:charge_call"
343
+ ],
344
+ "required_facets": [
345
+ "receipt.amount",
346
+ "reminder.level",
347
+ "reminder.amount_due",
348
+ "charge_call.amount"
349
+ ],
350
+ "required_edges": [
351
+ "REQUIRES_REVIEW",
352
+ "MATCHED_TO"
353
+ ],
354
+ "human_jobs": [
355
+ "relancer les impayes",
356
+ "prioriser les relances"
357
+ ],
358
+ "ai_agent_jobs": [
359
+ "detecter impayes partiels",
360
+ "agreger par copropriete"
361
+ ],
362
+ "impact_summary": "Ajoute une projection de suivi impayes avec facettes montant et niveau de relance.",
363
+ "pattern_tags": [
364
+ "finance",
365
+ "reminder",
366
+ "syndic"
367
+ ],
368
+ "confidence": 0.8
369
+ },
370
+ {
371
+ "name": "baux_echeance",
372
+ "label": "Baux proches de l'echeance",
373
+ "ontology": "gestionnaire_syndic",
374
+ "description": "Anticipe les renouvellements et vacances locatives.",
375
+ "source_file": "analysis_lens",
376
+ "source_section": "blind_spot_manager",
377
+ "expected_scope": "immeuble:gestionnaire_syndic:baux_echeance",
378
+ "suggested_proj_type": "STEP",
379
+ "suggested_artifact_kind": "analysis_plan",
380
+ "materialization_target": "ghostcrab_project",
381
+ "retrieval_jobs": [
382
+ "monitor",
383
+ "list"
384
+ ],
385
+ "kpi_hints": [
386
+ "expiring_lease_count"
387
+ ],
388
+ "data_dependencies": [
389
+ "immeuble:core:lease_contract",
390
+ "immeuble:core:unit"
391
+ ],
392
+ "materialization_status": "candidate",
393
+ "recommendation": "add",
394
+ "business_question": "Quels baux arrivent a echeance dans les 90 prochains jours ?",
395
+ "origin": "analysis_lens",
396
+ "lens": "blind_spot_manager",
397
+ "role": "gestionnaire_syndic",
398
+ "materialization_warning": "",
399
+ "required_schemas": [
400
+ "immeuble:core:lease_contract",
401
+ "immeuble:core:unit"
402
+ ],
403
+ "required_facets": [
404
+ "lease_contract.validFrom",
405
+ "lease_contract.monthly_rent",
406
+ "unit.usage_status"
407
+ ],
408
+ "required_edges": [
409
+ "LEASES",
410
+ "RENTED_TO"
411
+ ],
412
+ "human_jobs": [
413
+ "planifier renouvellement",
414
+ "anticiper vacance"
415
+ ],
416
+ "ai_agent_jobs": [
417
+ "calculer echeances",
418
+ "alerter gestionnaire"
419
+ ],
420
+ "impact_summary": "Connecte baux, lots et menages pour pilotage locatif.",
421
+ "pattern_tags": [
422
+ "lease",
423
+ "expiry",
424
+ "tenant"
425
+ ],
426
+ "confidence": 0.8
427
+ },
428
+ {
429
+ "name": "quotites_anomalie",
430
+ "label": "Anomalies de quotites",
431
+ "ontology": "gestionnaire_syndic",
432
+ "description": "Verifie la coherence des tantiemes par building.",
433
+ "source_file": "analysis_lens",
434
+ "source_section": "blind_spot_manager",
435
+ "expected_scope": "immeuble:gestionnaire_syndic:quotites_anomalie",
436
+ "suggested_proj_type": "CONSTRAINT",
437
+ "suggested_artifact_kind": "analysis_plan",
438
+ "materialization_target": "ghostcrab_project",
439
+ "retrieval_jobs": [
440
+ "aggregate",
441
+ "summary"
442
+ ],
443
+ "kpi_hints": [
444
+ "quota_delta",
445
+ "anomaly_building_count"
446
+ ],
447
+ "data_dependencies": [
448
+ "immeuble:core:building",
449
+ "immeuble:core:unit"
450
+ ],
451
+ "materialization_status": "candidate",
452
+ "recommendation": "add",
453
+ "business_question": "Quels immeubles ont des quotites qui ne totalisent pas le quota_basis ?",
454
+ "origin": "analysis_lens",
455
+ "lens": "blind_spot_manager",
456
+ "role": "gestionnaire_syndic",
457
+ "materialization_warning": "",
458
+ "required_schemas": [
459
+ "immeuble:core:building",
460
+ "immeuble:core:unit"
461
+ ],
462
+ "required_facets": [
463
+ "building.quota_basis",
464
+ "unit.tantiemes",
465
+ "unit.quota_basis"
466
+ ],
467
+ "required_edges": [
468
+ "CONTAINS"
469
+ ],
470
+ "human_jobs": [
471
+ "corriger les tantiemes",
472
+ "valider AG"
473
+ ],
474
+ "ai_agent_jobs": [
475
+ "sommer tantiemes par building",
476
+ "signaler ecarts"
477
+ ],
478
+ "impact_summary": "Projection de controle quotites pour conformite copropriete.",
479
+ "pattern_tags": [
480
+ "quota",
481
+ "tantiemes",
482
+ "validation"
483
+ ],
484
+ "confidence": 0.8
485
+ },
486
+ {
487
+ "name": "occupation_orpheline",
488
+ "label": "Lots sans occupation declaree",
489
+ "ontology": "gestionnaire_syndic",
490
+ "description": "Repere les lots vacants ou mal renseignes.",
491
+ "source_file": "analysis_lens",
492
+ "source_section": "blind_spot_manager",
493
+ "expected_scope": "immeuble:gestionnaire_syndic:occupation_orpheline",
494
+ "suggested_proj_type": "FACT",
495
+ "suggested_artifact_kind": "analysis_plan",
496
+ "materialization_target": "ghostcrab_project",
497
+ "retrieval_jobs": [
498
+ "monitor",
499
+ "graph_traversal"
500
+ ],
501
+ "kpi_hints": [
502
+ "vacant_unit_count",
503
+ "orphan_occupancy_count"
504
+ ],
505
+ "data_dependencies": [
506
+ "immeuble:core:household",
507
+ "immeuble:core:person",
508
+ "immeuble:core:unit"
509
+ ],
510
+ "materialization_status": "candidate",
511
+ "recommendation": "add",
512
+ "business_question": "Quels lots n'ont ni proprietaire occupant ni locataire declare ?",
513
+ "origin": "analysis_lens",
514
+ "lens": "blind_spot_manager",
515
+ "role": "gestionnaire_syndic",
516
+ "materialization_warning": "",
517
+ "required_schemas": [
518
+ "immeuble:core:unit",
519
+ "immeuble:core:person",
520
+ "immeuble:core:household"
521
+ ],
522
+ "required_facets": [
523
+ "unit.usage_status",
524
+ "person.name",
525
+ "household.household_status"
526
+ ],
527
+ "required_edges": [
528
+ "OCCUPIES",
529
+ "OWNS",
530
+ "PRIMARY_RESIDENCE_OF"
531
+ ],
532
+ "human_jobs": [
533
+ "clarifier occupation",
534
+ "mettre a jour registre"
535
+ ],
536
+ "ai_agent_jobs": [
537
+ "detecter lots sans lien occupation",
538
+ "croiser baux et menages"
539
+ ],
540
+ "impact_summary": "Ameliore la fiabilite du registre des occupations.",
541
+ "pattern_tags": [
542
+ "occupancy",
543
+ "vacant",
544
+ "data_quality"
545
+ ],
546
+ "confidence": 0.8
547
+ },
548
+ {
549
+ "name": "manager_attention_today",
550
+ "label": "Top actions manager du jour",
551
+ "ontology": "gestionnaire_syndic",
552
+ "description": "Resume les arbitrages qui changent le resultat de la journee.",
553
+ "source_file": "analysis_lens",
554
+ "source_section": "blind_spot_manager",
555
+ "expected_scope": "immeuble:gestionnaire_syndic:manager_attention_today",
556
+ "suggested_proj_type": "STEP",
557
+ "suggested_artifact_kind": "analysis_plan",
558
+ "materialization_target": "ghostcrab_project",
559
+ "retrieval_jobs": [
560
+ "summary",
561
+ "monitor"
562
+ ],
563
+ "kpi_hints": [
564
+ "top_action_count",
565
+ "overdue_critical_count"
566
+ ],
567
+ "data_dependencies": [
568
+ "immeuble:core:decision",
569
+ "immeuble:core:lease_contract",
570
+ "immeuble:core:reminder"
571
+ ],
572
+ "materialization_status": "candidate",
573
+ "recommendation": "add",
574
+ "business_question": "Quelles 3 a 5 actions doivent remonter au gestionnaire aujourd'hui ?",
575
+ "origin": "analysis_lens",
576
+ "lens": "blind_spot_manager",
577
+ "role": "gestionnaire_syndic",
578
+ "materialization_warning": "",
579
+ "required_schemas": [
580
+ "immeuble:core:reminder",
581
+ "immeuble:core:decision",
582
+ "immeuble:core:lease_contract"
583
+ ],
584
+ "required_facets": [
585
+ "reminder.level",
586
+ "decision.date",
587
+ "lease_contract.validFrom"
588
+ ],
589
+ "required_edges": [
590
+ "REQUIRES_REVIEW",
591
+ "LEASES"
592
+ ],
593
+ "human_jobs": [
594
+ "savoir quoi traiter aujourd'hui"
595
+ ],
596
+ "ai_agent_jobs": [
597
+ "prioriser par impact et urgence"
598
+ ],
599
+ "impact_summary": "Projection d'attention quotidienne consommant les autres signaux.",
600
+ "pattern_tags": [
601
+ "attention",
602
+ "daily_brief",
603
+ "prioritization"
604
+ ],
605
+ "confidence": 0.8
606
+ },
607
+ {
608
+ "name": "gestionnaire_decide_arbitrer",
609
+ "label": "JTBD gestionnaire: arbitrer avec preuves",
610
+ "ontology": "gestionnaire_syndic",
611
+ "description": "Vue d'arbitrage humain: preuves, confiance, responsabilite et impact.",
612
+ "source_file": "analysis_lens",
613
+ "source_section": "jtbd_human",
614
+ "expected_scope": "immeuble:gestionnaire_syndic:gestionnaire_decide_arbitrer",
615
+ "suggested_proj_type": "STEP",
616
+ "suggested_artifact_kind": "analysis_plan",
617
+ "materialization_target": "ghostcrab_project",
618
+ "retrieval_jobs": [
619
+ "summary",
620
+ "monitor",
621
+ "graph_traversal"
622
+ ],
623
+ "kpi_hints": [
624
+ "decision_confidence",
625
+ "evidence_gap_count"
626
+ ],
627
+ "data_dependencies": [
628
+ "immeuble:core:coda_entry",
629
+ "immeuble:core:decision",
630
+ "immeuble:core:reminder"
631
+ ],
632
+ "materialization_status": "candidate",
633
+ "recommendation": "add",
634
+ "business_question": "Quand plusieurs signaux se contredisent, quelle decision puis-je prendre avec suffisamment de preuves ?",
635
+ "origin": "analysis_lens",
636
+ "lens": "jtbd_human",
637
+ "role": "gestionnaire_syndic",
638
+ "materialization_warning": "",
639
+ "required_schemas": [
640
+ "immeuble:core:decision",
641
+ "immeuble:core:reminder",
642
+ "immeuble:core:coda_entry"
643
+ ],
644
+ "required_facets": [
645
+ "decision.date",
646
+ "coda_entry.amount",
647
+ "coda_entry.status"
648
+ ],
649
+ "required_edges": [
650
+ "MATCHED_TO",
651
+ "REQUIRES_REVIEW"
652
+ ],
653
+ "human_jobs": [
654
+ "decider",
655
+ "arbitrer",
656
+ "expliquer la decision"
657
+ ],
658
+ "ai_agent_jobs": [
659
+ "compiler preuves",
660
+ "montrer contradictions"
661
+ ],
662
+ "impact_summary": "Projection d'aide a la decision centree sur preuve et confiance.",
663
+ "pattern_tags": [
664
+ "jtbd",
665
+ "human_manager",
666
+ "decision"
667
+ ],
668
+ "confidence": 0.8
669
+ },
670
+ {
671
+ "name": "syndic_coordinate_intervention",
672
+ "label": "JTBD syndic: coordonner la prochaine intervention",
673
+ "ontology": "gestionnaire_syndic",
674
+ "description": "Vue terrain: acces, preconditions, equipements communs.",
675
+ "source_file": "analysis_lens",
676
+ "source_section": "jtbd_human",
677
+ "expected_scope": "immeuble:gestionnaire_syndic:syndic_coordinate_intervention",
678
+ "suggested_proj_type": "STEP",
679
+ "suggested_artifact_kind": "analysis_plan",
680
+ "materialization_target": "ghostcrab_project",
681
+ "retrieval_jobs": [
682
+ "monitor",
683
+ "graph_traversal"
684
+ ],
685
+ "kpi_hints": [
686
+ "ready_intervention_count",
687
+ "blocked_intervention_count"
688
+ ],
689
+ "data_dependencies": [
690
+ "immeuble:core:shared_equipment",
691
+ "immeuble:core:shared_space",
692
+ "immeuble:core:unit"
693
+ ],
694
+ "materialization_status": "candidate",
695
+ "recommendation": "add",
696
+ "business_question": "Que faut-il coordonner pour la prochaine intervention sur un lot ou une zone commune ?",
697
+ "origin": "analysis_lens",
698
+ "lens": "jtbd_human",
699
+ "role": "gestionnaire_syndic",
700
+ "materialization_warning": "",
701
+ "required_schemas": [
702
+ "immeuble:core:unit",
703
+ "immeuble:core:shared_space",
704
+ "immeuble:core:shared_equipment"
705
+ ],
706
+ "required_facets": [
707
+ "unit.usage_status",
708
+ "shared_space.category",
709
+ "shared_equipment.equipment_type"
710
+ ],
711
+ "required_edges": [
712
+ "CONTAINS",
713
+ "USES_COMMON"
714
+ ],
715
+ "human_jobs": [
716
+ "coordonner intervention",
717
+ "eviter attente"
718
+ ],
719
+ "ai_agent_jobs": [
720
+ "verifier preconditions",
721
+ "detecter conflits ressources"
722
+ ],
723
+ "impact_summary": "Complete les projections manager avec une vue execution terrain.",
724
+ "pattern_tags": [
725
+ "jtbd",
726
+ "syndic",
727
+ "coordination"
728
+ ],
729
+ "confidence": 0.8
730
+ },
731
+ {
732
+ "name": "agent_watchtower_prioritize",
733
+ "label": "JTBD agent IA: tour de controle priorisee",
734
+ "ontology": "gestionnaire_syndic",
735
+ "description": "Role agent IA de veille: filtrage, explication, priorisation.",
736
+ "source_file": "analysis_lens",
737
+ "source_section": "jtbd_ai",
738
+ "expected_scope": "immeuble:gestionnaire_syndic:agent_watchtower_prioritize",
739
+ "suggested_proj_type": "STEP",
740
+ "suggested_artifact_kind": "analysis_plan",
741
+ "materialization_target": "ghostcrab_project",
742
+ "retrieval_jobs": [
743
+ "monitor",
744
+ "summary"
745
+ ],
746
+ "kpi_hints": [
747
+ "signal_to_noise_ratio",
748
+ "escalated_signal_count"
749
+ ],
750
+ "data_dependencies": [
751
+ "immeuble:core:lease_contract",
752
+ "immeuble:core:reminder",
753
+ "immeuble:core:unit"
754
+ ],
755
+ "materialization_status": "candidate",
756
+ "recommendation": "add",
757
+ "business_question": "Quels signaux dois-je surveiller et remonter sans saturer le gestionnaire ?",
758
+ "origin": "analysis_lens",
759
+ "lens": "jtbd_ai",
760
+ "role": "gestionnaire_syndic",
761
+ "materialization_warning": "",
762
+ "required_schemas": [
763
+ "immeuble:core:reminder",
764
+ "immeuble:core:lease_contract",
765
+ "immeuble:core:unit"
766
+ ],
767
+ "required_facets": [
768
+ "reminder.level",
769
+ "lease_contract.validFrom",
770
+ "unit.usage_status"
771
+ ],
772
+ "required_edges": [
773
+ "REQUIRES_REVIEW",
774
+ "LEASES"
775
+ ],
776
+ "human_jobs": [
777
+ "recevoir uniquement les sujets qui meritent attention"
778
+ ],
779
+ "ai_agent_jobs": [
780
+ "surveiller",
781
+ "prioriser",
782
+ "expliquer",
783
+ "escalader"
784
+ ],
785
+ "impact_summary": "Formalise une projection consommee par agent IA avant synthese humaine.",
786
+ "pattern_tags": [
787
+ "jtbd",
788
+ "ai_agent",
789
+ "watchtower"
790
+ ],
791
+ "confidence": 0.8
792
+ },
793
+ {
794
+ "name": "agent_reconciliation_detective",
795
+ "label": "JTBD agent IA: detective de reconciliation CODA",
796
+ "ontology": "gestionnaire_syndic",
797
+ "description": "Role agent IA de qualite de donnees: rapprochement finance.",
798
+ "source_file": "analysis_lens",
799
+ "source_section": "jtbd_ai",
800
+ "expected_scope": "immeuble:gestionnaire_syndic:agent_reconciliation_detective",
801
+ "suggested_proj_type": "CONSTRAINT",
802
+ "suggested_artifact_kind": "analysis_plan",
803
+ "materialization_target": "ghostcrab_project",
804
+ "retrieval_jobs": [
805
+ "monitor",
806
+ "graph_traversal"
807
+ ],
808
+ "kpi_hints": [
809
+ "reconciliation_issue_count",
810
+ "unmatched_coda_count"
811
+ ],
812
+ "data_dependencies": [
813
+ "immeuble:core:charge_call",
814
+ "immeuble:core:coda_entry",
815
+ "immeuble:core:receipt"
816
+ ],
817
+ "materialization_status": "candidate",
818
+ "recommendation": "add",
819
+ "business_question": "Quelles incoherences entre paiements CODA et appels de charges dois-je investiguer ?",
820
+ "origin": "analysis_lens",
821
+ "lens": "jtbd_ai",
822
+ "role": "gestionnaire_syndic",
823
+ "materialization_warning": "",
824
+ "required_schemas": [
825
+ "immeuble:core:coda_entry",
826
+ "immeuble:core:charge_call",
827
+ "immeuble:core:receipt"
828
+ ],
829
+ "required_facets": [
830
+ "coda_entry.amount",
831
+ "coda_entry.status",
832
+ "charge_call.amount",
833
+ "receipt.amount"
834
+ ],
835
+ "required_edges": [
836
+ "MATCHED_TO",
837
+ "ALLOCATED_TO"
838
+ ],
839
+ "human_jobs": [
840
+ "etre alerte quand la donnee n'est pas fiable"
841
+ ],
842
+ "ai_agent_jobs": [
843
+ "rapprocher",
844
+ "verifier",
845
+ "investiguer"
846
+ ],
847
+ "impact_summary": "Projection agent specialisee reconciliation finance.",
848
+ "pattern_tags": [
849
+ "jtbd",
850
+ "ai_agent",
851
+ "reconciliation"
852
+ ],
853
+ "confidence": 0.8
854
+ }
855
+ ]
856
+ },
857
+ "candidates": [
858
+ {
859
+ "name": "immeuble_competency_questions",
860
+ "label": "Plan d'analyse immeuble — questions métier",
861
+ "ontology": "competency",
862
+ "description": "Six questions de compétence du narratif Tilleuls/Érables",
863
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
864
+ "source_section": "projection_catalog.yaml",
865
+ "expected_scope": "immeuble:competency:questions",
866
+ "suggested_proj_type": "FACT",
867
+ "suggested_artifact_kind": "analysis_plan",
868
+ "materialization_target": "ghostcrab_project",
869
+ "retrieval_jobs": [
870
+ "summary"
871
+ ],
872
+ "kpi_hints": [],
873
+ "data_dependencies": [
874
+ "immeuble:core:building",
875
+ "immeuble:core:unit",
876
+ "immeuble:core:lease_contract",
877
+ "immeuble:core:coda_entry"
878
+ ],
879
+ "materialization_status": "candidate",
880
+ "recommendation": "add",
881
+ "business_question": "Quelles questions métier le workspace immeuble doit-il pouvoir traiter ?",
882
+ "origin": "projection_catalog",
883
+ "lens": "",
884
+ "role": "",
885
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
886
+ "required_schemas": [
887
+ "immeuble:core:building",
888
+ "immeuble:core:unit",
889
+ "immeuble:core:lease_contract",
890
+ "immeuble:core:coda_entry"
891
+ ],
892
+ "required_facets": [
893
+ "building.name",
894
+ "unit.usage_status",
895
+ "lease_contract.validFrom",
896
+ "coda_entry.amount"
897
+ ],
898
+ "required_edges": [
899
+ "CONTAINS",
900
+ "LEASES",
901
+ "MATCHED_TO"
902
+ ],
903
+ "human_jobs": [],
904
+ "ai_agent_jobs": [],
905
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
906
+ "pattern_tags": [],
907
+ "confidence": 1
908
+ },
909
+ {
910
+ "name": "annuaire_coproprietes",
911
+ "label": "Annuaire immeubles gérés",
912
+ "ontology": "core",
913
+ "description": "Fiche synthétique des immeubles (buildings) du portefeuille",
914
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
915
+ "source_section": "projection_catalog.yaml",
916
+ "expected_scope": "immeuble:core:annuaire_coproprietes",
917
+ "suggested_proj_type": "FACT",
918
+ "suggested_artifact_kind": "live_answer_view",
919
+ "materialization_target": "answer_artifact_seed",
920
+ "retrieval_jobs": [
921
+ "summary"
922
+ ],
923
+ "kpi_hints": [],
924
+ "data_dependencies": [
925
+ "immeuble:core:building",
926
+ "immeuble:core:block"
927
+ ],
928
+ "materialization_status": "candidate",
929
+ "recommendation": "add",
930
+ "business_question": "Quels immeubles sont gérés et où sont-ils situés ?",
931
+ "origin": "projection_catalog",
932
+ "lens": "",
933
+ "role": "",
934
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
935
+ "required_schemas": [
936
+ "immeuble:core:building",
937
+ "immeuble:core:block"
938
+ ],
939
+ "required_facets": [
940
+ "building.address",
941
+ "building.name",
942
+ "building.quota_basis",
943
+ "block.name"
944
+ ],
945
+ "required_edges": [
946
+ "CONTAINS"
947
+ ],
948
+ "human_jobs": [],
949
+ "ai_agent_jobs": [],
950
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
951
+ "pattern_tags": [],
952
+ "confidence": 1
953
+ },
954
+ {
955
+ "name": "baux_actifs",
956
+ "label": "Baux locatifs actifs",
957
+ "ontology": "core",
958
+ "description": "Appartements loués, locataires et dates de bail",
959
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
960
+ "source_section": "projection_catalog.yaml",
961
+ "expected_scope": "immeuble:core:baux_actifs",
962
+ "suggested_proj_type": "FACT",
963
+ "suggested_artifact_kind": "live_answer_view",
964
+ "materialization_target": "answer_artifact_seed",
965
+ "retrieval_jobs": [
966
+ "summary"
967
+ ],
968
+ "kpi_hints": [],
969
+ "data_dependencies": [
970
+ "immeuble:core:unit",
971
+ "immeuble:core:lease_contract",
972
+ "immeuble:core:person"
973
+ ],
974
+ "materialization_status": "candidate",
975
+ "recommendation": "add",
976
+ "business_question": "Quels appartements sont loués, à qui, depuis quelle date ?",
977
+ "origin": "projection_catalog",
978
+ "lens": "",
979
+ "role": "",
980
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
981
+ "required_schemas": [
982
+ "immeuble:core:unit",
983
+ "immeuble:core:lease_contract",
984
+ "immeuble:core:person"
985
+ ],
986
+ "required_facets": [
987
+ "unit.usage_status",
988
+ "unit.lot",
989
+ "lease_contract.validFrom",
990
+ "lease_contract.monthly_rent",
991
+ "person.name"
992
+ ],
993
+ "required_edges": [
994
+ "LEASES",
995
+ "RENTED_TO",
996
+ "OCCUPIES"
997
+ ],
998
+ "human_jobs": [],
999
+ "ai_agent_jobs": [],
1000
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
1001
+ "pattern_tags": [],
1002
+ "confidence": 1
1003
+ },
1004
+ {
1005
+ "name": "quotites_par_immeuble",
1006
+ "label": "Quotités par immeuble",
1007
+ "ontology": "core",
1008
+ "description": "Vérification quota_basis = 1000 par building",
1009
+ "source_file": "/home/dlamotte/Documents/mindflight/ghostcrab-personal-mcp/examples/immeuble/contracts/projection_catalog.yaml",
1010
+ "source_section": "projection_catalog.yaml",
1011
+ "expected_scope": "immeuble:core:quotites_par_immeuble",
1012
+ "suggested_proj_type": "FACT",
1013
+ "suggested_artifact_kind": "live_answer_view",
1014
+ "materialization_target": "answer_artifact_seed",
1015
+ "retrieval_jobs": [
1016
+ "summary"
1017
+ ],
1018
+ "kpi_hints": [],
1019
+ "data_dependencies": [
1020
+ "immeuble:core:building",
1021
+ "immeuble:core:unit"
1022
+ ],
1023
+ "materialization_status": "candidate",
1024
+ "recommendation": "add",
1025
+ "business_question": "Les quotités de chaque immeuble totalisent-elles 1000 ?",
1026
+ "origin": "projection_catalog",
1027
+ "lens": "",
1028
+ "role": "",
1029
+ "materialization_warning": "Unknown proj_type ``; inferred FACT",
1030
+ "required_schemas": [
1031
+ "immeuble:core:building",
1032
+ "immeuble:core:unit"
1033
+ ],
1034
+ "required_facets": [
1035
+ "building.quota_basis",
1036
+ "unit.tantiemes",
1037
+ "unit.quota_basis"
1038
+ ],
1039
+ "required_edges": [
1040
+ "CONTAINS"
1041
+ ],
1042
+ "human_jobs": [],
1043
+ "ai_agent_jobs": [],
1044
+ "impact_summary": "Projection declaree dans le catalogue decisionnel.",
1045
+ "pattern_tags": [],
1046
+ "confidence": 1
1047
+ },
1048
+ {
1049
+ "name": "impayes_et_relances",
1050
+ "label": "Impayes et relances en cours",
1051
+ "ontology": "gestionnaire_syndic",
1052
+ "description": "Detecte les impayes partiels et les relances non traitees.",
1053
+ "source_file": "analysis_lens",
1054
+ "source_section": "blind_spot_manager",
1055
+ "expected_scope": "immeuble:gestionnaire_syndic:impayes_et_relances",
1056
+ "suggested_proj_type": "CONSTRAINT",
1057
+ "suggested_artifact_kind": "analysis_plan",
1058
+ "materialization_target": "ghostcrab_project",
1059
+ "retrieval_jobs": [
1060
+ "monitor",
1061
+ "summary"
1062
+ ],
1063
+ "kpi_hints": [
1064
+ "unpaid_count",
1065
+ "reminder_level_count"
1066
+ ],
1067
+ "data_dependencies": [
1068
+ "immeuble:core:charge_call",
1069
+ "immeuble:core:receipt",
1070
+ "immeuble:core:reminder"
1071
+ ],
1072
+ "materialization_status": "candidate",
1073
+ "recommendation": "add",
1074
+ "business_question": "Quels coproprietaires ont des impayes ou relances actives ?",
1075
+ "origin": "analysis_lens",
1076
+ "lens": "blind_spot_manager",
1077
+ "role": "gestionnaire_syndic",
1078
+ "materialization_warning": "",
1079
+ "required_schemas": [
1080
+ "immeuble:core:receipt",
1081
+ "immeuble:core:reminder",
1082
+ "immeuble:core:charge_call"
1083
+ ],
1084
+ "required_facets": [
1085
+ "receipt.amount",
1086
+ "reminder.level",
1087
+ "reminder.amount_due",
1088
+ "charge_call.amount"
1089
+ ],
1090
+ "required_edges": [
1091
+ "REQUIRES_REVIEW",
1092
+ "MATCHED_TO"
1093
+ ],
1094
+ "human_jobs": [
1095
+ "relancer les impayes",
1096
+ "prioriser les relances"
1097
+ ],
1098
+ "ai_agent_jobs": [
1099
+ "detecter impayes partiels",
1100
+ "agreger par copropriete"
1101
+ ],
1102
+ "impact_summary": "Ajoute une projection de suivi impayes avec facettes montant et niveau de relance.",
1103
+ "pattern_tags": [
1104
+ "finance",
1105
+ "reminder",
1106
+ "syndic"
1107
+ ],
1108
+ "confidence": 0.8
1109
+ },
1110
+ {
1111
+ "name": "baux_echeance",
1112
+ "label": "Baux proches de l'echeance",
1113
+ "ontology": "gestionnaire_syndic",
1114
+ "description": "Anticipe les renouvellements et vacances locatives.",
1115
+ "source_file": "analysis_lens",
1116
+ "source_section": "blind_spot_manager",
1117
+ "expected_scope": "immeuble:gestionnaire_syndic:baux_echeance",
1118
+ "suggested_proj_type": "STEP",
1119
+ "suggested_artifact_kind": "analysis_plan",
1120
+ "materialization_target": "ghostcrab_project",
1121
+ "retrieval_jobs": [
1122
+ "monitor",
1123
+ "list"
1124
+ ],
1125
+ "kpi_hints": [
1126
+ "expiring_lease_count"
1127
+ ],
1128
+ "data_dependencies": [
1129
+ "immeuble:core:lease_contract",
1130
+ "immeuble:core:unit"
1131
+ ],
1132
+ "materialization_status": "candidate",
1133
+ "recommendation": "add",
1134
+ "business_question": "Quels baux arrivent a echeance dans les 90 prochains jours ?",
1135
+ "origin": "analysis_lens",
1136
+ "lens": "blind_spot_manager",
1137
+ "role": "gestionnaire_syndic",
1138
+ "materialization_warning": "",
1139
+ "required_schemas": [
1140
+ "immeuble:core:lease_contract",
1141
+ "immeuble:core:unit"
1142
+ ],
1143
+ "required_facets": [
1144
+ "lease_contract.validFrom",
1145
+ "lease_contract.monthly_rent",
1146
+ "unit.usage_status"
1147
+ ],
1148
+ "required_edges": [
1149
+ "LEASES",
1150
+ "RENTED_TO"
1151
+ ],
1152
+ "human_jobs": [
1153
+ "planifier renouvellement",
1154
+ "anticiper vacance"
1155
+ ],
1156
+ "ai_agent_jobs": [
1157
+ "calculer echeances",
1158
+ "alerter gestionnaire"
1159
+ ],
1160
+ "impact_summary": "Connecte baux, lots et menages pour pilotage locatif.",
1161
+ "pattern_tags": [
1162
+ "lease",
1163
+ "expiry",
1164
+ "tenant"
1165
+ ],
1166
+ "confidence": 0.8
1167
+ },
1168
+ {
1169
+ "name": "quotites_anomalie",
1170
+ "label": "Anomalies de quotites",
1171
+ "ontology": "gestionnaire_syndic",
1172
+ "description": "Verifie la coherence des tantiemes par building.",
1173
+ "source_file": "analysis_lens",
1174
+ "source_section": "blind_spot_manager",
1175
+ "expected_scope": "immeuble:gestionnaire_syndic:quotites_anomalie",
1176
+ "suggested_proj_type": "CONSTRAINT",
1177
+ "suggested_artifact_kind": "analysis_plan",
1178
+ "materialization_target": "ghostcrab_project",
1179
+ "retrieval_jobs": [
1180
+ "aggregate",
1181
+ "summary"
1182
+ ],
1183
+ "kpi_hints": [
1184
+ "quota_delta",
1185
+ "anomaly_building_count"
1186
+ ],
1187
+ "data_dependencies": [
1188
+ "immeuble:core:building",
1189
+ "immeuble:core:unit"
1190
+ ],
1191
+ "materialization_status": "candidate",
1192
+ "recommendation": "add",
1193
+ "business_question": "Quels immeubles ont des quotites qui ne totalisent pas le quota_basis ?",
1194
+ "origin": "analysis_lens",
1195
+ "lens": "blind_spot_manager",
1196
+ "role": "gestionnaire_syndic",
1197
+ "materialization_warning": "",
1198
+ "required_schemas": [
1199
+ "immeuble:core:building",
1200
+ "immeuble:core:unit"
1201
+ ],
1202
+ "required_facets": [
1203
+ "building.quota_basis",
1204
+ "unit.tantiemes",
1205
+ "unit.quota_basis"
1206
+ ],
1207
+ "required_edges": [
1208
+ "CONTAINS"
1209
+ ],
1210
+ "human_jobs": [
1211
+ "corriger les tantiemes",
1212
+ "valider AG"
1213
+ ],
1214
+ "ai_agent_jobs": [
1215
+ "sommer tantiemes par building",
1216
+ "signaler ecarts"
1217
+ ],
1218
+ "impact_summary": "Projection de controle quotites pour conformite copropriete.",
1219
+ "pattern_tags": [
1220
+ "quota",
1221
+ "tantiemes",
1222
+ "validation"
1223
+ ],
1224
+ "confidence": 0.8
1225
+ },
1226
+ {
1227
+ "name": "occupation_orpheline",
1228
+ "label": "Lots sans occupation declaree",
1229
+ "ontology": "gestionnaire_syndic",
1230
+ "description": "Repere les lots vacants ou mal renseignes.",
1231
+ "source_file": "analysis_lens",
1232
+ "source_section": "blind_spot_manager",
1233
+ "expected_scope": "immeuble:gestionnaire_syndic:occupation_orpheline",
1234
+ "suggested_proj_type": "FACT",
1235
+ "suggested_artifact_kind": "analysis_plan",
1236
+ "materialization_target": "ghostcrab_project",
1237
+ "retrieval_jobs": [
1238
+ "monitor",
1239
+ "graph_traversal"
1240
+ ],
1241
+ "kpi_hints": [
1242
+ "vacant_unit_count",
1243
+ "orphan_occupancy_count"
1244
+ ],
1245
+ "data_dependencies": [
1246
+ "immeuble:core:household",
1247
+ "immeuble:core:person",
1248
+ "immeuble:core:unit"
1249
+ ],
1250
+ "materialization_status": "candidate",
1251
+ "recommendation": "add",
1252
+ "business_question": "Quels lots n'ont ni proprietaire occupant ni locataire declare ?",
1253
+ "origin": "analysis_lens",
1254
+ "lens": "blind_spot_manager",
1255
+ "role": "gestionnaire_syndic",
1256
+ "materialization_warning": "",
1257
+ "required_schemas": [
1258
+ "immeuble:core:unit",
1259
+ "immeuble:core:person",
1260
+ "immeuble:core:household"
1261
+ ],
1262
+ "required_facets": [
1263
+ "unit.usage_status",
1264
+ "person.name",
1265
+ "household.household_status"
1266
+ ],
1267
+ "required_edges": [
1268
+ "OCCUPIES",
1269
+ "OWNS",
1270
+ "PRIMARY_RESIDENCE_OF"
1271
+ ],
1272
+ "human_jobs": [
1273
+ "clarifier occupation",
1274
+ "mettre a jour registre"
1275
+ ],
1276
+ "ai_agent_jobs": [
1277
+ "detecter lots sans lien occupation",
1278
+ "croiser baux et menages"
1279
+ ],
1280
+ "impact_summary": "Ameliore la fiabilite du registre des occupations.",
1281
+ "pattern_tags": [
1282
+ "occupancy",
1283
+ "vacant",
1284
+ "data_quality"
1285
+ ],
1286
+ "confidence": 0.8
1287
+ },
1288
+ {
1289
+ "name": "manager_attention_today",
1290
+ "label": "Top actions manager du jour",
1291
+ "ontology": "gestionnaire_syndic",
1292
+ "description": "Resume les arbitrages qui changent le resultat de la journee.",
1293
+ "source_file": "analysis_lens",
1294
+ "source_section": "blind_spot_manager",
1295
+ "expected_scope": "immeuble:gestionnaire_syndic:manager_attention_today",
1296
+ "suggested_proj_type": "STEP",
1297
+ "suggested_artifact_kind": "analysis_plan",
1298
+ "materialization_target": "ghostcrab_project",
1299
+ "retrieval_jobs": [
1300
+ "summary",
1301
+ "monitor"
1302
+ ],
1303
+ "kpi_hints": [
1304
+ "top_action_count",
1305
+ "overdue_critical_count"
1306
+ ],
1307
+ "data_dependencies": [
1308
+ "immeuble:core:decision",
1309
+ "immeuble:core:lease_contract",
1310
+ "immeuble:core:reminder"
1311
+ ],
1312
+ "materialization_status": "candidate",
1313
+ "recommendation": "add",
1314
+ "business_question": "Quelles 3 a 5 actions doivent remonter au gestionnaire aujourd'hui ?",
1315
+ "origin": "analysis_lens",
1316
+ "lens": "blind_spot_manager",
1317
+ "role": "gestionnaire_syndic",
1318
+ "materialization_warning": "",
1319
+ "required_schemas": [
1320
+ "immeuble:core:reminder",
1321
+ "immeuble:core:decision",
1322
+ "immeuble:core:lease_contract"
1323
+ ],
1324
+ "required_facets": [
1325
+ "reminder.level",
1326
+ "decision.date",
1327
+ "lease_contract.validFrom"
1328
+ ],
1329
+ "required_edges": [
1330
+ "REQUIRES_REVIEW",
1331
+ "LEASES"
1332
+ ],
1333
+ "human_jobs": [
1334
+ "savoir quoi traiter aujourd'hui"
1335
+ ],
1336
+ "ai_agent_jobs": [
1337
+ "prioriser par impact et urgence"
1338
+ ],
1339
+ "impact_summary": "Projection d'attention quotidienne consommant les autres signaux.",
1340
+ "pattern_tags": [
1341
+ "attention",
1342
+ "daily_brief",
1343
+ "prioritization"
1344
+ ],
1345
+ "confidence": 0.8
1346
+ },
1347
+ {
1348
+ "name": "gestionnaire_decide_arbitrer",
1349
+ "label": "JTBD gestionnaire: arbitrer avec preuves",
1350
+ "ontology": "gestionnaire_syndic",
1351
+ "description": "Vue d'arbitrage humain: preuves, confiance, responsabilite et impact.",
1352
+ "source_file": "analysis_lens",
1353
+ "source_section": "jtbd_human",
1354
+ "expected_scope": "immeuble:gestionnaire_syndic:gestionnaire_decide_arbitrer",
1355
+ "suggested_proj_type": "STEP",
1356
+ "suggested_artifact_kind": "analysis_plan",
1357
+ "materialization_target": "ghostcrab_project",
1358
+ "retrieval_jobs": [
1359
+ "summary",
1360
+ "monitor",
1361
+ "graph_traversal"
1362
+ ],
1363
+ "kpi_hints": [
1364
+ "decision_confidence",
1365
+ "evidence_gap_count"
1366
+ ],
1367
+ "data_dependencies": [
1368
+ "immeuble:core:coda_entry",
1369
+ "immeuble:core:decision",
1370
+ "immeuble:core:reminder"
1371
+ ],
1372
+ "materialization_status": "candidate",
1373
+ "recommendation": "add",
1374
+ "business_question": "Quand plusieurs signaux se contredisent, quelle decision puis-je prendre avec suffisamment de preuves ?",
1375
+ "origin": "analysis_lens",
1376
+ "lens": "jtbd_human",
1377
+ "role": "gestionnaire_syndic",
1378
+ "materialization_warning": "",
1379
+ "required_schemas": [
1380
+ "immeuble:core:decision",
1381
+ "immeuble:core:reminder",
1382
+ "immeuble:core:coda_entry"
1383
+ ],
1384
+ "required_facets": [
1385
+ "decision.date",
1386
+ "coda_entry.amount",
1387
+ "coda_entry.status"
1388
+ ],
1389
+ "required_edges": [
1390
+ "MATCHED_TO",
1391
+ "REQUIRES_REVIEW"
1392
+ ],
1393
+ "human_jobs": [
1394
+ "decider",
1395
+ "arbitrer",
1396
+ "expliquer la decision"
1397
+ ],
1398
+ "ai_agent_jobs": [
1399
+ "compiler preuves",
1400
+ "montrer contradictions"
1401
+ ],
1402
+ "impact_summary": "Projection d'aide a la decision centree sur preuve et confiance.",
1403
+ "pattern_tags": [
1404
+ "jtbd",
1405
+ "human_manager",
1406
+ "decision"
1407
+ ],
1408
+ "confidence": 0.8
1409
+ },
1410
+ {
1411
+ "name": "syndic_coordinate_intervention",
1412
+ "label": "JTBD syndic: coordonner la prochaine intervention",
1413
+ "ontology": "gestionnaire_syndic",
1414
+ "description": "Vue terrain: acces, preconditions, equipements communs.",
1415
+ "source_file": "analysis_lens",
1416
+ "source_section": "jtbd_human",
1417
+ "expected_scope": "immeuble:gestionnaire_syndic:syndic_coordinate_intervention",
1418
+ "suggested_proj_type": "STEP",
1419
+ "suggested_artifact_kind": "analysis_plan",
1420
+ "materialization_target": "ghostcrab_project",
1421
+ "retrieval_jobs": [
1422
+ "monitor",
1423
+ "graph_traversal"
1424
+ ],
1425
+ "kpi_hints": [
1426
+ "ready_intervention_count",
1427
+ "blocked_intervention_count"
1428
+ ],
1429
+ "data_dependencies": [
1430
+ "immeuble:core:shared_equipment",
1431
+ "immeuble:core:shared_space",
1432
+ "immeuble:core:unit"
1433
+ ],
1434
+ "materialization_status": "candidate",
1435
+ "recommendation": "add",
1436
+ "business_question": "Que faut-il coordonner pour la prochaine intervention sur un lot ou une zone commune ?",
1437
+ "origin": "analysis_lens",
1438
+ "lens": "jtbd_human",
1439
+ "role": "gestionnaire_syndic",
1440
+ "materialization_warning": "",
1441
+ "required_schemas": [
1442
+ "immeuble:core:unit",
1443
+ "immeuble:core:shared_space",
1444
+ "immeuble:core:shared_equipment"
1445
+ ],
1446
+ "required_facets": [
1447
+ "unit.usage_status",
1448
+ "shared_space.category",
1449
+ "shared_equipment.equipment_type"
1450
+ ],
1451
+ "required_edges": [
1452
+ "CONTAINS",
1453
+ "USES_COMMON"
1454
+ ],
1455
+ "human_jobs": [
1456
+ "coordonner intervention",
1457
+ "eviter attente"
1458
+ ],
1459
+ "ai_agent_jobs": [
1460
+ "verifier preconditions",
1461
+ "detecter conflits ressources"
1462
+ ],
1463
+ "impact_summary": "Complete les projections manager avec une vue execution terrain.",
1464
+ "pattern_tags": [
1465
+ "jtbd",
1466
+ "syndic",
1467
+ "coordination"
1468
+ ],
1469
+ "confidence": 0.8
1470
+ },
1471
+ {
1472
+ "name": "agent_watchtower_prioritize",
1473
+ "label": "JTBD agent IA: tour de controle priorisee",
1474
+ "ontology": "gestionnaire_syndic",
1475
+ "description": "Role agent IA de veille: filtrage, explication, priorisation.",
1476
+ "source_file": "analysis_lens",
1477
+ "source_section": "jtbd_ai",
1478
+ "expected_scope": "immeuble:gestionnaire_syndic:agent_watchtower_prioritize",
1479
+ "suggested_proj_type": "STEP",
1480
+ "suggested_artifact_kind": "analysis_plan",
1481
+ "materialization_target": "ghostcrab_project",
1482
+ "retrieval_jobs": [
1483
+ "monitor",
1484
+ "summary"
1485
+ ],
1486
+ "kpi_hints": [
1487
+ "signal_to_noise_ratio",
1488
+ "escalated_signal_count"
1489
+ ],
1490
+ "data_dependencies": [
1491
+ "immeuble:core:lease_contract",
1492
+ "immeuble:core:reminder",
1493
+ "immeuble:core:unit"
1494
+ ],
1495
+ "materialization_status": "candidate",
1496
+ "recommendation": "add",
1497
+ "business_question": "Quels signaux dois-je surveiller et remonter sans saturer le gestionnaire ?",
1498
+ "origin": "analysis_lens",
1499
+ "lens": "jtbd_ai",
1500
+ "role": "gestionnaire_syndic",
1501
+ "materialization_warning": "",
1502
+ "required_schemas": [
1503
+ "immeuble:core:reminder",
1504
+ "immeuble:core:lease_contract",
1505
+ "immeuble:core:unit"
1506
+ ],
1507
+ "required_facets": [
1508
+ "reminder.level",
1509
+ "lease_contract.validFrom",
1510
+ "unit.usage_status"
1511
+ ],
1512
+ "required_edges": [
1513
+ "REQUIRES_REVIEW",
1514
+ "LEASES"
1515
+ ],
1516
+ "human_jobs": [
1517
+ "recevoir uniquement les sujets qui meritent attention"
1518
+ ],
1519
+ "ai_agent_jobs": [
1520
+ "surveiller",
1521
+ "prioriser",
1522
+ "expliquer",
1523
+ "escalader"
1524
+ ],
1525
+ "impact_summary": "Formalise une projection consommee par agent IA avant synthese humaine.",
1526
+ "pattern_tags": [
1527
+ "jtbd",
1528
+ "ai_agent",
1529
+ "watchtower"
1530
+ ],
1531
+ "confidence": 0.8
1532
+ },
1533
+ {
1534
+ "name": "agent_reconciliation_detective",
1535
+ "label": "JTBD agent IA: detective de reconciliation CODA",
1536
+ "ontology": "gestionnaire_syndic",
1537
+ "description": "Role agent IA de qualite de donnees: rapprochement finance.",
1538
+ "source_file": "analysis_lens",
1539
+ "source_section": "jtbd_ai",
1540
+ "expected_scope": "immeuble:gestionnaire_syndic:agent_reconciliation_detective",
1541
+ "suggested_proj_type": "CONSTRAINT",
1542
+ "suggested_artifact_kind": "analysis_plan",
1543
+ "materialization_target": "ghostcrab_project",
1544
+ "retrieval_jobs": [
1545
+ "monitor",
1546
+ "graph_traversal"
1547
+ ],
1548
+ "kpi_hints": [
1549
+ "reconciliation_issue_count",
1550
+ "unmatched_coda_count"
1551
+ ],
1552
+ "data_dependencies": [
1553
+ "immeuble:core:charge_call",
1554
+ "immeuble:core:coda_entry",
1555
+ "immeuble:core:receipt"
1556
+ ],
1557
+ "materialization_status": "candidate",
1558
+ "recommendation": "add",
1559
+ "business_question": "Quelles incoherences entre paiements CODA et appels de charges dois-je investiguer ?",
1560
+ "origin": "analysis_lens",
1561
+ "lens": "jtbd_ai",
1562
+ "role": "gestionnaire_syndic",
1563
+ "materialization_warning": "",
1564
+ "required_schemas": [
1565
+ "immeuble:core:coda_entry",
1566
+ "immeuble:core:charge_call",
1567
+ "immeuble:core:receipt"
1568
+ ],
1569
+ "required_facets": [
1570
+ "coda_entry.amount",
1571
+ "coda_entry.status",
1572
+ "charge_call.amount",
1573
+ "receipt.amount"
1574
+ ],
1575
+ "required_edges": [
1576
+ "MATCHED_TO",
1577
+ "ALLOCATED_TO"
1578
+ ],
1579
+ "human_jobs": [
1580
+ "etre alerte quand la donnee n'est pas fiable"
1581
+ ],
1582
+ "ai_agent_jobs": [
1583
+ "rapprocher",
1584
+ "verifier",
1585
+ "investiguer"
1586
+ ],
1587
+ "impact_summary": "Projection agent specialisee reconciliation finance.",
1588
+ "pattern_tags": [
1589
+ "jtbd",
1590
+ "ai_agent",
1591
+ "reconciliation"
1592
+ ],
1593
+ "confidence": 0.8
1594
+ }
1595
+ ]
1596
+ }