PageSourceSearch

https://parisrentaparts.com/assets/SettingsContracts-Cmyy082A.js

js parisrentaparts.com collected 2026-10-09 22:04:00 UTC 57,382 bytes, 754 lines download raw bytes

1import{H as me,aw as $,r as c,j as e,c as ue,ar as re,as as ae,at as G,a8 as ge,B as u,au as H,ac as P,ad as R,am as D,an as k,u as ne,aq as he,K as U,I as xe,h as be,i as fe,k as ye,l as ve,m as _e,ae as S,s as M,b as f,bj as je,av as O,f as we,X as Ne}from"./index-D5R9CWr2.js";import{S as J}from"./SettingsShell-DkYgy-H_.js";import{B as E}from"./badge-B4iIB_GH.js";import{S as X}from"./switch-0RmuZVXc.js";import{S as Ae}from"./separator-CqWAd62e.js";import{T as Ce,a as Te,b as Y,c as q,d as Le,e as B}from"./table-D5veegyb.js";import{A as Pe,h as Re,a as Se,b as Me,c as Ee,d as De,e as ke,f as Ie,g as Fe}from"./alert-dialog-4FCjNdB4.js";import{u as Oe}from"./useContracts-B7j9klz5.js";import{P as qe}from"./PageSkeleton-SVGO8oUf.js";import{D as ie,a as se,b as oe,c as le}from"./dialog-CLC4v4pI.js";import{s as z}from"./sanitize-CNX77NFD.js";import{T as Be}from"./textarea-rQZs_wSe.js";import{S as W}from"./scroll-area-XzMpmktT.js";import{g as Ve,C as ce,B as Ge,I as He,H as Ue,L as Ke,A as $e}from"./ContractVariables-0_ntjHiW.js";import{C as ze,V as We}from"./variable-B15J75lp.js";import{L as Qe}from"./list-DKakN51d.js";import{F as K}from"./file-text-D50dZpGo.js";import{M as Je}from"./maximize-2-C5OyG0w6.js";import{P as Xe}from"./printer-wgjf2s1K.js";import{D as Ye}from"./download-B1Ir96-e.js";import{S as Q}from"./sparkles-BbYLz8O8.js";import{S as Ze}from"./save-C6uVFFTD.js";import{C as et}from"./contract-BPQQAQcj.js";import{P as Z}from"./plus-C_cXJ1zJ.js";import{S as tt}from"./square-pen-B_u-65q4.js";import{T as rt}from"./trash-2-KxEfpDSI.js";import{I as ee}from"./image-C_zyu54c.js";import{U as te}from"./upload-DnTsq47q.js";import{P as at}from"./pen-tool-DgMapBmt.js";import"./AppLayout-CreL9Axy.js";import"./wrench-CpPDVHpr.js";import"./house-BSdFTc93.js";import"./pull-to-refresh-8r31CQoz.js";import"./calendar-D7YPT7FB.js";import"./send-DYbGN6xe.js";import"./dollar-sign-CFXmjBgO.js";import"./wallet-NSknHVIW.js";import"./chart-column-DDD70TP6.js";import"./message-square-_pho9Wsv.js";import"./database-CyS6yrr_.js";import"./formatDistanceToNow-BOhoyb6f.js";import"./constructNow-DQ2n3FBI.js";import"./differenceInMonths-6myfc76I.js";import"./sheet-BMeEmOG3.js";import"./index-BQJE0D3x.js";import"./index-Cj3i9dis.js";import"./receipt-B0GYoCdB.js";import"./drawer-B05fz228.js";import"./differenceInDays-Dc8ONZsv.js";import"./parseISO-CPTq0D6Q.js";import"./circle-check-CLbUexCi.js";import"./clock-D72xm9Eo.js";import"./triangle-alert-Dz_0sbeG.js";import"./credit-card-C-BRGzyw.js";import"./ticket-plus-CmgMFVQN.js";import"./arrow-left-ZzXpuph4.js";import"./SecondarySidebar-Kns-LY4h.js";import"./calendar-days-Wd9GQrKs.js";import"./clipboard-list-rp5yggzp.js";import"./globe-CFYaZvqb.js";import"./fr-DRYiSXCJ.js";import"./skeleton-Cjb14kQh.js";import"./purify.es-D9RiKzGB.js";import"./copy-D4zef6MA.js";/**
2 * @license lucide-react v0.462.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const nt=me("Heading1",[["path",{d:"M4 12h8",key:"17cfdx"}],["path",{d:"M4 18V6",key:"1rz3zl"}],["path",{d:"M12 18V6",key:"zqpxq5"}],["path",{d:"m17 12 3-2v8",key:"1hhhft"}]]);function it({content:n,onChange:p,previewData:s={},className:j,contractKind:T}){var d;const{workspace:g}=$(),[h,N]=c.useState("edit"),[o,y]=c.useState(!1),v=c.useRef(null),_=((g==null?void 0:g.settings)||{}).contract_signature_url,a=c.useCallback(t=>{const i=v.current;if(!i)return;const m=i.selectionStart,l=i.selectionEnd,w=n.slice(0,m)+t+n.slice(l);p(w),setTimeout(()=>{i.focus(),i.setSelectionRange(m+t.length,m+t.length)},0)},[n,p]),x=c.useCallback((t,i)=>{const m=v.current;if(!m)return;const l=m.selectionStart,w=m.selectionEnd,I=n.slice(l,w),F=n.slice(0,l)+t+I+i+n.slice(w);p(F)},[n,p]),A=[{icon:Ge,label:"Bold",action:()=>x("<strong>","</strong>")},{icon:He,label:"Italic",action:()=>x("<em>","</em>")},{icon:nt,label:"Heading 1",action:()=>a(`
7<h1>Heading</h1>
8`)},{icon:Ue,label:"Heading 2",action:()=>a(`
9<h2>Subheading</h2>
10`)},{icon:Qe,label:"Bullet List",action:()=>a(`
11<ul>
12  <li>Item</li>
13</ul>
14`)},{icon:Ke,label:"Numbered List",action:()=>a(`
15<ol>
16  <li>Item</li>
17</ol>
18`)}],C=Ve(T),L=()=>{let t=n;
18return C.forEach(m=>{const l=new RegExp(`\\{\\{${m.key}\\}\\}`,"g"),w=s[m.key];w?t=t.replace(l,`<span class="bg-success-light dark:bg-success-light px-1 rounded">${w}</span>`):t=t.replace(l,`<span class="bg-warning-light dark:bg-warning-light/30 px-1 rounded text-warning dark:text-warning">[${m.label}]</span>`)}),t+=`
19      <div style="margin-top: 48px; padding-top: 24px; border-top: 1px solid #e5e7eb; text-align: center;">
20        <img src="${_||"/images/Logo_PRA.svg"}" alt="Signature" style="height: 60px; margin: 0 auto;" />
21      </div>
22    `,t},b=((d=n.match(/\{\{([^}]+)\}\}/g))==null?void 0:d.map(t=>t.replace(/\{\{|\}\}/g,"")))||[],r=[...new Set(b)];return e.jsx("div",{className:ue("flex flex-col h-full",j),children:e.jsxs(re,{value:h,onValueChange:t=>N(t),className:"flex-1 flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b pb-2 mb-2",children:[e.jsxs(ae,{children:[e.jsxs(G,{value:"edit",className:"gap-1.5",children:[e.jsx(ze,{className:"w-3.5 h-3.5"}),"Edit"]}),e.jsxs(G,{value:"preview",className:"gap-1.5",children:[e.jsx(ge,{className:"w-3.5 h-3.5"}),"Preview"]})]}),e.jsxs(u,{variant:o?"secondary":"outline",size:"sm",onClick:()=>y(!o),className:"gap-1.5",children:[e.jsx(We,{className:"w-3.5 h-3.5"}),"Variables"]})]}),e.jsxs("div",{className:"flex-1 flex gap-4",children:[e.jsxs("div",{className:"flex-1 flex flex-col min-w-0",children:[e.jsxs(H,{value:"edit",className:"flex-1 flex flex-col m-0",children:[e.jsx("div",{className:"flex items-center gap-1 mb-2 p-1 bg-muted/50 rounded-md",children:A.map((t,i)=>e.jsx(u,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:t.action,title:t.label,children:e.jsx(t.icon,{className:"w-4 h-4"})},i))}),e.jsx(Be,{ref:v,value:n,onChange:t=>p(t.target.value),className:"flex-1 min-h-[400px] font-mono text-sm resize-none",placeholder:"Start typing your contract template... Use {{variable_name}} for dynamic content."}),r.length>0&&e.jsxs("div",{className:"mt-2 flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:"Used variables:"}),r.map(t=>e.jsx(E,{variant:"secondary",className:"text-xs font-mono",children:`{{${t}}}`},t))]})]}),e.jsx(H,{value:"preview",className:"flex-1 m-0",children:e.jsx(P,{className:"h-full",children:e.jsx(R,{className:"p-6",children:e.jsx(W,{className:"h-[500px]",children:e.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none contract-preview",dangerouslySetInnerHTML:{__html:z(L())}})})})})})]}),o&&e.jsx(P,{className:"w-72 shrink-0",children:e.jsxs(R,{className:"p-4",children:[e.jsx("h4",{className:"font-medium mb-3",children:"Available Variables"}),e.jsx(ce,{onInsert:a,contractKind:T})]})})]})]})})}function st({content:n,data:p={},title:s="Contract Preview",onDownload:j}){const[T,g]=c.useState(!1),{workspace:h}=$(),N=((h==null?void 0:h.settings)||{}).contract_signature_url,o=c.useMemo(()=>{let a=n;$e.forEach(b=>{const r=new RegExp(`\\{\\{${b.key}\\}\\}`,"g"),d=p[b.key]||`[${b.label}]`;a=a.replace(r,d)}),(a.match(/\{\{([^}]+)\}\}/g)||[]).forEach(b=>{const r=b.replace(/\{\{|\}\}/g,""),d=p[r]||`[${r}]`;a=a.replace(new RegExp(`\\{\\{${r}\\}\\}`,"g"),d)});const A=N||"/images/Logo_PRA.svg",C=`<div style="margin-top: 12px;"><img src="${A}" alt="PRA Signature" style="height: 60px; margin: 0 auto;" /></div>`;if(/(<strong>Le Mandataire<\/strong>)/g.test(a))a=a.replace(/(<strong>Le Mandataire<\/strong>[^<]*(?:<br\s*\/?>[\s\S]*?)?<\/(?:p|div)>)/g,`$1${C}`);else{const b=/(>Le Mandataire<br>[^<]*<\/div>)/g;b.test(a)?a=a.replace(b,`$1${C}`):a+=`
23          <div style="margin-top: 48px; padding-top: 24px; border-top: 1px solid #e5e7eb; text-align: center;">
24            <img src="${A}" alt="PRA Signature" style="height: 60px; margin: 0 auto;" />
25          </div>
26        `}return a},[n,p,N]),y=c.useMemo(()=>(o.match(/\[([^\]]+)\]/g)||[]).map(x=>x.replace(/\[|\]/g,"")),[o]),v=()=>{const a=window.open("","_blank");a&&(a.document.write(`
27      <!DOCTYPE html>
28      <html>
29        <head>
30          <title>${s}</title>
31          <style>
32            body {
33              font-family: 'Times New Roman', serif;
34              padding: 40px;
35              max-width: 800px;
36              margin: 0 auto;
37              line-height: 1.6;
38            }
39            h1 { font-size: 24px; margin-bottom: 20px; }
40            h2 { font-size: 18px; margin-top: 24px; margin-bottom: 12px; }
41            p { margin-bottom: 12px; text-align: justify; }
42            ul, ol { margin-left: 20px; margin-bottom: 12px; }
43            .signature-block {
44              margin-top: 60px;
45              display: flex;
46              justify-content: space-between;
47            }
48            .signature-area {
49              width: 45%;
50              border-top: 1px solid #000;
51              padding-top: 10px;
52              text-align: center;
53            }
54            img { max-width: 100%; }
55          </style>
56        </head>
57        <body>
58          ${o}
59        </body>
60      </html>
61    `),a.document.close(),a.print())},_=()=>e.jsx("div",{className:"bg-white dark:bg-muted rounded-lg shadow-inner",children:e.jsx(W,{className:"h-[600px]",children:e.jsx("div",{className:"p-8 prose prose-sm dark:prose-invert max-w-none",style:{fontFamily:"'Times New Roman', serif",lineHeight:1.6},dangerouslySetInnerHTML:{__html:z(o)}})})});return e.jsxs(e.Fragment,{children:[e.jsxs(P,{className:"h-full flex flex-col",children:[e.jsx(D,{className:"py-3 px-4 border-b shrink-0",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{className:"w-4 h-4 text-muted-foreground"}),e.jsx(k,{className:"text-sm font-medium",children:s})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[y.length>0&&e.jsxs(E,{variant:"secondary",className:"text-xs mr-2",children:[y.length," missing"]}),e.jsx(u,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>g(!0),children:e.jsx(Je,{className:"w-4 h-4"})}),e.jsx(u,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:v,children:e.jsx(Xe,{className:"w-4 h-4"})}),j&&e.jsx(u,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:j,children:e.jsx(Ye,{className:"w-4 h-4"})})]})]})}),e.jsx(R,{className:"flex-1 p-4 overflow-hidden",children:e.jsx(_,{})})]}),e.jsx(ie,{open:T,onOpenChange:g,children:e.jsxs(se,{className:"max-w-4xl h-[90vh]",children:[e.jsx(oe,{children:e.jsx(le,{children:s})}),e.jsx("div",{className:"flex-1 overflow-hidden",children:e.jsx(W,{className:"h-[calc(90vh-100px)]",children:e.jsx("div",{className:"p-8 bg-white dark:bg-muted prose prose-sm dark:prose-invert max-w-none",style:{fontFamily:"'Times New Roman', serif",lineHeight:1.6},dangerouslySetInnerHTML:{__html:z(o)}})})})]})})]})}const ot=`
62<div style="text-align:center; margin-bottom:32px;">
63<h2>CONTRAT DE LOCATION IMMOBILIÈRE DE DROIT COMMUN</h2>
64<p><em>Locaux d'habitation non à usage de résidence principale du Preneur</em></p>
65<p>Réf. Mandat N° {{mandate_number}}</p>
66</div>
67
68<p>
68Entre les soussigné(e)s :</p>
69
70<p><strong>Monsieur/Madame {{owner_name}}</strong><br/>
71Né(e) le {{owner_birth_date}} à {{owner_birth_place}}, demeurant à {{owner_address}}, de nationalité {{owner_nationality}}<br/>
72Tél : {{owner_phone}} / {{owner_mobile}} — Email : {{owner_email}}<br/>
73Soussigné(e) de première part ci-après désigné(e) <strong>LE BAILLEUR</strong></p>
74
75<p>Et</p>
76
77<p><strong>La société {{company_name}}</strong><br/>
78SARL au capital de {{company_capital}} — siège social : {{company_address}}<br/>
79RCS {{company_rcs}}, représentée par M. {{company_representative}}, gérant<br/>
80Ci-après désignée le <strong>« PRENEUR »</strong></p>
81
82<hr/>
83
84<h2>Article 1 — Objet et nature</h2>
85<p>Le Bailleur donne à bail au Preneur les locaux désignés à l'article 2, sous les termes des présentes et du droit commun (articles 1713 et suivants du Code civil).</p>
86<p>Les Parties précisent ne pas soumettre le Bail aux dispositions relatives aux baux commerciaux, baux d'habitation (loi n° 89-462), ni aux baux professionnels (article 57-A, loi 86-1290).</p>
87
88<h2>Article 2 — Désignation</h2>
89<p><strong>{{property_name}}</strong> — Appartement meublé sis <strong>{{property_address}}</strong>, d'une surface de <strong>{{property_surface}}</strong> environ.<br/>
90Réf. interne : {{property_internal_id}} — N° enregistrement : {{property_registration_number}}</p>
91<p>Comprenant : {{property_description}}</p>
92
93<h2>Article 3 — Durée</h2>
94<p>Le Bail est conclu pour <strong>{{contract_duration}}</strong> à compter du <strong>{{start_date}}</strong> jusqu'au <strong>{{end_date}}</strong>, renouvelable par tacite reconduction.</p>
95
96<h2>Article 4 — Loyer et charges</h2>
97<p>Loyer mensuel : <strong>{{monthly_amount}} EUR</strong>, charges comprises, payable d'avance le <strong>{{payment_day}}</strong> de chaque mois.</p>
98<p>Révision annuelle selon l'IRL publié par l'INSEE. En aucun cas le montant ne pourra être baissé.</p>
99
100<h2>Article 5 — Dépôt de garantie</h2>
101<p>Le Preneur verse <strong>{{deposit_amount}}</strong> (1 mois de loyer) à titre de dépôt de garantie, restitué sous 15 jours après le départ.</p>
102
103<h2>Article 6 — État des lieux</h2>
104<p>État des lieux contradictoire à l'entrée et à la sortie. À défaut, l'article 1731 du Code civil s'applique.</p>
105
106<h2>Article 7 — Entretien et réparations</h2>
107<h3>7.1 Obligations du Preneur</h3>
108<p>Entretien courant, menues réparations et réparations locatives, sauf vétusté ou force majeure.</p>
109<h3>7.2 Obligations du Bailleur</h3>
110<p>Maintien en bon état d'habitabilité (chauffage, électricité, plomberie). Les réparations structurelles sont à sa charge.</p>
111
112<h2>Article 8 — Aménagements</h2>
113<p>Toute transformation nécessite l'accord écrit préalable du Bailleur.</p>
114
115<h2>Article 9 — Jouissance</h2>
116<p>Le Preneur jouira paisiblement des Locaux. Le Bailleur peut occuper les lieux 15 jours/an avec 1 mois de préavis.</p>
117
118<h2>Article 10 — Sous-location</h2>
119<p>Le Preneur est autorisé à sous-louer librement pour une durée minimum d'un mois, au prix qu'il détermine.</p>
120
121<h2>Article 11 — Assurances</h2>
122<p>Les Locaux doivent être constamment assurés. Le Bailleur déclare disposer d'une assurance propriétaire non-occupant.</p>
123
124<h2>Article 12 — Congé</h2>
125<p>Chaque partie peut donner congé avec un préavis de <strong>3 mois</strong>, par lettre recommandée avec AR ou acte d'huissier.</p>
126
127<h2>Article 13 — Clause résolutoire</h2>
128<p>Résiliation de plein droit après un commandement resté sans effet pendant 1 mois en cas de :</p>
129<ul>
130<li>Défaut de paiement du loyer</li>
131<li>Défaut de souscription d'assurance</li>
132<li>Trouble de voisinage constaté par décision de justice</li>
133</ul>
134
135<h2>Article 14 — Indemnité d'occupation</h2>
136<p>En cas de maintien dans les lieux après résiliation, indemnité égale au double du loyer en vigueur.</p>
137
138<h2>Article 15 — Clause pénale</h2>
139<p>En cas de défaut de paiement après mise en demeure restée infructueuse pendant 1 mois : majoration de 10%.</p>
140
141<h2>Article 16 — Diagnostics</h2>
142<p>Le Bailleur remet les diagnostics amiante, DPE ({{property_dpe}}) et installations intérieures.</p>
143
144<h2>Article 17 — Bonne foi</h2>
145<p>Les Parties s'engagent à se comporter loyalement et à communiquer sans délai tout différend.</p>
146
147<h2>Article 18 — Compétence</h2>
148<p>En cas de litige, compétence exclusive des juridictions du lieu de l'immeuble.</p>
149
150<hr/>
151
152<p style="text-align:center;">Fait à {{signature_location}} le {{signature_date}}, en deux exemplaires.</p>
153
154<table style="width:100%; margin-top:48px;">
155<tr>
156<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>LE BAILLEUR</strong><br/>{{owner_name}}</td>
157<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>LE PRENEUR</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
158</tr>
159</table>
160`,lt=`
161<div style="text-align:center; margin-bottom:32px;">
162<h2>MANDAT DE RECHERCHE DE LOCATAIRE & GESTION</h2>
163<p><em>N° {{mandate_number}}</em></p>
164</div>
165
166<p>Je, soussigné(e), <strong>{{owner_name}}</strong></p>
167<p>Né(e) à {{owner_birth_place}} le {{owner_birth_date}}<br/>
168Domicilié(e) : {{owner_address}}<br/>
169Tél : {{owner_phone}} / {{owner_mobile}}<br/>
170Email : {{owner_email}}</p>
171<p>Ci-après dénommé <strong>« Mandant »</strong></p>
172
173<p>Confie ce mandat à</p>
174
175<p><strong>{{company_name}}</strong>, {{company_address}}<br/>
176Représentée par {{company_representative}}<br/>
177Carte Professionnelle Gestion Immobilière N° {{company_carte_pro}}</p>
178<p>Ci-après dénommé <strong>« Mandataire »</strong></p>
179
180<hr/>
181
182<h2>Description du Mandat</h2>
183<p>Le Mandant confie au Mandataire un mandat exclusif de recherche de locataires pour la location saisonnière de l'appartement décrit ci-dessous.</p>
184
185<h2>Désignation du bien</h2>
186<p>Adresse : <strong>{{property_address}}</strong><br/>
187Description : {{property_description}}<br/>
188Surface (Carrez) : {{property_surface}}<br/>
189DPE : {{property_dpe}}<br/>
190N° enregistrement : {{property_registration_number}}</p>
191
192<p>Le Mandant déclare l'appartement en bon état d'habitabilité, meublé convenablement, avec systèmes de chauffage, électricité et plomberie 
192conformes aux normes de sécurité.</p>
193
194<hr/>
195
196<h2>Conditions de Location</h2>
197<p>La revenue locative nette sera partagée à <strong>{{owner_share}}%</strong> pour le Mandant et <strong>{{pra_share}}%</strong> pour le Mandataire.</p>
198
199<h3>Résidence principale</h3>
200<p>Le Mandant déclare que l'appartement est son domicile principal, enregistré sous le N° <strong>{{property_registration_number}}</strong> auprès de la mairie de Paris (120 jours/an max en court terme).</p>
201
202<p>Le Mandataire rendra compte de sa gestion en fin de période de commercialisation. Les prestations d'entretien extra-locatif seront prélevées sur les sommes dues au Mandant, avec accord préalable.</p>
203
204<p>Le « Montant net dû au Propriétaire » inclut toutes les charges (électricité, gaz, copropriété) pour les locations &lt; 30 nuitées. Au-delà, l'EDF est remboursé au Mandant.</p>
205
206<hr/>
207
208<h2>Conditions générales</h2>
209<p>Mandat exclusif du <strong>{{start_date}}</strong> au <strong>{{end_date}}</strong> (durée : {{contract_duration}}).</p>
210
211<ol>
212<li>Le Mandant donne tous pouvoirs pour encaisser les sommes et souscrire les contrats de location.</li>
213<li>Le Mandataire est autorisé à photographier les locaux et utiliser les photos (email, Internet).</li>
214</ol>
215
216<p>En gestion complète : frais d'accueil, ménage et support logistique inclus. Interventions d'urgence coordonnées par le Mandataire (rémunération HT de <strong>{{intervention_markup}}%</strong> sur le TTC). Représentation : <strong>{{hourly_rate}}/h TTC</strong>.</p>
217
218<p>Le Mandant est titulaire d'une assurance Propriétaire Occupant.</p>
219
220<hr/>
221
222<p><em>Fait et signé en deux exemplaires. Mention « lu et approuvé, bon pour mandat ».</em></p>
223
224<table style="width:100%; margin-top:48px;">
225<tr>
226<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Mandant</strong><br/>{{owner_name}}</td>
227<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Mandataire</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
228</tr>
229</table>
230
231<p style="text-align:center; font-size:12px; color:#888; margin-top:24px;">Date : {{signature_date}} — Lieu : {{signature_location}}</p>
232`,ct=`
233<h1>CONTRAT DE GESTION LOCATIVE</h1>
234<p><em>Mandat de gestion immobilière — Commission sur revenus locatifs</em></p>
235<p>Réf. Mandat N° {{mandate_number}}</p>
236
237<hr/>
238
239<p><strong>Le Mandant (Propriétaire)</strong><br/>
240{{owner_name}}<br/>
241Né(e) le {{owner_birth_date}} à {{owner_birth_place}}<br/>
242Domicilié(e) : {{owner_address}}<br/>
243{{owner_email}} — {{owner_phone}}</p>
244
245<p><strong>Le Mandataire (Gestionnaire)</strong><br/>
246{{company_name}}<br/>
247{{company_address}}<br/>
248SIRET : {{company_siret}} — RCS : {{company_rcs}}<br/>
249Représenté par {{company_representative}}<br/>
250Carte professionnelle N° {{company_carte_pro}}</p>
251
252<hr/>
253
254<h2>Article 1 — Objet</h2>
255<p>Le Mandant confie au Mandataire la gestion locative du bien <strong>{{property_name}}</strong>, sis {{property_address}}, d'une surface de {{property_surface}}.<br/>
256Réf. interne : {{property_internal_id}} — N° enregistrement : {{property_registration_number}}<br/>
257DPE : {{property_dpe}}</p>
258<p>Incluant : recherche de locataires, gestion des réservations, encaissement des loyers, coordination du ménage et entretien courant.</p>
259
260<h2>Article 2 — Durée</h2>
261<p>Du <strong>{{start_date}}</strong> au <strong>{{end_date}}</strong> (durée : {{contract_duration}}). Renouvellement par tacite reconduction, résiliable avec 3 mois de préavis par LRAR.</p>
262
263<h2>Article 3 — Rémunération</h2>
264<table>
265<tr><th>Description</th><th>Montant</th></tr>
266<tr><td>Commission sur loyers encaissés</td><td><strong>{{commission_rate}}</strong></td></tr>
267<tr><td>Part propriétaire</td><td><strong>{{owner_share}}%</strong></td></tr>
268</table>
269<p><em>Commission calculée sur le montant total des loyers et charges encaissés TTC.</em></p>
270
271<h2>Article 4 — Obligations du Mandataire</h2>
272<ul>
273<li>Recherche de locataires et vérification de solvabilité</li>
274<li>Rédaction et signature des baux de location</li>
275<li>Perception et reversement des loyers</li>
276<li>Suivi des réservations, check-in et check-out</li>
277<li>Coordination du ménage entre chaque locataire</li>
278<li>Gestion des réclamations et entretien courant</li>
279<li>Rapport mensuel de gestion détaillé</li>
280<li>Coordination des interventions d'urgence</li>
281</ul>
282
283<h2>Article 5 — Obligations du Mandant</h2>
284<ul>
285<li>Fournir les documents nécessaires à la location (titre de propriété, diagnostics)</li>
286<li>Maintenir le bien en bon état d'habitabilité et conformité</li>
287<li>Souscrire une assurance propriétaire non-occupant</li>
288<li>Informer le Mandataire de toute modification affectant le bien</li>
289<li>Fournir un jeu de clés complet</li>
290</ul>
291
292<h2>Article 6 — Comptabilité et reversement</h2>
293<p>Le Mandataire reverse au Mandant les loyers perçus, déduction faite de sa commission, dans un délai de 30 jours suivant l'encaissement. Un relevé détaillé est transmis mensuellement.</p>
294
295<h2>Article 7 — Responsabilité</h2>
296<p>Le Mandataire s'engage à gérer le bien en bon père de famille. Sa responsabilité est limitée aux fautes prouvées dans l'exercice de son mandat.</p>
297
298<h2>Article 8 — Résiliation et litiges</h2>
299<p>Résiliation avec 3 mois de préavis par LRAR. Tribunal compétent : celui du lieu de l'immeuble.</p>
300
301<hr/>
302
303<p style="text-align:center;">Fait à {{signature_location}}, le {{signature_date}}, en deux exemplaires.</p>
304
305<table style="width:100%; margin-top:48px;">
306<tr>
307<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Mandant</strong><br/>{{owner_name}}</td>
308<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Mandataire</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
309</tr>
310</table>
311`,dt=`
312<h1>CONTRAT DE GESTION LOCATIVE</h1>
313<p><em>Forfait mensuel fixe</em></p>
314
315<hr/>
316
317<p><strong>Le Propriétaire</strong><br/>
318{{owner_name}}<br/>
319Né(e) le {{owner_birth_date}} à {{owner_birth_place}}<br/>
320Domicilié(e) : {{owner_address}}<br/>
321{{owner_email}} — {{owner_phone}}</p>
322
323<p><strong>Le Gestionnaire</strong><br/>
324{{company_name}} — {{company_address}}<br/>
325SIRET : {{company_siret}} — RCS : {{company_rcs}}<br/>
326Représenté par {{company_representative}}<br/>
327Carte professionnelle N° {{company_carte_pro}}</p>
328
329<p>Réf. Mandat N° {{mandate_number}}</p>
330
331<hr/>
332
333<h2>Article 1 — Bien concerné</h2>
334<p><strong>{{property_name}}</strong> — {{property_address}}<br/>
335Surface : {{property_surface}} — DPE : {{property_dpe}}<br/>
336N° enregistrement : {{property_registration_number}} — Réf. interne : {{property_internal_id}}</p>
337
338<h2>Article 2 — Tarification forfaitaire</h2>
339<table>
340<tr><td>Forfait mensuel de gestion</td><td><strong>{{monthly_amount}}</strong></td></tr>
341<tr><td>Facturation</td><td>Mensuelle, le {{payment_day}} de chaque mois</td></tr>
342<tr><td>Paiement</td><td>Prélèvement automatique</td></tr>
343</table>
344
345<h2>Article 3 — Services inclus</h2>
346<ul>
347<li>Gestion complète des réservations (annonces, calendrier, tarification)</li>
348<li>Communication locataires 24/7</li>
349<li>Check-in et check-out (accueil, remise des clés)</li>
350<li>Coordination du ménage et de la blanchisserie</li>
351<li>Gestion des urgences et interventions techniques</li>
352<li>Reporting mensuel détaillé avec relevé des revenus</li>
353<li>Optimisation tarifaire et gestion des avis</li>
354</ul>
355
356<h2>Article 4 — Services exclus</h2>
357<p>Les éléments suivants ne sont pas compris dans le forfait :</p>
358<ul>
359<li>Travaux de rénovation ou d'amélioration</li>
360<li>Remplacement du mobilier ou des équipements</li>
361<li>Frais de conciergerie exceptionnels (hors ménage standard)</li>
362</ul>
363
364<h2>Article 5 — Durée et résiliation</h2>
365<p>Du <strong>{{start_date}}</strong> au <strong>{{end_date}}</strong> (durée : {{contract_duration}}), renouvelable par tacite reconduction.</p>
366<p>Résiliation possible avec un préavis de 3 mois par lettre recommandée avec AR.</p>
367
368<h2>Article 6 — Obligations du Propriétaire</h2>
369<ul>
370<li>Maintenir le bien en bon état d'habitabilité</li>
371<li>Souscrire une assurance propriétaire non-occupant</li>
372<li>Fournir les diagnostics obligatoires à jour</li>
373<li>Informer le Gestionnaire de tout changement d'usage prévu</li>
374</ul>
375
376<h2>Article 7 — Litiges</h2>
377<p>Tribunal compétent : celui du lieu de l'immeuble.</p>
378
379<hr/>
380
381<p style="text-align:center;">Fait à {{signature_location}}, le {{signature_date}}, en deux exemplaires.</p>
382
383<table style="width:100%; margin-top:48px;">
384<tr>
385<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Propriétaire</strong><br/>{{owner_name}}</td>
386<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Gestionnaire</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
387</tr>
388</table>
389`,pt=`
390<h1>CONTRAT DE PRESTATION DE MÉNAGE</h1>
391<p><em>Tarif à la prestation — Ménage inter-locataire</em></p>
392
393<hr/>
394
395<p><strong>Le Client (Gestionnaire)</strong><br/>
396{{company_name}} — {{company_address}}<br/>
397SIRET : {{company_siret}}<br/>
398Représenté par {{company_representative}}</p>
399
400<p><strong>Le Prestataire</strong><br/>
401{{party_name}}<br/>
402{{party_address}}<br/>
403{{party_email}} — {{party_phone}}</p>
404
405<hr/>
406
407<h2>Article 1 — Objet</h2>
408<p>Prestations de ménage inter-locataire pour le bien <strong>{{property_name}}</strong> — {{property_address}} (surface : {{property_surface}}).</p>
409<p>Description des prestations : {{service_description}}</p>
410
411<h2>Article 2 — Tarification</h2>
412<table>
413<tr><th>Type de prestation</th><th>Tarif</th></tr>
414<tr><td>Ménage standard</td><td><strong>{{one_time_fee}}</strong></td></tr>
415<tr><td>Ménage en profondeur (trimestriel)</td><td>+50% du tarif standard</td></tr>
416<tr><td>Kit linge de maison (draps, serviettes)</td><td>+15€ par set</td></tr>
417<tr><td>Produits ménagers</td><td>Fournis par le Client</td></tr>
418</table>
419
420<h2>Article 3 — Prestations incluses</h2>
421<ul>
422<li>Nettoyage complet de toutes les pièces (salon, chambres, cuisine, salle de bain)</li>
423<li>Changement des draps et serviettes</li>
424<li>Nettoyage approfondi cuisine (plan de travail, évier, électroménager)</li>
425<li>Nettoyage salle de bain (sanitaires, miroirs, douche/baignoire)</li>
426<li>Dépoussiérage, aspiration et lavage des sols</li>
427<li>Vérification de l'inventaire et signalement des anomalies</li>
428<li>Mise en place du Welcome Kit (café, thé, savon) si fourni</li>
429</ul>
430
431<h2>Article 4 — Délais et disponibilité</h2>
432<p>Délai minimum de réservation : <strong>24 heures</strong> avant le check-in.<br/>
433Intervention urgente (< 24h) : majoration de <strong>50%</strong> du tarif standard.<br/>
434Week-end et jours fériés : majoration de <strong>25%</strong>.</p>
435
436<h2>Article 5 — Qualité et garantie</h2>
437<p>Le Prestataire s'engage à fournir un travail de qualité professionnelle. En cas de réclamation justifiée dans les 24h suivant l'intervention, le Prestataire effectuera une reprise gratuite.</p>
438
439<h2>Article 6 — Paiement</h2>
440<p>Facturation bi-mensuelle le 1er et le 15 de chaque mois. Paiement sous 15 jours par virement bancaire.</p>
441
442<h2>Article 7 — Durée</h2>
443<p>Contrat cadre du <strong>{{start_date}}</strong> au <strong>{{end_date}}</strong> (durée : {{contract_duration}}). Résiliable avec 1 mois de préavis.</p>
444
445<h2>Article 8 — Responsabilité</h2>
446<p>Le Prestataire est responsable des dommages causés aux biens du Client pendant l'intervention. Il déclare être couvert par une assurance responsabilité civile professionnelle.</p>
447
448<hr/>
449
450<p style="text-align:center;">Fait à {{signature_location}}, le {{signature_date}}, en deux exemplaires.</p>
451
452<table style="width:100%; margin-top:48px;">
453<tr>
454<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Client</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
455<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Prestataire</strong><br/>{{party_name}}</td>
456</tr>
457</table>
458`,mt=`
459<h1>FORFAIT MÉNAGE MENSUEL</h1>
460<p><em>Interventions illimitées — Contrat de prestation de ménage</em></p>
461
462<hr/>
463
464<p><strong>Le Gestionnaire (Client)</strong><br/>
465{{company_name}} — {{company_address}}<br/>
466SIRET : {{company_siret}}<br/>
467Représenté par {{company_representative}}</p>
468
469<p><strong>Le Prestataire</strong><br/>
470{{party_name}}<br/>
471{{party_address}}<br/>
472{{party_email}} — {{party_phone}}</p>
473
474<hr/>
475
476<h2>Article 1 — Objet</h2>
477<p>Le Prestataire s'engage à assurer l'ensemble des prestations de ménage inter-locataire sur le bien <strong>{{property_name}}</strong> — {{property_address}} (surface : {{property_surface}}).</p>
478
479<h2>Article 2 — Forfait</h2>
480<table>
481<tr><td>Montant mensuel</td><td><strong>{{monthly_amount}}</strong></td></tr>
482<tr><td>Interventions</td><td>Illimitées (selon planning de réservation)</td></tr>
483<tr><td>Facturation</td><td>Mensuelle, le 1er de chaque mois</td></tr>
484<tr><td>Paiement</td><td>Virement bancaire sous 15 jours</td></tr>
485</table>
486
487<h2>Article 3 — Prestations incluses</h2>
488<ul>
489<li>Ménage complet entre chaque locataire (toutes pièces)</li>
490<li>Changement et lavage des draps et serviettes</li>
491<li>Nettoyage cuisine et salle de bain en profondeur</li>
492<li>Aspiration, dépoussiérage et lavage des sols</li>
493<li>Vérification inventaire et signalement d'anomalies</li>
494<li>Mise en place du Welcome Kit si fourni</li>
495</ul>
496
497<h2>Article 4 — Prestations exclues</h2>
498<ul>
499<li>Ménage en profondeur trimestriel (facturé en supplément)</li>
500<li>Nettoyage de vitres extérieures</li>
501<li>Interventions de désinsectisation ou traitement spécialisé</li>
502</ul>
503
504<h2>Article 5 — Engagement et durée</h2>
505<p>Durée minimale : <strong>6 mois</strong>, à compter du <strong>{{start_date}}</strong>.<br/>
506Renouvellement par tacite reconduction. Résiliation avec préavis de <strong>2 mois</strong> par lettre recommandée.</p>
507
508<h2>Article 6 — Disponibilité</h2>
509<p>Le Prestataire s'engage à être disponible dans un délai maximum de <strong>4 heures</strong> après notification du planning. En cas d'indisponibilité, il doit proposer un remplaçant qualifié.</p>
510
511<h2>Article 7 — Qualité et garantie</h2>
512<p>Réclamation dans les 24h : reprise gratuite. Trois réclamations justifiées dans un mois constituent un motif de résiliation anticipée.</p>
513
514<hr/>
515
516<p style="text-align:center;">Fait à {{signature_location}}, le {{signature_date}}, en deux exemplaires.</p>
517
518<table style="width:100%; margin-top:48px;">
519<tr>
520<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Gestionnaire</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
521<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Prestataire</strong><br/>{{party_name}}</td>
522</tr>
523</table>
524`,ut=`
525<h1>CONTRAT DE MAINTENANCE TECHNIQUE</h1>
526<p><em>Tarification horaire — Contrat cadre d'intervention</em></p>
527
528<hr/>
529
530<p><strong>Le Donneur d'Ordre (Gestionnaire)</strong><br/>
531{{company_name}} — {{company_address}}<br/>
532SIRET : {{company_siret}}<br/>
533Représenté par {{company_representative}}</p>
534
535<p><strong>Le Technicien / Artisan</strong><br/>
536{{party_name}}<br/>
537{{party_address}}<br/>
538{{party_email}} — {{party_phone}}</p>
539
540<hr/>
541
542<h2>Article 1 — Objet</h2>
543<p>Le présent contrat établit les conditions d'intervention du Technicien pour des prestations de maintenance technique sur les biens gérés par le Donneur d'Ordre.</p>
544<p>Description des compétences : {{service_description}}</p>
545
546<h2>Article 2 — Nature des interventions</h2>
547<ul>
548<li>Plomberie (fuites, robinetterie, chauffe-eau, sanitaires)</li>
549<li>Électricité (prises, interrupteurs, tableau électrique, éclairage)</li>
550<li>Serrurerie (remplacement de serrures, doubles de clés)</li>
551<li>Petits travaux de réparation (fixation, peinture de retouche, joints)</li>
552<li>Diagnostic et devis pour interventions majeures</li>
553</ul>
554
555<h2>Article 3 — Tarification</h2>
556<table>
557<tr><th>Poste</th><th>Tarif</th></tr>
558<tr><td>Taux horaire standard</td><td><strong>{{hourly_rate}}/h</strong></td></tr>
559<tr><td>Déplacement (forfait)</td><td>20€</td></tr>
560<tr><td>Intervention urgente (< 2h)</td><td>×1.5 du taux horaire</td></tr>
561<tr><td>Week-end / jours fériés</td><td>×2 du taux horaire</td></tr>
562<tr><td>Nuit (après 20h)</td><td>×2.5 du taux horaire</td></tr>
563</table>
564<p><em>Fournitures et pièces détachées facturées en sus sur justificatifs (prix fournisseur, sans marge).</em></p>
565
566<h2>Article 4 — Modalités d'intervention</h2>
567<ul>
568<li>Demande par email, téléphone ou via la plateforme de gestion</li>
569<li>Délai d'intervention standard : <strong>48 heures</strong></li>
570<li>Délai d'intervention urgente : <strong>2 heures</strong></li>
571<li>Devis préalable obligatoire pour intervention &gt; 200€</li>
572<li>Compte-rendu systématique avec photos avant/après</li>
573</ul>
574
575<h2>Article 5 — Facturation et paiement</h2>
576<p>Facturation mensuelle regroupant l'ensemble des interventions du mois. Paiement par virement sous 30 jours.</p>
577
578<h2>Article 6 — Garantie et responsabilité</h2>
579<p>Le Technicien garantit ses interventions pendant <strong>6 mois</strong> (main d'œuvre). Il déclare être titulaire d'une assurance responsabilité civile professionnelle et d'une décennale le cas échéant.</p>
580
581<h2>Article 7 — Durée</h2>
582<p>Contrat cadre du <strong>{{start_date}}</strong> au <strong>{{end_date}}</strong> (durée : {{contract_duration}}). Résiliable à tout moment avec un préavis de <strong>1 mois</strong>.</p>
583
584<h2>Article 8 — Confidentialité</h2>
585<p>Le Technicien s'engage à la confidentialité concernant les adresses, codes d'accès et informations relatives aux biens et locataires.</p>
586
587<hr/>
588
589<p style="text-align:center;">Fait à {{signature_location}}, le {{signature_date}}, en deux exemplaires.</p>
590
591<table style="width:100%; margin-top:48px;">
592<tr>
593<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Donneur d'Ordre</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
594<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Technicien</strong><br/>{{party_name}}</td>
595</tr>
596</table>
597`,gt=`
598<h1>CONTRAT DE LOCATION SAISONNIÈRE</h1>
599<p><em>Location meublée de courte durée</em></p>
600
601<hr/>
602
603<p><strong>Le Bailleur</strong><br/>
604{{company_name}} — {{company_address}}<br/>
605SIRET : {{company_siret}}<br/>
606Représenté par {{company_representative}}</p>
607
608<p><strong>Le Locataire</strong><br/>
609{{guest_name}}<br/>
610Né(e) le {{guest_birth_date}} à {{guest_birth_place}}<br/>
611Nationalité : {{guest_nationality}}<br/>
612Domicilié(e) : {{guest_address}}<br/>
613{{guest_email}} — {{guest_phone}}</p>
614
615<hr/>
616
617<h2>Article 1 — Le Logement</h2>
618<p><strong>{{property_name}}</strong> — {{property_address}}<br/>
619Surface : {{property_surface}} — N° enregistrement : {{property_registration_number}}</p>
620
621<h2>Article 2 — Séjour</h2>
622<table>
623<tr><td>Arrivée</td><td><strong>{{check_in_date}}</strong> à partir de {{check_in_time}}</td></tr>
624<tr><td>Départ</td><td><strong>{{check_out_date}}</strong> avant {{check_out_time}}</td></tr>
625<tr><td>Nuits</td><td><strong>{{nights}}</strong></td></tr>
626<tr><td>Voyageurs</td><td><strong>{{guests_count}}</strong></td></tr>
627<tr><td>Réservation N°</td><td><strong>{{booking_number}}</strong></td></tr>
628</table>
629
630<h2>Article 3 — Prix et paiement</h2>
631<table>
632<tr><td>Prix par nuit</td><td>{{nightly_rate}}</td></tr>
633<tr><td>Frais de ménage</td><td>{{cleaning_fee}}</td></tr>
634<tr><td><strong>Total séjour</strong></td><td><strong>{{total_price}}</strong></td></tr>
635<tr><td>Loyer mensuel (si applicable)</td><td>{{monthly_rent}}</td></tr>
636<tr><td>Premier versement (si applicable)</td><td>{{total_first_payment}}</td></tr>
637<tr><td>Mensualité suivante (si applicable)</td><td>{{total_monthly_payment}}</td></tr>
638<tr><td>Dépôt de garantie</td><td>{{security_deposit}}</td></tr>
639</table>
640<p>Paiement intégral exigé avant l'arrivée. Le dépôt de garantie est encaissé à l'arrivée et restitué sous 7 jours après vérification de l'état du logement.</p>
641
642<h2>Article 4 — Accès au logement</h2>
643<table>
644<tr><td>Code WiFi</td><td>{{wifi_code}}</td></tr>
645<tr><td>Code d'accès</td><td>{{door_code}}</td></tr>
646</table>
647
648<h2>Article 5 — Règlement intérieur</h2>
649<ul>
650<li>Le logement est strictement <strong>non-fumeur</strong></li>
651<li>Pas d'animaux sauf accord préalable écrit</li>
652<li>Respect du voisinage — pas de bruit après 22h</li>
653<li>Maximum <strong>{{guests_count}}</strong> personnes (visiteurs inclus)</li>
654<li>Pas de fêtes ni événements sans autorisation</li>
655<li>Tri des déchets selon les consignes affichées</li>
656</ul>
657
658<h2>Article 6 — État des lieux</h2>
659<p>Un état des lieux est effectué à l'arrivée et au départ. Tout dommage constaté sera déduit du dépôt de garantie. En cas de dépassement, le Locataire sera facturé du solde.</p>
660
661<h2>Article 7 — Annulation</h2>
662<ul>
663<li>Plus de 30 jours avant l'arrivée : remboursement intégral</li>
664<li>Entre 30 et 7 jours : remboursement de 50%</li>
665<li>Moins de 7 jours : montant total dû</li>
666</ul>
667
668<h2>Article 8 — Responsabilité</h2>
669<p>Le Bailleur ne saurait être tenu responsable des incidents indépendants de sa volonté (coupure d'eau, d'électricité, nuisances extérieures). Le Locataire s'engage à signaler immédiatement tout dysfonctionnement.</p>
670
671<h2>Article 9 — Juridiction</h2>
672<p>En cas de litige, le Tribunal de {{signature_location}} sera seul compétent.</p>
673
674<hr/>
675
676<p style="text-align:center;">Fait à {{signature_location}}, le {{signature_date}}, en deux exemplaires.</p>
677<p style="text-align:center;"><em>Mention « lu et approuvé »</em></p>
678
679<table style="width:100%; margin-top:48px;">
680<tr>
681<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Bailleur</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
682<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Le Locataire</strong><br/>{{guest_name}}</td>
683</tr>
684</table>
685`,ht=`
686<h1>ACCORD DE PARTENARIAT</h1>
687<p><em>Convention de collaboration commerciale</em></p>
688
689<hr/>
690
691<p><strong>Partie A (Le Gestionnaire)</strong><br/>
692{{company_name}} — {{company_address}}<br/>
693SIRET : {{company_siret}} — RCS : {{company_rcs}}<br/>
694Représenté par {{company_representative}}</p>
695
696<p><strong>Partie B (Le Partenaire)</strong><br/>
697{{party_name}}<br/>
698{{party_address}}<br/>
699{{party_email}} — {{party_phone}}</p>
700
701<hr/>
702
703<h2>Article 1 — Objet</h2>
704<p>{{service_description}}</p>
705<p>Le présent accord définit les modalités de collaboration entre les Parties pour la mise en relation, la recommandation de clients ou la fourniture de services complémentaires dans le cadre de la gestion locative.</p>
706
707<h2>Article 2 — Conditions financières</h2>
708<table>
709<tr><td>Commission de référencement</td><td><strong>{{commission_rate}}</strong></td></tr>
710<tr><td>Modalité de calcul</td><td>Sur le montant HT des prestations générées</td></tr>
711<tr><td>Facturation</td><td>Mensuelle, avec détail des opérations</td></tr>
712<tr><td>Paiement</td><td>Virement sous 30 jours date de facture</td></tr>
713</table>
714
715<h2>Article 3 — Obligations des Parties</h2>
716<h3>Partie A s'engage à :</h3>
717<ul>
718<li>Communiquer les coordonnées des clients potentiels</li>
719<li>Assurer la promotion des services de Partie B auprès de son réseau</li>
720<li>Transmettre un reporting mensuel des recommandations effectuées</li>
721</ul>
722<h3>Partie B s'engage à :</h3>
723<ul>
724<li>Fournir un service de qualité aux clients recommandés</li>
725<li>Informer Partie A de tout problème ou réclamation</li>
726<li>Reverser la commission convenue dans les délais</li>
727</ul>
728
729<h2>Article 4 — Exclusivité</h2>
730<p>Le présent accord est non-exclusif. Chaque Partie reste libre de conclure des accords similaires avec des tiers.</p>
731
732<h2>Article 5 — Confidentialité</h2>
733<p>Les Parties s'engagent à ne pas divulguer les informations commerciales, financières ou techniques échangées dans le cadre du présent accord.</p>
734
735<h2>Article 6 — Durée et résiliation</h2>
736<p>Du <strong>{{start_date}}</strong> au <strong>{{end_date}}</strong> (durée : {{contract_duration}}). Résiliable à tout moment avec un préavis de <strong>1 mois</strong>.</p>
737
738<h2>Article 7 — Responsabilité</h2>
739<p>Chaque Partie est responsable de ses propres actes. Aucune Partie ne saurait être tenue responsable des manquements de l'autre.</p>
740
741<h2>Article 8 — Litiges</h2>
742<p>En cas de différend, les Parties s'engagent à rechercher une solution amiable. À défaut, le Tribunal de {{signature_location}} sera compétent.</p>
743
744<hr/>
745
746<p style="text-align:center;">Fait à {{signature_location}}, le {{signature_date}}, en deux exemplaires.</p>
747
748<table style="width:100%; margin-top:48px;">
749<tr>
750<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Partie A</strong><br/>Pour {{company_name}}<br/>{{company_representative}}</td>
751<td style="width:50%; text-align:center; border-top:1px solid #000; padding-top:8px;"><strong>Partie B</strong><br/>{{party_name}}</td>
752</tr>
753</table>
754`,V=[{id:"pra-bail-flat-rate",name:"Contrat de Location Immobilière – Forfait",category:"renting",contractKind:"property",partyType:"owner",pricingModel:"flat_fee",description:"Bail PRA officiel – Forfait mensuel fixe",isOfficial:!0,content:ot},{id:"pra-mandat-gestion",name:"Mandat de Recherche de Locataire & Gestion",category:"renting",contractKind:"property",partyType:"owner",pricingModel:"percentage",description:"Mandat PRA officiel – Gestion locative avec commission",isOfficial:!0,content:lt},{id:"renting-commission",name:"Property Management (Commission)",category:"renting",contractKind:"property",partyType:"owner",pricingModel:"percentage",description:"Standard property management contract with commission-based pricing",content:ct},{id:"renting-flat-fee",name:"Property Management (Flat Fee)",category:"renting",contractKind:"property",partyType:"owner",pricingModel:"flat_fee",description:"Fixed monthly fee property management contract",content:dt},{id:"cleaning-per-booking",name:"Cleaning Service (Per Booking)",category:"cleaning",contractKind:"service",partyType:"provider_external",pricingModel:"one_time",description:"Cleaning contract billed per intervention",content:pt},{id:"cleaning-monthly",name:"Cleaning Service (Monthly Package)",category:"cleaning",contractKind:"service",partyType:"provider_external",pricingModel:"flat_fee",description:"Monthly cleaning package with unlimited interventions",content:mt},{id:"intervention-hourly",name:"Maintenance (Hourly Rate)",category:"intervention",contractKind:"service",partyType:"provider_external",pricingModel:"hourly",description:"Technical intervention contract with hourly billing",content:ut},{id:"guest-rental-agreement",name:"Guest Rental Agreement",category:"other",contractKind:"booking",partyType:"owner",pricingModel:"one_time",description:"Short
754-term rental contract for guests",content:gt},{id:"partnership-agreement",name:"Partnership Agreement",category:"other",contractKind:"service",partyType:"provider_external",pricingModel:"percentage",description:"General partnership contract",content:ht}],xt=[{value:"booking",label:"Bail (Lease)"},{value:"property",label:"Mandat de Gestion"},{value:"service",label:"Service Contract"}];function bt({open:n,onOpenChange:p,template:s}){const{workspace:j}=$(),T=ne(),g=!!s,[h,N]=c.useState(""),[o,y]=c.useState(""),[v,_]=c.useState("booking"),[a,x]=c.useState("editor");c.useEffect(()=>{n&&(N((s==null?void 0:s.name)||""),y((s==null?void 0:s.content)||""),_((s==null?void 0:s.contract_kind)||"booking"),x("editor"))},[n,s]);const A=he({mutationFn:async()=>{if(!j)throw new Error("No workspace");const r={name:h,content:o,contract_kind:v,contract_category:v==="booking"?"renting":"other",workspace_id:j.id};if(g&&s){const{error:d}=await M.from("contract_templates").update(r).eq("id",s.id);if(d)throw d}else{const{error:d}=await M.from("contract_templates").insert(r);if(d)throw d}},onSuccess:()=>{T.invalidateQueries({queryKey:["contract-templates"]}),f.success(g?"Template updated":"Template created"),p(!1)},onError:r=>f.error("Failed to save: "+r.message)}),C=()=>{if(!h.trim()){f.error("Enter a template name");return}if(!o.trim()){f.error("Template content is empty");return}A.mutate()},L={guest_name:"Marie Martin",owner_name:"Jean Dupont",property_name:"Appartement Marais",property_address:"789 Rue du Temple, 75003 Paris",check_in_date:"15/03/2026",check_out_date:"22/03/2026",total_price:"840€",nightly_rate:"120€",booking_number:"BK-20260315",signature_date:new Date().toLocaleDateString("fr-FR")},b=(()=>{let r=o;return Object.entries(L).forEach(([d,t])=>{r=r.replace(new RegExp(`\\{\\{${d}\\}\\}`,"g"),t)}),r})();return e.jsx(ie,{open:n,onOpenChange:p,children:e.jsxs(se,{className:"max-w-5xl h-[85vh] flex flex-col overflow-hidden",children:[e.jsx(oe,{children:e.jsx(le,{children:g?"Edit Template":"New Template"})}),e.jsxs("div",{className:"flex-1 overflow-y-auto min-h-0 flex flex-col",children:[e.jsxs("div",{className:"shrink-0 grid grid-cols-1 sm:grid-cols-2 gap-4 pb-4 border-b",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(U,{children:"Template Name"}),e.jsx(xe,{value:h,onChange:r=>N(r.target.value),placeholder:"e.g., Bail Meublé Standard"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(U,{children:"Contract Type"}),e.jsxs(be,{value:v,onValueChange:r=>_(r),children:[e.jsx(fe,{children:e.jsx(ye,{})}),e.jsx(ve,{children:xt.map(r=>e.jsx(_e,{value:r.value,children:r.label},r.value))})]})]})]}),!g&&!o.trim()&&e.jsxs("div",{className:"shrink-0 py-3 border-b",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(Q,{className:"h-4 w-4 text-primary"}),e.jsx("span",{className:"text-sm font-medium",children:"Start from a template"})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 max-h-[30vh] overflow-y-auto pr-1",children:V.map(r=>e.jsxs("button",{onClick:()=>{N(r.name),y(r.content),_(r.contractKind)},className:"text-left p-3 rounded-lg border border-border hover:border-primary/50 hover:bg-primary/5 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(K,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-medium truncate",children:r.name})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(E,{variant:"outline",className:"text-[10px] px-1.5 py-0",children:r.contractKind}),e.jsx(E,{variant:"outline",className:"text-[10px] px-1.5 py-0",children:r.category}),r.isOfficial&&e.jsx(E,{className:"text-[10px] px-1.5 py-0 bg-primary/10 text-primary",children:"PRA"})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground mt-1 line-clamp-1",children:r.description})]},r.id))})]}),e.jsx("div",{className:"flex-1 overflow-hidden pt-4 min-h-0",children:e.jsxs(re,{value:a,onValueChange:r=>x(r),className:"h-full flex flex-col",children:[e.jsxs("div",{className:"shrink-0 mb-4 flex items-center justify-between",children:[e.jsxs(ae,{children:[e.jsx(G,{value:"editor",children:"Editor"}),e.jsx(G,{value:"preview",children:"Preview"})]}),e.jsxs(u,{onClick:C,disabled:A.isPending,className:"gap-2",children:[A.isPending?e.jsx(S,{className:"h-4 w-4 animate-spin"}):e.jsx(Ze,{className:"h-4 w-4"}),g?"Update":"Save"]})]}),e.jsx(H,{value:"editor",className:"flex-1 overflow-hidden mt-0",children:e.jsx(it,{content:o,onChange:y})}),e.jsx(H,{value:"preview",className:"flex-1 overflow-hidden mt-0",children:e.jsx(st,{content:b})})]})})]})]})})}
754function Lr(){const n=je(),{updateWorkspaceSettings:p}=$(),s=ne(),{data:j=[],isLoading:T}=Oe(),[g,h]=c.useState(!1),[N,o]=c.useState(),[y,v]=c.useState(!1),[_,a]=c.useState(!1),x=c.useRef(null),C=((n==null?void 0:n.settings)||{}).contract_signature_url,L=async()=>{if(n){a(!0);try{const t=new Set(j.map(l=>l.name)),i=V.filter(l=>!t.has(l.name)).map(l=>({workspace_id:n.id,name:l.name,content:l.content,contract_kind:l.contractKind,contract_category:l.category}));if(i.length===0){f.info("All starter templates already exist");return}const{error:m}=await M.from("contract_templates").insert(i);if(m)throw m;s.invalidateQueries({queryKey:["contract-templates"]}),f.success(`${i.length} template${i.length>1?"s":""} added`)}catch(t){f.error("Failed to seed: "+t.message)}finally{a(!1)}}},b=async t=>{var l;const i=(l=t.target.files)==null?void 0:l[0];if(!i||!n)return;if(!["image/png","image/jpeg","image/svg+xml","image/webp"].includes(i.type)){f.error("Please upload a PNG, JPG, SVG, or WebP image");return}v(!0);try{const w=i.name.split(".").pop()||"png",I=`${n.id}/contract-signature.${w}`,{error:F}=await M.storage.from("email-assets").upload(I,i,{upsert:!0,contentType:i.type});if(F)throw F;const{data:de}=M.storage.from("email-assets").getPublicUrl(I),pe=`${de.publicUrl}?v=${Date.now()}`;await p({contract_signature_url:pe}),f.success("Signature uploaded")}catch(w){f.error(w.message||"Upload failed")}finally{v(!1),x.current&&(x.current.value="")}},r=async()=>{if(n)try{await p({contract_signature_url:void 0}),f.success("Signature removed")}catch{f.error("Failed to remove signature")}},d=async t=>{try{const{error:i}=await M.from("contract_templates").delete().eq("id",t);if(i)throw i;s.invalidateQueries({queryKey:["contract-templates"]}),f.success("Template deleted")}catch{f.error("Failed to delete template")}};return n?e.jsx(J,{title:"Contract Settings",subtitle:"Manage templates & signing",children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs(P,{children:[e.jsxs(D,{className:"flex flex-row items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs(k,{className:"flex items-center gap-2",children:[e.jsx(K,{className:"h-5 w-5"}),"Templates"]}),e.jsxs(O,{children:["Create HTML templates with ","{{variables}}"," that auto-fill when generating contracts"]})]}),e.jsxs(u,{onClick:()=>{o(void 0),h(!0)},children:[e.jsx(Z,{className:"h-4 w-4 mr-2"}),"New Template"]}),e.jsxs(u,{variant:"outline",onClick:L,disabled:_,children:[_?e.jsx(S,{className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(Q,{className:"h-4 w-4 mr-2"}),"Seed Starters (",V.length,")"]})]}),e.jsx(R,{children:T?e.jsx("div",{className:"flex items-center justify-center h-32",children:e.jsx(S,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):j.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(K,{className:"h-12 w-12 mx-auto text-muted-foreground mb-3"}),e.jsx("h3",{className:"font-medium",children:"No templates yet"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"Start with our pre-built templates or create your own"}),e.jsxs("div",{className:"flex items-center justify-center gap-3",children:[e.jsxs(u,{variant:"outline",onClick:L,disabled:_,children:[_?e.jsx(S,{className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(Q,{className:"h-4 w-4 mr-2"}),"Load ",V.length," Starter Templates"]}),e.jsxs(u,{onClick:()=>{o(void 0),h(!0)},children:[e.jsx(Z,{className:"h-4 w-4 mr-2"}),"Create from Scratch"]})]})]}):e.jsxs(Ce,{children:[e.jsx(Te,{children:e.jsxs(Y,{children:[e.jsx(q,{children:"Name"}),e.jsx(q,{children:"Type"}),e.jsx(q,{children:"Updated"}),e.jsx(q,{className:"w-[100px]",children:"Actions"})]})}),e.jsx(Le,{children:j.map(t=>e.jsxs(Y,{children:[e.jsx(B,{className:"font-medium",children:t.name}),e.jsx(B,{children:e.jsx(E,{variant:"outline",children:et[t.contract_kind||"booking"]||t.contract_kind})}),e.jsx(B,{className:"text-muted-foreground",children:t.updated_at?we(new Date(t.updated_at),"MMM d, yyyy"):"—"}),e.jsx(B,{children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(u,{variant:"ghost",size:"icon",onClick:()=>{o(t),h(!0)},children:e.jsx(tt,{className:"h-4 w-4"})}),e.jsxs(Pe,{children:[e.jsx(Re,{asChild:!0,children:e.jsx(u,{variant:"ghost",size:"icon",children:e.jsx(rt,{className:"h-4 w-4 text-muted-foreground"})})}),e.jsxs(Se,{children:[e.jsxs(Me,{children:[e.jsxs(Ee,{children:['Delete "',t.name,'"?']}),e.jsx(De,{children:"This cannot be undone."})]}),e.jsxs(ke,{children:[e.jsx(Ie,{children:"Cancel"}),e.jsx(Fe,{onClick:()=>d(t.id),className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete"})]})]})]})]})})]},t.id))})]})})]}),e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsxs(k,{className:"flex items-center gap-2",children:[e.jsx(ee,{className:"h-5 w-5"}),"Contract Signature"]}),e.jsx(O,{children:"Upload your company logo or signature that appears at the bottom of every generated contract"})]}),e.jsxs(R,{className:"space-y-4",children:[C?e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{className:"border rounded-lg p-4 bg-muted/30",children:e.jsx("img",{src:C,alt:"Contract signature",className:"h-16 w-auto max-w-[240px] object-contain"})}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Current signature"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(u,{variant:"outline",size:"sm",onClick:()=>{var t;return(t=x.current)==null?void 0:t.click()},disabled:y,children:[y?e.jsx(S,{className:"h-4 w-4 animate-spin mr-2"}):e.jsx(te,{className:"h-4 w-4 mr-2"}),"Replace"]}),e.jsxs(u,{variant:"ghost",size:"sm",onClick:r,children:[e.jsx(Ne,{className:"h-4 w-4 mr-2"}),"Remove"]})]})]})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center border-2 border-dashed rounded-lg p-8 text-center",children:[e.jsx(ee,{className:"h-10 w-10 text-muted-foreground mb-3"}),e.jsx("p",{className:"text-sm font-medium mb-1",children:"No signature uploaded"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-4",children:"PNG recommended for best quality. SVG and JPG also accepted."}),e.jsxs(u,{variant:"outline",onClick:()=>{var t;return(t=x.current)==null?void 0:t.click()},disabled:y,children:[y?e.jsx(S,{className:"h-4 w-4 animate-spin mr-2"}):e.jsx(te,{className:"h-4 w-4 mr-2"}),"Upload Signature"]})]}),e.jsx("input",{ref:x,type:"file",accept:"image/png,image/jpeg,image/svg+xml,image/webp",className:"hidden",onChange:b})]})]}),e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsxs(k,{className:"flex items-center gap-2",children:[e.jsx(at,{className:"h-5 w-5"}),"E-Signature"]}),e.jsx(O,{children:"How tenants & owners sign contracts"})]}),e.jsxs(R,{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(U,{children:"Require signature"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Contracts must be signed to be valid"})]}),e.jsx(X,{defaultChecked:!0})]}),e.jsx(Ae,{}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(U,{children:"Allow typed signatures"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Let signers type their name instead of drawing"})]}),e.jsx(X,{defaultChecked:!0})]})]})]}),e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsx(k,{children:"Available Variables"}),e.jsxs(O,{children:["Use these ","{{placeholders}}"," in templates — they auto-fill with real data"]})]}),e.jsx(R,{children:e.jsx(ce,{})})]}),e.jsx(bt,{open:g,onOpenChange:h,template:N})]})}):e.jsx(J,{title:"Contract Settings",subtitle:"Manage templates & signing",children:e.jsx(qe,{statsCount:0})})}export{Lr as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.