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 < 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 > 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.