lovarch-cli 0.2.1__py3-none-any.whl

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 (122) hide show
  1. lovarch_cli/__init__.py +16 -0
  2. lovarch_cli/__main__.py +10 -0
  3. lovarch_cli/ai/__init__.py +21 -0
  4. lovarch_cli/ai/gateway.py +240 -0
  5. lovarch_cli/api.py +111 -0
  6. lovarch_cli/auth/__init__.py +32 -0
  7. lovarch_cli/auth/keyring_store.py +214 -0
  8. lovarch_cli/auth/local_server.py +165 -0
  9. lovarch_cli/auth/pkce.py +57 -0
  10. lovarch_cli/auth/session.py +189 -0
  11. lovarch_cli/cli.py +262 -0
  12. lovarch_cli/clients/__init__.py +33 -0
  13. lovarch_cli/clients/factory.py +54 -0
  14. lovarch_cli/clients/local_client.py +432 -0
  15. lovarch_cli/clients/lovarch_storage.py +174 -0
  16. lovarch_cli/clients/lovarch_supabase.py +295 -0
  17. lovarch_cli/clients/persistence.py +166 -0
  18. lovarch_cli/clients/storage.py +66 -0
  19. lovarch_cli/commands/__init__.py +10 -0
  20. lovarch_cli/commands/account.py +172 -0
  21. lovarch_cli/commands/audit.py +394 -0
  22. lovarch_cli/commands/config_cmd.py +80 -0
  23. lovarch_cli/commands/consolidate.py +217 -0
  24. lovarch_cli/commands/context_cmd.py +73 -0
  25. lovarch_cli/commands/dev.py +287 -0
  26. lovarch_cli/commands/do_cmd.py +120 -0
  27. lovarch_cli/commands/init.py +218 -0
  28. lovarch_cli/commands/jobs_cmd.py +95 -0
  29. lovarch_cli/commands/login.py +202 -0
  30. lovarch_cli/commands/mcp_cmd.py +26 -0
  31. lovarch_cli/commands/run.py +375 -0
  32. lovarch_cli/commands/signup.py +185 -0
  33. lovarch_cli/commands/status.py +243 -0
  34. lovarch_cli/commands/upgrade.py +108 -0
  35. lovarch_cli/commands/verifica_cmd.py +174 -0
  36. lovarch_cli/config.py +101 -0
  37. lovarch_cli/config_store.py +111 -0
  38. lovarch_cli/credits/__init__.py +35 -0
  39. lovarch_cli/credits/base.py +84 -0
  40. lovarch_cli/credits/factory.py +36 -0
  41. lovarch_cli/credits/local.py +34 -0
  42. lovarch_cli/credits/lovarch.py +56 -0
  43. lovarch_cli/i18n/__init__.py +27 -0
  44. lovarch_cli/i18n/loader.py +121 -0
  45. lovarch_cli/i18n/translations/en.json +168 -0
  46. lovarch_cli/i18n/translations/es.json +168 -0
  47. lovarch_cli/i18n/translations/it.json +168 -0
  48. lovarch_cli/i18n/translations/pt.json +168 -0
  49. lovarch_cli/mcp/__init__.py +9 -0
  50. lovarch_cli/mcp/server.py +199 -0
  51. lovarch_cli/mcp/tools.py +372 -0
  52. lovarch_cli/sample_downloader.py +255 -0
  53. lovarch_cli/squad/README.md +206 -0
  54. lovarch_cli/squad/agents/auditor-input.md +353 -0
  55. lovarch_cli/squad/agents/bim-engineer.md +404 -0
  56. lovarch_cli/squad/agents/briefing-architect.md +249 -0
  57. lovarch_cli/squad/agents/cad-engineer.md +278 -0
  58. lovarch_cli/squad/agents/capitolato-writer.md +256 -0
  59. lovarch_cli/squad/agents/computo-engineer.md +258 -0
  60. lovarch_cli/squad/agents/concept-designer.md +399 -0
  61. lovarch_cli/squad/agents/contratto-architect.md +243 -0
  62. lovarch_cli/squad/agents/deliverable-builder.md +253 -0
  63. lovarch_cli/squad/agents/energy-prelim.md +388 -0
  64. lovarch_cli/squad/agents/pratiche-it.md +251 -0
  65. lovarch_cli/squad/agents/progetto-chief.md +768 -0
  66. lovarch_cli/squad/agents/quality-dati.md +409 -0
  67. lovarch_cli/squad/agents/quality-misure.md +418 -0
  68. lovarch_cli/squad/agents/quality-normativa.md +417 -0
  69. lovarch_cli/squad/agents/quality-output.md +436 -0
  70. lovarch_cli/squad/agents/regolatorio-it.md +278 -0
  71. lovarch_cli/squad/checklists/handoff-quality-gate.md +232 -0
  72. lovarch_cli/squad/checklists/quality-dati-checklist.md +134 -0
  73. lovarch_cli/squad/checklists/quality-misure-checklist.md +139 -0
  74. lovarch_cli/squad/checklists/quality-normativa-checklist.md +121 -0
  75. lovarch_cli/squad/checklists/quality-output-checklist.md +116 -0
  76. lovarch_cli/squad/config.yaml +408 -0
  77. lovarch_cli/squad/data/CHANGELOG.md +272 -0
  78. lovarch_cli/squad/data/agents-prd.md +428 -0
  79. lovarch_cli/squad/data/architettura-progetto-rules.md +328 -0
  80. lovarch_cli/squad/data/handoff-card-template.md +231 -0
  81. lovarch_cli/squad/data/mocks/catasto-visura.json +72 -0
  82. lovarch_cli/squad/data/mocks/firma-envelope.json +43 -0
  83. lovarch_cli/squad/data/prezzario-lombardia-sample.json +312 -0
  84. lovarch_cli/squad/scripts/api_clients.py +206 -0
  85. lovarch_cli/squad/scripts/architect_profile.py +276 -0
  86. lovarch_cli/squad/scripts/deliverable_generators.py +844 -0
  87. lovarch_cli/squad/scripts/generate_attico_brera_dwg.py +369 -0
  88. lovarch_cli/squad/scripts/generate_chianti_dxf.py +368 -0
  89. lovarch_cli/squad/scripts/generate_chianti_images.py +223 -0
  90. lovarch_cli/squad/scripts/generate_real_sample_images.py +189 -0
  91. lovarch_cli/squad/scripts/generate_sample_assets.py +382 -0
  92. lovarch_cli/squad/scripts/lovarch_client.py +1046 -0
  93. lovarch_cli/squad/scripts/pipeline_runner.py +2095 -0
  94. lovarch_cli/squad/scripts/render_dxf_to_png.py +57 -0
  95. lovarch_cli/squad/scripts/run_palestra_demo.sh +277 -0
  96. lovarch_cli/squad/scripts/simulate_squad_execution.py +515 -0
  97. lovarch_cli/squad/scripts/validate-squad.py +383 -0
  98. lovarch_cli/squad/tasks/audit-input.md +146 -0
  99. lovarch_cli/squad/tasks/compute-metric.md +105 -0
  100. lovarch_cli/squad/tasks/consolidate-dossier.md +187 -0
  101. lovarch_cli/squad/tasks/generate-cad-plan.md +120 -0
  102. lovarch_cli/squad/tasks/generate-ifc-model.md +108 -0
  103. lovarch_cli/squad/tasks/write-capitolato.md +100 -0
  104. lovarch_cli/squad/templates/asseverazione-tecnica.md +126 -0
  105. lovarch_cli/squad/templates/capitolato-uni-11337.md +235 -0
  106. lovarch_cli/squad/templates/cila-comune-milano.md +177 -0
  107. lovarch_cli/squad/templates/contratto-cnappc.md +220 -0
  108. lovarch_cli/squad/workflows/dal-brief-al-cantiere.yaml +218 -0
  109. lovarch_cli/squad_loader.py +114 -0
  110. lovarch_cli/verify/__init__.py +15 -0
  111. lovarch_cli/verify/contratto.py +110 -0
  112. lovarch_cli/verify/dossier.py +97 -0
  113. lovarch_cli/verify/misure.py +83 -0
  114. lovarch_cli/verify/normativa.py +178 -0
  115. lovarch_cli/version.py +13 -0
  116. lovarch_cli/workflows/__init__.py +9 -0
  117. lovarch_cli/workflows/platform.py +212 -0
  118. lovarch_cli-0.2.1.dist-info/METADATA +232 -0
  119. lovarch_cli-0.2.1.dist-info/RECORD +122 -0
  120. lovarch_cli-0.2.1.dist-info/WHEEL +4 -0
  121. lovarch_cli-0.2.1.dist-info/entry_points.txt +3 -0
  122. lovarch_cli-0.2.1.dist-info/licenses/LICENSE +38 -0
@@ -0,0 +1,187 @@
1
+ # Task: consolidate-dossier
2
+
3
+ > **Pattern:** AP-TP-001
4
+ > **Executor:** @progetto-chief (Tier 0 orchestrator)
5
+ > **Squad:** architettura-progetto
6
+
7
+ ---
8
+
9
+ ## task_name
10
+ Consolidate final dossier + Lovarch upload + git commit + CHANGELOG
11
+
12
+ ## status
13
+ ACTIVE · stable · v1.0
14
+
15
+ ## responsible_executor
16
+ - **agent**: @progetto-chief
17
+ - **executor_type**: AP-EP-002 (Agent + Python workers)
18
+ - **workers**: zipfile, git, supabase-py
19
+
20
+ ## execution_type
21
+ **Final synchronous step** · Status: Validated → Done
22
+
23
+ ## input
24
+ ```yaml
25
+ required:
26
+ all_tier1_outputs: "All Tier 1 deliverable files"
27
+ qa_passes: "All applicable QA agents PASS"
28
+ execution_id: "pm_squad_executions UUID"
29
+ user_id: "Pablo admin UUID"
30
+ optional:
31
+ git_tag_format: "squad-v{version}-{timestamp}"
32
+ ```
33
+
34
+ ## output
35
+ ```yaml
36
+ files:
37
+ - "~/projects/{slug}/README.md"
38
+ - "~/projects/{slug}/manifest.json" # SHA256 + sizes
39
+ - "05-impresa/DOSSIER-IMPRESA.zip" # if not already
40
+ lovarch:
41
+ pm_documents_uploaded: number # 27+ files
42
+ pm_squad_executions_status: "completed"
43
+ pm_squad_steps_count: number
44
+ git:
45
+ commit_sha: string
46
+ tag: string
47
+ final:
48
+ live_tracking_url: string
49
+ dossier_url: string
50
+ ```
51
+
52
+ ## action_items
53
+
54
+ ### Phase A · Bootstrap project (BEFORE Tier 1 starts · @progetto-chief calls early)
55
+ 1. `LovarchClient.create_project_complete()` · all-in-one
56
+ - Creates `leads` row (Marco Rossini · CRM)
57
+ - Creates `pm_projects` row (Attico Brera · linked to lead)
58
+ - Creates `pm_phases` × 6 (Briefing/Definitivo/Pratiche/Esecutivo/DL/Consegna)
59
+ - Creates `pm_budget_items` × 10 (default % breakdown · opere_edili 35%, impianti 15%, etc.)
60
+ - Creates `financial_categories` "Onorari Architetto" (if not exists)
61
+ - Creates `financial_transactions` × 5 (parent + 4 SAL installments 15/25/25/35%)
62
+ - Creates `portal_clients` + `portal_project_access` + magic link
63
+ - Creates `pm_squad_executions` row (status: running)
64
+ - Returns: `{lead_id, project_id, phase_ids, budget_item_ids, finance_transaction_ids, portal, execution_id}`
65
+
66
+ 1b. **AUTO-OPEN live tracking page in browser** (mandatory · Pablo must see progress real-time):
67
+ ```python
68
+ import webbrowser
69
+ live_url = f"https://lovarch.com/admin/squad-execution/{execution_id}/live"
70
+ webbrowser.open(live_url, new=2) # opens in new tab
71
+ ```
72
+ This MUST happen IMMEDIATELY after pm_squad_executions row created. Squad does not wait for Tier 1 to start before opening browser.
73
+
74
+ ### Phase B · Persist Tier 1 outputs progressively (during execution)
75
+ 2. `@concept-designer` outputs → `LovarchClient.create_moodboard_analysis()` + `add_moodboard_assets()`
76
+ - Insert `moodboard_analyses` (project_id linked)
77
+ - Insert `moodboard_generated_assets` × 9 (asset_type: flatlay_complete | atmosphere | colors)
78
+ - Note: NEW-HOME hero priority is flatlay_complete (3) > atmosphere (2) > colors (1)
79
+
80
+ 3. `@concept-designer` 6 renders → `LovarchClient.save_render(project_id=..., metadata={ambient: ...})`
81
+ - Each FLUX render → INSERT `render_assets` row (project_id MANDATORY)
82
+ - Visible in `/new-home` ProjectDetailConnections tab + Project cover hero
83
+
84
+ 4. `@cad-engineer` + `@bim-engineer` outputs → `LovarchClient.upload_documents_batch()`
85
+ - Each DXF, IFC, PDF → upload Storage `pm-documents` bucket + INSERT `pm_documents` row
86
+ - Linked to project_id + appropriate phase_id
87
+
88
+ 5. `@capitolato-writer` outputs → `upload_documents_batch()` (capitolato + cronoprogramma + CAM xlsx)
89
+
90
+ 6. `@computo-engineer` outputs → `upload_documents_batch()` (xlsx, pdf) + UPDATE `pm_budget_items` with actual values
91
+
92
+ 7. `@pratiche-it` outputs → `upload_documents_batch()` (CILA, asseverazione, paesaggistica · phase_id = "Pratiche")
93
+
94
+ 8. `@contratto-architect` outputs → `LovarchClient.create_contract(project_id=...)` + `upload_documents_batch()` (contract PDF)
95
+ - INSERT `contracts` row (project_id linked) · visible in ProjectDetailContract tab
96
+
97
+ 9. `@deliverable-builder` outputs → `upload_documents_batch()` (presentation HTML, etc.)
98
+
99
+ 10. `LovarchClient.bulk_create_tasks(project_id, tasks=[...15 tasks])`
100
+ - 15 team tasks with phase_id assignments + responsible + deadline
101
+
102
+ ### Phase C · QA verification (Tier 2 after Tier 1 complete)
103
+ 11. Verify all QA agents emitted PASS verdict (4/4 PASS required)
104
+ 12. Run @quality-output `LovarchClient` integrity test:
105
+ - Each `pm_documents.id` reachable + public_url returns HTTP 200
106
+ - All `render_assets.project_id` set
107
+ - `moodboard_analyses` has ≥1 generated_asset
108
+
109
+ ### Phase D · Final consolidation
110
+ 13. Generate README.md with project index + URLs
111
+ 14. Compute SHA256 + size per file → manifest.json (uploaded as pm_documents row)
112
+ 15. Build DOSSIER-IMPRESA.zip · upload to Storage · INSERT pm_documents row (doc_type: "dossier")
113
+ 16. `LovarchClient.update_execution(status="completed", total_duration, total_steps)`
114
+ 17. Append entry to data/CHANGELOG.md (local + uploaded as pm_documents)
115
+ 18. Git stage + commit + tag (squad-v2.0.0-{timestamp})
116
+ 19. Open Finder on project folder (macOS) + AUTO-OPEN browser tabs:
117
+ ```python
118
+ import webbrowser, subprocess
119
+ webbrowser.open(f"https://lovarch.com/admin/squad-execution/{execution_id}/dossier", new=2)
120
+ webbrowser.open(f"https://lovarch.com/new-home", new=2)
121
+ subprocess.run(["open", f"~/projects/{slug}/"]) # macOS Finder
122
+ ```
123
+ - `lovarch.com/admin/squad-execution/{id}/dossier` (clickable deliverables)
124
+ - `lovarch.com/new-home` (project visible in ProjectsPanel grid)
125
+ - `~/projects/{slug}/` (Finder with all 27 files)
126
+ - Magic link automatically sent to client email
127
+ 20. Print summary console + return execution_id
128
+
129
+ ## acceptance_criteria
130
+ - [ ] All QA agents PASS verdicts received
131
+ - [ ] README.md generated with all 8 subfolder links
132
+ - [ ] manifest.json with SHA256 of every deliverable
133
+ - [ ] All files uploaded to pm_documents (HTTP 200 verified)
134
+ - [ ] pm_squad_executions status = "completed"
135
+ - [ ] CHANGELOG.md updated
136
+ - [ ] Git commit + tag created
137
+ - [ ] Live URL + dossier URL printed
138
+
139
+ ## dependencies
140
+ - **Libraries:**
141
+ - zipfile (Python · DOSSIER.zip)
142
+ - hashlib (SHA256)
143
+ - git CLI
144
+ - supabase-py
145
+ - **APIs:**
146
+ - Supabase Storage (uploads)
147
+ - Supabase REST (pm_documents inserts)
148
+ - pm_squad_executions UPDATE
149
+ - **Files:**
150
+ - All Tier 1 outputs aggregated
151
+ - data/CHANGELOG.md (append)
152
+
153
+ ## quality_gate
154
+ - **Gate:** QG-AP-1.5 (Output Completeness)
155
+ - **Reviewer:** @quality-output (already PASS prerequisite)
156
+ - **Final verification:** All 14 quality-output items PASS
157
+
158
+ ## handoff
159
+ - **From:** @progetto-chief (self · final consolidation)
160
+ - **To:** Pablo (human · final delivery)
161
+ - **No further routing**
162
+
163
+ ## veto_conditions
164
+ - Any QA agent NOT PASS → halt · re-route to retry
165
+ - Lovarch storage quota full → halt + notify Pablo
166
+ - Git commit fails → halt + investigate
167
+ - pm_documents insert error → halt · retry once
168
+
169
+ ## estimated_time
170
+ **45-60 seconds**
171
+
172
+ ## output_example
173
+ ```
174
+ ✓ All 4 QA agents PASS
175
+ ✓ README.md generated · 8 subfolders linked
176
+ ✓ manifest.json · 27 files · SHA256 verified
177
+ ✓ DOSSIER-IMPRESA.zip · 15.2 MB
178
+ ✓ Lovarch uploads: 27/27 (HTTP 200)
179
+ ✓ pm_squad_executions: status=completed · duration=14m 32s · steps=20
180
+ ✓ CHANGELOG.md updated · entry [Execution 1] appended
181
+ ✓ Git commit: a3f8b2e · tag squad-v2.0.0-2026-04-25T14:46:32
182
+
183
+ Live tracking: https://lovarch.com/admin/squad-execution/5d585486-0991-4598-b880-171682ea9424/live
184
+ Dossier: https://lovarch.com/admin/squad-execution/5d585486-0991-4598-b880-171682ea9424/dossier
185
+
186
+ Project folder: ~/projects/attico-brera/
187
+ ```
@@ -0,0 +1,120 @@
1
+ # Task: generate-cad-plan
2
+
3
+ > **Pattern:** AP-TP-001 (Atomic Task Anatomy · 8 mandatory fields)
4
+ > **Executor:** @cad-engineer (functional · Tier 1 · critical: misure_zero_tolerance)
5
+ > **Squad:** architettura-progetto
6
+
7
+ ---
8
+
9
+ ## task_name
10
+ Generate planimetrie quotate DXF + PDF UNI ISO 5457
11
+
12
+ ## status
13
+ ACTIVE · stable · v1.0
14
+
15
+ ## responsible_executor
16
+ - **agent**: @cad-engineer
17
+ - **executor_type**: AP-EP-002 (Agent · Python local)
18
+ - **worker**: ezdxf, Shapely, ReportLab
19
+
20
+ ## execution_type
21
+ **Asynchronous · Tier 1 parallel** · Output feeds @bim-engineer + @quality-misure
22
+
23
+ ## input
24
+ ```yaml
25
+ required:
26
+ stato_attuale_dxf: "Path to existing state DXF"
27
+ programma_spaziale_xlsx: "Path to room program from @briefing-architect"
28
+ requisiti_json: "Path to requisiti from @briefing-architect"
29
+ height_target_cm: 290 # default Milan A1
30
+ optional:
31
+ altezza_override: number # if non-standard
32
+ scale: "1:50" # default
33
+ ```
34
+
35
+ ## output
36
+ ```yaml
37
+ files:
38
+ - "03-progetto-definitivo/pianta-stato-attuale.dxf"
39
+ - "03-progetto-definitivo/pianta-stato-attuale.pdf"
40
+ - "03-progetto-definitivo/pianta-progetto.dxf"
41
+ - "03-progetto-definitivo/pianta-progetto.pdf"
42
+ - "03-progetto-definitivo/sezione-AA.pdf"
43
+ - "03-progetto-definitivo/prospetti.pdf"
44
+ - "03-progetto-definitivo/schema-quotato.json"
45
+ schema_quotato:
46
+ ambienti: array[{ nome, sup_m2, altezza_cm, rai }]
47
+ totale_utile_m2: number
48
+ totale_lordo_m2: number
49
+ muratura_m2: number
50
+ quote_principali: array[{ id, valore_cm, elemento, verified }]
51
+ ```
52
+
53
+ ## action_items
54
+ 1. Read stato-attuale.dxf · validate parseable
55
+ 2. Compute layout from programma-spaziale.xlsx
56
+ 3. Build perimeter walls (12cm) using ezdxf
57
+ 4. Build internal partitions (8cm)
58
+ 5. Add doors (block insertions, swing arcs)
59
+ 6. Add windows (perimeter only · facade vincolata)
60
+ 7. Generate dimension chains horizontal + vertical
61
+ 8. Add room labels with name + area
62
+ 9. Insert cartiglio CNAPPC bottom-right
63
+ 10. Export DXF (R2018) + PDF (A1 scale 1:50)
64
+ 11. Generate sezione-AA + prospetti
65
+ 12. Compute schema-quotato.json
66
+ 13. Self-verify sum chains match perimeter (±1mm)
67
+
68
+ ## acceptance_criteria
69
+ - [ ] DXF parseable via `ezdxf.readfile()`
70
+ - [ ] 9 layer ISO present (CAD-A-WALL, CAD-A-DIM, etc.)
71
+ - [ ] Cartiglio CNAPPC 12/12 fields populated
72
+ - [ ] All quotes within ±1mm tolerance
73
+ - [ ] Sum verification: sup utile + muratura = sup lorda (±0.5%)
74
+ - [ ] schema-quotato.json valid (matches schema)
75
+ - [ ] PDF readable at 1:50 scale (text height ≥2.5mm)
76
+ - [ ] Min sup ambienti respect normativa (camera ≥9m², ecc.)
77
+ - [ ] RAI ≥1/8 sup pavimento per ambienti abitabili
78
+
79
+ ## dependencies
80
+ - **Tools (Python local):**
81
+ - ezdxf 1.4.3
82
+ - Shapely 2.x
83
+ - ReportLab
84
+ - Trimesh (volume verification)
85
+ - **Files:**
86
+ - stato-attuale.dxf (input)
87
+ - programma-spaziale.xlsx (from @briefing-architect)
88
+ - requisiti.json
89
+ - **Templates:**
90
+ - data/architettura-progetto-rules.md §3 (UNI ISO standards)
91
+
92
+ ## templates
93
+ - Cartiglio CNAPPC standard (ezdxf primitives)
94
+ - Layer ISO setup function
95
+ - Dimension style UNI
96
+
97
+ ## quality_gate
98
+ - **Gate:** QG-AP-1.2 (Misure Verification Gate)
99
+ - **Reviewer:** @quality-misure (24-item checklist)
100
+ - **Threshold:** 5/5 CRITICI + ≥80% SECONDARI
101
+ - **Self-check:** Sum verification before handoff
102
+
103
+ ## handoff
104
+ - **From:** @progetto-chief (outbound card)
105
+ - **To:** @progetto-chief (inbound card with files + schema-quotato.json)
106
+ - **Then via chief:** @bim-engineer (uses schema-quotato) + @quality-misure (verifies)
107
+ - **Required announcement:** "Ritorno al @progetto-chief. Plans generati · {n} entities · cotazioni verificate ±1mm."
108
+
109
+ ## veto_conditions
110
+ - DWG sorgente impossibile da leggere → halt
111
+ - Sup lorda ≠ sup utile + muratura > 0.5% → halt
112
+ - Quota negativa o zero → halt
113
+ - Layer non-ISO → halt
114
+ - Cartiglio incompleto → halt
115
+
116
+ ## estimated_time
117
+ **90-120 seconds** (DXF entities count + PDF rendering)
118
+
119
+ ## output_example
120
+ See `@cad-engineer.md` output_examples · 187 entities · 9 layers · 24/24 quote check · 115.3 m² utile · 120.0 lorda · 4.7 muratura (pavimento finito 102.3 m²).
@@ -0,0 +1,108 @@
1
+ # Task: generate-ifc-model
2
+
3
+ > **Pattern:** AP-TP-001
4
+ > **Executor:** @bim-engineer (mind clone Mark Baldwin · Tier 1)
5
+ > **Squad:** architettura-progetto
6
+
7
+ ---
8
+
9
+ ## task_name
10
+ Generate IFC4 LOD 300 model + APS viewer + quantitativi
11
+
12
+ ## status
13
+ ACTIVE · stable · v1.0
14
+
15
+ ## responsible_executor
16
+ - **agent**: @bim-engineer
17
+ - **executor_type**: AP-EP-003 (Hybrid · Python + APS API)
18
+ - **worker**: IfcOpenShell 0.8.4 + APS Model Derivative
19
+
20
+ ## execution_type
21
+ **Synchronous after CAD** · Output feeds @computo-engineer + @energy-prelim
22
+
23
+ ## input
24
+ ```yaml
25
+ required:
26
+ schema_quotato_json: "From @cad-engineer"
27
+ dxf_path: "pianta-progetto.dxf"
28
+ materials_list: "From @concept-designer + briefing"
29
+ optional:
30
+ classification: "UniFormat | Uniclass" # default UniFormat
31
+ ```
32
+
33
+ ## output
34
+ ```yaml
35
+ files:
36
+ - "03-progetto-definitivo/modello.ifc"
37
+ - "03-progetto-definitivo/thumbnail-3d.png"
38
+ - "03-progetto-definitivo/viewer-url.txt"
39
+ - "03-progetto-definitivo/quantitativi.json"
40
+ quantitativi_schema:
41
+ muri: array[{ tipo, lunghezza_m, altezza_m, area_m2 }]
42
+ finestre: array[{ larghezza_cm, altezza_cm, quantita }]
43
+ porte: array[{ ... }]
44
+ pavimenti: array[{ ... }]
45
+ totale_aree_per_categoria: object
46
+ ```
47
+
48
+ ## action_items
49
+ 1. Initialize IFC4 file via `ifcopenshell.file(schema='IFC4')`
50
+ 2. Build IfcSite + IfcBuilding + IfcBuildingStorey
51
+ 3. Build IfcWalls from schema-quotato (perimeter + internal)
52
+ 4. Build IfcSlab (floor)
53
+ 5. Build IfcDoors with panels (LOD 300)
54
+ 6. Build IfcWindows (perimeter only)
55
+ 7. Build IfcSpaces for ambienti
56
+ 8. Apply property sets ISO 12006-3 (Pset_WallCommon, etc.)
57
+ 9. Apply UniFormat classification per element
58
+ 10. Run `ifcopenshell.validate()` · 0 errors required
59
+ 11. Test web-ifc loads · APS Model Derivative success
60
+ 12. Extract quantitativi via `ifcopenshell.api`
61
+ 13. Generate thumbnail via PyVista or APS
62
+
63
+ ## acceptance_criteria
64
+ - [ ] IFC4 schema valid
65
+ - [ ] `ifcopenshell.validate(model)` · 0 errors
66
+ - [ ] All elements have property sets ISO 12006-3
67
+ - [ ] All elements have UniFormat classification
68
+ - [ ] web-ifc loads file · ≥100 elements
69
+ - [ ] APS Viewer URL works (HTTP 200)
70
+ - [ ] quantitativi.json populated (muri, finestre, porte, pavimenti)
71
+ - [ ] thumbnail-3d.png generated
72
+ - [ ] Volumi vs DXF schema-quotato diff ≤2%
73
+
74
+ ## dependencies
75
+ - **Libraries:**
76
+ - IfcOpenShell 0.8.4
77
+ - ifcopenshell.api (high-level)
78
+ - PyVista (snapshots)
79
+ - **APIs:**
80
+ - Autodesk Platform Services (Model Derivative + Viewer SDK)
81
+ - **Inputs:**
82
+ - schema-quotato.json (@cad-engineer)
83
+ - materials list
84
+
85
+ ## templates
86
+ - IFC4 building skeleton template (IfcSite → IfcBuilding → IfcBuildingStorey)
87
+ - Property set definitions standard
88
+
89
+ ## quality_gate
90
+ - **Gate:** QG-AP-1.2 (Misure · volumi vs DXF)
91
+ - **Reviewer:** @quality-misure
92
+ - **Threshold:** Volumi diff ≤2% vs DXF
93
+
94
+ ## handoff
95
+ - **From:** @progetto-chief
96
+ - **To:** @progetto-chief (returns) → @computo-engineer (uses quantitativi) + @quality-misure (verifies)
97
+ - **Required announcement:** "Ritorno al @progetto-chief. IFC4 LOD 300 · {n} elements · viewer ready."
98
+
99
+ ## veto_conditions
100
+ - IFC validate fails → REJECT internal · regenerate
101
+ - Volumi diff vs DXF >2% → halt + flag @quality-dati
102
+ - APS upload fail 3× → procede senza viewer · flag warning
103
+
104
+ ## estimated_time
105
+ **60-90 seconds** (APS upload dominant · async)
106
+
107
+ ## output_example
108
+ See `@bim-engineer.md` output_examples · 142 elements · IFC4 valid · UniFormat classified · viewer URL embeddable.
@@ -0,0 +1,100 @@
1
+ # Task: write-capitolato
2
+
3
+ > **Pattern:** AP-TP-001
4
+ > **Executor:** @capitolato-writer (functional · Tier 1)
5
+ > **Squad:** architettura-progetto
6
+
7
+ ---
8
+
9
+ ## task_name
10
+ Write capitolato speciale d'appalto + cronoprogramma 90gg
11
+
12
+ ## status
13
+ ACTIVE · stable · v1.0
14
+
15
+ ## responsible_executor
16
+ - **agent**: @capitolato-writer
17
+ - **executor_type**: AP-EP-003 (Hybrid · AI 80% + BIM Manager review 20%)
18
+
19
+ ## input
20
+ ```yaml
21
+ required:
22
+ computo_xlsx: "From @computo-engineer"
23
+ materiali_list: "Lista materiali con codici EPD"
24
+ regolatorio_json: "tipo-pratica.json from @regolatorio-it"
25
+ durata_giorni: 90 # default
26
+ optional:
27
+ template_uni_11337: "data/architettura-progetto-rules.md §2.5"
28
+ ```
29
+
30
+ ## output
31
+ ```yaml
32
+ files:
33
+ - "05-impresa/capitolato-speciale.pdf"
34
+ - "05-impresa/cronoprogramma-90gg.pdf"
35
+ - "05-impresa/lista-CAM-rispettati.xlsx"
36
+ metrics:
37
+ pages: number # ≥30
38
+ cam_compliance_percent: number # target ≥80%
39
+ ```
40
+
41
+ ## action_items
42
+ 1. Load template UNI 11337-7 (cached)
43
+ 2. Build Sezione 1 · Disposizioni generali (3pp)
44
+ 3. Build Sezione 2 · Descrizione opere (5pp · from computo)
45
+ 4. Build Sezione 3 · Specifiche tecniche esecuzione (12pp)
46
+ 5. Build Sezione 4 · Materiali e prodotti (15pp · with CAM tracking)
47
+ 6. Build Sezione 5 · Modalità esecuzione (8pp)
48
+ 7. Build Sezione 6 · Tolleranze e prove (4pp · UNI EN 13670)
49
+ 8. Build Sezione 7 · Sicurezza cantiere (CSP/CSE check + 6pp)
50
+ 9. Build Sezione 8 · Oneri Appaltatore (8pp)
51
+ 10. Build Sezione 9 · Direzione Lavori (5pp)
52
+ 11. Build Sezione 10 · Garanzie + collaudo (4pp)
53
+ 12. Build Sezione 11 · Penali (3pp)
54
+ 13. Build Sezione 12 · Disposizioni finali (5pp)
55
+ 14. Generate cronoprogramma Gantt 90gg via plotly
56
+ 15. Generate lista-CAM-rispettati.xlsx · tracking ≥80%
57
+ 16. Add banner BOZZA su tutti PDF
58
+
59
+ ## acceptance_criteria
60
+ - [ ] 12 sezioni populated (no skipping)
61
+ - [ ] CAM 2025 tracking ≥80%
62
+ - [ ] Cronoprogramma 90gg with 6 fasi
63
+ - [ ] PSC obrigatorio sezione 7 if multi-impresa OR durata >200g/uomo
64
+ - [ ] Tolerances cited UNI EN 13670 + UNI ISO 5457
65
+ - [ ] PDF ≥30 pagine
66
+ - [ ] Banner BOZZA visible
67
+ - [ ] xlsx CAM rispettati 124+ voci tracked
68
+
69
+ ## dependencies
70
+ - **APIs/Tools:**
71
+ - Gemini 3.1 Pro (gemini-3.1-pro-preview) (structured generation)
72
+ - WeasyPrint (HTML→PDF qualità tipografica)
73
+ - plotly (Gantt cronoprogramma)
74
+ - edge: brochure-generate (layout)
75
+ - **Templates:**
76
+ - UNI 11337-7 cached (12 sezioni)
77
+ - CAM Edilizia 2025 voci (DM 23/06/2022)
78
+
79
+ ## quality_gate
80
+ - **Gate:** QG-AP-1.3 (Normativa Verification Gate)
81
+ - **Reviewer:** @quality-normativa
82
+ - **Threshold:** 6/6 CRITICI Pareto · CAM ≥80%
83
+
84
+ ## handoff
85
+ - **From:** @progetto-chief
86
+ - **To:** @progetto-chief → @quality-normativa (verifies)
87
+ - **Required announcement:** "Ritorno al @progetto-chief. Capitolato {n}pp · CAM {percent}%."
88
+
89
+ ## veto_conditions
90
+ - Capitolato <30 pagine → contenuto insufficiente · retry
91
+ - Sezione mancante (12 obbligatorie) → halt
92
+ - CAM compliance <60% → halt + flag
93
+ - Banner BOZZA missing → halt
94
+ - PSC sezione vuota su multi-impresa → halt
95
+
96
+ ## estimated_time
97
+ **60-90 seconds**
98
+
99
+ ## output_example
100
+ See `@capitolato-writer.md` output_examples · 78 pagine · 12 sezioni · CAM 87% · Gantt 90gg · banner BOZZA.
@@ -0,0 +1,126 @@
1
+ # Template Asseverazione del Tecnico Abilitato
2
+
3
+ > Asseverazione che il `@pratiche-it` allega alla CILA/SCIA.
4
+ > Variabili tra `{{...}}` da sostituire dal squad.
5
+
6
+ ---
7
+
8
+ ## ASSEVERAZIONE TECNICA
9
+
10
+ ai sensi dell'art. 6-bis comma 5 del DPR 380/2001 (TU Edilizia)
11
+
12
+ ---
13
+
14
+ Il/la sottoscritt{{architetto_genere}} **Arch. {{architetto_nome}} {{architetto_cognome}}**, nat{{architetto_genere}} a {{architetto_nato_a}} il {{architetto_data_nascita}}, codice fiscale **{{architetto_cf}}**, partita IVA **{{architetto_piva}}**, iscritt{{architetto_genere}} all'**Ordine degli Architetti, Pianificatori, Paesaggisti e Conservatori della Provincia di Milano** con il numero **{{architetto_n_ordine}}**, con studio professionale in {{architetto_studio_indirizzo}}, PEC **{{architetto_pec}}**,
15
+
16
+ in qualità di tecnico abilitato incaricato dal sig./sig.ra **{{cliente_nome}} {{cliente_cognome}}** (codice fiscale {{cliente_cf}}) per la progettazione dell'intervento edilizio sull'unità immobiliare sita in **{{immobile_indirizzo_completo}}**, identificata catastalmente al **Foglio {{foglio}} · Mappale {{mappale}} · Subalterno {{subalterno}}**,
17
+
18
+ consapevole delle responsabilità penali (artt. 359 e 481 c.p.) e civili derivanti da dichiarazioni mendaci, e in particolare consapevole delle sanzioni di cui all'art. 76 del DPR 445/2000 in caso di falsa attestazione,
19
+
20
+ ## ASSEVERA
21
+
22
+ ### A · Conformità urbanistica
23
+
24
+ Che l'intervento descritto è **conforme**:
25
+ - al **PGT vigente** del Comune di Milano (variante 2024);
26
+ - al **Piano delle Regole** e al **Piano dei Servizi**;
27
+ - al **Regolamento Edilizio** comunale del Comune di Milano;
28
+ - agli strumenti urbanistici **sovraordinati** (Piano Provinciale, Piano Paesaggistico Regionale Lombardia).
29
+
30
+ ### B · Stato legittimo dell'immobile
31
+
32
+ Che lo **stato legittimo** dell'immobile, ai sensi del decreto Salva-Casa (DL 69/2024 conv. L. 105/2024), è verificato in base ai seguenti titoli abilitativi:
33
+
34
+ {{stato_legittimo_titoli}}
35
+
36
+ (elenco titoli edilizi storici: licenza/concessione/permesso, anno, n. protocollo)
37
+
38
+ Esempio:
39
+ > - Licenza edilizia n. 1234/1910 del Comune di Milano (costruzione originaria)
40
+ > - Concessione edilizia n. 5678/1985 (ristrutturazione anni '80)
41
+ > - Eventuale Salva-Casa per tolleranze esecutive di costruzione attestate ai sensi del DL 69/2024
42
+
43
+ ### C · Non incidenza strutturale
44
+
45
+ Che i lavori previsti **non riguardano parti strutturali** dell'edificio. In particolare:
46
+ - Non è prevista demolizione di muri portanti;
47
+ - Non sono previste aperture su muri di spina o pilastri;
48
+ - Non è previsto aumento di carichi sui solai esistenti rispetto al carico previsto dalla destinazione d'uso residenziale;
49
+ - Eventuali tramezzature interne demolite/ricostruite hanno spessore ≤ 12 cm e peso lineare contenuto.
50
+
51
+ L'intervento si configura pertanto come **opera non strutturale** ai sensi del punto 8.4.1 del DM 17/01/2018 (NTC 2018) — riparazione o intervento locale, senza miglioramento/adeguamento sismico (punti 8.4.2/8.4.3).
52
+
53
+ ### D · Conformità tecnica
54
+
55
+ Che l'intervento rispetta:
56
+
57
+ a) le **norme antisismiche** vigenti (NTC 2018 + Circolare 7/2019), nei limiti di applicabilità;
58
+ b) le **norme antincendio** (DM 16/05/1987 n. 246 per civile abitazione);
59
+ c) le **norme di sicurezza** in materia di impianti (DM 37/2008 — dichiarazione di conformità a fine lavori);
60
+ d) le **norme igienico-sanitarie**:
61
+ - altezze minime ambienti abitabili: 270 cm (RE Milano art. 38);
62
+ - rapporto aero-illuminante (RAI) ≥ 1/8 della superficie utile (DM 5/7/1975);
63
+ - superficie minima camere singole 9 m², doppie 14 m²;
64
+ - superficie minima locale cottura 9 m² o angolo cottura 4 m²;
65
+ e) le **norme di efficientamento energetico** (D.Lgs 102/2014 e DM 26/06/2015), nei limiti applicabili a interventi di ristrutturazione;
66
+ f) le **norme paesaggistiche** (D.Lgs 42/2004 e DPR 31/2017) — vedi punto F.
67
+
68
+ ### E · Conformità ambientale (CAM 2025)
69
+
70
+ Che l'intervento **rispetta in via volontaria** i criteri ambientali minimi (CAM Edilizia 2025) di cui al DM 23 giugno 2022 e successive modifiche del MASE:
71
+ - impiego di materiali con **contenuto riciclato** ≥ 30% (laterizi) e ≥ 15% (cls);
72
+ - demolizione **selettiva** con recupero ≥ 70% dei rifiuti edili;
73
+ - legno **certificato FSC/PEFC**;
74
+ - materiali isolanti dotati di **DAP/EPD** (Dichiarazione Ambientale di Prodotto).
75
+
76
+ (I CAM 2025 non sono obbligatori per il privato, ma il committente ha richiesto adesione per finalità ambientali e per ottimizzare il valore dell'immobile.)
77
+
78
+ ### F · Vincoli paesaggistici e ambientali
79
+
80
+ Che l'immobile **ricade** in:
81
+
82
+ [**X**] Zona vincolata · {{vincolo_descrizione}}
83
+
84
+ Esempio:
85
+ > Zona A1 PGT Milano · Nucleo di Antica Formazione (NAF) Brera · tutela tramite PGT (NAF); eventuale vincolo paesaggistico, ove sussistente, è ex D.Lgs 42/2004 art. 136 (provvedimento dichiarativo di notevole interesse pubblico) — NON art. 142 lett. m), che riguarda le zone di interesse archeologico.
86
+
87
+ In relazione a tali vincoli:
88
+
89
+ [**{{paesaggistica_tipo}}**] È stata predisposta autorizzazione paesaggistica con procedura **{{paesaggistica_procedura}}** (allegato A esonero / allegato B semplificata / ordinaria art. 146 D.Lgs 42/2004), come da relazione paesaggistica allegata.
90
+
91
+ ### G · Conflitti di interesse
92
+
93
+ Che il sottoscritto **non ha conflitti di interesse** con il committente, e dichiara di non aver svolto incarichi presso il medesimo immobile in qualità di valutatore o altro nei dodici mesi precedenti.
94
+
95
+ ### H · Polizza RC
96
+
97
+ Che è in essere idonea polizza di responsabilità civile professionale presso **{{rc_compagnia}}** n. **{{rc_polizza}}**, con massimale di **€ {{rc_massimale}}**, in corso di validità fino al {{rc_scadenza}}.
98
+
99
+ ### I · Documentazione
100
+
101
+ Che gli **elaborati progettuali allegati** alla CILA sono completi, coerenti e adeguati alla descrizione dell'intervento, e in particolare contengono:
102
+ - planimetrie dello stato attuale, di progetto, e sovrapposto in scala 1:50;
103
+ - sezioni;
104
+ - prospetti (se interessati);
105
+ - relazione tecnica illustrativa;
106
+ - documentazione fotografica;
107
+ - visura catastale aggiornata.
108
+
109
+ ---
110
+
111
+ In fede.
112
+
113
+ Milano, lì **{{data_firma}}**
114
+
115
+ **Il tecnico abilitato:**
116
+
117
+ Arch. {{architetto_nome}} {{architetto_cognome}}
118
+ Iscritto Ordine Architetti Milano n. {{architetto_n_ordine}}
119
+
120
+ **Firma digitale qualificata** (eIDAS QES) + **timbro Ordine**:
121
+
122
+ [Apposizione firma digitale tramite dispositivo certificato qualificato]
123
+
124
+ ---
125
+
126
+ > **Nota:** Il presente documento è parte integrante della CILA presentata al Comune di Milano e deve essere firmato digitalmente dal tecnico con certificato qualificato, ai sensi del Reg. UE 910/2014 (eIDAS) e CAD (D.Lgs 82/2005).