@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,57 @@
1
+ {
2
+ "ontology_id": "immeuble::core",
3
+ "workspace_id": "immeuble",
4
+ "replace": false,
5
+ "rules": [
6
+ {
7
+ "rule_id": "unit-one-cellar",
8
+ "entity_type": "unit",
9
+ "relation_type": "assigned_cellar",
10
+ "direction": "out",
11
+ "target_entity_type": "cellar",
12
+ "min_count": 1,
13
+ "severity": "error",
14
+ "label": "Chaque lot doit avoir une cave assignee"
15
+ },
16
+ {
17
+ "rule_id": "unit-in-building",
18
+ "entity_type": "unit",
19
+ "relation_type": "contains",
20
+ "direction": "in",
21
+ "target_entity_type": null,
22
+ "min_count": 1,
23
+ "severity": "error",
24
+ "label": "Chaque lot doit etre rattache a un immeuble ou bloc"
25
+ },
26
+ {
27
+ "rule_id": "building-has-block",
28
+ "entity_type": "building",
29
+ "relation_type": "contains",
30
+ "direction": "out",
31
+ "target_entity_type": "block",
32
+ "min_count": 1,
33
+ "severity": "error",
34
+ "label": "Chaque immeuble doit contenir au moins un bloc"
35
+ },
36
+ {
37
+ "rule_id": "building-has-shared-space",
38
+ "entity_type": "building",
39
+ "relation_type": "contains",
40
+ "direction": "out",
41
+ "target_entity_type": "shared_space",
42
+ "min_count": 1,
43
+ "severity": "warning",
44
+ "label": "Chaque immeuble doit declarer au moins une partie commune"
45
+ },
46
+ {
47
+ "rule_id": "meter-measures-asset",
48
+ "entity_type": "meter",
49
+ "relation_type": "measures_asset",
50
+ "direction": "out",
51
+ "target_entity_type": null,
52
+ "min_count": 1,
53
+ "severity": "warning",
54
+ "label": "Chaque compteur doit mesurer un asset"
55
+ }
56
+ ]
57
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "ontology_id": "immeuble-training::core",
3
+ "replace": true,
4
+ "rules": [
5
+ {
6
+ "rule_id": "unit-has-owner",
7
+ "entity_type": "unit",
8
+ "relation_type": "owns",
9
+ "direction": "in",
10
+ "target_entity_type": "person",
11
+ "min_count": 1,
12
+ "severity": "error",
13
+ "label": "Chaque lot doit avoir un copropriétaire (owns entrant) — sans filtre statut"
14
+ },
15
+ {
16
+ "rule_id": "occupied-unit-has-occupant",
17
+ "entity_type": "unit",
18
+ "relation_type": "occupies",
19
+ "direction": "in",
20
+ "target_entity_type": "person",
21
+ "min_count": 1,
22
+ "severity": "error",
23
+ "label": "Lot occupé sans occupant déclaré — sans filtre statut"
24
+ },
25
+ {
26
+ "rule_id": "tenant-occupied-has-lease",
27
+ "entity_type": "unit",
28
+ "relation_type": "leases",
29
+ "direction": "in",
30
+ "target_entity_type": "lease_contract",
31
+ "min_count": 1,
32
+ "severity": "warning",
33
+ "label": "Lot en location sans contrat de bail lié — sans filtre statut"
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "ontology_id": "immeuble::core",
3
+ "workspace_id": "immeuble",
4
+ "replace": false,
5
+ "rules": [
6
+ {
7
+ "rule_id": "unit-has-owner",
8
+ "entity_type": "unit",
9
+ "relation_type": "owns",
10
+ "direction": "in",
11
+ "target_entity_type": null,
12
+ "min_count": 1,
13
+ "severity": "error",
14
+ "label": "Chaque lot actif doit avoir un coproprietaire",
15
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"usage_status\":{\"not_one_of\":[\"vacant_works\",\"vacant\"]}}}}"
16
+ },
17
+ {
18
+ "rule_id": "occupied-unit-has-occupant",
19
+ "entity_type": "unit",
20
+ "relation_type": "occupies",
21
+ "direction": "in",
22
+ "target_entity_type": "person",
23
+ "min_count": 1,
24
+ "severity": "error",
25
+ "label": "Lot occupe sans occupant declare",
26
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"usage_status\":{\"not_one_of\":[\"vacant_works\",\"vacant\"]}}}}"
27
+ },
28
+ {
29
+ "rule_id": "tenant-occupied-has-lease",
30
+ "entity_type": "unit",
31
+ "relation_type": "leases",
32
+ "direction": "in",
33
+ "target_entity_type": "lease_contract",
34
+ "min_count": 1,
35
+ "severity": "warning",
36
+ "label": "Lot loue sans contrat de bail lie",
37
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"usage_status\":{\"one_of\":[\"tenant_occupied\",\"owner_abroad_tenant\"]}}}}"
38
+ },
39
+ {
40
+ "rule_id": "billing-group-bills-unit",
41
+ "entity_type": "unit",
42
+ "relation_type": "bills_to",
43
+ "direction": "in",
44
+ "target_entity_type": "billing_group",
45
+ "min_count": 1,
46
+ "severity": "warning",
47
+ "label": "Chaque lot actif doit avoir un groupe de facturation",
48
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"usage_status\":{\"not_one_of\":[\"vacant_works\",\"vacant\"]}}}}"
49
+ },
50
+ {
51
+ "rule_id": "household-has-member",
52
+ "entity_type": "household",
53
+ "relation_type": "household_member",
54
+ "direction": "out",
55
+ "target_entity_type": "person",
56
+ "min_count": 1,
57
+ "severity": "warning",
58
+ "label": "Chaque menage doit avoir au moins un membre"
59
+ }
60
+ ]
61
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "ontology_id": "immeuble::core",
3
+ "workspace_id": "immeuble",
4
+ "replace": false,
5
+ "rules": [
6
+ {
7
+ "rule_id": "worksite-has-architect",
8
+ "entity_type": "worksite_project",
9
+ "relation_type": "designs_for",
10
+ "direction": "in",
11
+ "target_entity_type": "architect",
12
+ "min_count": 1,
13
+ "severity": "error",
14
+ "label": "Chaque chantier doit avoir un architecte responsable"
15
+ },
16
+ {
17
+ "rule_id": "worksite-has-work-package",
18
+ "entity_type": "worksite_project",
19
+ "relation_type": "has_work_package",
20
+ "direction": "out",
21
+ "target_entity_type": "work_package",
22
+ "min_count": 1,
23
+ "severity": "error",
24
+ "label": "Chaque chantier doit contenir au moins un lot de travaux"
25
+ },
26
+ {
27
+ "rule_id": "work-package-affects-asset",
28
+ "entity_type": "work_package",
29
+ "relation_type": "affects_asset",
30
+ "direction": "out",
31
+ "target_entity_type": null,
32
+ "min_count": 1,
33
+ "severity": "warning",
34
+ "label": "Chaque lot de travaux doit affecter au moins un asset"
35
+ },
36
+ {
37
+ "rule_id": "work-package-has-contractor",
38
+ "entity_type": "work_package",
39
+ "relation_type": "executes_work_package",
40
+ "direction": "in",
41
+ "target_entity_type": "contractor",
42
+ "min_count": 1,
43
+ "severity": "error",
44
+ "label": "Chaque lot de travaux doit etre lie a une entreprise"
45
+ },
46
+ {
47
+ "rule_id": "worksite-has-permit",
48
+ "entity_type": "worksite_project",
49
+ "relation_type": "authorized_by",
50
+ "direction": "out",
51
+ "target_entity_type": "permit",
52
+ "min_count": 1,
53
+ "severity": "warning",
54
+ "label": "Chaque chantier doit etre autorise par un permis ou une decision"
55
+ },
56
+ {
57
+ "rule_id": "worksite-has-budget-line",
58
+ "entity_type": "worksite_project",
59
+ "relation_type": "has_budget_line",
60
+ "direction": "out",
61
+ "target_entity_type": "budget_line",
62
+ "min_count": 1,
63
+ "severity": "warning",
64
+ "label": "Chaque chantier doit avoir une ligne budget"
65
+ },
66
+ {
67
+ "rule_id": "reserve-linked-to-inspection",
68
+ "entity_type": "defect_reserve",
69
+ "relation_type": "has_reserve",
70
+ "direction": "in",
71
+ "target_entity_type": "inspection",
72
+ "min_count": 1,
73
+ "severity": "error",
74
+ "label": "Chaque reserve doit etre liee a une inspection"
75
+ },
76
+ {
77
+ "rule_id": "invoice-linked-to-work-package",
78
+ "entity_type": "invoice",
79
+ "relation_type": "invoiced_by",
80
+ "direction": "in",
81
+ "target_entity_type": "work_package",
82
+ "min_count": 1,
83
+ "severity": "warning",
84
+ "label": "Chaque facture chantier doit etre rattachee a un lot de travaux"
85
+ }
86
+ ]
87
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "ontology_id": "immeuble::core",
3
+ "workspace_id": "immeuble",
4
+ "replace": false,
5
+ "rules": [
6
+ {
7
+ "rule_id": "service-contract-covers-asset",
8
+ "entity_type": "service_contract",
9
+ "relation_type": "covers_asset",
10
+ "direction": "out",
11
+ "target_entity_type": null,
12
+ "min_count": 1,
13
+ "severity": "error",
14
+ "label": "Chaque contrat de maintenance doit couvrir un asset"
15
+ },
16
+ {
17
+ "rule_id": "service-contract-has-provider",
18
+ "entity_type": "service_contract",
19
+ "relation_type": "provided_by",
20
+ "direction": "out",
21
+ "target_entity_type": "organization",
22
+ "min_count": 1,
23
+ "severity": "error",
24
+ "label": "Chaque contrat de maintenance doit avoir un prestataire"
25
+ },
26
+ {
27
+ "rule_id": "ticket-concerns-asset",
28
+ "entity_type": "maintenance_ticket",
29
+ "relation_type": "concerns_asset",
30
+ "direction": "out",
31
+ "target_entity_type": null,
32
+ "min_count": 1,
33
+ "severity": "warning",
34
+ "label": "Chaque ticket doit concerner un asset"
35
+ },
36
+ {
37
+ "rule_id": "ticket-has-intervention",
38
+ "entity_type": "maintenance_ticket",
39
+ "relation_type": "has_intervention",
40
+ "direction": "out",
41
+ "target_entity_type": "intervention",
42
+ "min_count": 1,
43
+ "severity": "warning",
44
+ "label": "Chaque ticket doit avoir une intervention planifiee"
45
+ },
46
+ {
47
+ "rule_id": "intervention-has-provider",
48
+ "entity_type": "intervention",
49
+ "relation_type": "provided_by",
50
+ "direction": "out",
51
+ "target_entity_type": "organization",
52
+ "min_count": 1,
53
+ "severity": "warning",
54
+ "label": "Chaque intervention doit avoir un prestataire"
55
+ },
56
+ {
57
+ "rule_id": "claim-covered-by-policy",
58
+ "entity_type": "claim",
59
+ "relation_type": "covered_by",
60
+ "direction": "out",
61
+ "target_entity_type": "insurance_policy",
62
+ "min_count": 1,
63
+ "severity": "error",
64
+ "label": "Chaque sinistre doit etre relie a une police"
65
+ },
66
+ {
67
+ "rule_id": "certificate-certifies-asset",
68
+ "entity_type": "compliance_certificate",
69
+ "relation_type": "certifies_asset",
70
+ "direction": "out",
71
+ "target_entity_type": null,
72
+ "min_count": 1,
73
+ "severity": "error",
74
+ "label": "Chaque certificat doit certifier un asset"
75
+ },
76
+ {
77
+ "rule_id": "meter-has-recent-reading",
78
+ "entity_type": "meter",
79
+ "relation_type": "records_reading",
80
+ "direction": "out",
81
+ "target_entity_type": "meter_reading",
82
+ "min_count": 1,
83
+ "severity": "warning",
84
+ "label": "Chaque compteur doit avoir au moins un releve"
85
+ }
86
+ ]
87
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "ontology_id": "immeuble::core",
3
+ "workspace_id": "immeuble",
4
+ "replace": false,
5
+ "rules": [
6
+ {
7
+ "rule_id": "charge-call-has-billing-group",
8
+ "entity_type": "charge_call",
9
+ "relation_type": "bills_to",
10
+ "direction": "out",
11
+ "target_entity_type": "billing_group",
12
+ "min_count": 1,
13
+ "severity": "error",
14
+ "label": "Chaque appel de charges doit cibler un groupe de facturation"
15
+ },
16
+ {
17
+ "rule_id": "matched-coda-has-charge-call",
18
+ "entity_type": "coda_entry",
19
+ "relation_type": "matched_to",
20
+ "direction": "out",
21
+ "target_entity_type": "charge_call",
22
+ "min_count": 1,
23
+ "severity": "warning",
24
+ "label": "Chaque CODA rapproche doit pointer vers un appel"
25
+ },
26
+ {
27
+ "rule_id": "open-charge-has-reminder",
28
+ "entity_type": "charge_call",
29
+ "relation_type": "triggered",
30
+ "direction": "out",
31
+ "target_entity_type": "reminder",
32
+ "min_count": 1,
33
+ "severity": "warning",
34
+ "label": "Un appel ouvert doit declencher une relance",
35
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"status\":{\"one_of\":[\"open\",\"overdue\"]}}}}"
36
+ },
37
+ {
38
+ "rule_id": "reminder-has-charge-source",
39
+ "entity_type": "reminder",
40
+ "relation_type": "triggered",
41
+ "direction": "in",
42
+ "target_entity_type": "charge_call",
43
+ "min_count": 1,
44
+ "severity": "warning",
45
+ "label": "Chaque relance doit provenir d'un appel ouvert"
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "ontology_id": "immeuble::core",
3
+ "workspace_id": "immeuble",
4
+ "replace": false,
5
+ "rules": [
6
+ {
7
+ "rule_id": "service-contract-covers-asset",
8
+ "entity_type": "service_contract",
9
+ "relation_type": "covers_asset",
10
+ "direction": "out",
11
+ "target_entity_type": null,
12
+ "min_count": 1,
13
+ "severity": "error",
14
+ "label": "Chaque contrat de maintenance doit couvrir un asset"
15
+ },
16
+ {
17
+ "rule_id": "service-contract-has-provider",
18
+ "entity_type": "service_contract",
19
+ "relation_type": "provided_by",
20
+ "direction": "out",
21
+ "target_entity_type": "organization",
22
+ "min_count": 1,
23
+ "severity": "error",
24
+ "label": "Chaque contrat de maintenance doit avoir un prestataire"
25
+ },
26
+ {
27
+ "rule_id": "ticket-concerns-asset",
28
+ "entity_type": "maintenance_ticket",
29
+ "relation_type": "concerns_asset",
30
+ "direction": "out",
31
+ "target_entity_type": null,
32
+ "min_count": 1,
33
+ "severity": "warning",
34
+ "label": "Chaque ticket doit concerner un asset"
35
+ },
36
+ {
37
+ "rule_id": "ticket-has-intervention",
38
+ "entity_type": "maintenance_ticket",
39
+ "relation_type": "has_intervention",
40
+ "direction": "out",
41
+ "target_entity_type": "intervention",
42
+ "min_count": 1,
43
+ "severity": "warning",
44
+ "label": "Chaque ticket doit avoir une intervention planifiee"
45
+ },
46
+ {
47
+ "rule_id": "intervention-has-provider",
48
+ "entity_type": "intervention",
49
+ "relation_type": "provided_by",
50
+ "direction": "out",
51
+ "target_entity_type": "organization",
52
+ "min_count": 1,
53
+ "severity": "warning",
54
+ "label": "Chaque intervention doit avoir un prestataire"
55
+ },
56
+ {
57
+ "rule_id": "claim-covered-by-policy",
58
+ "entity_type": "claim",
59
+ "relation_type": "covered_by",
60
+ "direction": "out",
61
+ "target_entity_type": "insurance_policy",
62
+ "min_count": 1,
63
+ "severity": "error",
64
+ "label": "Chaque sinistre doit etre relie a une police"
65
+ },
66
+ {
67
+ "rule_id": "certificate-certifies-asset",
68
+ "entity_type": "compliance_certificate",
69
+ "relation_type": "certifies_asset",
70
+ "direction": "out",
71
+ "target_entity_type": null,
72
+ "min_count": 1,
73
+ "severity": "error",
74
+ "label": "Chaque certificat doit certifier un asset"
75
+ },
76
+ {
77
+ "rule_id": "meter-has-recent-reading",
78
+ "entity_type": "meter",
79
+ "relation_type": "records_reading",
80
+ "direction": "out",
81
+ "target_entity_type": "meter_reading",
82
+ "min_count": 1,
83
+ "severity": "warning",
84
+ "label": "Chaque compteur doit avoir au moins un releve"
85
+ },
86
+ {
87
+ "rule_id": "ag-has-agenda-item",
88
+ "entity_type": "ag_meeting",
89
+ "relation_type": "has_agenda_item",
90
+ "direction": "out",
91
+ "target_entity_type": "agenda_item",
92
+ "min_count": 1,
93
+ "severity": "warning",
94
+ "label": "Chaque AG doit avoir un ordre du jour"
95
+ },
96
+ {
97
+ "rule_id": "agenda-item-has-decision",
98
+ "entity_type": "agenda_item",
99
+ "relation_type": "decided_by",
100
+ "direction": "out",
101
+ "target_entity_type": "decision",
102
+ "min_count": 1,
103
+ "severity": "warning",
104
+ "label": "Chaque point approuve doit avoir une decision"
105
+ }
106
+ ]
107
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "ontology_id": "immeuble-training::core",
3
+ "replace": true,
4
+ "rules": [
5
+ {
6
+ "rule_id": "unit-has-owner",
7
+ "entity_type": "unit",
8
+ "relation_type": "owns",
9
+ "direction": "in",
10
+ "target_entity_type": null,
11
+ "min_count": 1,
12
+ "severity": "error",
13
+ "label": "Chaque lot occupé doit avoir un copropriétaire (owns entrant)",
14
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"usage_status\":{\"not_one_of\":[\"vacant_works\",\"vacant\"]}}}}"
15
+ },
16
+ {
17
+ "rule_id": "occupied-unit-has-occupant",
18
+ "entity_type": "unit",
19
+ "relation_type": "occupies",
20
+ "direction": "in",
21
+ "target_entity_type": "person",
22
+ "min_count": 1,
23
+ "severity": "error",
24
+ "label": "Lot occupé sans occupant déclaré",
25
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"usage_status\":{\"not_one_of\":[\"vacant_works\",\"vacant\"]}}}}"
26
+ },
27
+ {
28
+ "rule_id": "tenant-occupied-has-lease",
29
+ "entity_type": "unit",
30
+ "relation_type": "leases",
31
+ "direction": "in",
32
+ "target_entity_type": "lease_contract",
33
+ "min_count": 1,
34
+ "severity": "warning",
35
+ "label": "Lot en location sans contrat de bail lié",
36
+ "metadata_json": "{\"entity_filter\":{\"metadata\":{\"usage_status\":{\"one_of\":[\"tenant_occupied\",\"owner_abroad_tenant\"]}}}}"
37
+ }
38
+ ]
39
+ }