@mindflight/mindbrain-personal-studio 0.6.2 → 0.6.4

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 → BjfgiHck.js} +1 -1
  3. package/build/client/_app/immutable/chunks/BjfgiHck.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/BjfgiHck.js.gz +0 -0
  5. package/build/client/_app/immutable/entry/{app.CR-imLox.js → app.XgS1PoV0.js} +2 -2
  6. package/build/client/_app/immutable/entry/app.XgS1PoV0.js.br +0 -0
  7. package/build/client/_app/immutable/entry/app.XgS1PoV0.js.gz +0 -0
  8. package/build/client/_app/immutable/entry/start.Dtz8dQFZ.js +1 -0
  9. package/build/client/_app/immutable/entry/start.Dtz8dQFZ.js.br +2 -0
  10. package/build/client/_app/immutable/entry/start.Dtz8dQFZ.js.gz +0 -0
  11. package/build/client/_app/immutable/nodes/{1.CTEedoSY.js → 1.Cs3BmvHO.js} +1 -1
  12. package/build/client/_app/immutable/nodes/1.Cs3BmvHO.js.br +3 -0
  13. package/build/client/_app/immutable/nodes/1.Cs3BmvHO.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-BnebQ91H.js} +2 -2
  20. package/build/server/chunks/chunks/{internal.js-WOmQXGMa.js.map → internal.js-BnebQ91H.js.map} +1 -1
  21. package/build/server/chunks/{handler-BIDedSZq.js → handler-B8M0DnFi.js} +3 -3
  22. package/build/server/chunks/{handler-BIDedSZq.js.map → handler-B8M0DnFi.js.map} +1 -1
  23. package/build/server/chunks/{index.js-YVPJa0so.js → index.js-qz9YZN7m.js} +2 -2
  24. package/build/server/chunks/{index.js-YVPJa0so.js.map → index.js-qz9YZN7m.js.map} +1 -1
  25. package/build/server/chunks/{manifest.js-aGRKuiqF.js → manifest.js-BxEwHoCX.js} +3 -3
  26. package/build/server/chunks/{manifest.js-aGRKuiqF.js.map → manifest.js-BxEwHoCX.js.map} +1 -1
  27. package/build/server/chunks/nodes/{1.js-Dhh3ErZY.js → 1.js-D3KAPgsF.js} +2 -2
  28. package/build/server/chunks/nodes/{1.js-Dhh3ErZY.js.map → 1.js-D3KAPgsF.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 +103 -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 +179 -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,181 @@
1
+ /**
2
+ * Deterministic analysis lenses for projection candidate discovery.
3
+ * Port of starterkit analyze_projection_candidates.py lens patterns.
4
+ */
5
+
6
+ /** @typedef {import('./analyze-projection-candidates.mjs').AnalysisPattern} AnalysisPattern */
7
+
8
+ /** @type {AnalysisPattern[]} */
9
+ export const BLIND_SPOT_MANAGER_PATTERNS = [
10
+ {
11
+ lens: "blind_spot_manager",
12
+ name: "impayes_et_relances",
13
+ label: "Impayes et relances en cours",
14
+ business_question: "Quels coproprietaires ont des impayes ou relances actives ?",
15
+ description: "Detecte les impayes partiels et les relances non traitees.",
16
+ suggested_proj_type: "CONSTRAINT",
17
+ retrieval_jobs: ["monitor", "summary"],
18
+ kpi_hints: ["unpaid_count", "reminder_level_count"],
19
+ required_schemas: ["immeuble:core:receipt", "immeuble:core:reminder", "immeuble:core:charge_call"],
20
+ required_facets: ["receipt.amount", "reminder.level", "reminder.amount_due", "charge_call.amount"],
21
+ required_edges: ["REQUIRES_REVIEW", "MATCHED_TO"],
22
+ human_jobs: ["relancer les impayes", "prioriser les relances"],
23
+ ai_agent_jobs: ["detecter impayes partiels", "agreger par copropriete"],
24
+ impact_summary: "Ajoute une projection de suivi impayes avec facettes montant et niveau de relance.",
25
+ pattern_tags: ["finance", "reminder", "syndic"]
26
+ },
27
+ {
28
+ lens: "blind_spot_manager",
29
+ name: "baux_echeance",
30
+ label: "Baux proches de l'echeance",
31
+ business_question: "Quels baux arrivent a echeance dans les 90 prochains jours ?",
32
+ description: "Anticipe les renouvellements et vacances locatives.",
33
+ suggested_proj_type: "STEP",
34
+ retrieval_jobs: ["monitor", "list"],
35
+ kpi_hints: ["expiring_lease_count"],
36
+ required_schemas: ["immeuble:core:lease_contract", "immeuble:core:unit"],
37
+ required_facets: ["lease_contract.validFrom", "lease_contract.monthly_rent", "unit.usage_status"],
38
+ required_edges: ["LEASES", "RENTED_TO"],
39
+ human_jobs: ["planifier renouvellement", "anticiper vacance"],
40
+ ai_agent_jobs: ["calculer echeances", "alerter gestionnaire"],
41
+ impact_summary: "Connecte baux, lots et menages pour pilotage locatif.",
42
+ pattern_tags: ["lease", "expiry", "tenant"]
43
+ },
44
+ {
45
+ lens: "blind_spot_manager",
46
+ name: "quotites_anomalie",
47
+ label: "Anomalies de quotites",
48
+ business_question: "Quels immeubles ont des quotites qui ne totalisent pas le quota_basis ?",
49
+ description: "Verifie la coherence des tantiemes par building.",
50
+ suggested_proj_type: "CONSTRAINT",
51
+ retrieval_jobs: ["aggregate", "summary"],
52
+ kpi_hints: ["quota_delta", "anomaly_building_count"],
53
+ required_schemas: ["immeuble:core:building", "immeuble:core:unit"],
54
+ required_facets: ["building.quota_basis", "unit.tantiemes", "unit.quota_basis"],
55
+ required_edges: ["CONTAINS"],
56
+ human_jobs: ["corriger les tantiemes", "valider AG"],
57
+ ai_agent_jobs: ["sommer tantiemes par building", "signaler ecarts"],
58
+ impact_summary: "Projection de controle quotites pour conformite copropriete.",
59
+ pattern_tags: ["quota", "tantiemes", "validation"]
60
+ },
61
+ {
62
+ lens: "blind_spot_manager",
63
+ name: "occupation_orpheline",
64
+ label: "Lots sans occupation declaree",
65
+ business_question: "Quels lots n'ont ni proprietaire occupant ni locataire declare ?",
66
+ description: "Repere les lots vacants ou mal renseignes.",
67
+ suggested_proj_type: "FACT",
68
+ retrieval_jobs: ["monitor", "graph_traversal"],
69
+ kpi_hints: ["vacant_unit_count", "orphan_occupancy_count"],
70
+ required_schemas: ["immeuble:core:unit", "immeuble:core:person", "immeuble:core:household"],
71
+ required_facets: ["unit.usage_status", "person.name", "household.household_status"],
72
+ required_edges: ["OCCUPIES", "OWNS", "PRIMARY_RESIDENCE_OF"],
73
+ human_jobs: ["clarifier occupation", "mettre a jour registre"],
74
+ ai_agent_jobs: ["detecter lots sans lien occupation", "croiser baux et menages"],
75
+ impact_summary: "Ameliore la fiabilite du registre des occupations.",
76
+ pattern_tags: ["occupancy", "vacant", "data_quality"]
77
+ },
78
+ {
79
+ lens: "blind_spot_manager",
80
+ name: "manager_attention_today",
81
+ label: "Top actions manager du jour",
82
+ business_question: "Quelles 3 a 5 actions doivent remonter au gestionnaire aujourd'hui ?",
83
+ description: "Resume les arbitrages qui changent le resultat de la journee.",
84
+ suggested_proj_type: "STEP",
85
+ retrieval_jobs: ["summary", "monitor"],
86
+ kpi_hints: ["top_action_count", "overdue_critical_count"],
87
+ required_schemas: ["immeuble:core:reminder", "immeuble:core:decision", "immeuble:core:lease_contract"],
88
+ required_facets: ["reminder.level", "decision.date", "lease_contract.validFrom"],
89
+ required_edges: ["REQUIRES_REVIEW", "LEASES"],
90
+ human_jobs: ["savoir quoi traiter aujourd'hui"],
91
+ ai_agent_jobs: ["prioriser par impact et urgence"],
92
+ impact_summary: "Projection d'attention quotidienne consommant les autres signaux.",
93
+ pattern_tags: ["attention", "daily_brief", "prioritization"]
94
+ }
95
+ ];
96
+
97
+ /** @type {AnalysisPattern[]} */
98
+ export const JTBD_HUMAN_PATTERNS = [
99
+ {
100
+ lens: "jtbd_human",
101
+ name: "gestionnaire_decide_arbitrer",
102
+ label: "JTBD gestionnaire: arbitrer avec preuves",
103
+ business_question: "Quand plusieurs signaux se contredisent, quelle decision puis-je prendre avec suffisamment de preuves ?",
104
+ description: "Vue d'arbitrage humain: preuves, confiance, responsabilite et impact.",
105
+ suggested_proj_type: "STEP",
106
+ retrieval_jobs: ["summary", "monitor", "graph_traversal"],
107
+ kpi_hints: ["decision_confidence", "evidence_gap_count"],
108
+ required_schemas: ["immeuble:core:decision", "immeuble:core:reminder", "immeuble:core:coda_entry"],
109
+ required_facets: ["decision.date", "coda_entry.amount", "coda_entry.status"],
110
+ required_edges: ["MATCHED_TO", "REQUIRES_REVIEW"],
111
+ human_jobs: ["decider", "arbitrer", "expliquer la decision"],
112
+ ai_agent_jobs: ["compiler preuves", "montrer contradictions"],
113
+ impact_summary: "Projection d'aide a la decision centree sur preuve et confiance.",
114
+ pattern_tags: ["jtbd", "human_manager", "decision"]
115
+ },
116
+ {
117
+ lens: "jtbd_human",
118
+ name: "syndic_coordinate_intervention",
119
+ label: "JTBD syndic: coordonner la prochaine intervention",
120
+ business_question: "Que faut-il coordonner pour la prochaine intervention sur un lot ou une zone commune ?",
121
+ description: "Vue terrain: acces, preconditions, equipements communs.",
122
+ suggested_proj_type: "STEP",
123
+ retrieval_jobs: ["monitor", "graph_traversal"],
124
+ kpi_hints: ["ready_intervention_count", "blocked_intervention_count"],
125
+ required_schemas: ["immeuble:core:unit", "immeuble:core:shared_space", "immeuble:core:shared_equipment"],
126
+ required_facets: ["unit.usage_status", "shared_space.category", "shared_equipment.equipment_type"],
127
+ required_edges: ["CONTAINS", "USES_COMMON"],
128
+ human_jobs: ["coordonner intervention", "eviter attente"],
129
+ ai_agent_jobs: ["verifier preconditions", "detecter conflits ressources"],
130
+ impact_summary: "Complete les projections manager avec une vue execution terrain.",
131
+ pattern_tags: ["jtbd", "syndic", "coordination"]
132
+ }
133
+ ];
134
+
135
+ /** @type {AnalysisPattern[]} */
136
+ export const JTBD_AI_PATTERNS = [
137
+ {
138
+ lens: "jtbd_ai",
139
+ name: "agent_watchtower_prioritize",
140
+ label: "JTBD agent IA: tour de controle priorisee",
141
+ business_question: "Quels signaux dois-je surveiller et remonter sans saturer le gestionnaire ?",
142
+ description: "Role agent IA de veille: filtrage, explication, priorisation.",
143
+ suggested_proj_type: "STEP",
144
+ retrieval_jobs: ["monitor", "summary"],
145
+ kpi_hints: ["signal_to_noise_ratio", "escalated_signal_count"],
146
+ required_schemas: ["immeuble:core:reminder", "immeuble:core:lease_contract", "immeuble:core:unit"],
147
+ required_facets: ["reminder.level", "lease_contract.validFrom", "unit.usage_status"],
148
+ required_edges: ["REQUIRES_REVIEW", "LEASES"],
149
+ human_jobs: ["recevoir uniquement les sujets qui meritent attention"],
150
+ ai_agent_jobs: ["surveiller", "prioriser", "expliquer", "escalader"],
151
+ impact_summary: "Formalise une projection consommee par agent IA avant synthese humaine.",
152
+ pattern_tags: ["jtbd", "ai_agent", "watchtower"]
153
+ },
154
+ {
155
+ lens: "jtbd_ai",
156
+ name: "agent_reconciliation_detective",
157
+ label: "JTBD agent IA: detective de reconciliation CODA",
158
+ business_question: "Quelles incoherences entre paiements CODA et appels de charges dois-je investiguer ?",
159
+ description: "Role agent IA de qualite de donnees: rapprochement finance.",
160
+ suggested_proj_type: "CONSTRAINT",
161
+ retrieval_jobs: ["monitor", "graph_traversal"],
162
+ kpi_hints: ["reconciliation_issue_count", "unmatched_coda_count"],
163
+ required_schemas: ["immeuble:core:coda_entry", "immeuble:core:charge_call", "immeuble:core:receipt"],
164
+ required_facets: ["coda_entry.amount", "coda_entry.status", "charge_call.amount", "receipt.amount"],
165
+ required_edges: ["MATCHED_TO", "ALLOCATED_TO"],
166
+ human_jobs: ["etre alerte quand la donnee n'est pas fiable"],
167
+ ai_agent_jobs: ["rapprocher", "verifier", "investiguer"],
168
+ impact_summary: "Projection agent specialisee reconciliation finance.",
169
+ pattern_tags: ["jtbd", "ai_agent", "reconciliation"]
170
+ }
171
+ ];
172
+
173
+ /** @type {Record<string, AnalysisPattern[]>} */
174
+ export const LENS_PATTERNS = {
175
+ blind_spot_manager: BLIND_SPOT_MANAGER_PATTERNS,
176
+ jtbd_human: JTBD_HUMAN_PATTERNS,
177
+ jtbd_ai: JTBD_AI_PATTERNS
178
+ };
179
+
180
+ export const VALID_PROJ_TYPES = new Set(["FACT", "GOAL", "STEP", "CONSTRAINT"]);
181
+ export const VALID_ARTIFACT_KINDS = new Set(["analysis_plan", "live_answer_view", "answer_snapshot", "evidence_pack"]);