@controldealquiler/sdk 1.2.2 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -182,5 +182,5 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
182
182
 
183
183
  `),n=t.map(sW),i=n.reduce((l,c)=>l+c,0),r=Math.min(5,t.length),a=n.slice(0,r).reduce((l,c)=>l+c,0),s=t.length>0&&i/t.length>=UO&&a/r>=UO,o=s?n.flatMap((l,c)=>l<nW?[c+1]:[]):[];return{text:e,usable:s,emptyPages:o}}var GO="Europe/Madrid",oW=new Intl.DateTimeFormat("en-US",{timeZone:GO,year:"numeric",month:"2-digit",day:"2-digit"}),_te=new Intl.DateTimeFormat("en-US",{timeZone:GO,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"});function lW(t,e){let n={};for(let i of t.formatToParts(e))i.type!=="literal"&&(n[i.type]=Number(i.value));return n}function pS(t=new Date){let{year:e,month:n,day:i}=lW(oW,t);return`${e}-${String(n).padStart(2,"0")}-${String(i).padStart(2,"0")}`}function F1(t,e){let n=Number(e.slice(0,4));return t.anios.includes(n)?e.slice(0,4)===t.hastaMes.slice(0,4)?e.slice(0,7)<=t.hastaMes:!0:!1}function KO(t,e,n){if(!t||n==null||n.trim()==="")return!1;let i=Object.prototype.hasOwnProperty.call(e,t.parser)?e[t.parser]:void 0;if(!i)return!1;try{let r=i.leer(n);return r.ok&&r.tipo==="resumen"}catch{return!1}}var uW=[{code:"EUR",label:"Euro",symbol:"\u20AC",decimal:","},{code:"USD",label:"D\xF3lar estadounidense",symbol:"$",decimal:"."},{code:"JPY",label:"Yen japon\xE9s",symbol:"\xA5",decimal:"."},{code:"BGN",label:"Lev b\xFAlgaro",symbol:"\u043B\u0432",decimal:","},{code:"CZK",label:"Corona checa",symbol:"K\u010D",decimal:","},{code:"DKK",label:"Corona danesa",symbol:"kr",decimal:","},{code:"GBP",label:"Libra esterlina",symbol:"\xA3",decimal:"."},{code:"HUF",label:"Forinto h\xFAngaro",symbol:"Ft",decimal:","},{code:"PLN",label:"Esloti polaco",symbol:"z\u0142",decimal:","},{code:"RON",label:"Leu rumano",symbol:"lei",decimal:","},{code:"SEK",label:"Corona sueca",symbol:"kr",decimal:","},{code:"CHF",label:"Franco suizo",symbol:"CHF",decimal:"."},{code:"ISK",label:"Corona islandesa",symbol:"kr",decimal:","},{code:"NOK",label:"Corona noruega",symbol:"kr",decimal:","},{code:"TRY",label:"Lira turca",symbol:"\u20BA",decimal:","},{code:"AUD",label:"D\xF3lar australiano",symbol:"A$",decimal:"."},{code:"BRL",label:"Real brasile\xF1o",symbol:"R$",decimal:","},{code:"CAD",label:"D\xF3lar canadiense",symbol:"C$",decimal:"."},{code:"CNY",label:"Yuan chino",symbol:"\xA5",decimal:"."},{code:"HKD",label:"D\xF3lar de Hong Kong",symbol:"HK$",decimal:"."},{code:"IDR",label:"Rupia indonesia",symbol:"Rp",decimal:","},{code:"ILS",label:"S\xE9quel israel\xED",symbol:"\u20AA",decimal:"."},{code:"INR",label:"Rupia india",symbol:"\u20B9",decimal:"."},{code:"KRW",label:"Won surcoreano",symbol:"\u20A9",decimal:"."},{code:"MXN",label:"Peso mexicano",symbol:"MX$",decimal:"."},{code:"MYR",label:"Ringgit malasio",symbol:"RM",decimal:"."},{code:"NZD",label:"D\xF3lar neozeland\xE9s",symbol:"NZ$",decimal:"."},{code:"PHP",label:"Peso filipino",symbol:"\u20B1",decimal:"."},{code:"SGD",label:"D\xF3lar de Singapur",symbol:"S$",decimal:"."},{code:"THB",label:"Bat tailand\xE9s",symbol:"\u0E3F",decimal:"."},{code:"ZAR",label:"Rand sudafricano",symbol:"R",decimal:","}],tne=new Map(uW.map(t=>[t.code,t]));var jne=512*1024;async function XO(t){let n=(await LO()).getDocument({data:new Uint8Array(t),verbosity:0});try{let i=await n.promise,r=[];for(let o=1;o<=i.numPages;o++){let l=await(await i.getPage(o)).getTextContent();r.push(HO(l.items))}let{text:a,usable:s}=VO(r);return s?a:null}finally{n.destroy().catch(()=>{})}}var hW=1e4;async function $1(t,e,n={}){if(e!=="application/pdf")return null;let i=n.extraer??XO,r;try{return await Promise.race([i(t).catch(()=>null),new Promise(a=>{r=setTimeout(()=>a(null),n.timeoutMs??hW)})])}finally{r&&clearTimeout(r)}}var B1={ok:!1,motivo:"acta_ilegible"};function mS(t){return t.toUpperCase().replace(/[\s\-.]/g,"")}function pW(t){let e=/^(\d{2})\/(\d{2})\/(\d{4})$/.exec(t);if(!e)return null;let n=Number(e[1]),i=Number(e[2]),r=Number(e[3]),a=new Date(Date.UTC(r,i-1,n));return a.getUTCFullYear()!==r||a.getUTCMonth()!==i-1||a.getUTCDate()!==n?null:`${e[3]}-${e[2]}-${e[1]}`}var L1=String.raw`(\d{2}\/\d{2}\/\d{4})`,mW=new RegExp(String.raw`Que,\s*en fecha\s+${L1}`),gW=new RegExp(String.raw`con una fecha de inicio en\s+${L1}`),bW=new RegExp(String.raw`Que en el d[ií]a\s+${L1}\s+el inquilino hace entrega de las llaves`),xW=new RegExp(String.raw`fecha de salida del inquilino\s*\(\s*${L1}\s*\)`),wW=/de la vivienda\s+(?:\S+\s+){1,3}?en\s+(.+?)\s*\.\s+\d+\.\s*Que en el d[ií]a/,Gc=t=>t.replace(/\s+/g," ").trim(),YO=t=>Gc(t).normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase();function ZO(t){return t.split(`
184
184
  `).map(e=>e.replace(/\s+/g," ").trim())}function vW(t){let e=t.findIndex(r=>/^De otra,/.test(r));if(e===-1)return[];let n=t.findIndex((r,a)=>a>e&&/^INTERVIENEN\b/.test(r));n===-1&&(n=t.length);let i=[];for(let r=e+1;r<n;r++){let a=/Nombre\s*:\s*(.*)$/.exec(t[r]);if(!a||Gc(a[1])==="")continue;let s=/DNI\s*:\s*(.*)$/.exec(t[r+1]??""),o=s&&s[1].trim()!==""?mS(s[1]):null;i.push({nombre:Gc(a[1]),dni:o})}return i}function yW(t){let e=t.findIndex(i=>/^Firmas\b/.test(i));if(e===-1)return[];let n=[];for(let i=e+1;i<t.length;i++){if(!/^Inquilino\s*\d*\s*:?$/.test(t[i]))continue;let r=/^Nombre\s*:\s*(.*)$/.exec(t[i+1]??"");r&&Gc(r[1])!==""&&n.push(Gc(r[1]))}return n}var kW={prefiltro(t){let e=fo(t),n=`${e.creator??""} ${e.producer??""}`;return/wkhtmltopdf|ilovepdf|\bQt\b/i.test(n)?!1:e.titleCoincide(/^acta_entrega/i)?!0:/tecalis/i.test(e.creator??"")&&/google docs renderer/i.test(e.producer??"")},reconoce(t){let e=ZO(t);return e.some(n=>/^ACTA DE ENTREGA VIVIENDA$/.test(n))&&e.some(n=>/^REUNIDOS$/.test(n))},leer(t){let e=t.replace(/\s+/g," "),n=h=>{let p=h.exec(e);return p?pW(p[1]):null},i=n(mW),r=n(gW),a=n(bW),s=n(xW);if(!i||!r||!a||!s||a!==s)return B1;let o=wW.exec(e),l=o?Gc(o[1]):"";if(l==="")return B1;let c=ZO(t),f=vW(c),u=yW(c),d;if(u.length>0){let h=new Map(f.map(p=>[YO(p.nombre),p.dni]));d=u.map(p=>({nombre:p,dni:h.get(YO(p))??null}))}else d=f;return d.length===0?B1:{ok:!0,acta:{fechaFirma:i,fechaInicio:r,fechaLlaves:a,fechaSalida:s,inquilinos:d,direccion:l}}}},gS=Object.freeze({wolo:kW});function jW(t,e){if(e==null||e.trim()==="")return null;for(let n of Object.keys(t)){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let i=t[n];try{if(i.reconoce(e))return{parser:n,lector:i}}catch{}}return null}var JO=t=>jW(gS,t);var H1=t=>t.normalize("NFD").replace(/[̀-ͯ]/g,""),rP=/^(los inquilinos|el inquilino),?$/i,iP=/^(los avalistas|el avalista),?$/i,AW=/^(los inquilinos|el inquilino|inquilinos|inquilino),?$/i,SW=/^(el|la|los|las) (propietari[oa]s?|arrendador(?:es|a)?|arrendadoras|fiador(?:es|a)?|fiadoras|avalistas?)\b/i,aP=t=>SW.test(H1(t)),IW=/^(los avalistas|el avalista|avalistas|avalista),?$/i;function sP(t){return t.split(`
185
- `).map(e=>e.replace(/\s+/g," ").trim())}var bS={prefiltro(t){let e=fo(t),n=`${e.creator??""} ${e.producer??""}`;return/tecalis|cairo/i.test(n)},reconoce(t){return!/WOLO REALTECH/.test(t)||!/contrato\s+de\s+arrendamiento/i.test(t)||!sP(t).some(e=>rP.test(e))?!1:!Object.values(gS).some(e=>e.reconoce(t))}},CW=Object.freeze({wolo:bS,guay:Sp});function TW(t,e){if(e==null||e.trim()==="")return null;for(let n of Object.keys(t))if(Object.prototype.hasOwnProperty.call(t,n))try{if(t[n].reconoce(e))return n}catch{}return null}var oP=t=>TW(CW,t);var $n=t=>({ok:!1,motivo:t}),lP={enero:1,febrero:2,marzo:3,abril:4,mayo:5,junio:6,julio:7,agosto:8,septiembre:9,octubre:10,noviembre:11,diciembre:12},EW=Object.keys(lP).join("|"),cP=String.raw`(\d{1,2})\s+de\s+(${EW})\s+de\s+(\d{4})`;function fP(t,e,n){let i=new Date(Date.UTC(n,e-1,t));return i.getUTCFullYear()!==n||i.getUTCMonth()!==e-1||i.getUTCDate()!==t?null:`${String(n).padStart(4,"0")}-${String(e).padStart(2,"0")}-${String(t).padStart(2,"0")}`}function QO(t){let e=lP[H1(t[2].toLowerCase())];return e===void 0?null:fP(Number(t[1]),e,Number(t[3]))}var _W=new RegExp(String.raw`^En\s+[^,]+,\s*a\s+${cP}\.?$`,"i"),qW=/^Tecalis\b.*\b(?:Fecha|Date):\s*(\d{4})\//i,RW=/^---\s*p[aá]gina\s+\d+\s*---$/i,U1=/^-\s*\|\s*(.*)$/,ad=/^\d+\s*[aª]\.\s/i,V1=t=>t.replace(/\s+/g," ").trim(),eP=t=>H1(V1(t)).toLowerCase();function ia(t,e){let n=U1.exec(t);if(!n)return null;let i=new RegExp(String.raw`^${e}\s*:\s*(.*)$`,"i").exec(n[1]);return i?i[1].trim():null}var OW={un:1,una:1,uno:1,dos:2,tres:3,cuatro:4,cinco:5,seis:6,siete:7,ocho:8,nueve:9,diez:10,once:11,doce:12},z1=t=>!U1.test(t)&&/de la vivienda$/i.test(t);function PW(t,e){let n=t.length;for(let r=e+1;r<t.length;r++){let a=t[r];if(iP.test(a)||aP(a)||z1(a)||/^1\.\s*INTERVIENEN\b/i.test(a)){n=r;break}}let i=[];for(let r=e+1;r<n;r++){let a=ia(t[r],"Nombre");if(a===null){let s=ia(t[r],"DNI"),o=i[i.length-1];s!==null&&o&&o.nif===null&&s!==""&&(o.nif=s);continue}i.push({name:V1(a),nif:null,phone:null,email:null})}return i.filter(r=>r.name!=="")}function DW(t,e){let n=[];for(let i=e+1;i<t.length;i++){let r=t[i];if(IW.test(r)||/^(el |los )?propietarios?,?$/i.test(r)||aP(r)||ad.test(r))break;let a=ia(r,"Nombre");if(a!==null){n.push({name:V1(a),phone:null,email:null});continue}let s=n[n.length-1];if(!s)continue;let o=ia(r,"Tel[e\xE9]fono");o!==null&&o!==""&&(s.phone=o);let l=ia(r,"E-?mail");l!==null&&l!==""&&(s.email=l)}return n}function tP(t,e){let n=t.findIndex(r=>ad.test(r)&&e.test(r));if(n===-1)return null;let i=t.length;for(let r=n+1;r<t.length;r++)if(ad.test(t[r])){i=r;break}return t.slice(n,i).join(" ")}function NW(t){let e=t.findIndex(i=>/^(\d+\.\s*)?ESTIPULACIONES\b/i.test(i));if(e===-1)return null;let n=t.length;for(let i=e+1;i<t.length;i++)if(ad.test(t[i])){n=i;break}return t.slice(e+1,n).join(" ")}function MW(t){let e=new Map;for(let n of t.matchAll(/duraci[oó]n\s+de\s+(\d+|[a-zñ]+)\s+(a[nñ]os?|mes(?:es)?)\b/gi)){let i=H1(n[1].toLowerCase()),r=/^\d+$/.test(i)?Number(i):OW[i];if(r===void 0||r<1)return null;let a=/^a/i.test(n[2])?"anios":"meses";e.set(`${r}-${a}`,{n:r,unidad:a})}return e.size!==1?null:[...e.values()][0]}function FW(t,e){let[n,i,r]=t.split("-").map(Number),a=i-1+(e.unidad==="anios"?e.n*12:e.n),s=n+Math.floor(a/12),o=a%12+1;return fP(r,o,s)}function $W(t){let e=[];for(let n of t.matchAll(/(?<![\d.,])(?<!\d\s)(\d{1,3}(?:\.\d{3})+|\d+)(?:,(\d{1,2}))?(?!\d)\s*(?:€|euros?\b)/gi)){let i=+`${n[1].replace(/\./g,"")}.${n[2]??"0"}`,r=t.slice(0,n.index),a=r.lastIndexOf(". "),s=r.slice(a===-1?0:a+2).slice(-40),o=t.slice((n.index??0)+n[0].length),l=o.search(/\.\s|\.$/),c=(l===-1?o:o.slice(0,l)).slice(0,40);e.push({valor:i,contexto:`${s} ${c}`})}return e}function BW(t){let e=sP(t),n=new Set,i=[],r=[];for(let P of e){if(P==="")continue;let F=_W.exec(P);if(F){let se=QO(F);if(se===null)return $n("fecha_inexistente");n.add(se);continue}if(/^Tecalis\b/i.test(P)){let se=qW.exec(P);if(!se)return $n("sello_otro_anio");i.push(Number(se[1]));continue}RW.test(P)||r.push(P)}if(n.size===0)return $n("firma_no_consta");if(n.size>1)return $n("firma_incoherente");let a=[...n][0];if(i.some(P=>P!==Number(a.slice(0,4))))return $n("sello_otro_anio");let s=[];r.forEach((P,F)=>{rP.test(P)&&s.push(F)});let o=s[0];if(o===void 0)return $n("sin_inquilinos");let l=PW(r,o);if(l.length===0)return $n("sin_inquilinos");let c=[];r.some(P=>iP.test(P))&&c.push("avalistas_excluidos"),l.length>4&&c.push("mas_de_4_inquilinos");let f=r.findIndex((P,F)=>F>o&&AW.test(P)),u=f===-1?[]:DW(r,f),d=new Set;for(let P of l){let F=u.findIndex((se,Z)=>!d.has(Z)&&eP(se.name)===eP(P.name));F!==-1&&(d.add(F),P.phone=u[F].phone,P.email=u[F].email)}let h=u.filter((P,F)=>!d.has(F)&&(P.phone!==null||P.email!==null));if(h.length>0){let P=l.length===1?l[0]:null;if(P)for(let F of h)P.phone===null&&(P.phone=F.phone),P.email===null&&(P.email=F.email);else c.push("telefono_sin_atribuir")}let p=tP(r,/Duraci[oó]n del contrato/i)??NW(r);if(p===null)return $n("sin_duracion");let m=new Set;for(let P of p.matchAll(new RegExp(String.raw`fecha de inicio[^.]{0,80}?\bel\s+${cP}`,"gi")))m.add(QO(P));if(m.size===0||m.size>1)return $n("sin_inicio");let g=[...m][0]??null;if(g===null)return $n("fecha_inexistente");let b=MW(p);if(b===null)return $n("sin_duracion");let x=FW(g,b);if(x===null)return $n("fin_no_calculable");c.push("fin_calculado_por_duracion");let w=tP(r,/\bRenta\b/i);if(w===null)return $n("sin_renta");let k=$W(w);if(k.length===0)return $n("sin_renta");if(new Set(k.map(P=>P.valor)).size>1)return $n("renta_ambigua");let v=k.map(P=>P.contexto).join(" ");if(/anual|al a[nñ]o|por a[nñ]o|\/\s*a[nñ]o/i.test(v))return $n("renta_no_mensual");let y=P=>{let F=[ia(r[P],"Direcci[o\xF3]n")];for(let se=P+1;se<r.length&&F.length<3;se++){let Z=r[se];if(U1.test(Z)||ad.test(Z)||/^1\.\s/.test(Z))break;F.push(Z)}return V1(F.join(" "))},A=P=>P>0&&z1(r[P-1])?y(P):null,I=null,S=r.findIndex(P=>ia(P,"Referencia Catastral")!==null);if(S!==-1)for(let P=S-1;P>=0;P--){let F=r[P];if(z1(F))break;if(U1.test(F)){ia(F,"Direcci[o\xF3]n")!==null&&(I=A(P));break}}else{let P=r.findIndex(F=>z1(F));P!==-1&&ia(r[P+1]??"","Direcci[o\xF3]n")!==null&&(I=y(P+1))}let C=[];for(let P of r){let F=ia(P,"Referencia Catastral");F!==null&&F!==""&&C.push(F)}let T=P=>P.replace(/[\s-]/g,"").toUpperCase(),_=[...new Set(C.map(T))],E=S!==-1?ia(r[S],"Referencia Catastral"):null,O=null;E!==null&&E!==""&&(_.length===1||_.length>1&&I!==null)&&(O=E);let B={tenants:l.map(P=>({name:P.name,nif:P.nif,phone:P.phone,email:P.email})),contract_date:a,start_date:g,end_date:x,monthly_rent:k[0].valor,confidence:null,warning_codes:c,cadastral_refs:C,property_address:I},G={...kp(JSON.stringify(B)),cadastral_ref_vivienda:ru([O])[0]??null};return G.tenants.length===0?$n("sin_inquilinos"):{ok:!0,contrato:G}}var LW={prefiltro:t=>bS.prefiltro(t),reconoce:t=>bS.reconoce(t),leer:BW},nP=Object.freeze({wolo:LW,guay:s_});function uP(t){try{if(t==null||t.trim()==="")return $n("contrato_no_reconocido");for(let e of Object.keys(nP)){let n=nP[e];if(n.reconoce(t))return n.leer(t)}return $n("contrato_no_reconocido")}catch{return $n("error_interno")}}var zW="wolo-contrato@1";var ji=(t,e=!1)=>({ok:!1,motivo:t,transitorio:e}),UW=t=>[t.tipo,t.categoria,Math.round(t.importe*100),t.fecha,t.devengo].join("|");async function xS(t){try{let e=await t.texto(t.buf,t.mime);return e==null||e.trim()===""?ji("sin_texto",!0):t.caja==="contract"?HW(e):VW(t,e)}catch{return ji(t.caja==="contract"?"error_interno":"lector_fallo")}}function HW(t){let e=uP(t);if(!e.ok)return ji(e.motivo);let n=e.contrato;return{ok:!0,tipo:"contrato",contrato:n,huella:{inicio:n.start_date,fin:n.end_date,firma:n.contract_date,renta:n.monthly_rent,nInquilinos:n.tenants.length,parser:oP(t)??"wolo",version:zW},direccion:n.property_address}}function VW(t,e){if(!t.lector)return ji("lector_fallo");let n=t.lector.parser,i=Object.prototype.hasOwnProperty.call(t.lectores,n)?t.lectores[n]:void 0;if(!i||i.reconoce(e)===null)return ji("lector_fallo");if(KO(t.lector,t.lectores,e))return ji("resumen_anual");let r=i.leer(e);if(!r.ok)return ji("lector_fallo");if(r.tipo==="resumen")return ji("resumen_anual");if(r.filas.length===0)return ji("lector_fallo");let a=new Set(t.lector.conceptos);if(r.conceptos.some(d=>!a.has(d)))return ji("concepto_no_certificado");let s=z2(r,null);if(s.length!==r.filas.length)return ji("lector_fallo");let o=r.filas.map((d,h)=>({tipo:d.tipo,categoria:d.category_code,importe:d.importe,fecha:d.fecha,devengo:s[h].date,periodo_desde:d.periodo_desde,periodo_hasta:d.periodo_hasta,pagina:r.detalle[h]?.pagina??null})),l=r.detalle.map(d=>typeof d?.rotulo=="string"?d.rotulo.slice(0,200):""),c=o.filter(d=>F1(t.ventana,d.devengo)),f=o.flatMap((d,h)=>F1(t.ventana,d.devengo)?[l[h]??""]:[]);if(c.length===0)return ji("fuera_de_ventana");let u=null;try{u=i.direccion(e)}catch{u=null}return{ok:!0,tipo:"movimiento",filas:c,huella:c.map(UW).sort(),parser:n,version:t.versiones[n]??n,direccion:u,conceptos:[...r.conceptos],aRevision:r.aRevision,emision:r.emision??null,filasFuera:o.length-c.length,rotulos:f}}var dP=["alias","address_street","address_postal","cadastral_ref"],hP=["full_name","nif","contact_phone"];var wS=2,vS=1,Wc=40,aa={contract:5,tenant_id:8,other:20,acta:1,movimientos:Wc},W1=5,K1=10,pP=["contract","tenant_id","other","movimientos"],G1={nombre:200,nif:20,telefono:30,email:254},mP=t=>Math.abs(Math.round(t*100)-t*100)<1e-6;function WW(t){let[e,n,i]=t.split("-").map(Number),r=new Date(Date.UTC(e,n-1,i));return r.getUTCFullYear()===e&&r.getUTCMonth()===n-1&&r.getUTCDate()===i}var tl=me.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine(WW,"fecha imposible"),gP=me.object({nombre:me.string().trim().min(1).max(G1.nombre),nif:me.string().trim().min(1).max(G1.nif).optional(),email:me.string().trim().email().max(G1.email).optional(),telefono:me.string().trim().min(1).max(G1.telefono).optional()}).strict(),bP=me.number().positive().max(1e5).refine(mP,"como mucho 2 decimales"),rs=me.string().uuid(),xP=me.number().gt(0).max(100).refine(mP,"como mucho 2 decimales").optional(),KW=me.object({inicio:tl,fin:tl,fecha_firma:tl.optional(),renta_mensual:bP,inquilinos:me.array(gP).min(1).max(4)}).strict(),XW=me.object({v:me.literal(vS),contrato:KW.optional(),porcentaje_titularidad:xP,ficheros:me.object({contract:me.array(rs).max(aa.contract),tenant_id:me.array(rs).max(aa.tenant_id),other:me.array(rs).max(aa.other),movimientos:me.array(rs).max(aa.movimientos)}).strict()}).strict(),YW=me.object({inicio:tl,fin_pactado:tl,fin_real:tl.optional(),fecha_firma:tl.optional(),renta_mensual:bP,inquilinos:me.array(gP).min(1).max(4),ficheros:me.object({contract:me.array(rs).max(aa.contract),tenant_id:me.array(rs).max(aa.tenant_id),other:me.array(rs).max(aa.other),acta:me.array(rs).max(W1)}).strict()}).strict(),ZW=me.object({v:me.literal(wS),porcentaje_titularidad:xP,contratos:me.array(YW).min(1),ficheros:me.object({movimientos:me.array(rs).max(aa.movimientos)}).strict()}).strict(),Kc=me.union([XW,ZW]);function sd(t){if(t.v===2)return{v:2,porcentaje:t.porcentaje_titularidad??null,movimientos:[...t.ficheros.movimientos],contratos:t.contratos.map(n=>({inicio:n.inicio,finPactado:n.fin_pactado,finReal:n.fin_real??null,fechaFirma:n.fecha_firma??null,rentaMensual:n.renta_mensual,inquilinos:n.inquilinos,ficheros:{contract:[...n.ficheros.contract],tenant_id:[...n.ficheros.tenant_id],other:[...n.ficheros.other],acta:[...n.ficheros.acta]}}))};let e=t.contrato;return{v:1,porcentaje:t.porcentaje_titularidad??null,movimientos:[...t.ficheros.movimientos],contratos:e?[{inicio:e.inicio,finPactado:e.fin,finReal:null,fechaFirma:e.fecha_firma??null,rentaMensual:e.renta_mensual,inquilinos:e.inquilinos,ficheros:{contract:[...t.ficheros.contract],tenant_id:[...t.ficheros.tenant_id],other:[...t.ficheros.other],acta:[]}}]:[]}}function JW(t){return t.v!==1||t.contrato?{contract:[],tenant_id:[],other:[]}:{contract:[...t.ficheros.contract],tenant_id:[...t.ficheros.tenant_id],other:[...t.ficheros.other]}}function QW(t){let e=JW(t);return[...e.contract,...e.tenant_id,...e.other]}function od(t){let e=sd(t);return[...e.contratos.flatMap(n=>[...n.ficheros.contract,...n.ficheros.tenant_id,...n.ficheros.other,...n.ficheros.acta]),...QW(t),...e.movimientos]}var nl=me.string().regex(/^\d{4}-\d{2}-\d{2}$/),eK=me.object({tipo:me.enum(["income","expense"]),categoria:me.string().min(1).max(40),importe:me.number(),fecha:nl,devengo:nl,periodo_desde:nl.nullable().optional(),periodo_hasta:nl.nullable().optional(),pagina:me.number().int().min(1).nullable().optional(),rotulo:me.string().max(200).optional()}).strict(),tK=me.discriminatedUnion("tipo",[me.object({tipo:me.literal("contrato"),huella:me.object({inicio:nl.nullable(),fin:nl.nullable(),firma:nl.nullable(),renta:me.number().nullable(),nInquilinos:me.number().int().min(0),parser:me.string().max(40),version:me.string().max(40)}).strict().nullable()}).strict(),me.object({tipo:me.literal("movimiento"),filas:me.array(eK).max(2e3),origen:me.literal("ia").optional()}).strict()]),nK=me.object({documentos:me.record(me.string().uuid(),tK),perdidos:me.array(me.string().uuid()).max(100).optional()}).strict(),ld=me.object({v:me.literal(1),paquete:Kc,alta:nK}).strict();function cd(t){let e=ld.safeParse(t);if(e.success){let o=cd(e.data.paquete);return o.ok?{ok:!0,paquete:o.paquete,alta:e.data.alta}:o}let n=Kc.safeParse(t);if(!n.success)return{ok:!1,error:"esquema",detalle:n.error.issues[0]?.path.join(".")};let i=n.data,r=sd(i);for(let o of r.contratos){if(o.finPactado<=o.inicio)return{ok:!1,error:"fin_antes_de_inicio"};if(o.finReal!==null&&o.finReal<o.inicio)return{ok:!1,error:"fin_antes_de_inicio"};if(o.fechaFirma&&o.fechaFirma>o.finPactado)return{ok:!1,error:"firma_despues_de_fin"}}let a=new Set,s=od(i);for(let o of s){if(a.has(o))return{ok:!1,error:"fichero_repetido",detalle:o};a.add(o)}return{ok:!0,paquete:i}}var rK=K1;var iK=me.string().email();function yS(t){let e=t.replace(/[\s€]/g,"");if(!e)return null;let n;if(e.includes(",")){if(!/^\d{1,3}(\.\d{3})*,\d+$|^\d+,\d+$/.test(e))return null;n=e.replace(/\./g,"").replace(",",".")}else if(/^\d{1,3}(\.\d{3})+$/.test(e))n=e.replace(/\./g,"");else if(/^\d+(\.\d+)?$/.test(e))n=e;else return null;let i=n.split(".")[1];if(i&&i.length>2)return null;let r=Number(n);return Number.isFinite(r)?r:null}function vP(t,e){return t.contrato!==null||e>0?!0:t.porcentaje===null?!1:yS(t.porcentaje)!==100}function aK(t){if(!t.inicio||!t.fin)return{ok:!1,error:{codigo:"fechas_obligatorias"}};let e=yS(t.renta);if(e===null||e<=0)return{ok:!1,error:{codigo:"renta"}};let n=[];for(let r=0;r<t.inquilinos.length;r++){let a=t.inquilinos[r],s=a.nombre.trim(),o=a.nif.trim(),l=a.email.trim(),c=a.telefono.trim();if(!(!s&&!o&&!l&&!c)){if(!s)return{ok:!1,error:{codigo:"inquilino_nombre",n:r+1}};if(l&&!iK.safeParse(l).success)return{ok:!1,error:{codigo:"inquilino_email",n:r+1}};n.push({nombre:s,...o&&{nif:o},...l&&{email:l},...c&&{telefono:c}})}}if(n.length===0)return{ok:!1,error:{codigo:"inquilino_nombre",n:1}};let i=t.firma.trim();return{ok:!0,contrato:{inicio:t.inicio,fin_pactado:t.fin,...i&&{fecha_firma:i},renta_mensual:e,inquilinos:n}}}function wP(t){if(t===null)return{ok:!0,valor:void 0};let e=yS(t);return e===null||e<=0||e>100?{ok:!1,error:{codigo:"porcentaje"}}:{ok:!0,valor:e!==100?e:void 0}}var sK=()=>({contract:[],tenant_id:[],other:[],acta:[]});function oK(t){for(let e of["contract","tenant_id","other"]){let n=aa[e];if(t[e].length>n)return{codigo:"caja_llena",caja:e,max:n}}return t.acta.length>W1?{codigo:"caja_llena",caja:"acta",max:W1}:null}function X1(t,e){for(let a of pP){let s=aa[a];if(e[a].length>s)return{ok:!1,error:{codigo:"caja_llena",caja:a,max:s}}}let n=[{contract:e.contract,tenant_id:e.tenant_id,other:e.other,acta:e.acta??[]},...e.masContratos??[]];for(let a of n){let s=oK(a);if(s)return{ok:!1,error:s}}let i={};if(t.contrato){let a=[t.contrato,...t.masContratos??[]];if(a.length>rK)return{ok:!1,error:{codigo:"datos"}};let s=[];for(let l=0;l<a.length;l++){let c=aK(a[l]);if(!c.ok)return c;let f=n[l]??sK();s.push({...c.contrato,ficheros:{contract:f.contract,tenant_id:f.tenant_id,other:f.other,acta:f.acta}})}let o=wP(t.porcentaje);if(!o.ok)return o;Object.assign(i,{v:wS,...o.valor!==void 0&&{porcentaje_titularidad:o.valor},contratos:s,ficheros:{movimientos:e.movimientos}})}else{let a=wP(t.porcentaje);if(!a.ok)return a;Object.assign(i,{v:vS,...a.valor!==void 0&&{porcentaje_titularidad:a.valor},ficheros:{contract:e.contract,tenant_id:e.tenant_id,other:e.other,movimientos:e.movimientos}})}let r=cd(i);return r.ok?{ok:!0,paquete:r.paquete}:r.error==="fin_antes_de_inicio"?{ok:!1,error:{codigo:"fin_antes_de_inicio"}}:r.error==="firma_despues_de_fin"?{ok:!1,error:{codigo:"firma_despues_de_fin"}}:{ok:!1,error:{codigo:"datos"}}}function Y1(t){return t.normalize("NFD").replace(/[̀-ͯ]/g,"").toUpperCase().replace(/[^A-Z0-9\s]/g," ").split(/\s+/).filter(e=>e.length>0)}function kS(t,e){let n=new Set(Y1(t)),i=new Set(Y1(e));if(n.size===0||i.size===0)return!1;let[r,a]=n.size<=i.size?[n,i]:[i,n],s=0;for(let o of Array.from(r))a.has(o)&&s++;return s===r.size&&s>=2}var lK="2023-05-26";function jS(t){return t<lK}function AS(t,e,n,i){let r=new Date(`${t}T00:00:00Z`).getTime(),a=e?new Date(`${e}T00:00:00Z`).getTime():Number.POSITIVE_INFINITY,s=new Date(`${n}T00:00:00Z`).getTime(),o=i?new Date(`${i}T00:00:00Z`).getTime():Number.POSITIVE_INFINITY;return r<=o&&s<=a}var yP="TRWAGMYFPDXBNJZSQVHLCKE";function SS(t){return t.trim().toUpperCase().replace(/[\s\-]/g,"")}function kP(t){let e=SS(t);if(!e)return!1;if(/^\d{8}[A-Z]$/.test(e)){let n=parseInt(e.slice(0,8),10);return e[8]===yP[n%23]}if(/^[XYZ]\d{7}[A-Z]$/.test(e)){let n=e[0],i={X:"0",Y:"1",Z:"2"}[n],r=parseInt(i+e.slice(1,8),10);return e[8]===yP[r%23]}if(/^[ABCDEFGHJKLMNPQRSUVW]\d{7}[A-Z0-9]$/.test(e)){let n=e.slice(1,8),i=0,r=0;for(let u=0;u<7;u++){let d=parseInt(n[u],10);if((u+1)%2===0)r+=d;else{let h=d*2;i+=Math.floor(h/10)+h%10}}let s=(10-(i+r)%10)%10,o="JABCDEFGHI"[s],l=e[8],c="NPQRSW",f="ABEH";return c.includes(e[0])?l===o:f.includes(e[0])?l===String(s):l===o||l===String(s)}return!1}var jP=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>{if(t==null)return;let e=t.trim();return e===""?void 0:e});function AP(t){let e=new Date(t);return Number.isNaN(e.getTime())?!1:!/^\d{4}-\d{2}-\d{2}$/.test(t)||e.toISOString().slice(0,10)===t}var wre=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>{if(!(t===void 0||t===""||t===null))return AP(t)?t:void 0}),vre=me.union([me.string(),me.null()]).optional().transform(t=>{if(t!==void 0)return t===null||t===""?null:t}).refine(t=>t==null||AP(t),{message:"Fecha no v\xE1lida"}),yre=me.union([me.string(),me.null()]).optional().transform(t=>{if(t===void 0)return;let e=(t??"").trim();return e===""?null:e}),kre=me.union([me.boolean(),me.literal(""),me.null()]).optional().transform(t=>{if(t!==void 0)return t===""||t===null?null:t}),jre=me.union([me.string(),me.null()]).optional().transform(t=>t===""||t===void 0||t===null?null:t).refine(t=>t===null||/^[0-9a-f-]{36}$/i.test(t),{message:"UUID inv\xE1lido"}),Are=me.union([me.string(),me.null()]).optional().transform(t=>t===void 0?void 0:t===""||t===null?null:t).refine(t=>t==null||/^[0-9a-f-]{36}$/i.test(t),{message:"UUID inv\xE1lido"});var Sre=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>t===void 0?void 0:t===null||t===""?null:t),cK=jP.refine(t=>t===void 0||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t),{message:"Email no v\xE1lido"}),fK=jP.refine(t=>t===void 0||/^[0-9+\s().\-]+$/.test(t)&&(t.match(/\d/g)??[]).length>=6,{message:"Tel\xE9fono no v\xE1lido"});function uK(t){if(!t)return null;let e=SS(t).replace(/\./g,"");if(!e)return null;let n=/^(\d{1,7})([A-Z])$/.exec(e);n&&(e=n[1].padStart(8,"0")+n[2]);let i=/^([XYZ])(\d{1,6})([A-Z])$/.exec(e);return i&&(e=i[1]+i[2].padStart(7,"0")+i[3]),kP(e)?e:null}function SP(t){let e=new Set;for(let n of t){let i=uK(n);i&&e.add(i)}return e}function dK(t,e){if(t.size!==e.size)return!1;for(let n of t)if(!e.has(n))return!1;return!0}function IP(t,e){let n=SP(e.nifs),i=null;for(let r of t){if(r.deleted_at||(r.unit_id??null)!==(e.unit_id??null)||r.start_date!==e.start_date)continue;let a=SP(r.nifs);if(a.size>0&&n.size>0){if(dK(a,n))return{contrato:r,grado:"igual"};continue}i||(i=r)}return i?{contrato:i,grado:"probable"}:null}function hK(t,e){return jS(t)!==jS(e)||t.slice(0,4)!==e.slice(0,4)}var CP=t=>{let e=t?mS(t):"";return e===""?null:e};function Z1(t,e){if(t.fechaInicio!==e.inicio)return"no";let n=e.inquilinos.map(s=>CP(s.nif)),i=n.length>0&&n.every(s=>s!==null),r=new Set(n.filter(s=>s!==null)),a=!1;for(let s of t.inquilinos){let o=CP(s.dni),l=Y1(s.nombre).length,c=o!==null&&r.has(o),f=l>=2&&e.inquilinos.some((u,d)=>n[d]===null&&kS(s.nombre,u.nombre));if(c||f){a=!0;continue}if(o!==null&&i||l>=2&&!e.inquilinos.some(u=>kS(s.nombre,u.nombre)))return"no"}return a?"casa":"no"}var pK=t=>({inicio:t.inicio,inquilinos:t.inquilinos.map(e=>({nombre:e.nombre,nif:e.nif??null}))});function TP(t,e,n,i){let r=[],a=(p,m)=>r.push({motivo:p,contrato:m}),s=[];t.forEach((p,m)=>{let g=e.get(m)??[];g.length>1&&a("acta_de_mas",m),g.some(b=>!b.ok)&&a("acta_ilegible",m),g.length===1&&g[0].ok&&s.push({caja:m,acta:g[0].acta})});let o=new Map,l=new Map;for(let{caja:p,acta:m}of s){let g=t.flatMap((x,w)=>Z1(m,pK(x))==="casa"?[w]:[]);if(g.length!==1){a("acta_sin_contrato",p);continue}let b=g[0];if(l.set(b,(l.get(b)??0)+1),b!==p){a("acta_sin_contrato",p);continue}o.set(b,m)}for(let[p,m]of l)m>1&&a("acta_repetida",p);t.forEach((p,m)=>{let g=o.get(m);g&&(p.finReal!==null&&p.finReal!==g.fechaLlaves&&a("acta_fin_distinto",m),p.fechaFirma!==null&&hK(p.fechaFirma,g.fechaFirma)&&a("firma_distinta",m))});let c=t.map((p,m)=>{let g=o.get(m);return g?{fin:g.fechaLlaves,porActa:!0}:{fin:p.finReal,porActa:!1}}),f=t.map((p,m)=>m).sort((p,m)=>t[p].inicio.localeCompare(t[m].inicio)||p-m);f.slice(0,-1).forEach(p=>{o.has(p)||a("falta_acta",p)});let u=n.map(p=>({id:p.id,unit_id:null,start_date:p.start_date,end_date:p.end_date,agreed_end_date:null,contract_date:null,monthly_rent:null,nifs:[...p.nifs],nombres:[],telefonos:[],emails:[]})),d=t.map(p=>{let m={unit_id:null,start_date:p.inicio,nifs:p.inquilinos.map(g=>g.nif??""),nombres:[],telefonos:[],emails:[]};return IP(u,m)?.contrato??null});for(let p=0;p<f.length;p++)for(let m=p+1;m<f.length;m++){let g=f[p],b=f[m];!o.has(g)&&c[g].fin===null&&g!==f[f.length-1]||AS(t[g].inicio,c[g].fin,t[b].inicio,c[b].fin)&&a("solape",b)}let h=new Set(d.flatMap(p=>p?[p.id]:[]));return t.forEach((p,m)=>{n.some(x=>!h.has(x.id)&&AS(p.inicio,c[m].fin,x.start_date,x.end_date))&&a("solape",m);let b=d[m];b&&c[m].porActa&&b.end_date!==null&&b.end_date!==c[m].fin&&a("fin_existente_distinto",m)}),r.length>0?{ok:!1,motivos:r}:{ok:!0,contratos:f.map(p=>({...t[p],finEfectivo:c[p].fin,finPorActa:c[p].porActa,existenteId:d[p]?.id??null}))}}function EP(t,e,n){let i=sd(t).contratos;return{validacion:TP(i,e,[],n),inicios:i.map(r=>r.inicio)}}var Gre=[...dP,...hP];var cie=5*6e4,fie={anios:Array.from({length:101},(t,e)=>2e3+e),hastaMes:"9999-12",caducaAntesDe:null};function _P(t){return t.ok?t.tipo==="contrato"?{ok:!0,tipo:"contrato",huella:t.huella}:{ok:!0,tipo:"movimiento",filas:t.filas,parser:t.parser,version:t.version,conceptos:t.conceptos,aRevision:t.aRevision,emision:t.emision}:{ok:!1,motivo:t.motivo==="tope"?"lector_fallo":t.motivo,transitorio:t.transitorio}}var qP=4e6,gK={anios:Array.from({length:101},(t,e)=>2e3+e),hastaMes:"9999-12",caducaAntesDe:null},RP=t=>mK("sha256").update(t).digest("hex");async function OP(t,e){if(t.byteLength>qP)return{demasiadoGrande:!0};let n=null,i=await xS({buf:t,mime:e.mime??"application/pdf",caja:e.caja,ventana:e.ventana??gK,lector:e.lector,lectores:Tp,texto:async(s,o)=>{let l=await $1(s,o,e.extraer?{extraer:e.extraer}:{});return n=l,l},versiones:L2}),r=n,a=r!==null&&r.trim()!==""?RP(r):void 0;return{local:i,resultado:_P(i),textoSha256:a}}async function bK(t,e){let n=await OP(t,e);return"demasiadoGrande"in n?n:{resultado:n.resultado,textoSha256:n.textoSha256}}function IS(t){async function e(n,i,r,a){let s=`/v1/borradores/${encodeURIComponent(n)}/ficheros/${encodeURIComponent(i)}/leer`,o=RP(r),l=await OP(r,a),c="demasiadoGrande"in l?{sha256:o,resultado:{ok:!1,motivo:"demasiado_grande",transitorio:!1}}:{sha256:o,...l.textoSha256?{textoSha256:l.textoSha256}:{},resultado:l.resultado};try{return{respuesta:await t.peticion({metodo:"POST",ruta:s,cuerpo:c}),local:"demasiadoGrande"in l?null:l.local}}catch(d){if(!(d instanceof ln)||d.code!=="AGENCIA_MODO_SERVIDOR")throw d}let f=new FormData;return f.append("file",new Blob([r],{type:a.mime??"application/pdf"}),"fichero.pdf"),{respuesta:await t.peticion({metodo:"POST",ruta:s,cuerpoCrudo:f}),local:null}}return{leerDetalle:e,async leer(n,i,r,a){return(await e(n,i,r,a)).respuesta}}}var xK=[{code:"01",name:"\xC1lava"},{code:"02",name:"Albacete"},{code:"03",name:"Alicante"},{code:"04",name:"Almer\xEDa"},{code:"33",name:"Asturias"},{code:"05",name:"\xC1vila"},{code:"06",name:"Badajoz"},{code:"07",name:"Islas Baleares"},{code:"08",name:"Barcelona"},{code:"48",name:"Vizcaya"},{code:"09",name:"Burgos"},{code:"10",name:"C\xE1ceres"},{code:"11",name:"C\xE1diz"},{code:"39",name:"Cantabria"},{code:"12",name:"Castell\xF3n"},{code:"13",name:"Ciudad Real"},{code:"14",name:"C\xF3rdoba"},{code:"15",name:"A Coru\xF1a"},{code:"16",name:"Cuenca"},{code:"20",name:"Guip\xFAzcoa"},{code:"17",name:"Girona"},{code:"18",name:"Granada"},{code:"19",name:"Guadalajara"},{code:"21",name:"Huelva"},{code:"22",name:"Huesca"},{code:"23",name:"Ja\xE9n"},{code:"24",name:"Le\xF3n"},{code:"25",name:"Lleida"},{code:"27",name:"Lugo"},{code:"28",name:"Madrid"},{code:"29",name:"M\xE1laga"},{code:"30",name:"Murcia"},{code:"31",name:"Navarra"},{code:"32",name:"Ourense"},{code:"34",name:"Palencia"},{code:"35",name:"Las Palmas"},{code:"36",name:"Pontevedra"},{code:"26",name:"La Rioja"},{code:"37",name:"Salamanca"},{code:"38",name:"Santa Cruz de Tenerife"},{code:"40",name:"Segovia"},{code:"41",name:"Sevilla"},{code:"42",name:"Soria"},{code:"43",name:"Tarragona"},{code:"44",name:"Teruel"},{code:"45",name:"Toledo"},{code:"46",name:"Valencia"},{code:"47",name:"Valladolid"},{code:"49",name:"Zamora"},{code:"50",name:"Zaragoza"},{code:"51",name:"Ceuta"},{code:"52",name:"Melilla"}],wK=new Map(xK.map(t=>[t.code,t]));function fd(t){return wK.get(t)}function PP(t){if(/^\d{5}$/.test(t))return fd(t.slice(0,2))}var vK=/^[A-Za-z0-9._-]{1,40}$/;function is(t){return vK.test(t)}var Xc=me.string().regex(/^[A-Za-z0-9+/]+={0,2}$/).max(2e4),DP=me.string().refine(is),yK=me.string().regex(/^\d{2}$/).refine(t=>fd(t)!==void 0),J1=me.object({wrapped_key_b64:Xc,cipher_b64:Xc,iv_b64:Xc}).strict(),kK=["contract","tenant_id","other"],CS=[...kK,"acta","movimientos","foto"],TS=2*1024*1024,jK=(t,e,n)=>t==="foto"&&(e!=="image/jpeg"||n>TS),AK=me.object({caja:me.enum(CS),storage_path:me.string().min(1).max(300),wrapped_file_key:Xc,nombre_cipher:Xc,nombre_iv:Xc,mime:me.string().min(1).max(100),size_bytes:me.number().int().positive(),idem_key:me.string().uuid()}).strict().refine(t=>!jK(t.caja,t.mime,t.size_bytes),{message:"TOPE_CAJA",path:["caja"]}),SK=me.object({email:me.string().trim().email().max(254),ref:DP.optional(),copiaNombre:J1.optional()}).strict(),IK=me.object({ref:DP.optional(),provincia:yK,municipio:me.string().regex(/^\d{5}$/).nullish(),sobre:J1,ficheros:me.array(AK).max(25+Wc).default([]),paquete:J1.optional(),paqueteConContrato:me.boolean().optional(),paqueteContratos:me.number().int().min(1).max(K1).optional()}).strict().refine(t=>!t.ficheros.some(e=>e.caja==="movimientos")||t.paquete!==void 0,{message:"movimientos sin paquete",path:["ficheros"]}).refine(t=>t.paqueteContratos===void 0||t.paquete!==void 0,{message:"contratos sin paquete",path:["paqueteContratos"]}).refine(t=>!t.ficheros.some(e=>e.caja==="acta")||t.paquete!==void 0,{message:"acta sin paquete",path:["ficheros"]}).refine(t=>!t.paqueteConContrato||t.paquete!==void 0,{message:"contrato sin paquete",path:["paqueteConContrato"]}).refine(t=>t.municipio==null||t.municipio.startsWith(t.provincia),{message:"INE de otra provincia",path:["municipio"]}),Aie=me.object({cliente:SK,sobreCliente:J1,viviendas:me.array(IK).max(50)}).strict().refine(t=>{let e=t.viviendas.map(n=>n.ref).filter(n=>n!==void 0);return new Set(e).size===e.length},{message:"ref de vivienda repetida",path:["viviendas"]}).refine(t=>{let e=t.viviendas.flatMap(n=>n.ficheros.map(i=>i.idem_key));return new Set(e).size===e.length},{message:"idem_key repetida",path:["viviendas"]});function CK(t){return t.toFixed(2).replace(".",",")}function NP(t){if(!t.ok)return{ok:!1,motivo:"contrato_ilegible"};let e=t.contrato,n=[];e.start_date===null&&n.push("inicio"),e.end_date===null&&n.push("fin"),e.monthly_rent===null&&n.push("renta"),e.tenants.length===0&&n.push("inquilinos");let i=e.warning_codes.includes("mas_de_4_inquilinos");return n.length>0||i?{ok:!1,motivo:"contrato_incompleto",faltan:n,excedeInquilinos:i}:{ok:!0,finCalculado:e.warning_codes.includes("fin_calculado_por_duracion"),form:{inicio:e.start_date,fin:e.end_date,firma:e.contract_date??"",renta:CK(e.monthly_rent),inquilinos:e.tenants.map(r=>({nombre:r.name,nif:r.nif??"",email:r.email??"",telefono:r.phone??""}))}}}var Ta=()=>globalThis.crypto.subtle,Ai=t=>t;async function _S(t){return Ta().importKey("spki",Ai(t),{name:"RSA-OAEP",hash:"SHA-256"},!1,["encrypt"])}async function MP(){let t=globalThis.crypto.getRandomValues(new Uint8Array(32));return{key:await Ta().importKey("raw",Ai(t),"AES-GCM",!1,["encrypt"]),raw:t}}async function qS(t,e){return new Uint8Array(await Ta().encrypt({name:"RSA-OAEP"},e,Ai(t)))}async function ES(t,e){let n=globalThis.crypto.getRandomValues(new Uint8Array(12));return{cipher:new Uint8Array(await Ta().encrypt({name:"AES-GCM",iv:Ai(n)},e,Ai(t))),iv:n}}async function xr(t,e){let n=await _S(e),{key:i,raw:r}=await MP(),{cipher:a,iv:s}=await ES(new TextEncoder().encode(JSON.stringify(t)),i);return{wrapped_key:await qS(r,n),cipher:a,iv:s}}async function RS(t,e){let n=await Ta().decrypt({name:"RSA-OAEP"},e,Ai(t));return Ta().importKey("raw",n,"AES-GCM",!1,["decrypt"])}async function Yc(t,e){let n=await RS(t.wrapped_key,e),i=await Ta().decrypt({name:"AES-GCM",iv:Ai(t.iv)},n,Ai(t.cipher));return JSON.parse(new TextDecoder().decode(i))}async function OS(t,e,n){let i=await _S(n),{key:r,raw:a}=await MP(),s=await ES(t,r),o=await ES(new TextEncoder().encode(e),r),l=new Uint8Array(12+s.cipher.length);return l.set(s.iv,0),l.set(s.cipher,12),{blob:l,wrapped_file_key:await qS(a,i),nombre_cipher:o.cipher,nombre_iv:o.iv}}async function TK(t,e){let n=await RS(t.wrapped_file_key,e),i=await Ta().decrypt({name:"AES-GCM",iv:Ai(t.nombre_iv)},n,Ai(t.nombre_cipher));return new TextDecoder().decode(i)}async function EK(t,e,n){let i=await RS(e,n),r=await Ta().decrypt({name:"AES-GCM",iv:Ai(t.subarray(0,12))},i,Ai(t.subarray(12)));return new Uint8Array(r)}async function ud(t,e,n){let i=new Uint8Array(await Ta().decrypt({name:"RSA-OAEP"},e,Ai(t)));return qS(i,await _S(n))}function un(t){let e="";for(let n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return btoa(e)}function zr(t){let e=atob(t),n=new Uint8Array(e.length);for(let i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return n}function FP(t){let e="";for(let n=0;n<t.length;n++)e+=t[n].toString(16).padStart(2,"0");return e}async function $P(){let t=await crypto.subtle.generateKey({name:"RSA-OAEP",modulusLength:3072,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!0,["encrypt","decrypt"]);return{publicKeySpki:new Uint8Array(await crypto.subtle.exportKey("spki",t.publicKey)),privateKeyPkcs8:new Uint8Array(await crypto.subtle.exportKey("pkcs8",t.privateKey))}}async function BP(t,e){let n=await crypto.subtle.decrypt({name:"RSA-OAEP"},e,t);return crypto.subtle.importKey("raw",n,"AES-GCM",!1,["decrypt"])}var eb=()=>globalThis.crypto.subtle,Zc=t=>t,_K="agencia-paquete-v1",Q1=32,qK=12,RK={name:"RSA-OAEP",hash:"SHA-256"};function OK(t){return eb().importKey("pkcs8",Zc(t),RK,!1,["decrypt"])}async function LP(){let{publicKeySpki:t,privateKeyPkcs8:e}=await $P();return{publicaSpki:t,privada:await OK(e),privadaPkcs8:e}}function zP(){return globalThis.crypto.getRandomValues(new Uint8Array(Q1))}function dd(t){let e="";for(let n of t)e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function UP(t){if(!/^[A-Za-z0-9_-]+$/.test(t))return null;try{let e=t.replace(/-/g,"+").replace(/_/g,"/"),n=atob(e+"=".repeat((4-e.length%4)%4));if(n.length!==Q1)return null;let i=new Uint8Array(Q1);for(let r=0;r<Q1;r++)i[r]=n.charCodeAt(r);return dd(i)===t?i:null}catch{return null}}async function PK(t,e,n){let i=new TextEncoder,r=await eb().importKey("raw",Zc(t),"HKDF",!1,["deriveKey"]);return eb().deriveKey({name:"HKDF",hash:"SHA-256",salt:Zc(i.encode(e)),info:Zc(i.encode(_K))},r,{name:"AES-GCM",length:256},!1,[n])}async function HP(t,e,n){let i=await PK(e,n,"encrypt"),r=globalThis.crypto.getRandomValues(new Uint8Array(qK));return{cipher:new Uint8Array(await eb().encrypt({name:"AES-GCM",iv:Zc(r)},i,Zc(t))),iv:r}}var DK="/onboarding/agencia/entrar";function VP(t){return`${t.origin.replace(/\/+$/,"")}${DK}?c=${encodeURIComponent(t.clientId)}#t=${t.token}&k=${dd(t.secreto)}`}var Jc=t=>({wrapped_key_b64:un(t.wrapped_key),cipher_b64:un(t.cipher),iv_b64:un(t.iv)});async function NK(t){let{vivienda:e,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}=t,a={v:1,...e.datos},s={},o=[];for(let c of e.ficheros){let f=await ud(c.wrappedFileKey,n,r);o.push({ficheroId:c.ficheroId,idemKey:c.idemKey,wrappedFileKeyB64:un(f)}),c.lectura&&(s[c.idemKey]=c.lectura)}let l=e.paquete?{v:1,paquete:e.paquete,alta:{documentos:s}}:null;return{viviendaBorradorId:e.viviendaBorradorId,...e.ref?{ref:e.ref}:{},provincia:e.provincia,...e.municipio?{municipio:e.municipio}:{},sobreAgencia:Jc(await xr(a,i)),sobreEfimera:Jc(await xr(a,r)),paqueteEfimera:l?Jc(await xr(l,r)):null,...e.porcentajeDeclarado!=null?{porcentajeDeclarado:e.porcentajeDeclarado}:{},ficheros:o}}var MK={sellarViviendaParaEfimera:NK};async function GP(t){let{borrador:e,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}=t,a={v:1,...e.cliente.datos},s=e.cliente.datos.nombre,o=typeof s=="string"&&s.trim()!==""?s.trim():null,l={email:e.cliente.email,...e.cliente.ref?{ref:e.cliente.ref}:{},sobreAgencia:Jc(await xr(a,i)),sobreEfimera:Jc(await xr(a,r)),...o?{copiaNombre:Jc(await xr({v:1,nombre:o},i))}:{}},c=[];for(let f of e.viviendas)c.push(await MK.sellarViviendaParaEfimera({vivienda:f,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}));return{cliente:l,viviendas:c}}var WP=1,PS=me.object({v:me.literal(WP),nombre:me.string().trim().min(1).max(200).optional(),nif:me.string().trim().min(1).max(20).optional(),telefono:me.string().trim().min(1).max(30).optional()}).strict(),Gie=PS.extend({nombre:me.string().trim().min(1).max(200)}),DS=/^[0-9A-ZÑ]{20}$/,KP=me.object({v:me.literal(WP),direccion:me.string().trim().min(1).max(300),cp:me.string().regex(/^\d{5}$/),etiqueta:me.string().trim().min(1).max(200),cadastral_ref:me.string().regex(DS).optional().catch(void 0)}).strict();var hd=t=>({contrato:t.contrato,porcentaje:null,masContratos:t.masContratos.map(e=>e.datos)});var FK={CL:"calle",PS:"paseo",AV:"avenida",PZ:"plaza",CR:"carretera",RD:"ronda",TR:"traves\xEDa",GL:"glorieta",CM:"camino",AC:"acera",CJ:"callej\xF3n",UR:"urbanizaci\xF3n",PQ:"parque",BO:"barrio",LG:"lugar",PJ:"pasaje",CS:"costanilla",RM:"ramal",SD:"sendero",ES:"escalinata",TO:"torrente",VI:"v\xEDa",RU:"r\xFAa",RB:"rambla"},$K={CL:["calle","c","cl"],PS:["paseo","po","ps"],AV:["avenida","avda","av","avd"],PZ:["plaza","pza","pl","plza"],CR:["carretera","ctra","cr"],TR:["travesia","trav","tr"],RD:["ronda","rda"],GL:["glorieta","gta","gl"],CM:["camino","cmno","cm"]},BK={CL:["carrer"],PS:["passeig"],AV:["avinguda","avgda"],PZ:["placa","pla\xE7a","praza"],CR:["estrada"],TR:["travessia","travessera"],CM:["cami","cami\xF1o"],RU:["rua"],PJ:["passatge"]},LK=new Set(["RU","RB"]);function XP(t){let e={};for(let[n,i]of Object.entries(FK))!t&&LK.has(n)||(e[n.toLowerCase()]=n,e[i.normalize("NFD").replace(/[\u0300-\u036f]/g,"")]=n);for(let[n,i]of Object.entries($K))for(let r of i)e[r]=n;if(t)for(let[n,i]of Object.entries(BK))for(let r of i)e[r]=n;return e}var YP=XP(!1),Xie=XP(!0);var zK=new Set(["de","del","la","las","los","el"]),JP=new Set(["n","no","num","numero"]);function QP(t){return t.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[\u00ba\u00aa\u00b0]/g,"o").replace(/\./g,"").replace(/[^a-z0-9ñ]+/g," ").trim().split(" ").filter(Boolean)}function eD(t){let e=QP(t);for(;e.length>1&&JP.has(e[0]??"");)e.shift();return e[0]&&(e[0]=e[0].replace(/^(n|no|num|numero)(?=\d)/,"")),e.join("").replace(/^0+(?=\d)/,"")}function UK(t){return t.calle.trim()===""&&t.numero.trim()===""}function ZP(t){let e=QP(t);e=e.filter((a,s)=>!(JP.has(a)&&/^\d/.test(e[s+1]??"")));let n=YP[e[0]??""]??null;n&&(e=e.slice(1));let i=e.findIndex(a=>/^\d/.test(a)),r=(i===-1?e:e.slice(0,i)).filter(a=>!zK.has(a)).join(" ");return{sigla:n,nombre:r,numero:i===-1?"":eD(e[i])}}function tD(t,e){if(UK(t))return!1;let n=ZP(t.calle),i=t.numero.trim()!==""?eD(t.numero):n.numero,r=ZP(e);return n.nombre===""||i===""||r.numero===""||n.sigla!==null&&r.sigla!==null&&n.sigla!==r.sigla?!1:n.nombre===r.nombre&&i===r.numero}var nD=t=>{let e={direccion:t.property_address,todas:[...t.cadastral_refs],vivienda:t.cadastral_ref_vivienda??null};return e.direccion===null&&e.todas.length===0?null:e};function rD(t){let e=new Set;for(let n of t)n.caja==="contract"&&n.estado==="leido"&&n.rc?.vivienda&&e.add(n.rc.vivienda);return e.size===1?[...e][0]:null}var iD=(t,e,n)=>({id:t,file:e,caja:n,ficheroId:null,estado:"subiendo",motivo:null,rentas:0,gastos:0,filasFuera:0,rc:null});function aD(t){let e=[];for(let n of["contract","tenant_id","other"])for(let i of t.ficheros[n])e.push({file:i,caja:n,destino:0});for(let n of t.bloques.actaPrimero)e.push({file:n,caja:"acta",destino:0});t.bloques.masContratos.forEach((n,i)=>{for(let r of["contract","tenant_id","other","acta"])for(let a of n.ficheros[r])e.push({file:a,caja:r,destino:i+1})});for(let n of t.bloques.movimientos??[])e.push({file:n,caja:"movimientos",destino:0});return e}var sD=(t,e)=>e===null?"ilegible":tD({calle:t.trim(),numero:""},e)?"casa":"distinta";function oD(t){return t.ok?t.tipo==="contrato"?{tipo:"contrato",huella:t.huella??null}:t.origen==="ia"?{tipo:"movimiento",filas:t.filas,origen:"ia"}:{tipo:"movimiento",filas:t.filas}:null}function lD(t,e){let n=t.bloques.movimientos??[];if(!vP(hd(t.bloques),n.length))return{ok:!0,paquete:null};let i=new Map(t.pre.map(f=>[f.file,f])),r=()=>({contract:[],tenant_id:[],other:[],acta:[]}),a=[r(),...t.bloques.masContratos.map(r)],s=[];for(let{file:f,caja:u,destino:d}of aD(t)){if(u==="foto")continue;let h=i.get(f),p=h?.ficheroId?e(h.ficheroId):void 0;if(!p)return{ok:!1,error:{codigo:"fichero_subiendo"}};u==="movimientos"?s.push(p):a[d]?.[u].push(p)}let[o,...l]=a,c=X1(hd(t.bloques),{...o,movimientos:s,masContratos:l});return c.ok?{ok:!0,paquete:c.paquete}:c}var HK=t=>t.trim()===""?null:t;function cD(t){let e=[],n=!1,i=new Set,r=[];for(let g of t.contratos){if(g.sha256!==null){if(i.has(g.sha256)){e.push({codigo:"pdf_repetido",ficheroId:g.ficheroId});continue}i.add(g.sha256)}g.lectura.ok?r.push({c:g,form:g.lectura}):g.lectura.motivo==="contrato_ilegible"?(n=!0,e.push({codigo:"contrato_ilegible",ficheroId:g.ficheroId})):(n=!0,e.push({codigo:"contrato_incompleto",ficheroId:g.ficheroId,faltan:g.lectura.faltan,excedeInquilinos:g.lectura.excedeInquilinos}))}let a=r.map((g,b)=>({...g,i:b})).sort((g,b)=>g.form.form.inicio.localeCompare(b.form.form.inicio)||g.i-b.i),s=new Set;for(let g=1;g<a.length;g++){let b=a[g].form.form.inicio;b===a[g-1].form.form.inicio&&!s.has(b)&&(s.add(b),e.push({codigo:"inicio_repetido",inicio:b}))}let o=a.length,l=a.map(g=>({inicio:g.form.form.inicio,inquilinos:g.form.form.inquilinos.map(b=>({nombre:b.nombre,nif:HK(b.nif)}))})),c=a.map(()=>[]),f=[];for(let g of t.actas){if(!g.resultado.ok){e.push({codigo:"acta_ilegible",ficheroId:g.ficheroId});continue}let b=g.resultado.acta,x=l.flatMap((w,k)=>Z1(b,w)==="casa"?[k]:[]);x.length>=1?c[x[0]].push(g):f.push({a:g,inicio:b.fechaInicio})}if(!n)for(let g of f){let b=l.some(x=>x.inicio===g.inicio);e.push({codigo:b?"acta_sin_contrato":"quita_su_acta",ficheroId:g.a.ficheroId,inicio:g.inicio})}let u=()=>({contract:[],tenant_id:[],other:[],acta:[]}),d=a.map((g,b)=>({...u(),contract:[g.c.file],acta:c[b].map(x=>x.file)})),h={contract:[],tenant_id:[],other:[]};if(o===0)h.tenant_id=[...t.tenantId],h.other=[...t.otros];else{let g=d[o-1];g.tenant_id=[...t.tenantId],g.other=[...t.otros],h.contract=d[0].contract,h.tenant_id=d[0].tenant_id,h.other=d[0].other}let p={contrato:o>0?a[0].form.form:null,movimientos:t.movimientos.length>0?[...t.movimientos]:null,actaPrimero:o>0?d[0].acta:[],masContratos:d.slice(1).map((g,b)=>({datos:a[b+1].form.form,ficheros:{contract:g.contract,tenant_id:g.tenant_id,other:g.other,acta:g.acta}}))};if(o>0&&!n&&s.size===0){let g=()=>globalThis.crypto.randomUUID(),b=v=>({contract:v.contract.map(g),tenant_id:v.tenant_id.map(g),other:v.other.map(g),acta:v.acta.map(g)}),[x,...w]=d.map(b),k=X1(hd(p),{...x,movimientos:t.movimientos.map(g),masContratos:w});if(!k.ok)e.push({codigo:"construir",construir:k.error.codigo});else if(k.paquete.v===2){let v=new Map;c.forEach((A,I)=>{A.length>0&&v.set(I,A.map(S=>S.resultado))});let y=EP(k.paquete,v,t.hoy);if(!y.validacion.ok)for(let A of y.validacion.motivos)e.push({codigo:A.motivo,inicio:A.contrato!==null?y.inicios[A.contrato]??null:null})}}let m=[];return c.forEach((g,b)=>{let x=g[0];g.length===1&&x&&x.resultado.ok&&Z1(x.resultado.acta,l[b])==="casa"&&m.push({ficheroId:x.ficheroId,contratoFicheroId:a[b].c.ficheroId,fechaLlaves:x.resultado.acta.fechaLlaves})}),{bloques:p,ficheros:h,errores:e,contratosLeidos:o,actasCasadas:m,contratosOrdenados:a.map(g=>({ficheroId:g.c.ficheroId,inicio:g.form.form.inicio,finCalculado:g.form.finCalculado}))}}async function rl(t,e){let n=await xr(t,zr(e));return{wrapped_key_b64:un(n.wrapped_key),cipher_b64:un(n.cipher),iv_b64:un(n.iv)}}var fD=(t,e)=>({v:1,direccion:t,cp:e,etiqueta:t.slice(0,200)});var tb=t=>t;async function NS(t,e){let n=await BP(t.wrapped_key,e),i=await globalThis.crypto.subtle.decrypt({name:"AES-GCM",iv:tb(t.iv)},n,tb(t.cipher));return new Uint8Array(i)}function MS(t){return globalThis.crypto.subtle.importKey("pkcs8",tb(t),{name:"RSA-OAEP",hash:"SHA-256"},!1,["decrypt"])}async function uD(t){return FP(new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",tb(t))))}function dD(t){return{wrapped_key:zr(t.wrapped_key_b64),cipher:zr(t.cipher_b64),iv:zr(t.iv_b64)}}var nb=1600,hD=.82,pD=.7,FS=TS-1024;async function VK(){try{let e=await import("sharp");return typeof e.default=="function"?e.default:null}catch{return null}}var Qc={ok:!1,error:"IMAGEN_NO_PROCESABLE"},GK=t=>t.length>4&&t[0]===255&&t[1]===216&&t[2]===255;function WK(t){let e=2;for(;e+9<t.length;){if(t[e]!==255){e++;continue}let n=t[e+1];if(n===255){e++;continue}if(n===216||n===1||n>=208&&n<=215){e+=2;continue}if(n===218)return null;let i=t[e+2]<<8|t[e+3];if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204){let r=t[e+5]<<8|t[e+6],a=t[e+7]<<8|t[e+8];return Math.max(r,a)}e+=2+i}return null}function KK(t){let e=[t.subarray(0,2)],n=2;for(;n+4<=t.length;){if(t[n]!==255)return null;let s=t[n+1];if(s===255){n++;continue}if(s===218){e.push(t.subarray(n)),n=t.length;break}if(s===1||s>=208&&s<=217){e.push(t.subarray(n,n+2)),n+=2;continue}let o=n+2+(t[n+2]<<8|t[n+3]);if(o>t.length)return null;s!==225&&s!==237&&s!==254&&e.push(t.subarray(n,o)),n=o}if(n<t.length)return null;let i=e.reduce((s,o)=>s+o.length,0),r=new Uint8Array(i),a=0;for(let s of e)r.set(s,a),a+=s.length;return r}async function $S(t,e,n={}){try{if(t.length===0)return Qc;let i=await(n.cargarSharp??VK)();if(i){let s=i(t,{failOn:"error"}).rotate().resize({width:nb,height:nb,fit:"inside",withoutEnlargement:!0});for(let o of[hD,pD]){let l=await s.clone().jpeg({quality:Math.round(o*100)}).toBuffer();if(l.length>0&&l.length<=FS)return{ok:!0,bytes:new Uint8Array(l),mime:"image/jpeg"}}return Qc}if(e!=="image/jpeg"||!GK(t))return Qc;let r=WK(t);if(r===null||r>nb)return Qc;let a=KK(t);return!a||a.length>FS?Qc:{ok:!0,bytes:a,mime:"image/jpeg"}}catch{return Qc}}import{readFile as XK}from"node:fs/promises";import{createPrivateKey as bD,createPublicKey as YK}from"node:crypto";var mD="CDA_CLAVE_INTEGRACION_PEM",il=class extends Error{constructor(e){super(e),this.name="ErrorClaveIntegracion"}};function gD(t){return!/[\r\n]/.test(t)&&t.includes("\\n")?t.replace(/\\n/g,`
186
- `):t}async function ZK(t){if(t.pem!==void 0&&t.pem.trim()!=="")return gD(t.pem);let e=(t.env??process.env)[mD];if(e!==void 0&&e.trim()!=="")return gD(e);if(t.ruta)return XK(t.ruta,"utf8");throw new il(`Falta la clave de integraci\xF3n: pasa el PEM, define ${mD} o indica la ruta del fichero`)}function JK(t){try{return bD(t)}catch{throw new il("La clave de integraci\xF3n no es un PEM PKCS#8 v\xE1lido (sin contrase\xF1a)")}}function QK(t,e){return xD({ruta:t,env:{}},e)}function xD(t,e){let n=null,i=()=>n??=(async()=>{let r=await ZK(t),a=new Uint8Array(JK(r).export({type:"pkcs8",format:"der"})),s=await MS(a),o=await NS(e,s),{pkcs8_b64:l}=JSON.parse(new TextDecoder().decode(o));if(typeof l!="string")throw new Error("sobre de integraci\xF3n con formato inesperado");let c=Buffer.from(l,"base64"),f=await MS(new Uint8Array(c)),u=new Uint8Array(YK(bD({key:c,format:"der",type:"pkcs8"})).export({type:"spki",format:"der"}));return{privada:f,spki:un(u)}})();return{async abrirSobre(r){return NS(r,(await i()).privada)},async publicaAgenciaSpki(){return(await i()).spki},async clavePrivadaSobres(){return(await i()).privada}}}var pd=class extends ln{ref;paso;vivienda;caja;fichero;loteId;indice;clientId;creado;reintentable;consejo;corta;constructor(e,n,i,r){super(n.status,n.code,n.problema,n.requestId),this.name="ErrorAlta",this.message=`${is(e.ref)?e.ref:"-"}: ${e.paso} \u2192 ${n.status} ${n.code}`,r!==void 0&&(this.cause=r),this.ref=e.ref,this.paso=e.paso,this.vivienda=e.vivienda,this.caja=e.caja,this.fichero=e.fichero,this.loteId=e.loteId,this.indice=e.indice,this.clientId=e.clientId,this.creado=e.creado,this.reintentable=i.reintentable,this.consejo=i.consejo,this.corta=i.corta}},eX=/^(E[A-Z]+|UND_ERR_[A-Z_]+)$/;function wD(t){if(t instanceof ln)return{status:t.status,code:t.code,requestId:t.requestId};if(t instanceof Hs)return{status:0,code:t.code,requestId:null};if(t instanceof il)return{status:0,code:"CLAVE_INTEGRACION",requestId:null};if(t instanceof TypeError){let e=t.cause?.code;if(typeof e=="string"&&eX.test(e))return{status:0,code:"RED",requestId:null}}return{status:0,code:"LOCAL",requestId:null}}var tX=new Set(["KEY_DE_PRUEBAS","KEY_DE_PRODUCCION","API_DESACTIVADA","CUOTA_LECTURAS_AGOTADA","TOPE_BORRADORES","ENTORNO_MAL_CONFIGURADO","CLAVE_INTEGRACION"]),nX=new Set(["RED","TRANSITORIO","LEYENDO","LIMITE_SUPERADO","TIEMPO_AGOTADO","IDEMPOTENCIA_EN_CURSO","LECTOR_VIEJO","REF_OCUPADA"]);function vD(t,e,n){return e===401||e===403||tX.has(t)?{reintentable:!1,consejo:"cuenta",corta:!0}:n.creado==="desconocido"?{reintentable:!0,consejo:"repetir",corta:!1}:nX.has(t)||e>=500||(t==="BORRADOR_CERRADO"||t==="NO_ENCONTRADO")&&n.paso!=="abrir"?{reintentable:!0,consejo:"repetir",corta:!1}:n.paso==="validar"||n.paso==="foto"&&(t==="IMAGEN_NO_PROCESABLE"||t==="TOPE_CAJA")?{reintentable:!1,consejo:"manifiesto",corta:!1}:{reintentable:!1,consejo:"cuenta",corta:!1}}function ef(t,e){if(t instanceof pd)return t;let{status:n,code:i,requestId:r}=wD(t),a=t instanceof ln?t.problema:{code:i};return new pd({...e},{status:n,code:i,requestId:r,problema:a},vD(i,n,e),t)}var rX=2e3,iX=3e4,yD=3,kD=(t,e,n,i)=>typeof t=="number"&&Number.isFinite(t)?Math.min(n,Math.max(e,Math.trunc(t))):i;function aX(t,e){return{ref:t.ref,paso:t.paso,vivienda:t.vivienda,caja:t.caja,fichero:t.fichero,loteId:t.loteId,indice:t.indice,clientId:t.clientId,creado:t.creado,status:t.status,code:t.code,requestId:t.requestId,reintentable:t.reintentable,consejo:t.consejo,intentos:e}}async function BS(t,e,n={},i=r=>new Promise(a=>setTimeout(a,r))){let r=kD(n.aLaVez,1,2,1),a=kD(n.repetir,0,2,1),s={completados:[],fallidos:[],noIntentados:[],cortadoPor:null},o=new Set,l=[];for(let g of e){let b=typeof g?.ref!="string";b||o.has(g.ref)?s.fallidos.push({ref:b?"-":g.ref,paso:"validar",creado:!1,status:422,code:"ENTRADA_INVALIDA",requestId:null,reintentable:!1,consejo:"manifiesto",intentos:0}):(o.add(g.ref),l.push(g))}let c=0,f=0,u=0,d=new Set,h=g=>{f=g==="RED"?f+1:0,u=g==="TIEMPO_AGOTADO"?u+1:0};async function p(g){let b;for(let x=1;;x++)try{let w=await t(g,b);s.completados.push({...w,ref:g.ref,intentos:x}),h(null);return}catch(w){let k=ef(w,{ref:g.ref,paso:"validar",creado:b?.creado??!1});if(k.reintentable&&!k.corta&&x<=a&&!s.cortadoPor&&(b=k.creado==="desconocido"?{creado:"desconocido"}:void 0,await i(k.creado==="desconocido"?iX:rX),!s.cortadoPor))continue;s.fallidos.push(aX(k,x)),h(k.code),!s.cortadoPor&&(k.corta||f>=yD||u>=yD)&&(s.cortadoPor={status:k.status,code:k.code,requestId:k.requestId});return}}async function m(){for(;!s.cortadoPor&&c<l.length;){let g=l[c++];d.add(g.ref),await p(g)}}return await Promise.all(Array.from({length:r},()=>m())),s.noIntentados=l.filter(g=>!d.has(g.ref)).map(g=>g.ref),s}function jD(t){return typeof t=="number"&&Number.isFinite(t)?Math.min(8,Math.max(1,Math.trunc(t))):null}function sX(t){let e=null;return()=>(e??=t.peticion({metodo:"GET",ruta:"/v1/yo"}).then(n=>jD(n?.limites?.concurrencia_ficheros)??4,()=>4),e)}var Bn=(t,e={},n=422)=>new ln(n,t,{code:t,...e}),oX=new Set(["ENTRADA_INVALIDA","IMAGEN_NO_PROCESABLE","FICHERO_NO_LEIDO","DIRECCION_DISTINTA","VIVIENDA_INCOMPLETA","BORRADOR_NO_LISTO"]),lX=new Set(["TRANSITORIO","LEYENDO"]),cX=3,fX=2,uX=12e4,AD=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,dX=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function hX(t){let e=i=>Bn("ENTRADA_INVALIDA",{campo:i});if(typeof t.ref!="string"||!is(t.ref))throw e("ref");if(typeof t.email!="string"||t.email.trim().length>254||!dX.test(t.email.trim()))throw e("email");if(t.nombre!==void 0&&(typeof t.nombre!="string"||t.nombre.trim().length>200))throw e("nombre");if(!Array.isArray(t.viviendas)||t.viviendas.length<1||t.viviendas.length>50)throw e("viviendas");let n=new Set;t.viviendas.forEach((i,r)=>{let a=l=>e(`viviendas[${r}].${l}`);if(typeof i.direccion!="string"||i.direccion.trim()===""||i.direccion.trim().length>300)throw a("direccion");if(typeof i.provincia!="string"||!/^\d{2}$/.test(i.provincia)||fd(i.provincia)===void 0)throw a("provincia");if(i.municipio!==void 0&&(!/^\d{5}$/.test(i.municipio)||!i.municipio.startsWith(i.provincia)))throw a("municipio");if(typeof i.cp!="string"||!/^\d{5}$/.test(i.cp))throw a("cp");if(i.ref!==void 0){if(!is(i.ref)||n.has(i.ref))throw a("ref");n.add(i.ref)}if(!Array.isArray(i.ficheros)||i.ficheros.length>25+Wc)throw a("ficheros");let s=i.ficheros.filter(l=>l?.caja==="movimientos").length;if(i.ficheros.length-s>25||s>Wc)throw a("ficheros");let o=0;i.ficheros.forEach((l,c)=>{let f=u=>e(`viviendas[${r}].ficheros[${c}].${u}`);if(!CS.includes(l.caja))throw f("caja");if(typeof l.nombre!="string"||l.nombre.trim()==="")throw f("nombre");if(!(l.bytes instanceof Uint8Array)||l.bytes.byteLength===0)throw f("bytes");if(typeof l.mime!="string"||l.mime==="")throw f("mime");if(l.caja==="foto"&&++o>1)throw f("caja")})})}function pX(t,e){let n=t&&typeof t=="object"?t:{};if(n.ok!==!0)return{ok:!1,motivo:typeof n.motivo=="string"?n.motivo:"servidor",transitorio:n.transitorio===!0};let i={ok:!1,motivo:"servidor",transitorio:!1};if(e?.ok){if(n.tipo==="contrato"&&e.tipo==="contrato")return{ok:!0,tipo:"contrato",contrato:e.contrato,huella:n.huella,direccion:e.direccion};if(n.tipo==="movimiento"&&e.tipo==="movimiento"){let a=n.filas,s=n.indices;return!Array.isArray(a)||!Array.isArray(s)||s.length!==a.length||!s.every(l=>Number.isInteger(l)&&l>=0&&l<e.rotulos.length)?i:{ok:!0,tipo:"movimiento",filas:a.map((l,c)=>{let f=e.rotulos[s[c]];return f?{...l,rotulo:f}:l}),filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:e.direccion}}return i}let r=typeof n.direccion=="string"?n.direccion:null;return n.tipo==="contrato"&&n.contrato&&typeof n.contrato=="object"?{ok:!0,tipo:"contrato",contrato:n.contrato,huella:n.huella,direccion:r}:n.tipo==="movimiento"&&Array.isArray(n.filas)?{ok:!0,tipo:"movimiento",filas:n.filas,filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:r}:i}var mX=t=>({sobreWrappedKeyB64:un(t.wrapped_key),sobreCipherB64:un(t.cipher),sobreIvB64:un(t.iv)});function gX(t,e){return LS(t,e)}async function LS(t,e,n){let i={ref:typeof e?.ref=="string"?e.ref:"",paso:"validar",creado:n?.creado==="desconocido"?"desconocido":!1};try{hX(e);let r=t.dormir??(u=>new Promise(d=>setTimeout(d,u))),a=t.fetch??globalThis.fetch,s=e.email.trim();i.paso="foto";let o=[];for(let[u,d]of e.viviendas.entries()){let h=[];for(let[p,m]of d.ficheros.entries()){if(m.caja!=="foto"){h.push(m);continue}Object.assign(i,{vivienda:d.ref??u,caja:"foto",fichero:p});let g=await $S(m.bytes,m.mime);if(!g.ok)throw Bn(g.error,{campo:"foto"});h.push({...m,bytes:g.bytes,mime:g.mime,nombre:m.nombre.replace(/\.[^.]+$/,"")+".jpg"})}o.push(h)}delete i.vivienda,delete i.caja,delete i.fichero;let l=await t.descifrador.publicaAgenciaSpki(),c=zr(l);i.paso="abrir";let f;try{f=await bX(t,e.ref,i)}catch(u){if(u instanceof ln&&u.code==="REF_YA_CREADA"){let d=u.problema?.client_id;if(i.creado=!0,typeof d!="string"||!AD.test(d))throw u;return Object.assign(i,{paso:"enlace",clientId:d}),await ID(t,d,null,null)}throw u}try{return await xX(t,e,s,o,f,c,l,r,a,i)}catch(u){throw u instanceof ln&&oX.has(u.code)&&await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${f}`,idempotencia:!1}).catch(()=>{}),u}}catch(r){throw ef(r,i)}}async function bX(t,e,n){let i=async()=>{let o=await t.http.peticion({metodo:"POST",ruta:"/v1/borradores",cuerpo:{tipo:"alta",ref:e}}),l=o?.borradorId;if(typeof o?.nuevo!="boolean"||typeof l!="string"||!AD.test(l))throw Bn("ERROR",{},502);return{id:l,nuevo:o.nuevo}},r=o=>(n.creado==="desconocido"&&(n.creado=!1),o),a=await i();if(a.nuevo)return r(a.id);try{await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${a.id}`,idempotencia:!1})}catch(o){if(!(o instanceof ln&&o.code==="NO_ENCONTRADO"))throw o instanceof ln&&o.code==="BORRADOR_CERRADO"&&(n.creado="desconocido"),o}let s=await i();if(!s.nuevo)throw Bn("REF_OCUPADA",{},409);return r(s.id)}async function xX(t,e,n,i,r,a,s,o,l,c){let f=t.http;c.paso="vivienda";let u=i.some(B=>B.some(D=>D.caja==="contract"||D.caja==="movimientos")),d=null;if(u){let B=await f.peticion({metodo:"GET",ruta:"/v1/lector"});B?.modo==="navegador"&&typeof B.parser=="string"&&Array.isArray(B.conceptos)&&(d={parser:B.parser,conceptos:B.conceptos})}let h=i.some(B=>B.length>0),p=jD(t.concurrenciaFicheros)??(h?await t.concurrenciaSugerida?.()??4:4),m=[];for(let B=0;B<e.viviendas.length;B++){let D=e.viviendas[B];c.paso="vivienda",c.vivienda=D.ref??B;let G=D.direccion.trim(),P=D.cp,F=await xr({v:1,direccion:G,cp:P,etiqueta:G.slice(0,200)},a),se=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/viviendas`,cuerpo:{...mX(F),orden:B}});if(typeof se?.viviendaId!="string")throw Bn("ERROR",{},502);let Z={entrada:D,viviendaId:se.viviendaId,subidos:[]};m.push(Z);let ge=i[B];Z.subidos=await wX(ge,p,async(he,xe)=>{let K={...c,paso:"fichero",caja:he.caja,fichero:xe};try{return await vX(t,l,o,r,B,Z,he,a,d,K)}catch(q){throw ef(q,K)}})}delete c.vivienda,c.paso="listo";let g=await f.peticion({metodo:"GET",ruta:`/v1/borradores/${r}`});if(g?.listo!==!0){let B=(g?.ficheros??[]).filter(D=>D.estado==="pendiente"||D.estado==="error");throw Bn("BORRADOR_NO_LISTO",{ficheros:B.map(D=>({estado:D.estado,motivo:D.motivo??null}))})}c.paso="paquete";let b=(t.hoy??pS)(),x=m.map((B,D)=>{let G=F=>B.subidos.filter(se=>se.caja===F),P=cD({contratos:G("contract").flatMap(F=>F.respuesta?.ok&&F.respuesta.tipo==="contrato"?[{ficheroId:F.ficheroId,file:F.file,sha256:F.sha,lectura:NP({ok:!0,contrato:F.respuesta.contrato})}]:[]),actas:G("acta").flatMap(F=>F.acta?[{ficheroId:F.ficheroId,file:F.file,resultado:F.acta}]:[]),tenantId:G("tenant_id").map(F=>F.file),otros:G("other").map(F=>F.file),movimientos:G("movimientos").map(F=>F.file),hoy:b});if(P.errores.length>0)throw Bn("VIVIENDA_INCOMPLETA",{vivienda:B.entrada.ref??D,motivos:P.errores.map(F=>({codigo:F.codigo,...F.ficheroId?{ficheroId:F.ficheroId}:{},...F.inicio?{inicio:F.inicio}:{},...F.faltan?{faltan:F.faltan}:{}}))});return P});for(let B of x)for(let D of B.actasCasadas)await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/ficheros/${D.ficheroId}/acta`,cuerpo:{contratoFicheroId:D.contratoFicheroId,fechaLlaves:D.fechaLlaves}});let w=await LP(),k=zP(),v=await HP(w.privadaPkcs8,k,r),y=[];for(let B=0;B<m.length;B++){let D=m[B],G=x[B],P=D.subidos.map(xe=>({...iD(xe.ficheroId,xe.file,xe.caja),ficheroId:xe.ficheroId,estado:xe.respuesta?.ok?"leido":"no_aplica",rc:xe.respuesta?.ok&&xe.respuesta.tipo==="contrato"?nD(xe.respuesta.contrato):null})),F=new Map(D.subidos.map(xe=>[xe.ficheroId,xe.idemKey])),se=lD({ficheros:G.ficheros,bloques:G.bloques,pre:P},xe=>F.get(xe));if(!se.ok)throw Bn("VIVIENDA_INCOMPLETA",{vivienda:D.entrada.ref??B,motivos:[{codigo:se.error.codigo}]});let Z=D.entrada.direccion.trim(),ge=rD(P),he=ge&&DS.test(ge)?ge:null;y.push({viviendaBorradorId:D.viviendaId,ref:D.entrada.ref??null,provincia:D.entrada.provincia,municipio:D.entrada.municipio??null,datos:{direccion:Z,cp:D.entrada.cp,etiqueta:Z.slice(0,200),...he?{cadastral_ref:he}:{}},paquete:se.paquete,porcentajeDeclarado:se.paquete?.porcentaje_titularidad??null,ficheros:D.subidos.map(xe=>({ficheroId:xe.ficheroId,idemKey:xe.idemKey,wrappedFileKey:xe.wrapped,lectura:xe.respuesta?oD(xe.respuesta):null}))})}let A=e.nombre?.trim(),I=await GP({borrador:{cliente:{email:n,ref:e.ref,datos:A?{nombre:A}:{}},viviendas:y},privadaAgencia:await t.descifrador.clavePrivadaSobres(),publicaAgencia:a,publicaEfimera:w.publicaSpki}),S=await rl({v:1,secretoEnlace:dd(k)},s);c.paso="lote";let T=(await f.peticion({metodo:"POST",ruta:"/v1/lotes",cuerpo:{operacion:"clientes.crear",modo:"ejecutar"}}))?.id;if(typeof T!="string")throw Bn("ERROR",{},502);c.loteId=T,c.indice=0;let _=await f.peticion({metodo:"POST",ruta:`/v1/lotes/${T}/elementos`,cuerpo:{elementos:[{datos:{ref:e.ref,borrador:r,lote:I,efimera:{cipherB64:un(v.cipher),ivB64:un(v.iv)},sobreEnlace:S}}]}});if(_?.aceptados!==1){let B=_?.rechazados?.[0];throw Bn(B?.code??"ENTRADA_INVALIDA",{errores:B?.errores??null})}c.creado="desconocido",await f.peticion({metodo:"POST",ruta:`/v1/lotes/${T}/cerrar`});let E=await SX(t,T,o);if(E.estado==="error"){let B=E.error?.code;throw c.creado=B==="EN_CURSO"||B==="ESTADO_CAMBIADO"?"desconocido":!1,Bn(E.error?.code??"ERROR",{...E.error?.campos?{campos:E.error.campos}:{}})}let O=E.id??(typeof E.datos?.client_id=="string"?E.datos.client_id:null);if(typeof O!="string")throw Bn("ERROR",{},502);if(c.clientId=O,E.estado==="creado"&&(c.creado=!0),c.paso="enlace",E.estado==="creado"){let B=E.datos?.correo==="enviado"?"enviado":"no_enviado",D=await SD(t,O,k,null);return{estado:"creado",clientId:O,enlace:D,correo:B,...E.datos?.motivo==="CUPO_DIARIO"||E.datos?.motivo==="ENTORNO_PRUEBAS"?{motivo:E.datos.motivo}:{}}}return c.creado=!0,ID(t,O,E.datos?.enlace==="activado",E.datos?.s_sellado??null)}async function wX(t,e,n){let i=new Array(t.length),r=new Map,a=0,s=async()=>{for(;r.size===0;){let o=a++;if(o>=t.length)return;try{i[o]=await n(t[o],o)}catch(l){r.set(o,l)}}};if(await Promise.all(Array.from({length:Math.min(e,t.length)},s)),r.size>0)throw r.get(Math.min(...r.keys()));return i}async function vX(t,e,n,i,r,a,s,o,l,c){let f=t.http,u=await uD(s.bytes),d=await OS(s.bytes,s.nombre,o),h=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${i}/ficheros`,cuerpo:{viviendaId:a.viviendaId,caja:s.caja,sizeBytes:d.blob.length,mime:s.mime,nombreCipherB64:un(d.nombre_cipher),nombreIvB64:un(d.nombre_iv),wrappedFileKeyB64:un(d.wrapped_file_key),sha256:u}});if(typeof h?.ficheroId!="string"||typeof h.uploadUrl!="string")throw Bn("ERROR",{},502);let p=h.ficheroId;await yX(e,h.uploadUrl,d.blob,n);let m={ficheroId:p,idemKey:globalThis.crypto.randomUUID(),caja:s.caja,file:new File([],s.nombre,{type:s.mime}),wrapped:d.wrapped_file_key,sha:u,respuesta:null,acta:null};if(s.caja==="acta")m.acta=await kX(t,s);else if(s.caja==="contract"||s.caja==="movimientos"){c.paso="leer";let g=await jX(t,n,i,p,s,l);if(!g.ok)throw Bn("FICHERO_NO_LEIDO",{vivienda:a.entrada.ref??r,caja:s.caja,motivo:g.motivo});m.respuesta=g,c.paso="cotejar",await AX(t,i,p,a,r,g)}return m}async function yX(t,e,n,i){let r=0;for(let a=0;a<3;a++){a>0&&await i(500*2**a);try{let s=await t(e,{method:"PUT",headers:{"content-type":"application/octet-stream","cache-control":"max-age=3600","x-upsert":"false"},body:n});if(s.ok)return;if(r=s.status,s.status<500&&s.status!==429)break}catch{r=0}}throw Bn("SUBIDA_FALLIDA",{status:r},502)}async function kX(t,e){let n={ok:!1,motivo:"acta_ilegible"};try{let i=await $1(e.bytes,e.mime,t.extraer?{extraer:t.extraer}:{}),r=JO(i);return r?r.lector.leer(i):n}catch{return n}}async function jX(t,e,n,i,r,a){let s=0,o=0;for(;;){let l;try{let c=await t.borradores.leerDetalle(n,i,r.bytes,{caja:r.caja,lector:a,mime:r.mime,...t.extraer?{extraer:t.extraer}:{}});l=pX(c.respuesta,c.local)}catch(c){if(c instanceof ln&&lX.has(c.code)&&++s<cX){await e(t.intervaloMs??1e3);continue}throw c}if(!l.ok&&l.transitorio&&++o<=fX){await e(t.intervaloMs??1e3);continue}return l}}async function AX(t,e,n,i,r,a){let s=sD(i.entrada.direccion,a.direccion);if(a.tipo==="movimiento"){if(await t.http.peticion({metodo:"POST",ruta:`/v1/borradores/${e}/ficheros/${n}/direccion`,cuerpo:{ok:s==="casa"}}),s!=="casa")throw Bn("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"movimientos",motivo:s});return}if(s==="distinta")throw Bn("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"contract",motivo:s})}async function SX(t,e,n){let i=t.intervaloMs??1e3,r=t.maxEsperaMs??uX,a=0;for(;;){let o=(await t.http.peticion({metodo:"GET",ruta:`/v1/lotes/${e}/resultados`,query:{limite:1}}))?.resultados?.[0];if(o&&o.estado!=="pendiente")return o;if(a>=r)throw Bn("TIEMPO_AGOTADO",{loteId:e},504);await n(i),a+=Math.max(i,1)}}async function IX(t,e){let n=e;if(!n||typeof n.wrapped_key_b64!="string"||typeof n.cipher_b64!="string"||typeof n.iv_b64!="string")throw Bn("ERROR",{},502);let i=await t.descifrador.abrirSobre(dD(n)),r=JSON.parse(new TextDecoder().decode(i)),a=typeof r.secretoEnlace=="string"?UP(r.secretoEnlace):null;if(!a)throw Bn("ERROR",{},502);return a}async function SD(t,e,n,i){let r;try{r=await t.http.peticion({metodo:"POST",ruta:`/v1/clientes/${e}/enlace`,idempotencia:!1})}catch(s){if(s instanceof ln&&s.code==="ENLACE_NO_REENVIABLE")return"activado";throw s}if(typeof r?.token!="string"||r.token==="")throw Bn("ERROR",{},502);let a=n??await IX(t,i??r.sobre);return VP({origin:t.origen,clientId:e,token:r.token,secreto:a})}async function ID(t,e,n,i){let r=n?"activado":await SD(t,e,null,i);return{estado:"ya_existia",clientId:e,enlace:r,correo:"no_enviado"}}function zS(t){let e={...t,concurrenciaSugerida:t.concurrenciaSugerida??sX(t.http)},n=e.dormir??(i=>new Promise(r=>setTimeout(r,i)));return{crear:(i,r)=>LS(e,i,r),crearVarios:(i,r)=>BS((a,s)=>LS(e,a,s),i,r,n)}}function CD(t){let e=ld.safeParse(t);return e.success?e.data.paquete:t}function TD(t,e){let n=ld.safeParse(t);if(!n.success)return e;let i=new Set(od(e)),r=Kc.safeParse(n.data.paquete),a=r.success?od(r.data):[],s=[...new Set([...n.data.alta.perdidos??[],...a.filter(l=>!i.has(l))])],o=Object.fromEntries(Object.entries(n.data.alta.documentos).filter(([l])=>i.has(l)));return{v:1,paquete:e,alta:{documentos:o,...s.length>0?{perdidos:s}:{}}}}var CX=t=>t,US=t=>({wrapped_key:zr(t.wrapped_key_b64),cipher:zr(t.cipher_b64),iv:zr(t.iv_b64)}),HS=t=>({wrapped_key:un(t.wrapped_key),cipher:un(t.cipher),iv:un(t.iv)});async function TX(t){return new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",CX(t)))}async function ED(t){let{pendiente:e,privada:n}=t,i=zr(e.publicaClienteB64),r=0,a={sobres:[],ficherosAusentes:[],ficherosIlegibles:[]},s=null;if(e.sobreCliente){let d,h=!1;try{d=await Yc(US(e.sobreCliente),n),h=!0}catch{a.sobres.push(e.sobreCliente.id),r++}if(h)try{let p=PS.parse(d);s=HS(await xr(p,i))}catch{r++}}let o=[];for(let d of e.sobreCliente?e.viviendas:[])try{let h=KP.parse(await Yc(US(d.sobre),n));o.push({property_id:d.propertyId,...HS(await xr(h,i))})}catch{r++}let l=[],c=[],f=[...e.ficheros].sort((d,h)=>+(h.caja==="foto")-+(d.caja==="foto"));for(let d of f)try{let h=zr(d.wrappedFileKeyB64),p=await ud(h,n,i);l.push({idem_key:d.idemKey,wrapped_file_key:un(p)})}catch{c.push(d.idemKey)}let u=[];for(let d of e.paquetes){let h;try{h=await Yc(US(d.sobre),n)}catch{a.sobres.push(d.sobreId),r++;continue}try{let p=cd(t.desenvolverPaquete?t.desenvolverPaquete(h):h);if(!p.ok){r++;continue}let m=TD(h,p.paquete);u.push({property_id:d.propertyId,...HS(await xr(m,i))})}catch{r++}}return{lote:{huella_publica:un(await TX(i)),perfil:s,viviendas:o,paquetes:u,documentos:l},fallidos:c,sobresIlegibles:r,permanentes:a}}var EX=20;function _D(t,e=EX){if(t.documentos.length<=e)return[t];let n=[];for(let i=0;i<t.documentos.length;i+=e){let r=t.documentos.slice(i,i+e),s=i+e>=t.documentos.length?t.paquetes:[];n.push(i===0?{...t,paquetes:s,documentos:r}:{huella_publica:t.huella_publica,perfil:null,viviendas:[],paquetes:s,documentos:r})}return n}function qD(t,e=200){let n=[...t.sobres],i=[...t.ficherosAusentes],r=[...t.ficherosIlegibles],a=[];for(;n.length+i.length+r.length>0;){let s=n.splice(0,e),o=i.splice(0,e),l=r.splice(0,e-o.length);a.push({sobres:s,ficherosAusentes:o,ficherosIlegibles:l})}return a}function VS(t,e,n,i){if(!(t instanceof Map))return[];let r=[];for(let a of e){let s=t.get(a);if(s===void 0)continue;let o=Date.parse(s);Number.isNaN(o)||n.getTime()-o>=i&&r.push(a)}return r}function RD(t,e){return t.documentos>0||(t.paquetes??0)>0||e?"progreso":"sin-progreso"}async function OD(t){let e=0,n=0;for(let i=0;i<50;i++){let r=await t.leerPendientes();if(!r)break;let a=r.filter(s=>(t.intentos.get(s.clienteId)??0)<t.maxIntentos);if(a.length===0)break;for(let s of a){t.intentos.set(s.clienteId,(t.intentos.get(s.clienteId)??0)+1),n++;let o="fallo";try{o=await t.entregar(s)}catch{o="fallo"}o==="progreso"&&(e++,t.intentos.delete(s.clienteId))}}return{progreso:e,intentados:n}}var rb=new Set([401,403]),_X=3,qX=new Set(["LOTE_ESTADO","NO_ENCONTRADO","PRECONDICION_FALLIDA"]),GS=t=>t instanceof ln&&qX.has(t.code),RX=t=>({clienteId:t.cliente_id,publicaClienteB64:t.publica_cliente_b64,sobreCliente:t.sobre_cliente,viviendas:t.viviendas.map(e=>({propertyId:e.property_id,sobre:e.sobre})),ficheros:t.ficheros.map(e=>({id:e.id,idemKey:e.idem_key,propertyId:e.property_id,wrappedFileKeyB64:e.wrapped_file_key_b64,...e.caja!==void 0?{caja:e.caja}:{}})),paquetes:t.paquetes.map(e=>({sobreId:e.sobre_id,propertyId:e.property_id,sobre:e.sobre}))});function WS(t){async function e(){let n=await t.descifrador.clavePrivadaSobres(),i=new Map,r=new Map,a=new Set,s=[],o=new Map,l=0,c=[],f={relojServidor:null,corte:null,faltoFecha:!1,alInicio:null},u=y=>{let A=Date.parse(y.get("date")??"");if(Number.isNaN(A)){f.faltoFecha=!0;return}(f.relojServidor===null||A>f.relojServidor)&&(f.relojServidor=A)},d=y=>{for(let[A,I]of Object.entries(y)){let S=i.get(A);(S===void 0||Date.parse(I)<Date.parse(S))&&i.set(A,I)}},h=y=>{let A=r.get(y);return A||r.set(y,A={ausentes:new Set,ilegibles:new Set}),A},p=y=>y instanceof ln?y.code:"ERROR";function m(y,A){if(A instanceof ln&&rb.has(A.status)){f.corte??=A;return}let I=p(A);s.some(S=>S.cliente_id===y&&S.code===I)||s.push({cliente_id:y,code:I})}async function g(y){if(f.corte)return"fallo";let A;try{A=await ED({pendiente:y,privada:n,desenvolverPaquete:CD})}catch(_){return m(y.clienteId,_),"fallo"}if(o.set(y.clienteId,Math.max(o.get(y.clienteId)??0,A.sobresIlegibles)),!(A.lote.perfil!==null||A.lote.viviendas.length>0||A.lote.paquetes.length>0||A.lote.documentos.length>0))return"sin-progreso";let S=0,C=0,T=!1;for(let[_,E]of _D(A.lote).entries()){let O;try{O=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/entregas",cuerpo:{cliente_id:y.clienteId,lote:E},idempotencia:!0,alResponder:u})}catch(D){return GS(D)||m(y.clienteId,D),S>0||C>0||T?"progreso":"fallo"}d(O.observaciones??{});let B=h(y.clienteId);for(let D of O.permanentes?.ficheros_ausentes??[])B.ausentes.add(D);for(let D of O.permanentes?.ficheros_ilegibles??[])B.ilegibles.add(D);S+=O.documentos,C+=O.paquetes,_===0&&E.perfil!==null&&(T=!0)}return RD({documentos:S,viviendas:0,paquetes:C},T)}let{progreso:b}=await OD({leerPendientes:async()=>{if(f.corte)return null;let y;try{y=await t.http.peticion({metodo:"GET",ruta:"/v1/mantenimiento",alResponder:u})}catch(A){if(f.alInicio===null||A instanceof ln&&rb.has(A.status))throw A;return m("",A),null}return l=y.ventana_olvido_ms,d(y.observaciones??{}),f.alInicio===null&&(f.alInicio=new Set(Object.keys(y.observaciones??{})),c=y.idos_con_fallidos??[]),y.pendientes.map(RX)},entregar:g,intentos:new Map,maxIntentos:_X});if(f.corte)throw f.corte;let x=0,w=f.relojServidor===null||f.faltoFecha?null:new Date(f.relojServidor),k=y=>f.alInicio?.has(y)===!0&&!a.has(y);for(let[y,A]of w?r:[]){let I={sobres:[],ficherosAusentes:VS(i,[...A.ausentes].filter(k),w,l),ficherosIlegibles:VS(i,[...A.ilegibles].filter(k),w,l)};for(let S of qD(I))try{let C=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:S.sobres,ficheros_ausentes:S.ficherosAusentes,ficheros_ilegibles:S.ficherosIlegibles}});for(let T of[...S.sobres,...S.ficherosAusentes,...S.ficherosIlegibles])a.add(T);x+=C.marcados.sobres+C.marcados.ficheros}catch(C){if(C instanceof ln&&rb.has(C.status))throw C;GS(C)||m(y,C)}}for(let y of c)try{await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:[],ficheros_ausentes:[],ficheros_ilegibles:[]}})}catch(A){if(A instanceof ln&&rb.has(A.status))throw A;GS(A)||m(y,A)}let v=[...o.values()].reduce((y,A)=>y+A,0);return{entregadas:b,imposibles:x,errores:s,sobresSinAbrir:v,relojServidor:f.relojServidor!==null&&!f.faltoFecha}}return{ejecutar:e}}var OX=["cliente.activado","cliente.ido","lote.terminado","credencial.caduca_pronto","mantenimiento.pendiente"],md=t=>new ln(422,"ENTRADA_INVALIDA",{code:"ENTRADA_INVALIDA",campo:t}),PX=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Bi=(t,e)=>{if(typeof t!="string"||!PX.test(t))throw md(e);return t};function PD(t){let e=String(t).trim();return e==="*"||e.startsWith('"')?e:`"v${e.replace(/^v/,"")}"`}function KS(t){let{http:e}=t,n=c=>({cursor:c.cursor,limite:c.limite,estado:c.estado,cambiado_desde:c.cambiado_desde,incluir:c.incluir});async function i(c={}){return e.peticion({metodo:"GET",ruta:"/v1/clientes",query:n(c)})}async function*r(c={}){let f;for(;;){let u=await i({...c,cursor:f});if(u.clientes.length===0||(yield*u.clientes,u.siguiente===null||u.siguiente===void 0))return;f=u.siguiente}}let a=async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/clientes/${Bi(c,"clienteId")}`,query:{incluir:f.incluir}});function s(c){let f=c?.ifMatch;if(typeof f!="string"&&typeof f!="number"||String(f).trim()==="")throw md("ifMatch");return PD(f)}async function o(c,f,u){Bi(c,"clienteId");let d=s(u),h=await a(c),p={};if(f.ref!==void 0){if(f.ref!==null&&!is(f.ref))throw md("ref");p.ref=f.ref}f.renovacion!==void 0&&(p.renovacion=f.renovacion);let m=h.estado==="invitado",g=[];for(let[x,w]of(f.viviendas??[]).entries()){let k=y=>md(`viviendas[${x}].${y}`),v={propertyId:Bi(w.vivienda,`viviendas[${x}].vivienda`)};if(w.ref!==void 0){if(w.ref!==null&&!is(w.ref))throw k("ref");v.ref=w.ref}if(w.renovacion!==void 0&&(v.renovacion=w.renovacion),w.direccion!==void 0||w.cp!==void 0){let y=w.direccion?.trim()??"",A=w.cp?.trim()??"";if(!m||y===""||y.length>300)throw k("direccion");if(!/^\d{5}$/.test(A))throw k("cp");let I=PP(A);if(!I)throw new ln(422,"PROVINCIA_INVALIDA",{code:"PROVINCIA_INVALIDA",campo:`viviendas[${x}].cp`});if(v.provincia=I.code,w.municipio===void 0||w.municipio!==null&&(!/^\d{5}$/.test(w.municipio)||!w.municipio.startsWith(I.code)))throw k("municipio");v.municipio=w.municipio,v.sobre=await rl(fD(y,A),await t.descifrador.publicaAgenciaSpki())}else w.municipio!==void 0&&(v.municipio=w.municipio);g.push(v)}if(f.nombre!==void 0){let x=(f.nombre??"").trim();if(x.length>200)throw md("nombre");let w=await t.descifrador.publicaAgenciaSpki();m&&!h.desde_borrador&&(p.sobreCliente=await rl(x?{v:1,nombre:x}:{v:1},w)),p.copiaNombre=x?await rl({v:1,nombre:x},w):null}return g.length>0&&(p.viviendas=g),{ok:!0,version:(await e.peticion({metodo:"PATCH",ruta:`/v1/clientes/${c}`,cuerpo:p,cabeceras:{"if-match":d}}))?.version??null}}let l=c=>({ok:!0,version:c?.version??null});return{clientes:{listar:r,listarPagina:i,leer:a,editar:o,async desvincular(c,f){Bi(c,"clienteId");let u=await e.peticion({metodo:"POST",ruta:`/v1/clientes/${c}/desvincular`,cuerpo:{},cabeceras:{"if-match":s(f)}});return l(u)},async correo(c,f){return Bi(c,"clienteId"),l(await e.peticion({metodo:"PUT",ruta:`/v1/clientes/${c}/correo`,cuerpo:{correo:f}}))},async revocarEnlace(c){return Bi(c,"clienteId"),l(await e.peticion({metodo:"DELETE",ruta:`/v1/clientes/${c}/enlace`}))}},viviendas:{async listar(c){return(await e.peticion({metodo:"GET",ruta:`/v1/clientes/${Bi(c,"clienteId")}/viviendas`})).viviendas}},remitentes:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/remitentes"})).remitentes},anadir:c=>e.peticion({metodo:"POST",ruta:"/v1/remitentes",cuerpo:{correo:c}}),async quitar(c){return(await e.peticion({metodo:"POST",ruta:"/v1/remitentes/quitar",cuerpo:{correo:c}})).remitentes}},creditos:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/creditos"})},renovacion:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/renovacion"}),fijar:c=>e.peticion({metodo:"PUT",ruta:"/v1/renovacion",cuerpo:c})},webhooks:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/webhooks"})).webhooks},crear:c=>e.peticion({metodo:"POST",ruta:"/v1/webhooks",cuerpo:c}),borrar:async c=>e.peticion({metodo:"DELETE",ruta:`/v1/webhooks/${Bi(c,"webhookId")}`}),rotarSecreto:async c=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Bi(c,"webhookId")}/secreto`,cuerpo:{}}),entregas:async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/webhooks/${Bi(c,"webhookId")}/entregas`,query:{estado:f.estado,cursor:f.cursor,limite:f.limite}}),reenviar:async(c,f)=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Bi(c,"webhookId")}/entregas/${Bi(f,"entregaId")}/reenviar`,cuerpo:{}})}}}import{timingSafeEqual as NX}from"node:crypto";import{createHmac as DX,randomBytes as kse}from"node:crypto";var DD="whsec_";function ND(t){let e=`${t.id}.${t.timestamp}.${t.cuerpo}`,n=t.secretos.map(i=>{if(!i.startsWith(DD))throw new Error("Secreto de webhook sin prefijo whsec_");let r=Buffer.from(i.slice(DD.length),"base64");return"v1,"+DX("sha256",r).update(e).digest("base64")});return{"webhook-id":t.id,"webhook-timestamp":String(t.timestamp),"webhook-signature":n.join(" ")}}var MD=300,as=class extends Error{constructor(n){super(`Webhook no verificado: ${n}`);this.motivo=n;this.name="ErrorFirmaWebhook"}motivo};function XS(t,e){if(typeof t.get=="function")return t.get(e)??void 0;for(let[n,i]of Object.entries(t))if(n.toLowerCase()===e)return Array.isArray(i)?i.join(" "):i}function MX(t,e,n,i={}){let r=XS(e,"webhook-id"),a=XS(e,"webhook-timestamp"),s=XS(e,"webhook-signature");if(!r||!a||!s)throw new as("CABECERAS");if(!/^\d{1,12}$/.test(a))throw new as("TIMESTAMP");let o=Number(a),l=Math.floor((i.ahora??Date.now)()/1e3);if(Math.abs(l-o)>(i.toleranciaS??MD))throw new as("FUERA_DE_VENTANA");let c=typeof n=="string"?[n]:[...n];if(c.length===0)throw new as("SECRETO");let f=typeof t=="string"?t:new TextDecoder().decode(t),u;try{u=c.map(p=>ND({id:r,timestamp:o,cuerpo:f,secretos:[p]})["webhook-signature"])}catch{throw new as("SECRETO")}let d=s.split(/\s+/).filter(p=>p!==""),h=!1;for(let p of u){let m=Buffer.from(p);for(let g of d){let b=Buffer.from(g);b.length===m.length&&NX(b,m)&&(h=!0)}}if(!h)throw new as("FIRMA");return{id:r,timestamp:o}}function Rse(t){let e=sb({apiKey:t.apiKey,baseUrl:t.baseUrl,fetch:t.fetch}),n=IS(e),i=zS({http:e,borradores:n,descifrador:t.descifrador,fetch:t.fetch,origen:new URL(t.baseUrl??ab).origin,extraer:t.extraer,hoy:t.hoy,intervaloMs:t.intervaloMs,maxEsperaMs:t.maxEsperaMs,dormir:t.dormir,concurrenciaFicheros:t.concurrenciaFicheros}),r=WS({http:e,descifrador:t.descifrador}),a=KS({http:e,descifrador:t.descifrador});return{peticion:e.peticion,http:e,descifrador:t.descifrador,borradores:n,mantenimiento:r,clientes:{...i,...a.clientes},viviendas:a.viviendas,remitentes:a.remitentes,creditos:a.creditos,renovacion:a.renovacion,webhooks:a.webhooks}}export{pd as ErrorAlta,ln as ErrorApiSdk,il as ErrorClaveIntegracion,Hs as ErrorDeEntorno,as as ErrorFirmaWebhook,FS as FOTO_BYTES_OBJETIVO,hD as FOTO_CALIDAD,pD as FOTO_CALIDAD_2,nb as FOTO_LADO_MAX,OX as TIPOS_WEBHOOK,MD as TOLERANCIA_WEBHOOK_S,qP as TOPE_BYTES,$D as URL_BASE_SANDBOX,EK as abrirContenidoFichero,Yc as abrirJson,TK as abrirNombreFichero,NS as abrirSobreBytes,JS as admiteIdempotencia,zr as base64ToBytes,un as bytesToBase64,vD as clasificar,wD as codigoDe,gX as crearAlta,IS as crearBorradores,Rse as crearCliente,zS as crearClientes,KS as crearGestion,sb as crearHttp,WS as crearMantenimiento,BS as crearVarios,xD as descifradorDeClave,QK as descifradorDeFichero,ef as envolver,gd as esperaDeRetryAfter,PD as etiquetaIfMatch,MS as importarPrivadaPkcs8,bK as leerFicheroLocal,$S as prepararFoto,ud as reenvolverClave,OS as sellarFichero,xr as sellarJson,rl as sellarSobreB64,uD as sha256Hex,dD as sobreDeB64,MX as verificarWebhook};
185
+ `).map(e=>e.replace(/\s+/g," ").trim())}var bS={prefiltro(t){let e=fo(t),n=`${e.creator??""} ${e.producer??""}`;return/tecalis|cairo/i.test(n)},reconoce(t){return!/WOLO REALTECH/.test(t)||!/contrato\s+de\s+arrendamiento/i.test(t)||!sP(t).some(e=>rP.test(e))?!1:!Object.values(gS).some(e=>e.reconoce(t))}},CW=Object.freeze({wolo:bS,guay:Sp});function TW(t,e){if(e==null||e.trim()==="")return null;for(let n of Object.keys(t))if(Object.prototype.hasOwnProperty.call(t,n))try{if(t[n].reconoce(e))return n}catch{}return null}var oP=t=>TW(CW,t);var $n=t=>({ok:!1,motivo:t}),lP={enero:1,febrero:2,marzo:3,abril:4,mayo:5,junio:6,julio:7,agosto:8,septiembre:9,octubre:10,noviembre:11,diciembre:12},EW=Object.keys(lP).join("|"),cP=String.raw`(\d{1,2})\s+de\s+(${EW})\s+de\s+(\d{4})`;function fP(t,e,n){let i=new Date(Date.UTC(n,e-1,t));return i.getUTCFullYear()!==n||i.getUTCMonth()!==e-1||i.getUTCDate()!==t?null:`${String(n).padStart(4,"0")}-${String(e).padStart(2,"0")}-${String(t).padStart(2,"0")}`}function QO(t){let e=lP[H1(t[2].toLowerCase())];return e===void 0?null:fP(Number(t[1]),e,Number(t[3]))}var _W=new RegExp(String.raw`^En\s+[^,]+,\s*a\s+${cP}\.?$`,"i"),qW=/^Tecalis\b.*\b(?:Fecha|Date):\s*(\d{4})\//i,RW=/^---\s*p[aá]gina\s+\d+\s*---$/i,U1=/^-\s*\|\s*(.*)$/,ad=/^\d+\s*[aª]\.\s/i,V1=t=>t.replace(/\s+/g," ").trim(),eP=t=>H1(V1(t)).toLowerCase();function ia(t,e){let n=U1.exec(t);if(!n)return null;let i=new RegExp(String.raw`^${e}\s*:\s*(.*)$`,"i").exec(n[1]);return i?i[1].trim():null}var OW={un:1,una:1,uno:1,dos:2,tres:3,cuatro:4,cinco:5,seis:6,siete:7,ocho:8,nueve:9,diez:10,once:11,doce:12},z1=t=>!U1.test(t)&&/de la vivienda$/i.test(t);function PW(t,e){let n=t.length;for(let r=e+1;r<t.length;r++){let a=t[r];if(iP.test(a)||aP(a)||z1(a)||/^1\.\s*INTERVIENEN\b/i.test(a)){n=r;break}}let i=[];for(let r=e+1;r<n;r++){let a=ia(t[r],"Nombre");if(a===null){let s=ia(t[r],"DNI"),o=i[i.length-1];s!==null&&o&&o.nif===null&&s!==""&&(o.nif=s);continue}i.push({name:V1(a),nif:null,phone:null,email:null})}return i.filter(r=>r.name!=="")}function DW(t,e){let n=[];for(let i=e+1;i<t.length;i++){let r=t[i];if(IW.test(r)||/^(el |los )?propietarios?,?$/i.test(r)||aP(r)||ad.test(r))break;let a=ia(r,"Nombre");if(a!==null){n.push({name:V1(a),phone:null,email:null});continue}let s=n[n.length-1];if(!s)continue;let o=ia(r,"Tel[e\xE9]fono");o!==null&&o!==""&&(s.phone=o);let l=ia(r,"E-?mail");l!==null&&l!==""&&(s.email=l)}return n}function tP(t,e){let n=t.findIndex(r=>ad.test(r)&&e.test(r));if(n===-1)return null;let i=t.length;for(let r=n+1;r<t.length;r++)if(ad.test(t[r])){i=r;break}return t.slice(n,i).join(" ")}function NW(t){let e=t.findIndex(i=>/^(\d+\.\s*)?ESTIPULACIONES\b/i.test(i));if(e===-1)return null;let n=t.length;for(let i=e+1;i<t.length;i++)if(ad.test(t[i])){n=i;break}return t.slice(e+1,n).join(" ")}function MW(t){let e=new Map;for(let n of t.matchAll(/duraci[oó]n\s+de\s+(\d+|[a-zñ]+)\s+(a[nñ]os?|mes(?:es)?)\b/gi)){let i=H1(n[1].toLowerCase()),r=/^\d+$/.test(i)?Number(i):OW[i];if(r===void 0||r<1)return null;let a=/^a/i.test(n[2])?"anios":"meses";e.set(`${r}-${a}`,{n:r,unidad:a})}return e.size!==1?null:[...e.values()][0]}function FW(t,e){let[n,i,r]=t.split("-").map(Number),a=i-1+(e.unidad==="anios"?e.n*12:e.n),s=n+Math.floor(a/12),o=a%12+1;return fP(r,o,s)}function $W(t){let e=[];for(let n of t.matchAll(/(?<![\d.,])(?<!\d\s)(\d{1,3}(?:\.\d{3})+|\d+)(?:,(\d{1,2}))?(?!\d)\s*(?:€|euros?\b)/gi)){let i=+`${n[1].replace(/\./g,"")}.${n[2]??"0"}`,r=t.slice(0,n.index),a=r.lastIndexOf(". "),s=r.slice(a===-1?0:a+2).slice(-40),o=t.slice((n.index??0)+n[0].length),l=o.search(/\.\s|\.$/),c=(l===-1?o:o.slice(0,l)).slice(0,40);e.push({valor:i,contexto:`${s} ${c}`})}return e}function BW(t){let e=sP(t),n=new Set,i=[],r=[];for(let P of e){if(P==="")continue;let F=_W.exec(P);if(F){let se=QO(F);if(se===null)return $n("fecha_inexistente");n.add(se);continue}if(/^Tecalis\b/i.test(P)){let se=qW.exec(P);if(!se)return $n("sello_otro_anio");i.push(Number(se[1]));continue}RW.test(P)||r.push(P)}if(n.size===0)return $n("firma_no_consta");if(n.size>1)return $n("firma_incoherente");let a=[...n][0];if(i.some(P=>P!==Number(a.slice(0,4))))return $n("sello_otro_anio");let s=[];r.forEach((P,F)=>{rP.test(P)&&s.push(F)});let o=s[0];if(o===void 0)return $n("sin_inquilinos");let l=PW(r,o);if(l.length===0)return $n("sin_inquilinos");let c=[];r.some(P=>iP.test(P))&&c.push("avalistas_excluidos"),l.length>4&&c.push("mas_de_4_inquilinos");let f=r.findIndex((P,F)=>F>o&&AW.test(P)),u=f===-1?[]:DW(r,f),d=new Set;for(let P of l){let F=u.findIndex((se,Z)=>!d.has(Z)&&eP(se.name)===eP(P.name));F!==-1&&(d.add(F),P.phone=u[F].phone,P.email=u[F].email)}let h=u.filter((P,F)=>!d.has(F)&&(P.phone!==null||P.email!==null));if(h.length>0){let P=l.length===1?l[0]:null;if(P)for(let F of h)P.phone===null&&(P.phone=F.phone),P.email===null&&(P.email=F.email);else c.push("telefono_sin_atribuir")}let p=tP(r,/Duraci[oó]n del contrato/i)??NW(r);if(p===null)return $n("sin_duracion");let m=new Set;for(let P of p.matchAll(new RegExp(String.raw`fecha de inicio[^.]{0,80}?\bel\s+${cP}`,"gi")))m.add(QO(P));if(m.size===0||m.size>1)return $n("sin_inicio");let g=[...m][0]??null;if(g===null)return $n("fecha_inexistente");let b=MW(p);if(b===null)return $n("sin_duracion");let x=FW(g,b);if(x===null)return $n("fin_no_calculable");c.push("fin_calculado_por_duracion");let w=tP(r,/\bRenta\b/i);if(w===null)return $n("sin_renta");let k=$W(w);if(k.length===0)return $n("sin_renta");if(new Set(k.map(P=>P.valor)).size>1)return $n("renta_ambigua");let v=k.map(P=>P.contexto).join(" ");if(/anual|al a[nñ]o|por a[nñ]o|\/\s*a[nñ]o/i.test(v))return $n("renta_no_mensual");let y=P=>{let F=[ia(r[P],"Direcci[o\xF3]n")];for(let se=P+1;se<r.length&&F.length<3;se++){let Z=r[se];if(U1.test(Z)||ad.test(Z)||/^1\.\s/.test(Z))break;F.push(Z)}return V1(F.join(" "))},A=P=>P>0&&z1(r[P-1])?y(P):null,I=null,S=r.findIndex(P=>ia(P,"Referencia Catastral")!==null);if(S!==-1)for(let P=S-1;P>=0;P--){let F=r[P];if(z1(F))break;if(U1.test(F)){ia(F,"Direcci[o\xF3]n")!==null&&(I=A(P));break}}else{let P=r.findIndex(F=>z1(F));P!==-1&&ia(r[P+1]??"","Direcci[o\xF3]n")!==null&&(I=y(P+1))}let C=[];for(let P of r){let F=ia(P,"Referencia Catastral");F!==null&&F!==""&&C.push(F)}let T=P=>P.replace(/[\s-]/g,"").toUpperCase(),_=[...new Set(C.map(T))],E=S!==-1?ia(r[S],"Referencia Catastral"):null,O=null;E!==null&&E!==""&&(_.length===1||_.length>1&&I!==null)&&(O=E);let B={tenants:l.map(P=>({name:P.name,nif:P.nif,phone:P.phone,email:P.email})),contract_date:a,start_date:g,end_date:x,monthly_rent:k[0].valor,confidence:null,warning_codes:c,cadastral_refs:C,property_address:I},G={...kp(JSON.stringify(B)),cadastral_ref_vivienda:ru([O])[0]??null};return G.tenants.length===0?$n("sin_inquilinos"):{ok:!0,contrato:G}}var LW={prefiltro:t=>bS.prefiltro(t),reconoce:t=>bS.reconoce(t),leer:BW},nP=Object.freeze({wolo:LW,guay:s_});function uP(t){try{if(t==null||t.trim()==="")return $n("contrato_no_reconocido");for(let e of Object.keys(nP)){let n=nP[e];if(n.reconoce(t))return n.leer(t)}return $n("contrato_no_reconocido")}catch{return $n("error_interno")}}var zW="wolo-contrato@1";var ji=(t,e=!1)=>({ok:!1,motivo:t,transitorio:e}),UW=t=>[t.tipo,t.categoria,Math.round(t.importe*100),t.fecha,t.devengo].join("|");async function xS(t){try{let e=await t.texto(t.buf,t.mime);return e==null||e.trim()===""?ji("sin_texto",!0):t.caja==="contract"?HW(e):VW(t,e)}catch{return ji(t.caja==="contract"?"error_interno":"lector_fallo")}}function HW(t){let e=uP(t);if(!e.ok)return ji(e.motivo);let n=e.contrato;return{ok:!0,tipo:"contrato",contrato:n,huella:{inicio:n.start_date,fin:n.end_date,firma:n.contract_date,renta:n.monthly_rent,nInquilinos:n.tenants.length,parser:oP(t)??"wolo",version:zW},direccion:n.property_address}}function VW(t,e){if(!t.lector)return ji("lector_fallo");let n=t.lector.parser,i=Object.prototype.hasOwnProperty.call(t.lectores,n)?t.lectores[n]:void 0;if(!i||i.reconoce(e)===null)return ji("lector_fallo");if(KO(t.lector,t.lectores,e))return ji("resumen_anual");let r=i.leer(e);if(!r.ok)return ji("lector_fallo");if(r.tipo==="resumen")return ji("resumen_anual");if(r.filas.length===0)return ji("lector_fallo");let a=new Set(t.lector.conceptos);if(r.conceptos.some(d=>!a.has(d)))return ji("concepto_no_certificado");let s=z2(r,null);if(s.length!==r.filas.length)return ji("lector_fallo");let o=r.filas.map((d,h)=>({tipo:d.tipo,categoria:d.category_code,importe:d.importe,fecha:d.fecha,devengo:s[h].date,periodo_desde:d.periodo_desde,periodo_hasta:d.periodo_hasta,pagina:r.detalle[h]?.pagina??null})),l=r.detalle.map(d=>typeof d?.rotulo=="string"?d.rotulo.slice(0,200):""),c=o.filter(d=>F1(t.ventana,d.devengo)),f=o.flatMap((d,h)=>F1(t.ventana,d.devengo)?[l[h]??""]:[]);if(c.length===0)return ji("fuera_de_ventana");let u=null;try{u=i.direccion(e)}catch{u=null}return{ok:!0,tipo:"movimiento",filas:c,huella:c.map(UW).sort(),parser:n,version:t.versiones[n]??n,direccion:u,conceptos:[...r.conceptos],aRevision:r.aRevision,emision:r.emision??null,filasFuera:o.length-c.length,rotulos:f}}var dP=["alias","address_street","address_postal","cadastral_ref"],hP=["full_name","nif","contact_phone"];var wS=2,vS=1,Wc=40,aa={contract:5,tenant_id:8,other:20,acta:1,movimientos:Wc},W1=5,K1=10,pP=["contract","tenant_id","other","movimientos"],G1={nombre:200,nif:20,telefono:30,email:254},mP=t=>Math.abs(Math.round(t*100)-t*100)<1e-6;function WW(t){let[e,n,i]=t.split("-").map(Number),r=new Date(Date.UTC(e,n-1,i));return r.getUTCFullYear()===e&&r.getUTCMonth()===n-1&&r.getUTCDate()===i}var tl=me.string().regex(/^\d{4}-\d{2}-\d{2}$/).refine(WW,"fecha imposible"),gP=me.object({nombre:me.string().trim().min(1).max(G1.nombre),nif:me.string().trim().min(1).max(G1.nif).optional(),email:me.string().trim().email().max(G1.email).optional(),telefono:me.string().trim().min(1).max(G1.telefono).optional()}).strict(),bP=me.number().positive().max(1e5).refine(mP,"como mucho 2 decimales"),rs=me.string().uuid(),xP=me.number().gt(0).max(100).refine(mP,"como mucho 2 decimales").optional(),KW=me.object({inicio:tl,fin:tl,fecha_firma:tl.optional(),renta_mensual:bP,inquilinos:me.array(gP).min(1).max(4)}).strict(),XW=me.object({v:me.literal(vS),contrato:KW.optional(),porcentaje_titularidad:xP,ficheros:me.object({contract:me.array(rs).max(aa.contract),tenant_id:me.array(rs).max(aa.tenant_id),other:me.array(rs).max(aa.other),movimientos:me.array(rs).max(aa.movimientos)}).strict()}).strict(),YW=me.object({inicio:tl,fin_pactado:tl,fin_real:tl.optional(),fecha_firma:tl.optional(),renta_mensual:bP,inquilinos:me.array(gP).min(1).max(4),ficheros:me.object({contract:me.array(rs).max(aa.contract),tenant_id:me.array(rs).max(aa.tenant_id),other:me.array(rs).max(aa.other),acta:me.array(rs).max(W1)}).strict()}).strict(),ZW=me.object({v:me.literal(wS),porcentaje_titularidad:xP,contratos:me.array(YW).min(1),ficheros:me.object({movimientos:me.array(rs).max(aa.movimientos)}).strict()}).strict(),Kc=me.union([XW,ZW]);function sd(t){if(t.v===2)return{v:2,porcentaje:t.porcentaje_titularidad??null,movimientos:[...t.ficheros.movimientos],contratos:t.contratos.map(n=>({inicio:n.inicio,finPactado:n.fin_pactado,finReal:n.fin_real??null,fechaFirma:n.fecha_firma??null,rentaMensual:n.renta_mensual,inquilinos:n.inquilinos,ficheros:{contract:[...n.ficheros.contract],tenant_id:[...n.ficheros.tenant_id],other:[...n.ficheros.other],acta:[...n.ficheros.acta]}}))};let e=t.contrato;return{v:1,porcentaje:t.porcentaje_titularidad??null,movimientos:[...t.ficheros.movimientos],contratos:e?[{inicio:e.inicio,finPactado:e.fin,finReal:null,fechaFirma:e.fecha_firma??null,rentaMensual:e.renta_mensual,inquilinos:e.inquilinos,ficheros:{contract:[...t.ficheros.contract],tenant_id:[...t.ficheros.tenant_id],other:[...t.ficheros.other],acta:[]}}]:[]}}function JW(t){return t.v!==1||t.contrato?{contract:[],tenant_id:[],other:[]}:{contract:[...t.ficheros.contract],tenant_id:[...t.ficheros.tenant_id],other:[...t.ficheros.other]}}function QW(t){let e=JW(t);return[...e.contract,...e.tenant_id,...e.other]}function od(t){let e=sd(t);return[...e.contratos.flatMap(n=>[...n.ficheros.contract,...n.ficheros.tenant_id,...n.ficheros.other,...n.ficheros.acta]),...QW(t),...e.movimientos]}var nl=me.string().regex(/^\d{4}-\d{2}-\d{2}$/),eK=me.object({tipo:me.enum(["income","expense"]),categoria:me.string().min(1).max(40),importe:me.number(),fecha:nl,devengo:nl,periodo_desde:nl.nullable().optional(),periodo_hasta:nl.nullable().optional(),pagina:me.number().int().min(1).nullable().optional(),rotulo:me.string().max(200).optional()}).strict(),tK=me.discriminatedUnion("tipo",[me.object({tipo:me.literal("contrato"),huella:me.object({inicio:nl.nullable(),fin:nl.nullable(),firma:nl.nullable(),renta:me.number().nullable(),nInquilinos:me.number().int().min(0),parser:me.string().max(40),version:me.string().max(40)}).strict().nullable()}).strict(),me.object({tipo:me.literal("movimiento"),filas:me.array(eK).max(2e3),origen:me.literal("ia").optional()}).strict()]),nK=me.object({documentos:me.record(me.string().uuid(),tK),perdidos:me.array(me.string().uuid()).max(100).optional()}).strict(),ld=me.object({v:me.literal(1),paquete:Kc,alta:nK}).strict();function cd(t){let e=ld.safeParse(t);if(e.success){let o=cd(e.data.paquete);return o.ok?{ok:!0,paquete:o.paquete,alta:e.data.alta}:o}let n=Kc.safeParse(t);if(!n.success)return{ok:!1,error:"esquema",detalle:n.error.issues[0]?.path.join(".")};let i=n.data,r=sd(i);for(let o of r.contratos){if(o.finPactado<=o.inicio)return{ok:!1,error:"fin_antes_de_inicio"};if(o.finReal!==null&&o.finReal<o.inicio)return{ok:!1,error:"fin_antes_de_inicio"};if(o.fechaFirma&&o.fechaFirma>o.finPactado)return{ok:!1,error:"firma_despues_de_fin"}}let a=new Set,s=od(i);for(let o of s){if(a.has(o))return{ok:!1,error:"fichero_repetido",detalle:o};a.add(o)}return{ok:!0,paquete:i}}var rK=K1;var iK=me.string().email();function yS(t){let e=t.replace(/[\s€]/g,"");if(!e)return null;let n;if(e.includes(",")){if(!/^\d{1,3}(\.\d{3})*,\d+$|^\d+,\d+$/.test(e))return null;n=e.replace(/\./g,"").replace(",",".")}else if(/^\d{1,3}(\.\d{3})+$/.test(e))n=e.replace(/\./g,"");else if(/^\d+(\.\d+)?$/.test(e))n=e;else return null;let i=n.split(".")[1];if(i&&i.length>2)return null;let r=Number(n);return Number.isFinite(r)?r:null}function vP(t,e){return t.contrato!==null||e>0?!0:t.porcentaje===null?!1:yS(t.porcentaje)!==100}function aK(t){if(!t.inicio||!t.fin)return{ok:!1,error:{codigo:"fechas_obligatorias"}};let e=yS(t.renta);if(e===null||e<=0)return{ok:!1,error:{codigo:"renta"}};let n=[];for(let r=0;r<t.inquilinos.length;r++){let a=t.inquilinos[r],s=a.nombre.trim(),o=a.nif.trim(),l=a.email.trim(),c=a.telefono.trim();if(!(!s&&!o&&!l&&!c)){if(!s)return{ok:!1,error:{codigo:"inquilino_nombre",n:r+1}};if(l&&!iK.safeParse(l).success)return{ok:!1,error:{codigo:"inquilino_email",n:r+1}};n.push({nombre:s,...o&&{nif:o},...l&&{email:l},...c&&{telefono:c}})}}if(n.length===0)return{ok:!1,error:{codigo:"inquilino_nombre",n:1}};let i=t.firma.trim();return{ok:!0,contrato:{inicio:t.inicio,fin_pactado:t.fin,...i&&{fecha_firma:i},renta_mensual:e,inquilinos:n}}}function wP(t){if(t===null)return{ok:!0,valor:void 0};let e=yS(t);return e===null||e<=0||e>100?{ok:!1,error:{codigo:"porcentaje"}}:{ok:!0,valor:e!==100?e:void 0}}var sK=()=>({contract:[],tenant_id:[],other:[],acta:[]});function oK(t){for(let e of["contract","tenant_id","other"]){let n=aa[e];if(t[e].length>n)return{codigo:"caja_llena",caja:e,max:n}}return t.acta.length>W1?{codigo:"caja_llena",caja:"acta",max:W1}:null}function X1(t,e){for(let a of pP){let s=aa[a];if(e[a].length>s)return{ok:!1,error:{codigo:"caja_llena",caja:a,max:s}}}let n=[{contract:e.contract,tenant_id:e.tenant_id,other:e.other,acta:e.acta??[]},...e.masContratos??[]];for(let a of n){let s=oK(a);if(s)return{ok:!1,error:s}}let i={};if(t.contrato){let a=[t.contrato,...t.masContratos??[]];if(a.length>rK)return{ok:!1,error:{codigo:"datos"}};let s=[];for(let l=0;l<a.length;l++){let c=aK(a[l]);if(!c.ok)return c;let f=n[l]??sK();s.push({...c.contrato,ficheros:{contract:f.contract,tenant_id:f.tenant_id,other:f.other,acta:f.acta}})}let o=wP(t.porcentaje);if(!o.ok)return o;Object.assign(i,{v:wS,...o.valor!==void 0&&{porcentaje_titularidad:o.valor},contratos:s,ficheros:{movimientos:e.movimientos}})}else{let a=wP(t.porcentaje);if(!a.ok)return a;Object.assign(i,{v:vS,...a.valor!==void 0&&{porcentaje_titularidad:a.valor},ficheros:{contract:e.contract,tenant_id:e.tenant_id,other:e.other,movimientos:e.movimientos}})}let r=cd(i);return r.ok?{ok:!0,paquete:r.paquete}:r.error==="fin_antes_de_inicio"?{ok:!1,error:{codigo:"fin_antes_de_inicio"}}:r.error==="firma_despues_de_fin"?{ok:!1,error:{codigo:"firma_despues_de_fin"}}:{ok:!1,error:{codigo:"datos"}}}function Y1(t){return t.normalize("NFD").replace(/[̀-ͯ]/g,"").toUpperCase().replace(/[^A-Z0-9\s]/g," ").split(/\s+/).filter(e=>e.length>0)}function kS(t,e){let n=new Set(Y1(t)),i=new Set(Y1(e));if(n.size===0||i.size===0)return!1;let[r,a]=n.size<=i.size?[n,i]:[i,n],s=0;for(let o of Array.from(r))a.has(o)&&s++;return s===r.size&&s>=2}var lK="2023-05-26";function jS(t){return t<lK}function AS(t,e,n,i){let r=new Date(`${t}T00:00:00Z`).getTime(),a=e?new Date(`${e}T00:00:00Z`).getTime():Number.POSITIVE_INFINITY,s=new Date(`${n}T00:00:00Z`).getTime(),o=i?new Date(`${i}T00:00:00Z`).getTime():Number.POSITIVE_INFINITY;return r<=o&&s<=a}var yP="TRWAGMYFPDXBNJZSQVHLCKE";function SS(t){return t.trim().toUpperCase().replace(/[\s\-]/g,"")}function kP(t){let e=SS(t);if(!e)return!1;if(/^\d{8}[A-Z]$/.test(e)){let n=parseInt(e.slice(0,8),10);return e[8]===yP[n%23]}if(/^[XYZ]\d{7}[A-Z]$/.test(e)){let n=e[0],i={X:"0",Y:"1",Z:"2"}[n],r=parseInt(i+e.slice(1,8),10);return e[8]===yP[r%23]}if(/^[ABCDEFGHJKLMNPQRSUVW]\d{7}[A-Z0-9]$/.test(e)){let n=e.slice(1,8),i=0,r=0;for(let u=0;u<7;u++){let d=parseInt(n[u],10);if((u+1)%2===0)r+=d;else{let h=d*2;i+=Math.floor(h/10)+h%10}}let s=(10-(i+r)%10)%10,o="JABCDEFGHI"[s],l=e[8],c="NPQRSW",f="ABEH";return c.includes(e[0])?l===o:f.includes(e[0])?l===String(s):l===o||l===String(s)}return!1}var jP=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>{if(t==null)return;let e=t.trim();return e===""?void 0:e});function AP(t){let e=new Date(t);return Number.isNaN(e.getTime())?!1:!/^\d{4}-\d{2}-\d{2}$/.test(t)||e.toISOString().slice(0,10)===t}var wre=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>{if(!(t===void 0||t===""||t===null))return AP(t)?t:void 0}),vre=me.union([me.string(),me.null()]).optional().transform(t=>{if(t!==void 0)return t===null||t===""?null:t}).refine(t=>t==null||AP(t),{message:"Fecha no v\xE1lida"}),yre=me.union([me.string(),me.null()]).optional().transform(t=>{if(t===void 0)return;let e=(t??"").trim();return e===""?null:e}),kre=me.union([me.boolean(),me.literal(""),me.null()]).optional().transform(t=>{if(t!==void 0)return t===""||t===null?null:t}),jre=me.union([me.string(),me.null()]).optional().transform(t=>t===""||t===void 0||t===null?null:t).refine(t=>t===null||/^[0-9a-f-]{36}$/i.test(t),{message:"UUID inv\xE1lido"}),Are=me.union([me.string(),me.null()]).optional().transform(t=>t===void 0?void 0:t===""||t===null?null:t).refine(t=>t==null||/^[0-9a-f-]{36}$/i.test(t),{message:"UUID inv\xE1lido"});var Sre=me.union([me.string(),me.null(),me.undefined()]).optional().transform(t=>t===void 0?void 0:t===null||t===""?null:t),cK=jP.refine(t=>t===void 0||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t),{message:"Email no v\xE1lido"}),fK=jP.refine(t=>t===void 0||/^[0-9+\s().\-]+$/.test(t)&&(t.match(/\d/g)??[]).length>=6,{message:"Tel\xE9fono no v\xE1lido"});function uK(t){if(!t)return null;let e=SS(t).replace(/\./g,"");if(!e)return null;let n=/^(\d{1,7})([A-Z])$/.exec(e);n&&(e=n[1].padStart(8,"0")+n[2]);let i=/^([XYZ])(\d{1,6})([A-Z])$/.exec(e);return i&&(e=i[1]+i[2].padStart(7,"0")+i[3]),kP(e)?e:null}function SP(t){let e=new Set;for(let n of t){let i=uK(n);i&&e.add(i)}return e}function dK(t,e){if(t.size!==e.size)return!1;for(let n of t)if(!e.has(n))return!1;return!0}function IP(t,e){let n=SP(e.nifs),i=null;for(let r of t){if(r.deleted_at||(r.unit_id??null)!==(e.unit_id??null)||r.start_date!==e.start_date)continue;let a=SP(r.nifs);if(a.size>0&&n.size>0){if(dK(a,n))return{contrato:r,grado:"igual"};continue}i||(i=r)}return i?{contrato:i,grado:"probable"}:null}function hK(t,e){return jS(t)!==jS(e)||t.slice(0,4)!==e.slice(0,4)}var CP=t=>{let e=t?mS(t):"";return e===""?null:e};function Z1(t,e){if(t.fechaInicio!==e.inicio)return"no";let n=e.inquilinos.map(s=>CP(s.nif)),i=n.length>0&&n.every(s=>s!==null),r=new Set(n.filter(s=>s!==null)),a=!1;for(let s of t.inquilinos){let o=CP(s.dni),l=Y1(s.nombre).length,c=o!==null&&r.has(o),f=l>=2&&e.inquilinos.some((u,d)=>n[d]===null&&kS(s.nombre,u.nombre));if(c||f){a=!0;continue}if(o!==null&&i||l>=2&&!e.inquilinos.some(u=>kS(s.nombre,u.nombre)))return"no"}return a?"casa":"no"}var pK=t=>({inicio:t.inicio,inquilinos:t.inquilinos.map(e=>({nombre:e.nombre,nif:e.nif??null}))});function TP(t,e,n,i){let r=[],a=(p,m)=>r.push({motivo:p,contrato:m}),s=[];t.forEach((p,m)=>{let g=e.get(m)??[];g.length>1&&a("acta_de_mas",m),g.some(b=>!b.ok)&&a("acta_ilegible",m),g.length===1&&g[0].ok&&s.push({caja:m,acta:g[0].acta})});let o=new Map,l=new Map;for(let{caja:p,acta:m}of s){let g=t.flatMap((x,w)=>Z1(m,pK(x))==="casa"?[w]:[]);if(g.length!==1){a("acta_sin_contrato",p);continue}let b=g[0];if(l.set(b,(l.get(b)??0)+1),b!==p){a("acta_sin_contrato",p);continue}o.set(b,m)}for(let[p,m]of l)m>1&&a("acta_repetida",p);t.forEach((p,m)=>{let g=o.get(m);g&&(p.finReal!==null&&p.finReal!==g.fechaLlaves&&a("acta_fin_distinto",m),p.fechaFirma!==null&&hK(p.fechaFirma,g.fechaFirma)&&a("firma_distinta",m))});let c=t.map((p,m)=>{let g=o.get(m);return g?{fin:g.fechaLlaves,porActa:!0}:{fin:p.finReal,porActa:!1}}),f=t.map((p,m)=>m).sort((p,m)=>t[p].inicio.localeCompare(t[m].inicio)||p-m);f.slice(0,-1).forEach(p=>{o.has(p)||a("falta_acta",p)});let u=n.map(p=>({id:p.id,unit_id:null,start_date:p.start_date,end_date:p.end_date,agreed_end_date:null,contract_date:null,monthly_rent:null,nifs:[...p.nifs],nombres:[],telefonos:[],emails:[]})),d=t.map(p=>{let m={unit_id:null,start_date:p.inicio,nifs:p.inquilinos.map(g=>g.nif??""),nombres:[],telefonos:[],emails:[]};return IP(u,m)?.contrato??null});for(let p=0;p<f.length;p++)for(let m=p+1;m<f.length;m++){let g=f[p],b=f[m];!o.has(g)&&c[g].fin===null&&g!==f[f.length-1]||AS(t[g].inicio,c[g].fin,t[b].inicio,c[b].fin)&&a("solape",b)}let h=new Set(d.flatMap(p=>p?[p.id]:[]));return t.forEach((p,m)=>{n.some(x=>!h.has(x.id)&&AS(p.inicio,c[m].fin,x.start_date,x.end_date))&&a("solape",m);let b=d[m];b&&c[m].porActa&&b.end_date!==null&&b.end_date!==c[m].fin&&a("fin_existente_distinto",m)}),r.length>0?{ok:!1,motivos:r}:{ok:!0,contratos:f.map(p=>({...t[p],finEfectivo:c[p].fin,finPorActa:c[p].porActa,existenteId:d[p]?.id??null}))}}function EP(t,e,n){let i=sd(t).contratos;return{validacion:TP(i,e,[],n),inicios:i.map(r=>r.inicio)}}var Gre=[...dP,...hP];var cie=5*6e4,fie={anios:Array.from({length:101},(t,e)=>2e3+e),hastaMes:"9999-12",caducaAntesDe:null};function _P(t){return t.ok?t.tipo==="contrato"?{ok:!0,tipo:"contrato",huella:t.huella}:{ok:!0,tipo:"movimiento",filas:t.filas,parser:t.parser,version:t.version,conceptos:t.conceptos,aRevision:t.aRevision,emision:t.emision}:{ok:!1,motivo:t.motivo==="tope"?"lector_fallo":t.motivo,transitorio:t.transitorio}}var qP=4e6,gK={anios:Array.from({length:101},(t,e)=>2e3+e),hastaMes:"9999-12",caducaAntesDe:null},RP=t=>mK("sha256").update(t).digest("hex");async function OP(t,e){if(t.byteLength>qP)return{demasiadoGrande:!0};let n=null,i=await xS({buf:t,mime:e.mime??"application/pdf",caja:e.caja,ventana:e.ventana??gK,lector:e.lector,lectores:Tp,texto:async(s,o)=>{let l=await $1(s,o,e.extraer?{extraer:e.extraer}:{});return n=l,l},versiones:L2}),r=n,a=r!==null&&r.trim()!==""?RP(r):void 0;return{local:i,resultado:_P(i),textoSha256:a}}async function bK(t,e){let n=await OP(t,e);return"demasiadoGrande"in n?n:{resultado:n.resultado,textoSha256:n.textoSha256}}function IS(t,e={}){let n=e.lecturaEnServidor==="rechazar";async function i(r,a,s,o){let l=`/v1/borradores/${encodeURIComponent(r)}/ficheros/${encodeURIComponent(a)}/leer`,c=RP(s),f=await OP(s,o),u="demasiadoGrande"in f?{sha256:c,resultado:{ok:!1,motivo:"demasiado_grande",transitorio:!1}}:{sha256:c,...f.textoSha256?{textoSha256:f.textoSha256}:{},resultado:f.resultado};try{return{respuesta:await t.peticion({metodo:"POST",ruta:l,cuerpo:u}),local:"demasiadoGrande"in f?null:f.local}}catch(p){if(!(p instanceof ln)||p.code!=="AGENCIA_MODO_SERVIDOR"||n)throw p}let d=new FormData;return d.append("file",new Blob([s],{type:o.mime??"application/pdf"}),"fichero.pdf"),{respuesta:await t.peticion({metodo:"POST",ruta:l,cuerpoCrudo:d}),local:null}}return{leerDetalle:i,async leer(r,a,s,o){return(await i(r,a,s,o)).respuesta}}}var xK=[{code:"01",name:"\xC1lava"},{code:"02",name:"Albacete"},{code:"03",name:"Alicante"},{code:"04",name:"Almer\xEDa"},{code:"33",name:"Asturias"},{code:"05",name:"\xC1vila"},{code:"06",name:"Badajoz"},{code:"07",name:"Islas Baleares"},{code:"08",name:"Barcelona"},{code:"48",name:"Vizcaya"},{code:"09",name:"Burgos"},{code:"10",name:"C\xE1ceres"},{code:"11",name:"C\xE1diz"},{code:"39",name:"Cantabria"},{code:"12",name:"Castell\xF3n"},{code:"13",name:"Ciudad Real"},{code:"14",name:"C\xF3rdoba"},{code:"15",name:"A Coru\xF1a"},{code:"16",name:"Cuenca"},{code:"20",name:"Guip\xFAzcoa"},{code:"17",name:"Girona"},{code:"18",name:"Granada"},{code:"19",name:"Guadalajara"},{code:"21",name:"Huelva"},{code:"22",name:"Huesca"},{code:"23",name:"Ja\xE9n"},{code:"24",name:"Le\xF3n"},{code:"25",name:"Lleida"},{code:"27",name:"Lugo"},{code:"28",name:"Madrid"},{code:"29",name:"M\xE1laga"},{code:"30",name:"Murcia"},{code:"31",name:"Navarra"},{code:"32",name:"Ourense"},{code:"34",name:"Palencia"},{code:"35",name:"Las Palmas"},{code:"36",name:"Pontevedra"},{code:"26",name:"La Rioja"},{code:"37",name:"Salamanca"},{code:"38",name:"Santa Cruz de Tenerife"},{code:"40",name:"Segovia"},{code:"41",name:"Sevilla"},{code:"42",name:"Soria"},{code:"43",name:"Tarragona"},{code:"44",name:"Teruel"},{code:"45",name:"Toledo"},{code:"46",name:"Valencia"},{code:"47",name:"Valladolid"},{code:"49",name:"Zamora"},{code:"50",name:"Zaragoza"},{code:"51",name:"Ceuta"},{code:"52",name:"Melilla"}],wK=new Map(xK.map(t=>[t.code,t]));function fd(t){return wK.get(t)}function PP(t){if(/^\d{5}$/.test(t))return fd(t.slice(0,2))}var vK=/^[A-Za-z0-9._-]{1,40}$/;function is(t){return vK.test(t)}var Xc=me.string().regex(/^[A-Za-z0-9+/]+={0,2}$/).max(2e4),DP=me.string().refine(is),yK=me.string().regex(/^\d{2}$/).refine(t=>fd(t)!==void 0),J1=me.object({wrapped_key_b64:Xc,cipher_b64:Xc,iv_b64:Xc}).strict(),kK=["contract","tenant_id","other"],CS=[...kK,"acta","movimientos","foto"],TS=2*1024*1024,jK=(t,e,n)=>t==="foto"&&(e!=="image/jpeg"||n>TS),AK=me.object({caja:me.enum(CS),storage_path:me.string().min(1).max(300),wrapped_file_key:Xc,nombre_cipher:Xc,nombre_iv:Xc,mime:me.string().min(1).max(100),size_bytes:me.number().int().positive(),idem_key:me.string().uuid()}).strict().refine(t=>!jK(t.caja,t.mime,t.size_bytes),{message:"TOPE_CAJA",path:["caja"]}),SK=me.object({email:me.string().trim().email().max(254),ref:DP.optional(),copiaNombre:J1.optional()}).strict(),IK=me.object({ref:DP.optional(),provincia:yK,municipio:me.string().regex(/^\d{5}$/).nullish(),sobre:J1,ficheros:me.array(AK).max(25+Wc).default([]),paquete:J1.optional(),paqueteConContrato:me.boolean().optional(),paqueteContratos:me.number().int().min(1).max(K1).optional()}).strict().refine(t=>!t.ficheros.some(e=>e.caja==="movimientos")||t.paquete!==void 0,{message:"movimientos sin paquete",path:["ficheros"]}).refine(t=>t.paqueteContratos===void 0||t.paquete!==void 0,{message:"contratos sin paquete",path:["paqueteContratos"]}).refine(t=>!t.ficheros.some(e=>e.caja==="acta")||t.paquete!==void 0,{message:"acta sin paquete",path:["ficheros"]}).refine(t=>!t.paqueteConContrato||t.paquete!==void 0,{message:"contrato sin paquete",path:["paqueteConContrato"]}).refine(t=>t.municipio==null||t.municipio.startsWith(t.provincia),{message:"INE de otra provincia",path:["municipio"]}),Aie=me.object({cliente:SK,sobreCliente:J1,viviendas:me.array(IK).max(50)}).strict().refine(t=>{let e=t.viviendas.map(n=>n.ref).filter(n=>n!==void 0);return new Set(e).size===e.length},{message:"ref de vivienda repetida",path:["viviendas"]}).refine(t=>{let e=t.viviendas.flatMap(n=>n.ficheros.map(i=>i.idem_key));return new Set(e).size===e.length},{message:"idem_key repetida",path:["viviendas"]});function CK(t){return t.toFixed(2).replace(".",",")}function NP(t){if(!t.ok)return{ok:!1,motivo:"contrato_ilegible"};let e=t.contrato,n=[];e.start_date===null&&n.push("inicio"),e.end_date===null&&n.push("fin"),e.monthly_rent===null&&n.push("renta"),e.tenants.length===0&&n.push("inquilinos");let i=e.warning_codes.includes("mas_de_4_inquilinos");return n.length>0||i?{ok:!1,motivo:"contrato_incompleto",faltan:n,excedeInquilinos:i}:{ok:!0,finCalculado:e.warning_codes.includes("fin_calculado_por_duracion"),form:{inicio:e.start_date,fin:e.end_date,firma:e.contract_date??"",renta:CK(e.monthly_rent),inquilinos:e.tenants.map(r=>({nombre:r.name,nif:r.nif??"",email:r.email??"",telefono:r.phone??""}))}}}var Ta=()=>globalThis.crypto.subtle,Ai=t=>t;async function _S(t){return Ta().importKey("spki",Ai(t),{name:"RSA-OAEP",hash:"SHA-256"},!1,["encrypt"])}async function MP(){let t=globalThis.crypto.getRandomValues(new Uint8Array(32));return{key:await Ta().importKey("raw",Ai(t),"AES-GCM",!1,["encrypt"]),raw:t}}async function qS(t,e){return new Uint8Array(await Ta().encrypt({name:"RSA-OAEP"},e,Ai(t)))}async function ES(t,e){let n=globalThis.crypto.getRandomValues(new Uint8Array(12));return{cipher:new Uint8Array(await Ta().encrypt({name:"AES-GCM",iv:Ai(n)},e,Ai(t))),iv:n}}async function xr(t,e){let n=await _S(e),{key:i,raw:r}=await MP(),{cipher:a,iv:s}=await ES(new TextEncoder().encode(JSON.stringify(t)),i);return{wrapped_key:await qS(r,n),cipher:a,iv:s}}async function RS(t,e){let n=await Ta().decrypt({name:"RSA-OAEP"},e,Ai(t));return Ta().importKey("raw",n,"AES-GCM",!1,["decrypt"])}async function Yc(t,e){let n=await RS(t.wrapped_key,e),i=await Ta().decrypt({name:"AES-GCM",iv:Ai(t.iv)},n,Ai(t.cipher));return JSON.parse(new TextDecoder().decode(i))}async function OS(t,e,n){let i=await _S(n),{key:r,raw:a}=await MP(),s=await ES(t,r),o=await ES(new TextEncoder().encode(e),r),l=new Uint8Array(12+s.cipher.length);return l.set(s.iv,0),l.set(s.cipher,12),{blob:l,wrapped_file_key:await qS(a,i),nombre_cipher:o.cipher,nombre_iv:o.iv}}async function TK(t,e){let n=await RS(t.wrapped_file_key,e),i=await Ta().decrypt({name:"AES-GCM",iv:Ai(t.nombre_iv)},n,Ai(t.nombre_cipher));return new TextDecoder().decode(i)}async function EK(t,e,n){let i=await RS(e,n),r=await Ta().decrypt({name:"AES-GCM",iv:Ai(t.subarray(0,12))},i,Ai(t.subarray(12)));return new Uint8Array(r)}async function ud(t,e,n){let i=new Uint8Array(await Ta().decrypt({name:"RSA-OAEP"},e,Ai(t)));return qS(i,await _S(n))}function un(t){let e="";for(let n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return btoa(e)}function zr(t){let e=atob(t),n=new Uint8Array(e.length);for(let i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return n}function FP(t){let e="";for(let n=0;n<t.length;n++)e+=t[n].toString(16).padStart(2,"0");return e}async function $P(){let t=await crypto.subtle.generateKey({name:"RSA-OAEP",modulusLength:3072,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!0,["encrypt","decrypt"]);return{publicKeySpki:new Uint8Array(await crypto.subtle.exportKey("spki",t.publicKey)),privateKeyPkcs8:new Uint8Array(await crypto.subtle.exportKey("pkcs8",t.privateKey))}}async function BP(t,e){let n=await crypto.subtle.decrypt({name:"RSA-OAEP"},e,t);return crypto.subtle.importKey("raw",n,"AES-GCM",!1,["decrypt"])}var eb=()=>globalThis.crypto.subtle,Zc=t=>t,_K="agencia-paquete-v1",Q1=32,qK=12,RK={name:"RSA-OAEP",hash:"SHA-256"};function OK(t){return eb().importKey("pkcs8",Zc(t),RK,!1,["decrypt"])}async function LP(){let{publicKeySpki:t,privateKeyPkcs8:e}=await $P();return{publicaSpki:t,privada:await OK(e),privadaPkcs8:e}}function zP(){return globalThis.crypto.getRandomValues(new Uint8Array(Q1))}function dd(t){let e="";for(let n of t)e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function UP(t){if(!/^[A-Za-z0-9_-]+$/.test(t))return null;try{let e=t.replace(/-/g,"+").replace(/_/g,"/"),n=atob(e+"=".repeat((4-e.length%4)%4));if(n.length!==Q1)return null;let i=new Uint8Array(Q1);for(let r=0;r<Q1;r++)i[r]=n.charCodeAt(r);return dd(i)===t?i:null}catch{return null}}async function PK(t,e,n){let i=new TextEncoder,r=await eb().importKey("raw",Zc(t),"HKDF",!1,["deriveKey"]);return eb().deriveKey({name:"HKDF",hash:"SHA-256",salt:Zc(i.encode(e)),info:Zc(i.encode(_K))},r,{name:"AES-GCM",length:256},!1,[n])}async function HP(t,e,n){let i=await PK(e,n,"encrypt"),r=globalThis.crypto.getRandomValues(new Uint8Array(qK));return{cipher:new Uint8Array(await eb().encrypt({name:"AES-GCM",iv:Zc(r)},i,Zc(t))),iv:r}}var DK="/onboarding/agencia/entrar";function VP(t){return`${t.origin.replace(/\/+$/,"")}${DK}?c=${encodeURIComponent(t.clientId)}#t=${t.token}&k=${dd(t.secreto)}`}var Jc=t=>({wrapped_key_b64:un(t.wrapped_key),cipher_b64:un(t.cipher),iv_b64:un(t.iv)});async function NK(t){let{vivienda:e,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}=t,a={v:1,...e.datos},s={},o=[];for(let c of e.ficheros){let f=await ud(c.wrappedFileKey,n,r);o.push({ficheroId:c.ficheroId,idemKey:c.idemKey,wrappedFileKeyB64:un(f)}),c.lectura&&(s[c.idemKey]=c.lectura)}let l=e.paquete?{v:1,paquete:e.paquete,alta:{documentos:s}}:null;return{viviendaBorradorId:e.viviendaBorradorId,...e.ref?{ref:e.ref}:{},provincia:e.provincia,...e.municipio?{municipio:e.municipio}:{},sobreAgencia:Jc(await xr(a,i)),sobreEfimera:Jc(await xr(a,r)),paqueteEfimera:l?Jc(await xr(l,r)):null,...e.porcentajeDeclarado!=null?{porcentajeDeclarado:e.porcentajeDeclarado}:{},ficheros:o}}var MK={sellarViviendaParaEfimera:NK};async function GP(t){let{borrador:e,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}=t,a={v:1,...e.cliente.datos},s=e.cliente.datos.nombre,o=typeof s=="string"&&s.trim()!==""?s.trim():null,l={email:e.cliente.email,...e.cliente.ref?{ref:e.cliente.ref}:{},sobreAgencia:Jc(await xr(a,i)),sobreEfimera:Jc(await xr(a,r)),...o?{copiaNombre:Jc(await xr({v:1,nombre:o},i))}:{}},c=[];for(let f of e.viviendas)c.push(await MK.sellarViviendaParaEfimera({vivienda:f,privadaAgencia:n,publicaAgencia:i,publicaEfimera:r}));return{cliente:l,viviendas:c}}var WP=1,PS=me.object({v:me.literal(WP),nombre:me.string().trim().min(1).max(200).optional(),nif:me.string().trim().min(1).max(20).optional(),telefono:me.string().trim().min(1).max(30).optional()}).strict(),Gie=PS.extend({nombre:me.string().trim().min(1).max(200)}),DS=/^[0-9A-ZÑ]{20}$/,KP=me.object({v:me.literal(WP),direccion:me.string().trim().min(1).max(300),cp:me.string().regex(/^\d{5}$/),etiqueta:me.string().trim().min(1).max(200),cadastral_ref:me.string().regex(DS).optional().catch(void 0)}).strict();var hd=t=>({contrato:t.contrato,porcentaje:null,masContratos:t.masContratos.map(e=>e.datos)});var FK={CL:"calle",PS:"paseo",AV:"avenida",PZ:"plaza",CR:"carretera",RD:"ronda",TR:"traves\xEDa",GL:"glorieta",CM:"camino",AC:"acera",CJ:"callej\xF3n",UR:"urbanizaci\xF3n",PQ:"parque",BO:"barrio",LG:"lugar",PJ:"pasaje",CS:"costanilla",RM:"ramal",SD:"sendero",ES:"escalinata",TO:"torrente",VI:"v\xEDa",RU:"r\xFAa",RB:"rambla"},$K={CL:["calle","c","cl"],PS:["paseo","po","ps"],AV:["avenida","avda","av","avd"],PZ:["plaza","pza","pl","plza"],CR:["carretera","ctra","cr"],TR:["travesia","trav","tr"],RD:["ronda","rda"],GL:["glorieta","gta","gl"],CM:["camino","cmno","cm"]},BK={CL:["carrer"],PS:["passeig"],AV:["avinguda","avgda"],PZ:["placa","pla\xE7a","praza"],CR:["estrada"],TR:["travessia","travessera"],CM:["cami","cami\xF1o"],RU:["rua"],PJ:["passatge"]},LK=new Set(["RU","RB"]);function XP(t){let e={};for(let[n,i]of Object.entries(FK))!t&&LK.has(n)||(e[n.toLowerCase()]=n,e[i.normalize("NFD").replace(/[\u0300-\u036f]/g,"")]=n);for(let[n,i]of Object.entries($K))for(let r of i)e[r]=n;if(t)for(let[n,i]of Object.entries(BK))for(let r of i)e[r]=n;return e}var YP=XP(!1),Xie=XP(!0);var zK=new Set(["de","del","la","las","los","el"]),JP=new Set(["n","no","num","numero"]);function QP(t){return t.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[\u00ba\u00aa\u00b0]/g,"o").replace(/\./g,"").replace(/[^a-z0-9ñ]+/g," ").trim().split(" ").filter(Boolean)}function eD(t){let e=QP(t);for(;e.length>1&&JP.has(e[0]??"");)e.shift();return e[0]&&(e[0]=e[0].replace(/^(n|no|num|numero)(?=\d)/,"")),e.join("").replace(/^0+(?=\d)/,"")}function UK(t){return t.calle.trim()===""&&t.numero.trim()===""}function ZP(t){let e=QP(t);e=e.filter((a,s)=>!(JP.has(a)&&/^\d/.test(e[s+1]??"")));let n=YP[e[0]??""]??null;n&&(e=e.slice(1));let i=e.findIndex(a=>/^\d/.test(a)),r=(i===-1?e:e.slice(0,i)).filter(a=>!zK.has(a)).join(" ");return{sigla:n,nombre:r,numero:i===-1?"":eD(e[i])}}function tD(t,e){if(UK(t))return!1;let n=ZP(t.calle),i=t.numero.trim()!==""?eD(t.numero):n.numero,r=ZP(e);return n.nombre===""||i===""||r.numero===""||n.sigla!==null&&r.sigla!==null&&n.sigla!==r.sigla?!1:n.nombre===r.nombre&&i===r.numero}var nD=t=>{let e={direccion:t.property_address,todas:[...t.cadastral_refs],vivienda:t.cadastral_ref_vivienda??null};return e.direccion===null&&e.todas.length===0?null:e};function rD(t){let e=new Set;for(let n of t)n.caja==="contract"&&n.estado==="leido"&&n.rc?.vivienda&&e.add(n.rc.vivienda);return e.size===1?[...e][0]:null}var iD=(t,e,n)=>({id:t,file:e,caja:n,ficheroId:null,estado:"subiendo",motivo:null,rentas:0,gastos:0,filasFuera:0,rc:null});function aD(t){let e=[];for(let n of["contract","tenant_id","other"])for(let i of t.ficheros[n])e.push({file:i,caja:n,destino:0});for(let n of t.bloques.actaPrimero)e.push({file:n,caja:"acta",destino:0});t.bloques.masContratos.forEach((n,i)=>{for(let r of["contract","tenant_id","other","acta"])for(let a of n.ficheros[r])e.push({file:a,caja:r,destino:i+1})});for(let n of t.bloques.movimientos??[])e.push({file:n,caja:"movimientos",destino:0});return e}var sD=(t,e)=>e===null?"ilegible":tD({calle:t.trim(),numero:""},e)?"casa":"distinta";function oD(t){return t.ok?t.tipo==="contrato"?{tipo:"contrato",huella:t.huella??null}:t.origen==="ia"?{tipo:"movimiento",filas:t.filas,origen:"ia"}:{tipo:"movimiento",filas:t.filas}:null}function lD(t,e){let n=t.bloques.movimientos??[];if(!vP(hd(t.bloques),n.length))return{ok:!0,paquete:null};let i=new Map(t.pre.map(f=>[f.file,f])),r=()=>({contract:[],tenant_id:[],other:[],acta:[]}),a=[r(),...t.bloques.masContratos.map(r)],s=[];for(let{file:f,caja:u,destino:d}of aD(t)){if(u==="foto")continue;let h=i.get(f),p=h?.ficheroId?e(h.ficheroId):void 0;if(!p)return{ok:!1,error:{codigo:"fichero_subiendo"}};u==="movimientos"?s.push(p):a[d]?.[u].push(p)}let[o,...l]=a,c=X1(hd(t.bloques),{...o,movimientos:s,masContratos:l});return c.ok?{ok:!0,paquete:c.paquete}:c}var HK=t=>t.trim()===""?null:t;function cD(t){let e=[],n=!1,i=new Set,r=[];for(let g of t.contratos){if(g.sha256!==null){if(i.has(g.sha256)){e.push({codigo:"pdf_repetido",ficheroId:g.ficheroId});continue}i.add(g.sha256)}g.lectura.ok?r.push({c:g,form:g.lectura}):g.lectura.motivo==="contrato_ilegible"?(n=!0,e.push({codigo:"contrato_ilegible",ficheroId:g.ficheroId})):(n=!0,e.push({codigo:"contrato_incompleto",ficheroId:g.ficheroId,faltan:g.lectura.faltan,excedeInquilinos:g.lectura.excedeInquilinos}))}let a=r.map((g,b)=>({...g,i:b})).sort((g,b)=>g.form.form.inicio.localeCompare(b.form.form.inicio)||g.i-b.i),s=new Set;for(let g=1;g<a.length;g++){let b=a[g].form.form.inicio;b===a[g-1].form.form.inicio&&!s.has(b)&&(s.add(b),e.push({codigo:"inicio_repetido",inicio:b}))}let o=a.length,l=a.map(g=>({inicio:g.form.form.inicio,inquilinos:g.form.form.inquilinos.map(b=>({nombre:b.nombre,nif:HK(b.nif)}))})),c=a.map(()=>[]),f=[];for(let g of t.actas){if(!g.resultado.ok){e.push({codigo:"acta_ilegible",ficheroId:g.ficheroId});continue}let b=g.resultado.acta,x=l.flatMap((w,k)=>Z1(b,w)==="casa"?[k]:[]);x.length>=1?c[x[0]].push(g):f.push({a:g,inicio:b.fechaInicio})}if(!n)for(let g of f){let b=l.some(x=>x.inicio===g.inicio);e.push({codigo:b?"acta_sin_contrato":"quita_su_acta",ficheroId:g.a.ficheroId,inicio:g.inicio})}let u=()=>({contract:[],tenant_id:[],other:[],acta:[]}),d=a.map((g,b)=>({...u(),contract:[g.c.file],acta:c[b].map(x=>x.file)})),h={contract:[],tenant_id:[],other:[]};if(o===0)h.tenant_id=[...t.tenantId],h.other=[...t.otros];else{let g=d[o-1];g.tenant_id=[...t.tenantId],g.other=[...t.otros],h.contract=d[0].contract,h.tenant_id=d[0].tenant_id,h.other=d[0].other}let p={contrato:o>0?a[0].form.form:null,movimientos:t.movimientos.length>0?[...t.movimientos]:null,actaPrimero:o>0?d[0].acta:[],masContratos:d.slice(1).map((g,b)=>({datos:a[b+1].form.form,ficheros:{contract:g.contract,tenant_id:g.tenant_id,other:g.other,acta:g.acta}}))};if(o>0&&!n&&s.size===0){let g=()=>globalThis.crypto.randomUUID(),b=v=>({contract:v.contract.map(g),tenant_id:v.tenant_id.map(g),other:v.other.map(g),acta:v.acta.map(g)}),[x,...w]=d.map(b),k=X1(hd(p),{...x,movimientos:t.movimientos.map(g),masContratos:w});if(!k.ok)e.push({codigo:"construir",construir:k.error.codigo});else if(k.paquete.v===2){let v=new Map;c.forEach((A,I)=>{A.length>0&&v.set(I,A.map(S=>S.resultado))});let y=EP(k.paquete,v,t.hoy);if(!y.validacion.ok)for(let A of y.validacion.motivos)e.push({codigo:A.motivo,inicio:A.contrato!==null?y.inicios[A.contrato]??null:null})}}let m=[];return c.forEach((g,b)=>{let x=g[0];g.length===1&&x&&x.resultado.ok&&Z1(x.resultado.acta,l[b])==="casa"&&m.push({ficheroId:x.ficheroId,contratoFicheroId:a[b].c.ficheroId,fechaLlaves:x.resultado.acta.fechaLlaves})}),{bloques:p,ficheros:h,errores:e,contratosLeidos:o,actasCasadas:m,contratosOrdenados:a.map(g=>({ficheroId:g.c.ficheroId,inicio:g.form.form.inicio,finCalculado:g.form.finCalculado}))}}async function rl(t,e){let n=await xr(t,zr(e));return{wrapped_key_b64:un(n.wrapped_key),cipher_b64:un(n.cipher),iv_b64:un(n.iv)}}var fD=(t,e)=>({v:1,direccion:t,cp:e,etiqueta:t.slice(0,200)});var tb=t=>t;async function NS(t,e){let n=await BP(t.wrapped_key,e),i=await globalThis.crypto.subtle.decrypt({name:"AES-GCM",iv:tb(t.iv)},n,tb(t.cipher));return new Uint8Array(i)}function MS(t){return globalThis.crypto.subtle.importKey("pkcs8",tb(t),{name:"RSA-OAEP",hash:"SHA-256"},!1,["decrypt"])}async function uD(t){return FP(new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",tb(t))))}function dD(t){return{wrapped_key:zr(t.wrapped_key_b64),cipher:zr(t.cipher_b64),iv:zr(t.iv_b64)}}var nb=1600,hD=.82,pD=.7,FS=TS-1024;async function VK(){try{let e=await import("sharp");return typeof e.default=="function"?e.default:null}catch{return null}}var Qc={ok:!1,error:"IMAGEN_NO_PROCESABLE"},GK=t=>t.length>4&&t[0]===255&&t[1]===216&&t[2]===255;function WK(t){let e=2;for(;e+9<t.length;){if(t[e]!==255){e++;continue}let n=t[e+1];if(n===255){e++;continue}if(n===216||n===1||n>=208&&n<=215){e+=2;continue}if(n===218)return null;let i=t[e+2]<<8|t[e+3];if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204){let r=t[e+5]<<8|t[e+6],a=t[e+7]<<8|t[e+8];return Math.max(r,a)}e+=2+i}return null}function KK(t){let e=[t.subarray(0,2)],n=2;for(;n+4<=t.length;){if(t[n]!==255)return null;let s=t[n+1];if(s===255){n++;continue}if(s===218){e.push(t.subarray(n)),n=t.length;break}if(s===1||s>=208&&s<=217){e.push(t.subarray(n,n+2)),n+=2;continue}let o=n+2+(t[n+2]<<8|t[n+3]);if(o>t.length)return null;s!==225&&s!==237&&s!==254&&e.push(t.subarray(n,o)),n=o}if(n<t.length)return null;let i=e.reduce((s,o)=>s+o.length,0),r=new Uint8Array(i),a=0;for(let s of e)r.set(s,a),a+=s.length;return r}async function $S(t,e,n={}){try{if(t.length===0)return Qc;let i=await(n.cargarSharp??VK)();if(i){let s=i(t,{failOn:"error"}).rotate().resize({width:nb,height:nb,fit:"inside",withoutEnlargement:!0});for(let o of[hD,pD]){let l=await s.clone().jpeg({quality:Math.round(o*100)}).toBuffer();if(l.length>0&&l.length<=FS)return{ok:!0,bytes:new Uint8Array(l),mime:"image/jpeg"}}return Qc}if(e!=="image/jpeg"||!GK(t))return Qc;let r=WK(t);if(r===null||r>nb)return Qc;let a=KK(t);return!a||a.length>FS?Qc:{ok:!0,bytes:a,mime:"image/jpeg"}}catch{return Qc}}import{readFile as XK}from"node:fs/promises";import{createPrivateKey as bD,createPublicKey as YK}from"node:crypto";var mD="CDA_CLAVE_INTEGRACION_PEM",il=class extends Error{constructor(e){super(e),this.name="ErrorClaveIntegracion"}};function gD(t){return!/[\r\n]/.test(t)&&t.includes("\\n")?t.replace(/\\n/g,`
186
+ `):t}async function ZK(t){if(t.pem!==void 0&&t.pem.trim()!=="")return gD(t.pem);let e=(t.env??process.env)[mD];if(e!==void 0&&e.trim()!=="")return gD(e);if(t.ruta)return XK(t.ruta,"utf8");throw new il(`Falta la clave de integraci\xF3n: pasa el PEM, define ${mD} o indica la ruta del fichero`)}function JK(t){try{return bD(t)}catch{throw new il("La clave de integraci\xF3n no es un PEM PKCS#8 v\xE1lido (sin contrase\xF1a)")}}function QK(t,e){return xD({ruta:t,env:{}},e)}function xD(t,e){let n=null,i=()=>n??=(async()=>{let r=await ZK(t),a=new Uint8Array(JK(r).export({type:"pkcs8",format:"der"})),s=await MS(a),o=await NS(e,s),{pkcs8_b64:l}=JSON.parse(new TextDecoder().decode(o));if(typeof l!="string")throw new Error("sobre de integraci\xF3n con formato inesperado");let c=Buffer.from(l,"base64"),f=await MS(new Uint8Array(c)),u=new Uint8Array(YK(bD({key:c,format:"der",type:"pkcs8"})).export({type:"spki",format:"der"}));return{privada:f,spki:un(u)}})();return{async abrirSobre(r){return NS(r,(await i()).privada)},async publicaAgenciaSpki(){return(await i()).spki},async clavePrivadaSobres(){return(await i()).privada}}}var pd=class extends ln{ref;paso;vivienda;caja;fichero;loteId;indice;clientId;creado;reintentable;consejo;corta;constructor(e,n,i,r){super(n.status,n.code,n.problema,n.requestId),this.name="ErrorAlta",this.message=`${is(e.ref)?e.ref:"-"}: ${e.paso} \u2192 ${n.status} ${n.code}`,r!==void 0&&(this.cause=r),this.ref=e.ref,this.paso=e.paso,this.vivienda=e.vivienda,this.caja=e.caja,this.fichero=e.fichero,this.loteId=e.loteId,this.indice=e.indice,this.clientId=e.clientId,this.creado=e.creado,this.reintentable=i.reintentable,this.consejo=i.consejo,this.corta=i.corta}},eX=/^(E[A-Z]+|UND_ERR_[A-Z_]+)$/;function wD(t){if(t instanceof ln)return{status:t.status,code:t.code,requestId:t.requestId};if(t instanceof Hs)return{status:0,code:t.code,requestId:null};if(t instanceof il)return{status:0,code:"CLAVE_INTEGRACION",requestId:null};if(t instanceof TypeError){let e=t.cause?.code;if(typeof e=="string"&&eX.test(e))return{status:0,code:"RED",requestId:null}}return{status:0,code:"LOCAL",requestId:null}}var tX=new Set(["KEY_DE_PRUEBAS","KEY_DE_PRODUCCION","API_DESACTIVADA","CUOTA_LECTURAS_AGOTADA","TOPE_BORRADORES","ENTORNO_MAL_CONFIGURADO","CLAVE_INTEGRACION","AGENCIA_MODO_SERVIDOR"]),nX=new Set(["RED","TRANSITORIO","LEYENDO","LIMITE_SUPERADO","TIEMPO_AGOTADO","IDEMPOTENCIA_EN_CURSO","LECTOR_VIEJO","REF_OCUPADA"]);function vD(t,e,n){return e===401||e===403||tX.has(t)?{reintentable:!1,consejo:"cuenta",corta:!0}:n.creado==="desconocido"?{reintentable:!0,consejo:"repetir",corta:!1}:nX.has(t)||e>=500||(t==="BORRADOR_CERRADO"||t==="NO_ENCONTRADO")&&n.paso!=="abrir"?{reintentable:!0,consejo:"repetir",corta:!1}:n.paso==="validar"||n.paso==="foto"&&(t==="IMAGEN_NO_PROCESABLE"||t==="TOPE_CAJA")?{reintentable:!1,consejo:"manifiesto",corta:!1}:{reintentable:!1,consejo:"cuenta",corta:!1}}function ef(t,e){if(t instanceof pd)return t;let{status:n,code:i,requestId:r}=wD(t),a=t instanceof ln?t.problema:{code:i};return new pd({...e},{status:n,code:i,requestId:r,problema:a},vD(i,n,e),t)}var rX=2e3,iX=3e4,yD=3,kD=(t,e,n,i)=>typeof t=="number"&&Number.isFinite(t)?Math.min(n,Math.max(e,Math.trunc(t))):i;function aX(t,e){return{ref:t.ref,paso:t.paso,vivienda:t.vivienda,caja:t.caja,fichero:t.fichero,loteId:t.loteId,indice:t.indice,clientId:t.clientId,creado:t.creado,status:t.status,code:t.code,requestId:t.requestId,reintentable:t.reintentable,consejo:t.consejo,intentos:e}}async function BS(t,e,n={},i=r=>new Promise(a=>setTimeout(a,r))){let r=kD(n.aLaVez,1,2,1),a=kD(n.repetir,0,2,1),s={completados:[],fallidos:[],noIntentados:[],cortadoPor:null},o=new Set,l=[];for(let g of e){let b=typeof g?.ref!="string";b||o.has(g.ref)?s.fallidos.push({ref:b?"-":g.ref,paso:"validar",creado:!1,status:422,code:"ENTRADA_INVALIDA",requestId:null,reintentable:!1,consejo:"manifiesto",intentos:0}):(o.add(g.ref),l.push(g))}let c=0,f=0,u=0,d=new Set,h=g=>{f=g==="RED"?f+1:0,u=g==="TIEMPO_AGOTADO"?u+1:0};async function p(g){let b;for(let x=1;;x++)try{let w=await t(g,b);s.completados.push({...w,ref:g.ref,intentos:x}),h(null);return}catch(w){let k=ef(w,{ref:g.ref,paso:"validar",creado:b?.creado??!1});if(k.reintentable&&!k.corta&&x<=a&&!s.cortadoPor&&(b=k.creado==="desconocido"?{creado:"desconocido"}:void 0,await i(k.creado==="desconocido"?iX:rX),!s.cortadoPor))continue;s.fallidos.push(aX(k,x)),h(k.code),!s.cortadoPor&&(k.corta||f>=yD||u>=yD)&&(s.cortadoPor={status:k.status,code:k.code,requestId:k.requestId});return}}async function m(){for(;!s.cortadoPor&&c<l.length;){let g=l[c++];d.add(g.ref),await p(g)}}return await Promise.all(Array.from({length:r},()=>m())),s.noIntentados=l.filter(g=>!d.has(g.ref)).map(g=>g.ref),s}function jD(t){return typeof t=="number"&&Number.isFinite(t)?Math.min(8,Math.max(1,Math.trunc(t))):null}function sX(t){let e=null;return()=>(e??=t.peticion({metodo:"GET",ruta:"/v1/yo"}).then(n=>jD(n?.limites?.concurrencia_ficheros)??4,()=>4),e)}var Bn=(t,e={},n=422)=>new ln(n,t,{code:t,...e}),oX=new Set(["ENTRADA_INVALIDA","IMAGEN_NO_PROCESABLE","FICHERO_NO_LEIDO","DIRECCION_DISTINTA","VIVIENDA_INCOMPLETA","BORRADOR_NO_LISTO"]),lX=new Set(["TRANSITORIO","LEYENDO"]),cX=3,fX=2,uX=12e4,AD=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,dX=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function hX(t){let e=i=>Bn("ENTRADA_INVALIDA",{campo:i});if(typeof t.ref!="string"||!is(t.ref))throw e("ref");if(typeof t.email!="string"||t.email.trim().length>254||!dX.test(t.email.trim()))throw e("email");if(t.nombre!==void 0&&(typeof t.nombre!="string"||t.nombre.trim().length>200))throw e("nombre");if(!Array.isArray(t.viviendas)||t.viviendas.length<1||t.viviendas.length>50)throw e("viviendas");let n=new Set;t.viviendas.forEach((i,r)=>{let a=l=>e(`viviendas[${r}].${l}`);if(typeof i.direccion!="string"||i.direccion.trim()===""||i.direccion.trim().length>300)throw a("direccion");if(typeof i.provincia!="string"||!/^\d{2}$/.test(i.provincia)||fd(i.provincia)===void 0)throw a("provincia");if(i.municipio!==void 0&&(!/^\d{5}$/.test(i.municipio)||!i.municipio.startsWith(i.provincia)))throw a("municipio");if(typeof i.cp!="string"||!/^\d{5}$/.test(i.cp))throw a("cp");if(i.ref!==void 0){if(!is(i.ref)||n.has(i.ref))throw a("ref");n.add(i.ref)}if(!Array.isArray(i.ficheros)||i.ficheros.length>25+Wc)throw a("ficheros");let s=i.ficheros.filter(l=>l?.caja==="movimientos").length;if(i.ficheros.length-s>25||s>Wc)throw a("ficheros");let o=0;i.ficheros.forEach((l,c)=>{let f=u=>e(`viviendas[${r}].ficheros[${c}].${u}`);if(!CS.includes(l.caja))throw f("caja");if(typeof l.nombre!="string"||l.nombre.trim()==="")throw f("nombre");if(!(l.bytes instanceof Uint8Array)||l.bytes.byteLength===0)throw f("bytes");if(typeof l.mime!="string"||l.mime==="")throw f("mime");if(l.caja==="foto"&&++o>1)throw f("caja")})})}function pX(t,e){let n=t&&typeof t=="object"?t:{};if(n.ok!==!0)return{ok:!1,motivo:typeof n.motivo=="string"?n.motivo:"servidor",transitorio:n.transitorio===!0};let i={ok:!1,motivo:"servidor",transitorio:!1};if(e?.ok){if(n.tipo==="contrato"&&e.tipo==="contrato")return{ok:!0,tipo:"contrato",contrato:e.contrato,huella:n.huella,direccion:e.direccion};if(n.tipo==="movimiento"&&e.tipo==="movimiento"){let a=n.filas,s=n.indices;return!Array.isArray(a)||!Array.isArray(s)||s.length!==a.length||!s.every(l=>Number.isInteger(l)&&l>=0&&l<e.rotulos.length)?i:{ok:!0,tipo:"movimiento",filas:a.map((l,c)=>{let f=e.rotulos[s[c]];return f?{...l,rotulo:f}:l}),filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:e.direccion}}return i}let r=typeof n.direccion=="string"?n.direccion:null;return n.tipo==="contrato"&&n.contrato&&typeof n.contrato=="object"?{ok:!0,tipo:"contrato",contrato:n.contrato,huella:n.huella,direccion:r}:n.tipo==="movimiento"&&Array.isArray(n.filas)?{ok:!0,tipo:"movimiento",filas:n.filas,filasFuera:typeof n.filasFuera=="number"?n.filasFuera:0,direccion:r}:i}var mX=t=>({sobreWrappedKeyB64:un(t.wrapped_key),sobreCipherB64:un(t.cipher),sobreIvB64:un(t.iv)});function gX(t,e){return LS(t,e)}async function LS(t,e,n){let i={ref:typeof e?.ref=="string"?e.ref:"",paso:"validar",creado:n?.creado==="desconocido"?"desconocido":!1};try{hX(e);let r=t.dormir??(u=>new Promise(d=>setTimeout(d,u))),a=t.fetch??globalThis.fetch,s=e.email.trim();i.paso="foto";let o=[];for(let[u,d]of e.viviendas.entries()){let h=[];for(let[p,m]of d.ficheros.entries()){if(m.caja!=="foto"){h.push(m);continue}Object.assign(i,{vivienda:d.ref??u,caja:"foto",fichero:p});let g=await $S(m.bytes,m.mime);if(!g.ok)throw Bn(g.error,{campo:"foto"});h.push({...m,bytes:g.bytes,mime:g.mime,nombre:m.nombre.replace(/\.[^.]+$/,"")+".jpg"})}o.push(h)}delete i.vivienda,delete i.caja,delete i.fichero;let l=await t.descifrador.publicaAgenciaSpki(),c=zr(l);i.paso="abrir";let f;try{f=await bX(t,e.ref,i)}catch(u){if(u instanceof ln&&u.code==="REF_YA_CREADA"){let d=u.problema?.client_id;if(i.creado=!0,typeof d!="string"||!AD.test(d))throw u;return Object.assign(i,{paso:"enlace",clientId:d}),await ID(t,d,null,null)}throw u}try{return await xX(t,e,s,o,f,c,l,r,a,i)}catch(u){throw u instanceof ln&&oX.has(u.code)&&await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${f}`,idempotencia:!1}).catch(()=>{}),u}}catch(r){throw ef(r,i)}}async function bX(t,e,n){let i=async()=>{let o=await t.http.peticion({metodo:"POST",ruta:"/v1/borradores",cuerpo:{tipo:"alta",ref:e}}),l=o?.borradorId;if(typeof o?.nuevo!="boolean"||typeof l!="string"||!AD.test(l))throw Bn("ERROR",{},502);return{id:l,nuevo:o.nuevo}},r=o=>(n.creado==="desconocido"&&(n.creado=!1),o),a=await i();if(a.nuevo)return r(a.id);try{await t.http.peticion({metodo:"DELETE",ruta:`/v1/borradores/${a.id}`,idempotencia:!1})}catch(o){if(!(o instanceof ln&&o.code==="NO_ENCONTRADO"))throw o instanceof ln&&o.code==="BORRADOR_CERRADO"&&(n.creado="desconocido"),o}let s=await i();if(!s.nuevo)throw Bn("REF_OCUPADA",{},409);return r(s.id)}async function xX(t,e,n,i,r,a,s,o,l,c){let f=t.http;c.paso="vivienda";let u=i.some(B=>B.some(D=>D.caja==="contract"||D.caja==="movimientos")),d=null;if(u){let B=await f.peticion({metodo:"GET",ruta:"/v1/lector"});B?.modo==="navegador"&&typeof B.parser=="string"&&Array.isArray(B.conceptos)&&(d={parser:B.parser,conceptos:B.conceptos})}let h=i.some(B=>B.length>0),p=jD(t.concurrenciaFicheros)??(h?await t.concurrenciaSugerida?.()??4:4),m=[];for(let B=0;B<e.viviendas.length;B++){let D=e.viviendas[B];c.paso="vivienda",c.vivienda=D.ref??B;let G=D.direccion.trim(),P=D.cp,F=await xr({v:1,direccion:G,cp:P,etiqueta:G.slice(0,200)},a),se=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/viviendas`,cuerpo:{...mX(F),orden:B}});if(typeof se?.viviendaId!="string")throw Bn("ERROR",{},502);let Z={entrada:D,viviendaId:se.viviendaId,subidos:[]};m.push(Z);let ge=i[B];Z.subidos=await wX(ge,p,async(he,xe)=>{let K={...c,paso:"fichero",caja:he.caja,fichero:xe};try{return await vX(t,l,o,r,B,Z,he,a,d,K)}catch(q){throw ef(q,K)}})}delete c.vivienda,c.paso="listo";let g=await f.peticion({metodo:"GET",ruta:`/v1/borradores/${r}`});if(g?.listo!==!0){let B=(g?.ficheros??[]).filter(D=>D.estado==="pendiente"||D.estado==="error");throw Bn("BORRADOR_NO_LISTO",{ficheros:B.map(D=>({estado:D.estado,motivo:D.motivo??null}))})}c.paso="paquete";let b=(t.hoy??pS)(),x=m.map((B,D)=>{let G=F=>B.subidos.filter(se=>se.caja===F),P=cD({contratos:G("contract").flatMap(F=>F.respuesta?.ok&&F.respuesta.tipo==="contrato"?[{ficheroId:F.ficheroId,file:F.file,sha256:F.sha,lectura:NP({ok:!0,contrato:F.respuesta.contrato})}]:[]),actas:G("acta").flatMap(F=>F.acta?[{ficheroId:F.ficheroId,file:F.file,resultado:F.acta}]:[]),tenantId:G("tenant_id").map(F=>F.file),otros:G("other").map(F=>F.file),movimientos:G("movimientos").map(F=>F.file),hoy:b});if(P.errores.length>0)throw Bn("VIVIENDA_INCOMPLETA",{vivienda:B.entrada.ref??D,motivos:P.errores.map(F=>({codigo:F.codigo,...F.ficheroId?{ficheroId:F.ficheroId}:{},...F.inicio?{inicio:F.inicio}:{},...F.faltan?{faltan:F.faltan}:{}}))});return P});for(let B of x)for(let D of B.actasCasadas)await f.peticion({metodo:"POST",ruta:`/v1/borradores/${r}/ficheros/${D.ficheroId}/acta`,cuerpo:{contratoFicheroId:D.contratoFicheroId,fechaLlaves:D.fechaLlaves}});let w=await LP(),k=zP(),v=await HP(w.privadaPkcs8,k,r),y=[];for(let B=0;B<m.length;B++){let D=m[B],G=x[B],P=D.subidos.map(xe=>({...iD(xe.ficheroId,xe.file,xe.caja),ficheroId:xe.ficheroId,estado:xe.respuesta?.ok?"leido":"no_aplica",rc:xe.respuesta?.ok&&xe.respuesta.tipo==="contrato"?nD(xe.respuesta.contrato):null})),F=new Map(D.subidos.map(xe=>[xe.ficheroId,xe.idemKey])),se=lD({ficheros:G.ficheros,bloques:G.bloques,pre:P},xe=>F.get(xe));if(!se.ok)throw Bn("VIVIENDA_INCOMPLETA",{vivienda:D.entrada.ref??B,motivos:[{codigo:se.error.codigo}]});let Z=D.entrada.direccion.trim(),ge=rD(P),he=ge&&DS.test(ge)?ge:null;y.push({viviendaBorradorId:D.viviendaId,ref:D.entrada.ref??null,provincia:D.entrada.provincia,municipio:D.entrada.municipio??null,datos:{direccion:Z,cp:D.entrada.cp,etiqueta:Z.slice(0,200),...he?{cadastral_ref:he}:{}},paquete:se.paquete,porcentajeDeclarado:se.paquete?.porcentaje_titularidad??null,ficheros:D.subidos.map(xe=>({ficheroId:xe.ficheroId,idemKey:xe.idemKey,wrappedFileKey:xe.wrapped,lectura:xe.respuesta?oD(xe.respuesta):null}))})}let A=e.nombre?.trim(),I=await GP({borrador:{cliente:{email:n,ref:e.ref,datos:A?{nombre:A}:{}},viviendas:y},privadaAgencia:await t.descifrador.clavePrivadaSobres(),publicaAgencia:a,publicaEfimera:w.publicaSpki}),S=await rl({v:1,secretoEnlace:dd(k)},s);c.paso="lote";let T=(await f.peticion({metodo:"POST",ruta:"/v1/lotes",cuerpo:{operacion:"clientes.crear",modo:"ejecutar"}}))?.id;if(typeof T!="string")throw Bn("ERROR",{},502);c.loteId=T,c.indice=0;let _=await f.peticion({metodo:"POST",ruta:`/v1/lotes/${T}/elementos`,cuerpo:{elementos:[{datos:{ref:e.ref,borrador:r,lote:I,efimera:{cipherB64:un(v.cipher),ivB64:un(v.iv)},sobreEnlace:S}}]}});if(_?.aceptados!==1){let B=_?.rechazados?.[0];throw Bn(B?.code??"ENTRADA_INVALIDA",{errores:B?.errores??null})}c.creado="desconocido",await f.peticion({metodo:"POST",ruta:`/v1/lotes/${T}/cerrar`});let E=await SX(t,T,o);if(E.estado==="error"){let B=E.error?.code;throw c.creado=B==="EN_CURSO"||B==="ESTADO_CAMBIADO"?"desconocido":!1,Bn(E.error?.code??"ERROR",{...E.error?.campos?{campos:E.error.campos}:{}})}let O=E.id??(typeof E.datos?.client_id=="string"?E.datos.client_id:null);if(typeof O!="string")throw Bn("ERROR",{},502);if(c.clientId=O,E.estado==="creado"&&(c.creado=!0),c.paso="enlace",E.estado==="creado"){let B=E.datos?.correo==="enviado"?"enviado":"no_enviado",D=await SD(t,O,k,null);return{estado:"creado",clientId:O,enlace:D,correo:B,...E.datos?.motivo==="CUPO_DIARIO"||E.datos?.motivo==="ENTORNO_PRUEBAS"?{motivo:E.datos.motivo}:{}}}return c.creado=!0,ID(t,O,E.datos?.enlace==="activado",E.datos?.s_sellado??null)}async function wX(t,e,n){let i=new Array(t.length),r=new Map,a=0,s=async()=>{for(;r.size===0;){let o=a++;if(o>=t.length)return;try{i[o]=await n(t[o],o)}catch(l){r.set(o,l)}}};if(await Promise.all(Array.from({length:Math.min(e,t.length)},s)),r.size>0)throw r.get(Math.min(...r.keys()));return i}async function vX(t,e,n,i,r,a,s,o,l,c){let f=t.http,u=await uD(s.bytes),d=await OS(s.bytes,s.nombre,o),h=await f.peticion({metodo:"POST",ruta:`/v1/borradores/${i}/ficheros`,cuerpo:{viviendaId:a.viviendaId,caja:s.caja,sizeBytes:d.blob.length,mime:s.mime,nombreCipherB64:un(d.nombre_cipher),nombreIvB64:un(d.nombre_iv),wrappedFileKeyB64:un(d.wrapped_file_key),sha256:u}});if(typeof h?.ficheroId!="string"||typeof h.uploadUrl!="string")throw Bn("ERROR",{},502);let p=h.ficheroId;await yX(e,h.uploadUrl,d.blob,n);let m={ficheroId:p,idemKey:globalThis.crypto.randomUUID(),caja:s.caja,file:new File([],s.nombre,{type:s.mime}),wrapped:d.wrapped_file_key,sha:u,respuesta:null,acta:null};if(s.caja==="acta")m.acta=await kX(t,s);else if(s.caja==="contract"||s.caja==="movimientos"){c.paso="leer";let g=await jX(t,n,i,p,s,l);if(!g.ok)throw Bn("FICHERO_NO_LEIDO",{vivienda:a.entrada.ref??r,caja:s.caja,motivo:g.motivo});m.respuesta=g,c.paso="cotejar",await AX(t,i,p,a,r,g)}return m}async function yX(t,e,n,i){let r=0;for(let a=0;a<3;a++){a>0&&await i(500*2**a);try{let s=await t(e,{method:"PUT",headers:{"content-type":"application/octet-stream","cache-control":"max-age=3600","x-upsert":"false"},body:n});if(s.ok)return;if(r=s.status,s.status<500&&s.status!==429)break}catch{r=0}}throw Bn("SUBIDA_FALLIDA",{status:r},502)}async function kX(t,e){let n={ok:!1,motivo:"acta_ilegible"};try{let i=await $1(e.bytes,e.mime,t.extraer?{extraer:t.extraer}:{}),r=JO(i);return r?r.lector.leer(i):n}catch{return n}}async function jX(t,e,n,i,r,a){let s=0,o=0;for(;;){let l;try{let c=await t.borradores.leerDetalle(n,i,r.bytes,{caja:r.caja,lector:a,mime:r.mime,...t.extraer?{extraer:t.extraer}:{}});l=pX(c.respuesta,c.local)}catch(c){if(c instanceof ln&&lX.has(c.code)&&++s<cX){await e(t.intervaloMs??1e3);continue}throw c}if(!l.ok&&l.transitorio&&++o<=fX){await e(t.intervaloMs??1e3);continue}return l}}async function AX(t,e,n,i,r,a){let s=sD(i.entrada.direccion,a.direccion);if(a.tipo==="movimiento"){if(await t.http.peticion({metodo:"POST",ruta:`/v1/borradores/${e}/ficheros/${n}/direccion`,cuerpo:{ok:s==="casa"}}),s!=="casa")throw Bn("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"movimientos",motivo:s});return}if(s==="distinta")throw Bn("DIRECCION_DISTINTA",{vivienda:i.entrada.ref??r,caja:"contract",motivo:s})}async function SX(t,e,n){let i=t.intervaloMs??1e3,r=t.maxEsperaMs??uX,a=0;for(;;){let o=(await t.http.peticion({metodo:"GET",ruta:`/v1/lotes/${e}/resultados`,query:{limite:1}}))?.resultados?.[0];if(o&&o.estado!=="pendiente")return o;if(a>=r)throw Bn("TIEMPO_AGOTADO",{loteId:e},504);await n(i),a+=Math.max(i,1)}}async function IX(t,e){let n=e;if(!n||typeof n.wrapped_key_b64!="string"||typeof n.cipher_b64!="string"||typeof n.iv_b64!="string")throw Bn("ERROR",{},502);let i=await t.descifrador.abrirSobre(dD(n)),r=JSON.parse(new TextDecoder().decode(i)),a=typeof r.secretoEnlace=="string"?UP(r.secretoEnlace):null;if(!a)throw Bn("ERROR",{},502);return a}async function SD(t,e,n,i){let r;try{r=await t.http.peticion({metodo:"POST",ruta:`/v1/clientes/${e}/enlace`,idempotencia:!1})}catch(s){if(s instanceof ln&&s.code==="ENLACE_NO_REENVIABLE")return"activado";throw s}if(typeof r?.token!="string"||r.token==="")throw Bn("ERROR",{},502);let a=n??await IX(t,i??r.sobre);return VP({origin:t.origen,clientId:e,token:r.token,secreto:a})}async function ID(t,e,n,i){let r=n?"activado":await SD(t,e,null,i);return{estado:"ya_existia",clientId:e,enlace:r,correo:"no_enviado"}}function zS(t){let e={...t,concurrenciaSugerida:t.concurrenciaSugerida??sX(t.http)},n=e.dormir??(i=>new Promise(r=>setTimeout(r,i)));return{crear:(i,r)=>LS(e,i,r),crearVarios:(i,r)=>BS((a,s)=>LS(e,a,s),i,r,n)}}function CD(t){let e=ld.safeParse(t);return e.success?e.data.paquete:t}function TD(t,e){let n=ld.safeParse(t);if(!n.success)return e;let i=new Set(od(e)),r=Kc.safeParse(n.data.paquete),a=r.success?od(r.data):[],s=[...new Set([...n.data.alta.perdidos??[],...a.filter(l=>!i.has(l))])],o=Object.fromEntries(Object.entries(n.data.alta.documentos).filter(([l])=>i.has(l)));return{v:1,paquete:e,alta:{documentos:o,...s.length>0?{perdidos:s}:{}}}}var CX=t=>t,US=t=>({wrapped_key:zr(t.wrapped_key_b64),cipher:zr(t.cipher_b64),iv:zr(t.iv_b64)}),HS=t=>({wrapped_key:un(t.wrapped_key),cipher:un(t.cipher),iv:un(t.iv)});async function TX(t){return new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256",CX(t)))}async function ED(t){let{pendiente:e,privada:n}=t,i=zr(e.publicaClienteB64),r=0,a={sobres:[],ficherosAusentes:[],ficherosIlegibles:[]},s=null;if(e.sobreCliente){let d,h=!1;try{d=await Yc(US(e.sobreCliente),n),h=!0}catch{a.sobres.push(e.sobreCliente.id),r++}if(h)try{let p=PS.parse(d);s=HS(await xr(p,i))}catch{r++}}let o=[];for(let d of e.sobreCliente?e.viviendas:[])try{let h=KP.parse(await Yc(US(d.sobre),n));o.push({property_id:d.propertyId,...HS(await xr(h,i))})}catch{r++}let l=[],c=[],f=[...e.ficheros].sort((d,h)=>+(h.caja==="foto")-+(d.caja==="foto"));for(let d of f)try{let h=zr(d.wrappedFileKeyB64),p=await ud(h,n,i);l.push({idem_key:d.idemKey,wrapped_file_key:un(p)})}catch{c.push(d.idemKey)}let u=[];for(let d of e.paquetes){let h;try{h=await Yc(US(d.sobre),n)}catch{a.sobres.push(d.sobreId),r++;continue}try{let p=cd(t.desenvolverPaquete?t.desenvolverPaquete(h):h);if(!p.ok){r++;continue}let m=TD(h,p.paquete);u.push({property_id:d.propertyId,...HS(await xr(m,i))})}catch{r++}}return{lote:{huella_publica:un(await TX(i)),perfil:s,viviendas:o,paquetes:u,documentos:l},fallidos:c,sobresIlegibles:r,permanentes:a}}var EX=20;function _D(t,e=EX){if(t.documentos.length<=e)return[t];let n=[];for(let i=0;i<t.documentos.length;i+=e){let r=t.documentos.slice(i,i+e),s=i+e>=t.documentos.length?t.paquetes:[];n.push(i===0?{...t,paquetes:s,documentos:r}:{huella_publica:t.huella_publica,perfil:null,viviendas:[],paquetes:s,documentos:r})}return n}function qD(t,e=200){let n=[...t.sobres],i=[...t.ficherosAusentes],r=[...t.ficherosIlegibles],a=[];for(;n.length+i.length+r.length>0;){let s=n.splice(0,e),o=i.splice(0,e),l=r.splice(0,e-o.length);a.push({sobres:s,ficherosAusentes:o,ficherosIlegibles:l})}return a}function VS(t,e,n,i){if(!(t instanceof Map))return[];let r=[];for(let a of e){let s=t.get(a);if(s===void 0)continue;let o=Date.parse(s);Number.isNaN(o)||n.getTime()-o>=i&&r.push(a)}return r}function RD(t,e){return t.documentos>0||(t.paquetes??0)>0||e?"progreso":"sin-progreso"}async function OD(t){let e=0,n=0;for(let i=0;i<50;i++){let r=await t.leerPendientes();if(!r)break;let a=r.filter(s=>(t.intentos.get(s.clienteId)??0)<t.maxIntentos);if(a.length===0)break;for(let s of a){t.intentos.set(s.clienteId,(t.intentos.get(s.clienteId)??0)+1),n++;let o="fallo";try{o=await t.entregar(s)}catch{o="fallo"}o==="progreso"&&(e++,t.intentos.delete(s.clienteId))}}return{progreso:e,intentados:n}}var rb=new Set([401,403]),_X=3,qX=new Set(["LOTE_ESTADO","NO_ENCONTRADO","PRECONDICION_FALLIDA"]),GS=t=>t instanceof ln&&qX.has(t.code),RX=t=>({clienteId:t.cliente_id,publicaClienteB64:t.publica_cliente_b64,sobreCliente:t.sobre_cliente,viviendas:t.viviendas.map(e=>({propertyId:e.property_id,sobre:e.sobre})),ficheros:t.ficheros.map(e=>({id:e.id,idemKey:e.idem_key,propertyId:e.property_id,wrappedFileKeyB64:e.wrapped_file_key_b64,...e.caja!==void 0?{caja:e.caja}:{}})),paquetes:t.paquetes.map(e=>({sobreId:e.sobre_id,propertyId:e.property_id,sobre:e.sobre}))});function WS(t){async function e(){let n=await t.descifrador.clavePrivadaSobres(),i=new Map,r=new Map,a=new Set,s=[],o=new Map,l=0,c=[],f={relojServidor:null,corte:null,faltoFecha:!1,alInicio:null},u=y=>{let A=Date.parse(y.get("date")??"");if(Number.isNaN(A)){f.faltoFecha=!0;return}(f.relojServidor===null||A>f.relojServidor)&&(f.relojServidor=A)},d=y=>{for(let[A,I]of Object.entries(y)){let S=i.get(A);(S===void 0||Date.parse(I)<Date.parse(S))&&i.set(A,I)}},h=y=>{let A=r.get(y);return A||r.set(y,A={ausentes:new Set,ilegibles:new Set}),A},p=y=>y instanceof ln?y.code:"ERROR";function m(y,A){if(A instanceof ln&&rb.has(A.status)){f.corte??=A;return}let I=p(A);s.some(S=>S.cliente_id===y&&S.code===I)||s.push({cliente_id:y,code:I})}async function g(y){if(f.corte)return"fallo";let A;try{A=await ED({pendiente:y,privada:n,desenvolverPaquete:CD})}catch(_){return m(y.clienteId,_),"fallo"}if(o.set(y.clienteId,Math.max(o.get(y.clienteId)??0,A.sobresIlegibles)),!(A.lote.perfil!==null||A.lote.viviendas.length>0||A.lote.paquetes.length>0||A.lote.documentos.length>0))return"sin-progreso";let S=0,C=0,T=!1;for(let[_,E]of _D(A.lote).entries()){let O;try{O=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/entregas",cuerpo:{cliente_id:y.clienteId,lote:E},idempotencia:!0,alResponder:u})}catch(D){return GS(D)||m(y.clienteId,D),S>0||C>0||T?"progreso":"fallo"}d(O.observaciones??{});let B=h(y.clienteId);for(let D of O.permanentes?.ficheros_ausentes??[])B.ausentes.add(D);for(let D of O.permanentes?.ficheros_ilegibles??[])B.ilegibles.add(D);S+=O.documentos,C+=O.paquetes,_===0&&E.perfil!==null&&(T=!0)}return RD({documentos:S,viviendas:0,paquetes:C},T)}let{progreso:b}=await OD({leerPendientes:async()=>{if(f.corte)return null;let y;try{y=await t.http.peticion({metodo:"GET",ruta:"/v1/mantenimiento",alResponder:u})}catch(A){if(f.alInicio===null||A instanceof ln&&rb.has(A.status))throw A;return m("",A),null}return l=y.ventana_olvido_ms,d(y.observaciones??{}),f.alInicio===null&&(f.alInicio=new Set(Object.keys(y.observaciones??{})),c=y.idos_con_fallidos??[]),y.pendientes.map(RX)},entregar:g,intentos:new Map,maxIntentos:_X});if(f.corte)throw f.corte;let x=0,w=f.relojServidor===null||f.faltoFecha?null:new Date(f.relojServidor),k=y=>f.alInicio?.has(y)===!0&&!a.has(y);for(let[y,A]of w?r:[]){let I={sobres:[],ficherosAusentes:VS(i,[...A.ausentes].filter(k),w,l),ficherosIlegibles:VS(i,[...A.ilegibles].filter(k),w,l)};for(let S of qD(I))try{let C=await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:S.sobres,ficheros_ausentes:S.ficherosAusentes,ficheros_ilegibles:S.ficherosIlegibles}});for(let T of[...S.sobres,...S.ficherosAusentes,...S.ficherosIlegibles])a.add(T);x+=C.marcados.sobres+C.marcados.ficheros}catch(C){if(C instanceof ln&&rb.has(C.status))throw C;GS(C)||m(y,C)}}for(let y of c)try{await t.http.peticion({metodo:"POST",ruta:"/v1/mantenimiento/imposibles",idempotencia:!0,cuerpo:{cliente_id:y,sobres:[],ficheros_ausentes:[],ficheros_ilegibles:[]}})}catch(A){if(A instanceof ln&&rb.has(A.status))throw A;GS(A)||m(y,A)}let v=[...o.values()].reduce((y,A)=>y+A,0);return{entregadas:b,imposibles:x,errores:s,sobresSinAbrir:v,relojServidor:f.relojServidor!==null&&!f.faltoFecha}}return{ejecutar:e}}var OX=["cliente.activado","cliente.ido","lote.terminado","credencial.caduca_pronto","mantenimiento.pendiente"],md=t=>new ln(422,"ENTRADA_INVALIDA",{code:"ENTRADA_INVALIDA",campo:t}),PX=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Bi=(t,e)=>{if(typeof t!="string"||!PX.test(t))throw md(e);return t};function PD(t){let e=String(t).trim();return e==="*"||e.startsWith('"')?e:`"v${e.replace(/^v/,"")}"`}function KS(t){let{http:e}=t,n=c=>({cursor:c.cursor,limite:c.limite,estado:c.estado,cambiado_desde:c.cambiado_desde,incluir:c.incluir});async function i(c={}){return e.peticion({metodo:"GET",ruta:"/v1/clientes",query:n(c)})}async function*r(c={}){let f;for(;;){let u=await i({...c,cursor:f});if(u.clientes.length===0||(yield*u.clientes,u.siguiente===null||u.siguiente===void 0))return;f=u.siguiente}}let a=async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/clientes/${Bi(c,"clienteId")}`,query:{incluir:f.incluir}});function s(c){let f=c?.ifMatch;if(typeof f!="string"&&typeof f!="number"||String(f).trim()==="")throw md("ifMatch");return PD(f)}async function o(c,f,u){Bi(c,"clienteId");let d=s(u),h=await a(c),p={};if(f.ref!==void 0){if(f.ref!==null&&!is(f.ref))throw md("ref");p.ref=f.ref}f.renovacion!==void 0&&(p.renovacion=f.renovacion);let m=h.estado==="invitado",g=[];for(let[x,w]of(f.viviendas??[]).entries()){let k=y=>md(`viviendas[${x}].${y}`),v={propertyId:Bi(w.vivienda,`viviendas[${x}].vivienda`)};if(w.ref!==void 0){if(w.ref!==null&&!is(w.ref))throw k("ref");v.ref=w.ref}if(w.renovacion!==void 0&&(v.renovacion=w.renovacion),w.direccion!==void 0||w.cp!==void 0){let y=w.direccion?.trim()??"",A=w.cp?.trim()??"";if(!m||y===""||y.length>300)throw k("direccion");if(!/^\d{5}$/.test(A))throw k("cp");let I=PP(A);if(!I)throw new ln(422,"PROVINCIA_INVALIDA",{code:"PROVINCIA_INVALIDA",campo:`viviendas[${x}].cp`});if(v.provincia=I.code,w.municipio===void 0||w.municipio!==null&&(!/^\d{5}$/.test(w.municipio)||!w.municipio.startsWith(I.code)))throw k("municipio");v.municipio=w.municipio,v.sobre=await rl(fD(y,A),await t.descifrador.publicaAgenciaSpki())}else w.municipio!==void 0&&(v.municipio=w.municipio);g.push(v)}if(f.nombre!==void 0){let x=(f.nombre??"").trim();if(x.length>200)throw md("nombre");let w=await t.descifrador.publicaAgenciaSpki();m&&!h.desde_borrador&&(p.sobreCliente=await rl(x?{v:1,nombre:x}:{v:1},w)),p.copiaNombre=x?await rl({v:1,nombre:x},w):null}return g.length>0&&(p.viviendas=g),{ok:!0,version:(await e.peticion({metodo:"PATCH",ruta:`/v1/clientes/${c}`,cuerpo:p,cabeceras:{"if-match":d}}))?.version??null}}let l=c=>({ok:!0,version:c?.version??null});return{clientes:{listar:r,listarPagina:i,leer:a,editar:o,async desvincular(c,f){Bi(c,"clienteId");let u=await e.peticion({metodo:"POST",ruta:`/v1/clientes/${c}/desvincular`,cuerpo:{},cabeceras:{"if-match":s(f)}});return l(u)},async correo(c,f){return Bi(c,"clienteId"),l(await e.peticion({metodo:"PUT",ruta:`/v1/clientes/${c}/correo`,cuerpo:{correo:f}}))},async revocarEnlace(c){return Bi(c,"clienteId"),l(await e.peticion({metodo:"DELETE",ruta:`/v1/clientes/${c}/enlace`}))}},viviendas:{async listar(c){return(await e.peticion({metodo:"GET",ruta:`/v1/clientes/${Bi(c,"clienteId")}/viviendas`})).viviendas}},remitentes:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/remitentes"})).remitentes},anadir:c=>e.peticion({metodo:"POST",ruta:"/v1/remitentes",cuerpo:{correo:c}}),async quitar(c){return(await e.peticion({metodo:"POST",ruta:"/v1/remitentes/quitar",cuerpo:{correo:c}})).remitentes}},creditos:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/creditos"})},renovacion:{leer:()=>e.peticion({metodo:"GET",ruta:"/v1/renovacion"}),fijar:c=>e.peticion({metodo:"PUT",ruta:"/v1/renovacion",cuerpo:c})},webhooks:{async listar(){return(await e.peticion({metodo:"GET",ruta:"/v1/webhooks"})).webhooks},crear:c=>e.peticion({metodo:"POST",ruta:"/v1/webhooks",cuerpo:c}),borrar:async c=>e.peticion({metodo:"DELETE",ruta:`/v1/webhooks/${Bi(c,"webhookId")}`}),rotarSecreto:async c=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Bi(c,"webhookId")}/secreto`,cuerpo:{}}),entregas:async(c,f={})=>e.peticion({metodo:"GET",ruta:`/v1/webhooks/${Bi(c,"webhookId")}/entregas`,query:{estado:f.estado,cursor:f.cursor,limite:f.limite}}),reenviar:async(c,f)=>e.peticion({metodo:"POST",ruta:`/v1/webhooks/${Bi(c,"webhookId")}/entregas/${Bi(f,"entregaId")}/reenviar`,cuerpo:{}})}}}import{timingSafeEqual as NX}from"node:crypto";import{createHmac as DX,randomBytes as kse}from"node:crypto";var DD="whsec_";function ND(t){let e=`${t.id}.${t.timestamp}.${t.cuerpo}`,n=t.secretos.map(i=>{if(!i.startsWith(DD))throw new Error("Secreto de webhook sin prefijo whsec_");let r=Buffer.from(i.slice(DD.length),"base64");return"v1,"+DX("sha256",r).update(e).digest("base64")});return{"webhook-id":t.id,"webhook-timestamp":String(t.timestamp),"webhook-signature":n.join(" ")}}var MD=300,as=class extends Error{constructor(n){super(`Webhook no verificado: ${n}`);this.motivo=n;this.name="ErrorFirmaWebhook"}motivo};function XS(t,e){if(typeof t.get=="function")return t.get(e)??void 0;for(let[n,i]of Object.entries(t))if(n.toLowerCase()===e)return Array.isArray(i)?i.join(" "):i}function MX(t,e,n,i={}){let r=XS(e,"webhook-id"),a=XS(e,"webhook-timestamp"),s=XS(e,"webhook-signature");if(!r||!a||!s)throw new as("CABECERAS");if(!/^\d{1,12}$/.test(a))throw new as("TIMESTAMP");let o=Number(a),l=Math.floor((i.ahora??Date.now)()/1e3);if(Math.abs(l-o)>(i.toleranciaS??MD))throw new as("FUERA_DE_VENTANA");let c=typeof n=="string"?[n]:[...n];if(c.length===0)throw new as("SECRETO");let f=typeof t=="string"?t:new TextDecoder().decode(t),u;try{u=c.map(p=>ND({id:r,timestamp:o,cuerpo:f,secretos:[p]})["webhook-signature"])}catch{throw new as("SECRETO")}let d=s.split(/\s+/).filter(p=>p!==""),h=!1;for(let p of u){let m=Buffer.from(p);for(let g of d){let b=Buffer.from(g);b.length===m.length&&NX(b,m)&&(h=!0)}}if(!h)throw new as("FIRMA");return{id:r,timestamp:o}}function Rse(t){if(t.lecturaEnServidor!==void 0&&t.lecturaEnServidor!=="permitir"&&t.lecturaEnServidor!=="rechazar")throw new TypeError("lecturaEnServidor debe ser 'permitir' o 'rechazar'");let e=sb({apiKey:t.apiKey,baseUrl:t.baseUrl,fetch:t.fetch}),n=IS(e,{lecturaEnServidor:t.lecturaEnServidor}),i=zS({http:e,borradores:n,descifrador:t.descifrador,fetch:t.fetch,origen:new URL(t.baseUrl??ab).origin,extraer:t.extraer,hoy:t.hoy,intervaloMs:t.intervaloMs,maxEsperaMs:t.maxEsperaMs,dormir:t.dormir,concurrenciaFicheros:t.concurrenciaFicheros}),r=WS({http:e,descifrador:t.descifrador}),a=KS({http:e,descifrador:t.descifrador});return{peticion:e.peticion,http:e,descifrador:t.descifrador,borradores:n,mantenimiento:r,clientes:{...i,...a.clientes},viviendas:a.viviendas,remitentes:a.remitentes,creditos:a.creditos,renovacion:a.renovacion,webhooks:a.webhooks}}export{pd as ErrorAlta,ln as ErrorApiSdk,il as ErrorClaveIntegracion,Hs as ErrorDeEntorno,as as ErrorFirmaWebhook,FS as FOTO_BYTES_OBJETIVO,hD as FOTO_CALIDAD,pD as FOTO_CALIDAD_2,nb as FOTO_LADO_MAX,OX as TIPOS_WEBHOOK,MD as TOLERANCIA_WEBHOOK_S,qP as TOPE_BYTES,$D as URL_BASE_SANDBOX,EK as abrirContenidoFichero,Yc as abrirJson,TK as abrirNombreFichero,NS as abrirSobreBytes,JS as admiteIdempotencia,zr as base64ToBytes,un as bytesToBase64,vD as clasificar,wD as codigoDe,gX as crearAlta,IS as crearBorradores,Rse as crearCliente,zS as crearClientes,KS as crearGestion,sb as crearHttp,WS as crearMantenimiento,BS as crearVarios,xD as descifradorDeClave,QK as descifradorDeFichero,ef as envolver,gd as esperaDeRetryAfter,PD as etiquetaIfMatch,MS as importarPrivadaPkcs8,bK as leerFicheroLocal,$S as prepararFoto,ud as reenvolverClave,OS as sellarFichero,xr as sellarJson,rl as sellarSobreB64,uD as sha256Hex,dD as sobreDeB64,MX as verificarWebhook};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@controldealquiler/sdk",
3
- "version": "1.2.2",
3
+ "version": "1.3.1",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "private": false,
6
6
  "type": "module",
@@ -14,8 +14,8 @@
14
14
  },
15
15
  "scripts": {
16
16
  "build": "node build.mjs",
17
- "prepublishOnly": "node build.mjs && vitest run test/tipos-paquete.test.ts",
18
- "test:tipos": "vitest run test/tipos-paquete.test.ts",
17
+ "prepublishOnly": "node build.mjs && vitest run test/tipos-paquete.test.ts test/vocabulario-interno.test.ts",
18
+ "test:tipos": "vitest run test/tipos-paquete.test.ts test/vocabulario-interno.test.ts",
19
19
  "test": "vitest run --passWithNoTests"
20
20
  },
21
21
  "devDependencies": {