module.exports=[765532,e=>{"use strict";var t=e.i(747909),o=e.i(174017),a=e.i(996250),r=e.i(759756),i=e.i(561916),n=e.i(114444),s=e.i(837092),d=e.i(869741),u=e.i(316795),l=e.i(487718),c=e.i(995169),p=e.i(47587),m=e.i(666012),v=e.i(570101),_=e.i(626937),f=e.i(10372),R=e.i(193695);e.i(52474);var h=e.i(600220),E=e.i(89171);e.i(963978);var w=e.i(977087),g=e.i(15270);async function N(e,t){console.log(`🔍 [Retiro Seguridad] Validando retiro de $${t} para turno ${e}`);let o=await g.prisma.turnos_caja.findUnique({where:{id:e},select:{id:!0,estado:!0,efectivo_inicial:!0,sesion_caja_id:!0}});if(!o)return{valido:!1,mensaje:"Turno no encontrado"};if("activo"!==o.estado)return{valido:!1,mensaje:`El turno est\xe1 ${o.estado}. Solo se pueden hacer retiros de turnos activos.`};let a=await g.prisma.$queryRaw`
    SELECT COALESCE(SUM(pv.monto), 0) as total
    FROM pagos_venta pv
    INNER JOIN ventas v ON pv.venta_id = v.id
    INNER JOIN metodos_pago mp ON pv.metodo_pago_id = mp.id
    WHERE v.turno_caja_id = ${e}
    AND LOWER(mp.nombre) LIKE '%efectivo%'
  `,r=(await g.prisma.retiros_caja.findMany({where:{turno_caja_id:e,estado:"completado"},select:{monto:!0}})).reduce((e,t)=>e+Number(t.monto),0),i=Number(o.efectivo_inicial)+(a[0]?.total||0)-r;return(console.log(`💵 [Retiro Seguridad] Efectivo disponible: $${i}`),t>i)?{valido:!1,mensaje:`Efectivo insuficiente. Disponible: $${i.toLocaleString("es-CO")}, Solicitado: $${t.toLocaleString("es-CO")}`,efectivoDisponible:i}:t<1e4?{valido:!1,mensaje:"El monto mínimo de retiro es $10,000",efectivoDisponible:i}:t>1e6?{valido:!1,mensaje:"El monto máximo de retiro es $1,000,000. Contacte al supervisor para montos mayores.",efectivoDisponible:i}:(console.log(`✅ [Retiro Seguridad] Validaci\xf3n exitosa`),{valido:!0,mensaje:"Retiro válido",efectivoDisponible:i})}async function j(e){console.log(`💰 [Retiro Seguridad] Creando retiro de $${e.monto} para turno ${e.turno_caja_id}`);let t=await N(e.turno_caja_id,e.monto);if(!t.valido)throw Error(t.mensaje);return await g.prisma.$transaction(async t=>{let o=await t.retiros_caja.create({data:{sesion_caja_id:e.sesion_caja_id,turno_caja_id:e.turno_caja_id,monto:e.monto,motivo:e.motivo,solicitado_por:e.solicitado_por,estado:"completado",fecha_solicitud:new Date,fecha_respuesta:new Date,destino_fondos:e.destino_fondos||"Caja fuerte / Banco",observaciones:`${e.observaciones||""}
[RETIRO DE SEGURIDAD - Auto-aprobado]`}});return await t.sesiones_caja.update({where:{id:e.sesion_caja_id},data:{total_retiros:{increment:e.monto}}}),await t.movimientos_caja.create({data:{sesion_caja_id:e.sesion_caja_id,turno_caja_id:e.turno_caja_id,tipo_movimiento:"egreso_operativo",metodo_pago:"efectivo",monto:e.monto,descripcion:`Retiro de seguridad - ${e.motivo}`,usuario_id:e.solicitado_por,fecha_movimiento:new Date}}),console.log(`✅ [Retiro Seguridad] Retiro ID ${o.id} creado exitosamente`),o})}async function b(e){return(await g.prisma.retiros_caja.findMany({where:{turno_caja_id:e},include:{solicitante:{select:{nombre:!0,apellido:!0}}},orderBy:{fecha_solicitud:"desc"}})).map(e=>({id:e.id,monto:Number(e.monto),motivo:e.motivo,estado:e.estado,fecha:e.fecha_solicitud,solicitante:`${e.solicitante.nombre} ${e.solicitante.apellido}`,destino:e.destino_fondos,observaciones:e.observaciones}))}async function x(e){let t=await g.prisma.turnos_caja.findUnique({where:{id:e},select:{efectivo_inicial:!0}});if(!t)throw Error("Turno no encontrado");let o=await g.prisma.$queryRaw`
    SELECT COALESCE(SUM(pv.monto), 0) as total
    FROM pagos_venta pv
    INNER JOIN ventas v ON pv.venta_id = v.id
    INNER JOIN metodos_pago mp ON pv.metodo_pago_id = mp.id
    WHERE v.turno_caja_id = ${e}
    AND LOWER(mp.nombre) LIKE '%efectivo%'
  `,a=(await g.prisma.retiros_caja.findMany({where:{turno_caja_id:e,estado:"completado"},select:{monto:!0}})).reduce((e,t)=>e+Number(t.monto),0),r=(await g.prisma.gastos_caja.findMany({where:{turno_caja_id:e,metodo_pago:"efectivo"},select:{monto:!0}})).reduce((e,t)=>e+Number(t.monto),0);return Number(t.efectivo_inicial)+(o[0]?.total||0)-a-r}var C=e.i(322632);let y=C.z.object({turno_caja_id:C.z.number().int().positive(),sesion_caja_id:C.z.number().int().positive(),monto:C.z.number().positive().min(1e4,"Monto mínimo: $10,000").max(1e6,"Monto máximo: $1,000,000"),motivo:C.z.string().min(10,"Especifique el motivo (mínimo 10 caracteres)").max(200),destino_fondos:C.z.string().max(200).optional(),observaciones:C.z.string().max(500).optional()});async function O(t){try{let o,a=await (0,w.auth)();if(!a||!a.user)return E.NextResponse.json({error:"No autorizado. Debe iniciar sesión."},{status:401});let r=a.user.role,i=Number(a.user.id),{searchParams:n}=new URL(t.url),s=n.get("turno_id"),d=n.get("accion")||"historial",u=n.get("monto");if(!s)return E.NextResponse.json({error:"Debe especificar turno_id"},{status:400});if("Cajero"===r){let{default:t}=await e.A(324191),o=await t.prisma.turnos_caja.findUnique({where:{id:Number(s)},select:{cajero_id:!0}});if(o&&o.cajero_id!==i)return E.NextResponse.json({error:"No tienes permiso para ver retiros de este turno"},{status:403})}switch(d){case"historial":o=await b(Number(s));break;case"disponible":o={efectivo_disponible:await x(Number(s))};break;case"validar":if(!u)return E.NextResponse.json({error:"Debe especificar monto para validar"},{status:400});o=await N(Number(s),Number(u));break;default:return E.NextResponse.json({error:"Acción inválida. Use: historial, disponible o validar"},{status:400})}return E.NextResponse.json(o,{status:200})}catch(e){if(console.error("Error en GET /api/retiros/seguridad:",e),e instanceof Error)return E.NextResponse.json({error:e.message},{status:400});return E.NextResponse.json({error:"Error interno del servidor"},{status:500})}}async function S(t){try{let o=await (0,w.auth)();if(!o||!o.user)return E.NextResponse.json({error:"No autorizado. Debe iniciar sesión."},{status:401});let a=o.user.role,r=Number(o.user.id),i=await t.json(),n=y.parse(i);if("Cajero"===a){let{default:t}=await e.A(324191),o=await t.prisma.turnos_caja.findUnique({where:{id:n.turno_caja_id},select:{cajero_id:!0,estado:!0}});if(!o||o.cajero_id!==r)return E.NextResponse.json({error:"No tienes permiso para hacer retiros de este turno"},{status:403});if("activo"!==o.estado)return E.NextResponse.json({error:"Solo puedes hacer retiros de tu turno activo"},{status:400})}let s=await j({...n,solicitado_por:r});return E.NextResponse.json({success:!0,message:"Retiro de seguridad registrado exitosamente",retiro:{id:s.id,monto:Number(s.monto),motivo:s.motivo,estado:s.estado,fecha:s.fecha_solicitud}},{status:201})}catch(e){if(console.error("Error en POST /api/retiros/seguridad:",e),e instanceof C.z.ZodError)return E.NextResponse.json({error:"Datos inválidos",details:e.errors},{status:400});if(e instanceof Error)return E.NextResponse.json({error:e.message},{status:400});return E.NextResponse.json({error:"Error interno del servidor"},{status:500})}}e.s(["GET",()=>O,"POST",()=>S],639549);var A=e.i(639549);let $=new t.AppRouteRouteModule({definition:{kind:o.RouteKind.APP_ROUTE,page:"/api/retiros/seguridad/route",pathname:"/api/retiros/seguridad",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/retiros/seguridad/route.ts",nextConfigOutput:"standalone",userland:A}),{workAsyncStorage:T,workUnitAsyncStorage:D,serverHooks:I}=$;function M(){return(0,a.patchFetch)({workAsyncStorage:T,workUnitAsyncStorage:D})}async function P(e,t,a){$.isDev&&(0,r.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/retiros/seguridad/route";E=E.replace(/\/index$/,"")||"/";let w=await $.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:g,params:N,nextConfig:j,parsedUrl:b,isDraftMode:x,prerenderManifest:C,routerServerContext:y,isOnDemandRevalidate:O,revalidateOnlyGenerated:S,resolvedPathname:A,clientReferenceManifest:T,serverActionsManifest:D}=w,I=(0,d.normalizeAppPath)(E),M=!!(C.dynamicRoutes[I]||C.routes[A]),P=async()=>((null==y?void 0:y.render404)?await y.render404(e,t,b,!1):t.end("This page could not be found"),null);if(M&&!x){let e=!!C.routes[A],t=C.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(j.experimental.adapterPath)return await P();throw new R.NoFallbackError}}let U=null;!M||$.isDev||x||(U="/index"===(U=A)?"/":U);let q=!0===$.isDev||!M,H=M&&!q;D&&T&&(0,n.setReferenceManifestsSingleton)({page:E,clientReferenceManifest:T,serverActionsManifest:D,serverModuleMap:(0,s.createServerModuleMap)({serverActionsManifest:D})});let k=e.method||"GET",L=(0,i.getTracer)(),z=L.getActiveScopeSpan(),F={params:N,prerenderManifest:C,renderOpts:{experimental:{authInterrupts:!!j.experimental.authInterrupts},cacheComponents:!!j.cacheComponents,supportsDynamicResponse:q,incrementalCache:(0,r.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:j.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,o,a)=>$.onRequestError(e,t,a,y)},sharedContext:{buildId:g}},K=new u.NodeNextRequest(e),B=new u.NodeNextResponse(t),G=l.NextRequestAdapter.fromNodeNextRequest(K,(0,l.signalFromNodeResponse)(t));try{let n=async e=>$.handle(G,F).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let o=L.getRootSpanAttributes();if(!o)return;if(o.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${o.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=o.get("next.route");if(a){let t=`${k} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${k} ${E}`)}),s=!!(0,r.getRequestMeta)(e,"minimalMode"),d=async r=>{var i,d;let u=async({previousCacheEntry:o})=>{try{if(!s&&O&&S&&!o)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await n(r);e.fetchMetrics=F.renderOpts.fetchMetrics;let d=F.renderOpts.pendingWaitUntil;d&&a.waitUntil&&(a.waitUntil(d),d=void 0);let u=F.renderOpts.collectedTags;if(!M)return await (0,m.sendResponse)(K,B,i,F.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,v.toNodeOutgoingHttpHeaders)(i.headers);u&&(t[f.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let o=void 0!==F.renderOpts.collectedRevalidate&&!(F.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&F.renderOpts.collectedRevalidate,a=void 0===F.renderOpts.collectedExpire||F.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:F.renderOpts.collectedExpire;return{value:{kind:h.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:o,expire:a}}}}catch(t){throw(null==o?void 0:o.isStale)&&await $.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:O})},y),t}},l=await $.handleResponse({req:e,nextConfig:j,cacheKey:U,routeKind:o.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:S,responseGenerator:u,waitUntil:a.waitUntil,isMinimalMode:s});if(!M)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==h.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(d=l.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",O?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,v.fromNodeOutgoingHttpHeaders)(l.value.headers);return s&&M||c.delete(f.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,_.getCacheControlHeader)(l.cacheControl)),await (0,m.sendResponse)(K,B,new Response(l.value.body,{headers:c,status:l.value.status||200})),null};z?await d(z):await L.withPropagatedContext(e.headers,()=>L.trace(c.BaseServerSpan.handleRequest,{spanName:`${k} ${E}`,kind:i.SpanKind.SERVER,attributes:{"http.method":k,"http.target":e.url}},d))}catch(t){if(t instanceof R.NoFallbackError||await $.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:O})}),M)throw t;return await (0,m.sendResponse)(K,B,new Response(null,{status:500})),null}}e.s(["handler",()=>P,"patchFetch",()=>M,"routeModule",()=>$,"serverHooks",()=>I,"workAsyncStorage",()=>T,"workUnitAsyncStorage",()=>D],765532)}];

//# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_a79bb22e.js.map