@mindflight/mindbrain-personal-studio 0.6.1 → 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.
- package/README.md +16 -8
- package/build/client/_app/immutable/chunks/CIErFlYG.js +1 -0
- package/build/client/_app/immutable/chunks/CIErFlYG.js.br +0 -0
- package/build/client/_app/immutable/chunks/CIErFlYG.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.CVz6aYsT.js → app.mURYm8o_.js} +2 -2
- package/build/client/_app/immutable/entry/app.mURYm8o_.js.br +0 -0
- package/build/client/_app/immutable/entry/app.mURYm8o_.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.D4M9ZeGO.js +1 -0
- package/build/client/_app/immutable/entry/start.D4M9ZeGO.js.br +2 -0
- package/build/client/_app/immutable/entry/start.D4M9ZeGO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.BBtxY46Q.js → 1.DHKtMeFI.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DHKtMeFI.js.br +1 -0
- package/build/client/_app/immutable/nodes/1.DHKtMeFI.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/handler.js +4 -4
- package/build/index.js +4 -4
- package/build/server/chunks/chunks/{internal.js-D8EA_he2.js → internal.js-C3tV0XXj.js} +2 -2
- package/build/server/chunks/chunks/{internal.js-D8EA_he2.js.map → internal.js-C3tV0XXj.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/graph/schema-registry/{_server.ts.js-Dyfsc-VA.js → _server.ts.js-CAsXxBRq.js} +7 -2
- package/build/server/chunks/entries/endpoints/api/graph/schema-registry/_server.ts.js-CAsXxBRq.js.map +1 -0
- package/build/server/chunks/{handler-BjXBCd1c.js → handler-DlaCCnxx.js} +3 -3
- package/build/server/chunks/{handler-BjXBCd1c.js.map → handler-DlaCCnxx.js.map} +1 -1
- package/build/server/chunks/{index.js-BJYcV8V7.js → index.js-BGfKWHak.js} +2 -2
- package/build/server/chunks/{index.js-BJYcV8V7.js.map → index.js-BGfKWHak.js.map} +1 -1
- package/build/server/chunks/{manifest.js-Ddaot0P4.js → manifest.js-CnmaNf5D.js} +4 -4
- package/build/server/chunks/{manifest.js-Ddaot0P4.js.map → manifest.js-CnmaNf5D.js.map} +1 -1
- package/build/server/chunks/nodes/{1.js-BRigw_9J.js → 1.js-BypjwBYB.js} +2 -2
- package/build/server/chunks/nodes/{1.js-BRigw_9J.js.map → 1.js-BypjwBYB.js.map} +1 -1
- package/examples/immeuble/ACCEPTANCE.yaml +82 -0
- package/examples/immeuble/BIM_LITE.md +15 -0
- package/examples/immeuble/CHECKLIST.md +128 -0
- package/examples/immeuble/README.md +121 -0
- package/examples/immeuble/bundle/immeuble.bundle.json +22786 -0
- package/examples/immeuble/contracts/answer_artifacts.seed.jsonl +34 -0
- package/examples/immeuble/contracts/business_capabilities.seed.jsonl +25 -0
- package/examples/immeuble/contracts/consumer_contract.yaml +131 -0
- package/examples/immeuble/contracts/immeuble_structured_import_model.json +310 -0
- package/examples/immeuble/contracts/mapping_external_to_canonical.json +375 -0
- package/examples/immeuble/contracts/mapping_external_to_canonical.yaml +55 -0
- package/examples/immeuble/contracts/mapping_external_to_canonical_ws.json +65 -0
- package/examples/immeuble/contracts/model_contract.json +943 -0
- package/examples/immeuble/contracts/projection_catalog.yaml +366 -0
- package/examples/immeuble/contracts/scenarios.yaml +27 -0
- package/examples/immeuble/contracts/semantic_proposal.golden.json +1 -0
- package/examples/immeuble/contracts/source_profile.yaml +38 -0
- package/examples/immeuble/fake_data/DeltaFinding.csv +20 -0
- package/examples/immeuble/fake_data/ProjectionResult.csv +13 -0
- package/examples/immeuble/fake_data/ag_meeting.csv +4 -0
- package/examples/immeuble/fake_data/agenda_item.csv +4 -0
- package/examples/immeuble/fake_data/architect.csv +3 -0
- package/examples/immeuble/fake_data/architecture_firm.csv +2 -0
- package/examples/immeuble/fake_data/bank_account.csv +3 -0
- package/examples/immeuble/fake_data/billing_group.csv +41 -0
- package/examples/immeuble/fake_data/block.csv +10 -0
- package/examples/immeuble/fake_data/budget_line.csv +3 -0
- package/examples/immeuble/fake_data/building.csv +6 -0
- package/examples/immeuble/fake_data/cellar.csv +41 -0
- package/examples/immeuble/fake_data/change_order.csv +2 -0
- package/examples/immeuble/fake_data/charge_call.csv +58 -0
- package/examples/immeuble/fake_data/claim.csv +4 -0
- package/examples/immeuble/fake_data/coda_entry.csv +49 -0
- package/examples/immeuble/fake_data/compliance_certificate.csv +10 -0
- package/examples/immeuble/fake_data/contractor.csv +4 -0
- package/examples/immeuble/fake_data/decision.csv +5 -0
- package/examples/immeuble/fake_data/defect_reserve.csv +3 -0
- package/examples/immeuble/fake_data/household.csv +41 -0
- package/examples/immeuble/fake_data/inspection.csv +3 -0
- package/examples/immeuble/fake_data/insurance_policy.csv +4 -0
- package/examples/immeuble/fake_data/intervention.csv +13 -0
- package/examples/immeuble/fake_data/invoice.csv +3 -0
- package/examples/immeuble/fake_data/lease_contract.csv +12 -0
- package/examples/immeuble/fake_data/maintenance_ticket.csv +13 -0
- package/examples/immeuble/fake_data/meter.csv +4 -0
- package/examples/immeuble/fake_data/meter_reading.csv +19 -0
- package/examples/immeuble/fake_data/milestone.csv +3 -0
- package/examples/immeuble/fake_data/organization.csv +12 -0
- package/examples/immeuble/fake_data/parking_space.csv +8 -0
- package/examples/immeuble/fake_data/permit.csv +3 -0
- package/examples/immeuble/fake_data/person.csv +85 -0
- package/examples/immeuble/fake_data/private_garden.csv +7 -0
- package/examples/immeuble/fake_data/progress_event.csv +2 -0
- package/examples/immeuble/fake_data/quote.csv +3 -0
- package/examples/immeuble/fake_data/receipt.csv +2 -0
- package/examples/immeuble/fake_data/reminder.csv +11 -0
- package/examples/immeuble/fake_data/service_contract.csv +4 -0
- package/examples/immeuble/fake_data/shared_equipment.csv +8 -0
- package/examples/immeuble/fake_data/shared_space.csv +10 -0
- package/examples/immeuble/fake_data/unit.csv +41 -0
- package/examples/immeuble/fake_data/work_package.csv +4 -0
- package/examples/immeuble/fake_data/worksite_project.csv +3 -0
- package/examples/immeuble/gap-rules/L0-patrimoine.json +57 -0
- package/examples/immeuble/gap-rules/L1-syndic-naive.json +36 -0
- package/examples/immeuble/gap-rules/L1-syndic.json +61 -0
- package/examples/immeuble/gap-rules/L2-chantier.json +87 -0
- package/examples/immeuble/gap-rules/L2-exploitation.json +87 -0
- package/examples/immeuble/gap-rules/L2-finance.json +48 -0
- package/examples/immeuble/gap-rules/L2-maintenance.json +107 -0
- package/examples/immeuble/gap-rules/L2-syndic-filtered.json +39 -0
- package/examples/immeuble/gap-rules/L3-full.json +332 -0
- package/examples/immeuble/gap-rules/closed-world-contract.md +76 -0
- package/examples/immeuble/gap-rules/demo.json +51 -0
- package/examples/immeuble/gap-rules/expected-findings.yaml +100 -0
- package/examples/immeuble/gap-rules/gap-scenarios.yaml +79 -0
- package/examples/immeuble/gap-rules/motifs.json +38 -0
- package/examples/immeuble/gap-rules/syndic.json +40 -0
- package/examples/immeuble/import_manifest.yaml +25 -0
- package/examples/immeuble/import_ready/graph_edges_import.csv +848 -0
- package/examples/immeuble/import_ready/mfo_facets_import.csv +559 -0
- package/examples/immeuble/index.md +140 -0
- package/examples/immeuble/model/immeuble_model.json +418 -0
- package/examples/immeuble/reports/01-model.validation.json +56 -0
- package/examples/immeuble/reports/02-mapping.validation.json +9 -0
- package/examples/immeuble/reports/acceptance.validation.json +161 -0
- package/examples/immeuble/reports/consumer_contract.validation.json +162 -0
- package/examples/immeuble/reports/graph_edges.jsonl +847 -0
- package/examples/immeuble/reports/graph_nodes.jsonl +558 -0
- package/examples/immeuble/reports/hybrid-compare.json +144 -0
- package/examples/immeuble/reports/immeuble-import-scenario.json +233 -0
- package/examples/immeuble/reports/live-artifacts-refresh.validation.json +51 -0
- package/examples/immeuble/reports/pipeline_audit.json +59 -0
- package/examples/immeuble/reports/projection_audit.json +69 -0
- package/examples/immeuble/reports/projection_audit_immeuble.json +257 -0
- package/examples/immeuble/reports/projection_audit_immeuble.md +122 -0
- package/examples/immeuble/reports/projection_candidates.json +1596 -0
- package/examples/immeuble/reports/projection_candidates.md +117 -0
- package/examples/immeuble/reports/projection_model_validation.md +115 -0
- package/examples/immeuble/reports/reindex.json +4 -0
- package/examples/immeuble/reports/reset-immeuble-workspace.json +32 -0
- package/examples/immeuble/reports/schema-id-prefix-check.json +5 -0
- package/examples/immeuble/scripts/audit-immeuble-projections.mjs +254 -0
- package/examples/immeuble/scripts/build-immeuble-model.mjs +308 -0
- package/examples/immeuble/scripts/compare-immeuble-snapshots.sh +227 -0
- package/examples/immeuble/scripts/enrich-immeuble-demo.mjs +1135 -0
- package/examples/immeuble/scripts/reset-immeuble-workspace.mjs +139 -0
- package/examples/immeuble/scripts/run-immeuble-backend.sh +164 -0
- package/examples/immeuble/scripts/run-immeuble-import.mjs +232 -0
- package/examples/immeuble/scripts/run-immeuble-live-lab.sh +439 -0
- package/examples/immeuble/scripts/seed-immeuble-gap-rules.mjs +69 -0
- package/examples/immeuble/scripts/start-immeuble-demo.sh +52 -0
- package/examples/immeuble/scripts/starterkit/analysis-lenses.mjs +181 -0
- package/examples/immeuble/scripts/starterkit/analyze-projection-candidates.mjs +714 -0
- package/examples/immeuble/scripts/starterkit/audit-ghostcrab-projections.mjs +674 -0
- package/examples/immeuble/scripts/starterkit/facet-prefix.mjs +166 -0
- package/examples/immeuble/scripts/starterkit/sqlite-utils.mjs +131 -0
- package/examples/immeuble/scripts/verify-immeuble-acceptance.mjs +284 -0
- package/examples/immeuble/scripts/verify-immeuble-live-artifacts.mjs +140 -0
- package/examples/immeuble/scripts/yaml-lite.mjs +96 -0
- package/examples/immeuble/sources/agent-prompts/prompts/00-prerequisites-immo-mcp.md +161 -0
- package/examples/immeuble/sources/agent-prompts/prompts/00-prerequisites.md +39 -0
- package/examples/immeuble/sources/agent-prompts/prompts/01-discovery-and-model-proposal.md +42 -0
- package/examples/immeuble/sources/agent-prompts/prompts/02-ontology-register.md +44 -0
- package/examples/immeuble/sources/agent-prompts/prompts/03-gap-rules-design.md +44 -0
- package/examples/immeuble/sources/agent-prompts/prompts/04-document-ingest.md +40 -0
- package/examples/immeuble/sources/agent-prompts/prompts/05-graph-extraction.md +44 -0
- package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare-immo-mcp.md +109 -0
- package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare-test-immo-mcp3.md +30 -0
- package/examples/immeuble/sources/agent-prompts/prompts/06-validate-and-compare.md +63 -0
- package/examples/immeuble/sources/checklists/gap-rules-checklist.md +42 -0
- package/examples/immeuble/sources/checklists/ontology-checklist.md +54 -0
- package/examples/immeuble/sources/documents/README.md +42 -0
- package/examples/immeuble/sources/documents/annexes-caves-garages-jardins.md +8 -0
- package/examples/immeuble/sources/documents/annexes-jardins-garages.md +1 -0
- package/examples/immeuble/sources/documents/baux-erables.md +1 -0
- package/examples/immeuble/sources/documents/baux-locatifs.md +11 -0
- package/examples/immeuble/sources/documents/coda-janvier-2026.md +10 -0
- package/examples/immeuble/sources/documents/composition-menages.md +1 -0
- package/examples/immeuble/sources/documents/composition-occupants.md +18 -0
- package/examples/immeuble/sources/documents/expected-coverage.json +70 -0
- package/examples/immeuble/sources/documents/extrait-coda-janvier-2026.md +1 -0
- package/examples/immeuble/sources/documents/groupes-facturation.md +30 -0
- package/examples/immeuble/sources/documents/manifest.json +79 -0
- package/examples/immeuble/sources/documents/note-architecte-chantier-erables.md +3 -0
- package/examples/immeuble/sources/documents/permis-urbanisme-erables.md +3 -0
- package/examples/immeuble/sources/documents/procedures-operationnelles.md +3 -0
- package/examples/immeuble/sources/documents/pv-ag-budget-2026.md +1 -0
- package/examples/immeuble/sources/documents/pv-reception-reserves-erables.md +3 -0
- package/examples/immeuble/sources/documents/registre-coproprietaires.md +24 -0
- package/examples/immeuble/sources/documents/reglement-copropriete-tilleuls.md +1 -0
- package/examples/immeuble/sources/documents/statuts-erables.md +22 -0
- package/examples/immeuble/sources/documents/statuts-tilleuls.md +19 -0
- package/examples/immeuble/sources/documents/succession-jean-dupont.md +3 -0
- package/examples/immeuble/sources/documents/titre-propriete-tilleuls-a3.md +1 -0
- package/examples/immeuble/sources/documents/trous-pedagogiques.md +3 -0
- package/examples/immeuble/sources/ontology/README.md +1 -0
- package/examples/immeuble/sources/ontology/core.yaml +444 -0
- package/examples/immeuble/success-criteria.yaml +35 -0
- package/fixtures/immeuble-demo.sqlite +0 -0
- package/package.json +16 -3
- package/scripts/lib/sqlite-runtime.mjs +1 -1
- package/scripts/load-immeuble-demo.sh +103 -0
- package/scripts/seed-immeuble-projections.mjs +75 -148
- package/scripts/verify-immeuble-demo-sources.mjs +93 -0
- package/scripts/verify-immeuble-demo.mjs +69 -0
- package/build/client/_app/immutable/chunks/BmeSanva.js +0 -1
- package/build/client/_app/immutable/chunks/BmeSanva.js.br +0 -0
- package/build/client/_app/immutable/chunks/BmeSanva.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CVz6aYsT.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CVz6aYsT.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.Bt5tVOz8.js +0 -1
- package/build/client/_app/immutable/entry/start.Bt5tVOz8.js.br +0 -2
- package/build/client/_app/immutable/entry/start.Bt5tVOz8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BBtxY46Q.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BBtxY46Q.js.gz +0 -0
- package/build/server/chunks/entries/endpoints/api/graph/schema-registry/_server.ts.js-Dyfsc-VA.js.map +0 -1
- package/scripts/build-serenity-v6-concept-review-pack.mjs +0 -493
- package/scripts/build-serenity-v6-review-pack.mjs +0 -479
- package/scripts/create-serenity-production-v6.mjs +0 -627
- package/scripts/export-serenity-v6-backup.mjs +0 -178
- package/scripts/import-serenity-v6-user-decisions.mjs +0 -543
- package/scripts/materialize-serenity-v6-snapshots.mjs +0 -675
|
@@ -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
|
+
}
|