// ─── Logística · Detalle de Recepción/Salida ──────────────────────────────
// LogisticaDetailScreen: documento editable in-place sobre el motor
// DocumentShell/DocCard (doc-kit). Extraído de screens-others.jsx (P9, split del
// cajón de 5 módulos) — con el write-path real contra el esquema D2 (P2):
// fecha_salida/fecha_entrega/transporte/guia/revisor/observaciones + itemsDetalle
// de logistica_item. Expone a window: LogisticaDetailScreen. Consume
// makeLogisticaDetail/makeBlankLogistica (detalle-helpers.js), DocumentShell/
// DocCard/useDocEdit/buildDocActions/ConfirmDeleteModal/FileUploadCard/
// ObservacionesCard (ui/doc-kit-*.jsx), MicosMetaCell (ui/doc-kit-meta.jsx),
// PartySelectorModal (screens-nuevo.jsx), LogisticaItemsTable (items-table.jsx),
// CompraCombobox/ExpedienteCombobox/expedienteLabelFromId/useExpedienteSeed/
// resolveExpedienteIdForSave/expedienteMetaField (screens/compras/combobox.jsx),
// resolveLogisticaContraparte (helpers.js), LOG_ESTADOS (dominio/pipeline.js).
//
// P9 — 3 fixes de raíz para que el write-path sea REAL de punta a punta:
// (1) MUEREN los generadores demo (LOG_TRANSPORTES/LOG_REVISORES/seed de SKUs/
// facturaTransporte fabricada, ver detalle-helpers.js) — sin transporte/guía/
// revisor/ítems reales, la pantalla muestra vacío honesto (D2, SPEC.md §8).
// (2) proveedor_id/entidad_id enrutados por lado: antes el picker SIEMPRE escribía
// `proveedorId` sin importar INGRESO/EGRESO — un EGRESO con proveedor elegido
// violaba `logistica_origen_chk` (proveedor_id/entidad_id son mutuamente
// excluyentes por CHECK) y el guardado se rechazaba en silencio (rollback
// optimista). Ahora el picker enruta al campo que corresponde según `tipo`.
// (3) expedienteId es un uuid real (FK logistica.expediente_id) — se resuelve
// texto↔uuid igual que en Compras (ver combobox.jsx).
//
// (4) Fix de raíz (review rechazada, mismo día): (3) resolvía por `find` sobre
// window.EXPEDIENTES (~500 de ~2100 reales hidratados, BIG_LIMIT) — un
// expediente_id fuera de esa ventana (a) al tipear su publicId de alta guardaba
// null con toast de éxito, y (b, DESTRUCTIVO) al editar sin tocar el campo, el
// draft se sembraba con '' y guardar pisaba en silencio un FK válido con null.
// useExpedienteSeed/resolveExpedienteIdForSave/expedienteMetaField (screens/
// compras/combobox.jsx) resuelven contra el backend antes de sembrar/guardar.
function LogisticaDetailScreen({ logisticaId, isCreate = false, startEditing = false, onBack, onSaved, onDeleted, onOpenCompra }) {
  const blank = React.useMemo(() => (isCreate ? makeBlankLogistica() : null), [isCreate]);
  const original = isCreate ? blank : (LOGISTICA.find((l) => l.id === logisticaId) || LOGISTICA[0]);
  const detail = React.useMemo(() => makeLogisticaDetail(original), [original.id, original]);

  const [toast, setToast] = React.useState(null);
  const [provPicker, setProvPicker] = React.useState(false);
  const [confirmDel, setConfirmDel] = React.useState(false);
  const [compraPick, setCompraPick] = React.useState(false);
  const [expedienteError, setExpedienteError] = React.useState(null);

  const { editing, draft, setDraft, enterEdit, discardEdit, saveEdit, patch } = window.useDocEdit(
    () => ({
      tipo: original.tipo || 'INGRESO',
      proveedor: resolveLogisticaContraparte(original),
      proveedorId: original.proveedorId || null,
      entidadId: original.entidadId || null,
      compraId: original.compraId || null,
      remito: original.remito || '',
      estado: original.estado || 'PENDIENTE',
      // Uuid real → publicId visible (ver header). isCreate ya arranca en '' (sin expediente).
      expedienteId: expedienteLabelFromId(original.expedienteId, ''),
      transporte: detail.transporte || '',
      guia: detail.guia || '',
      revisor: detail.revisor || '',
      observaciones: detail.observaciones || '',
      items: isCreate ? [] : detail.items.map((it) => ({ ...it })),
    }),
    {
      startEditing: isCreate || startEditing,
      onCancel: () => { if (isCreate || startEditing) onBack && onBack(); },
      onSave: async (d) => {
        const items = (d.items || []).map((it) => ({
          sku: it.sku || '', descripcion: it.descripcion || '',
          lote: it.lote || '', vencimiento: it.vencimiento || '',
          cantidadPedida: Number(it.cantidadPedida) || 0,
          cantidadRecibida: Number(it.cantidadRecibida) || 0,
          cantidad: Number(it.cantidadRecibida) || 0,
          observacion: (it.observacion || '').trim(),
        }));
        const tipo = d.tipo || 'INGRESO';
        const isIng = tipo !== 'EGRESO';
        // Resolver el texto del combobox (publicId tipeado/elegido) al uuid real —
        // honesto contra la ventana hidratada + backend (fix de raíz, ver header):
        // nunca null en silencio cuando el original tenía un expediente real, y un
        // publicId que no existe aborta el guardado con error inline en el campo.
        const expResolved = await resolveExpedienteIdForSave(d.expedienteId, expSeed.seedLabel, original.expedienteId);
        if (expResolved.notFoundText) {
          setExpedienteError(`No existe el expediente ${expResolved.notFoundText}`);
          return false;
        }
        const obj = {
          ...original,
          tipo,
          proveedor: d.proveedor,
          // logistica_origen_chk (P2/D2): INGRESO exige proveedor_id NOT NULL +
          // entidad_id NULL, EGRESO al revés — enrutar el id elegido a la columna
          // que corresponde según el lado (antes: siempre proveedorId, violaba
          // el check en cualquier EGRESO con contraparte elegida).
          proveedorId: isIng ? (d.proveedorId || null) : null,
          entidadId: isIng ? null : (d.entidadId || null),
          compraId: d.compraId || null,
          remito: (d.remito || '').trim(),
          estado: d.estado,
          expedienteId: expResolved.id,
          transporte: (d.transporte || '').trim(),
          guia: (d.guia || '').trim(),
          revisor: (d.revisor || '').trim(),
          observaciones: (d.observaciones || '').trim(),
          itemsDetalle: items,
        };
        // Mensaje del impacto en inventario (si corresponde al confirmar).
        const notifyImpacto = (imp) => {
          if (imp && imp.neto !== 0) {
            const signo = imp.neto > 0 ? '+' : '';
            setToast(`Remito ${obj.publicId} guardado · Inventario ${signo}${imp.neto} u.`);
          } else {
            setToast(`Remito ${obj.publicId} guardado`);
          }
          setTimeout(() => setToast(null), 3600);
        };
        if (isCreate) {
          window.MicosStore.create('logistica', { ...obj, __nuevo: true });
          window.applyInventarioFromLogistica({ ...obj, __nuevo: true, itemsDetalle: items });
          onSaved && onSaved(obj.id);
        } else {
          window.MicosStore.update('logistica', original.id, obj);
          const imp = window.applyInventarioFromLogistica({ ...obj, itemsDetalle: items });
          notifyImpacto(imp);
        }
      },
    }
  );
  const expSeed = useExpedienteSeed(original.expedienteId, editing, patch);
  React.useEffect(() => { if (!editing) setExpedienteError(null); }, [editing]);

  const blankItem = () => ({ sku: '', descripcion: '', lote: '', vencimiento: '', cantidadPedida: 0, cantidadRecibida: 0, observacion: '' });
  const patchItem = (idx, field, value) => setDraft((d) => ({
    ...d, items: d.items.map((it, i) => (i === idx ? { ...it, [field]: value } : it)),
  }));
  const addItem = () => setDraft((d) => ({ ...d, items: [...d.items, blankItem()] }));
  const removeItem = (idx) => setDraft((d) => ({ ...d, items: d.items.filter((_, i) => i !== idx) }));

  const itemsCalc = editing && draft ? draft.items : detail.items;
  const statusInfo = LOG_ESTADOS[editing && draft ? draft.estado : original.estado] || LOG_ESTADOS.PENDIENTE;

  // ── Compra de origen (OC): vincularla trae proveedor + ítems al remito de ingreso ──
  const pickCompra = (c) => {
    setDraft((d) => ({
      ...d,
      compraId: c.id,
      proveedor: c.proveedor || d.proveedor,
      proveedorId: c.proveedorId || d.proveedorId,
      items: (Array.isArray(c.itemsDetalle) && c.itemsDetalle.length)
        ? c.itemsDetalle.map((it) => ({ sku: it.sku || '', descripcion: it.descripcion || '', lote: '', vencimiento: '', cantidadPedida: Number(it.cantidad) || 0, cantidadRecibida: Number(it.cantidad) || 0, observacion: '' }))
        : d.items,
    }));
    setCompraPick(false);
  };
  // Quitar el vínculo: deja de ser "compra", la carga pasa a manual (conserva los ítems ya traídos para editar).
  const unlinkCompra = () => { setDraft((d) => ({ ...d, compraId: null })); setCompraPick(false); };
  // Eje ingreso/egreso: define etiquetas, contraparte y selector de party.
  const tipoVal = editing && draft ? (draft.tipo || 'INGRESO') : (original.tipo || 'INGRESO');
  const isIngreso = tipoVal !== 'EGRESO';
  // Compra de origen vinculada (solo aplica a ingresos).
  const compraIdShown = editing && draft ? draft.compraId : original.compraId;
  const compraRec = (window.COMPRAS || []).find((c) => c.id === compraIdShown) || null;
  const contraparteLabel = isIngreso ? 'Proveedor' : 'Cliente / Destino';
  const partyType = isIngreso ? 'proveedor' : 'entidad';
  const totalPedidos = itemsCalc.reduce((s, it) => s + (Number(it.cantidadPedida) || 0), 0);
  const totalRecibidos = itemsCalc.reduce((s, it) => s + (Number(it.cantidadRecibida) || 0), 0);
  const completo = totalRecibidos === totalPedidos;

  // Contraparte real (proveedor si INGRESO, entidad si EGRESO — CHECK dual, ver header).
  const contraparteId = isIngreso
    ? (editing && draft ? draft.proveedorId : original.proveedorId)
    : (editing && draft ? draft.entidadId : original.entidadId);
  const provRec = (isIngreso ? (window.PROVEEDORES || []) : (window.ENTIDADES || [])).find((p) => p.id === contraparteId);
  const provSub = provRec
    ? [provRec.condicionIva, provRec.cuit ? `CUIT ${provRec.cuit}` : null, provRec.condicionVenta].filter(Boolean)
    : null;
  const provName = editing && draft ? draft.proveedor : resolveLogisticaContraparte(original);

  const expShown = editing && draft ? draft.expedienteId : expedienteLabelFromId(original.expedienteId, '');
  const actions = window.buildDocActions({
    editing, enterEdit, discardEdit, saveEdit,
    onDelete: (!isCreate && editing) ? () => setConfirmDel(true) : undefined,
  });

  const metaFields = [
    { label: 'ID interno', value: original.publicId, mono: true, accent: true },
    { label: 'Tipo de movimiento', editable: editing, input: 'select',
      options: [{ value: 'INGRESO', label: 'Ingreso (recepción)' }, { value: 'EGRESO', label: 'Egreso (salida)' }],
      value: editing ? draft.tipo : (isIngreso ? 'Ingreso' : 'Egreso'), onChange: (v) => patch('tipo', v) },
    { label: 'N° de remito', editable: editing, input: 'text', mono: true, accent: !!(editing ? draft.remito : original.remito),
      value: editing ? draft.remito : (original.remito || '—'), onChange: (v) => patch('remito', v), placeholder: 'R-A-0000-00000000' },
    { label: 'Estado', editable: editing, input: 'select',
      options: Object.entries(LOG_ESTADOS).map(([v, c]) => ({ value: v, label: c.label })),
      value: editing ? draft.estado : statusInfo.label, onChange: (v) => patch('estado', v) },
    // FIX (review-lote.md, hallazgo MEDIO P17a): revertido a solo lectura. P17a la desbloqueó
    // con el mismo criterio que "Emisión" de screens/docs/remito.jsx, pero acá NO hay columna
    // real: `logistica` no tiene una fecha propia del remito (deuda conocida, "edita columnas
    // que la tabla no tiene" — ver LOGISTICA_COLUMNS en src/lib/api/serializers/logistica.ts,
    // que ni siquiera emite `fechaCreacion`). El edit se perdía en silencio; con columna real
    // ya existen `fechaSalida`/`fechaEntrega` (otro significado, no tocados acá).
    { label: 'Fecha de remito', locked: true,
      lockedTitle: 'Logística no tiene una columna real para esta fecha (deuda conocida)',
      mono: true, value: formatDate(original.fechaCreacion) },
    expedienteMetaField({
      editing, expSeed, patch,
      draftValue: draft && draft.expedienteId,
      shownValue: expShown,
      error: expedienteError,
      onClearError: () => setExpedienteError(null),
    }),
    { label: 'Transporte', editable: editing, input: 'text',
      value: editing ? draft.transporte : (detail.transporte || '—'), muted: !editing && !detail.transporte, onChange: (v) => patch('transporte', v), placeholder: 'Ej: Andreani' },
    { label: 'N° de guía', editable: editing, input: 'text', mono: true,
      value: editing ? draft.guia : (detail.guia || '—'), muted: !editing && !detail.guia, onChange: (v) => patch('guia', v), placeholder: '—' },
    { label: 'Revisor', editable: editing, input: 'text',
      value: editing ? draft.revisor : (detail.revisor || '—'), muted: !editing && !detail.revisor, onChange: (v) => patch('revisor', v), placeholder: 'Quién recibió' },
  ];

  return (
    <DocumentShell
      onBack={onBack}
      backLabel="Volver a Logística"
      eyebrow={`Logística · ${isIngreso ? 'Recepción de remito' : 'Remito de salida'}`}
      statusLabel={statusInfo.label}
      statusPill="pill-remito"
      bigId={original.publicId}
      expedienteId={expShown}
      fechaEmision={original.fechaCreacion}
      editing={editing}
      isCreate={isCreate}
      toast={toast}
      actions={actions}
    >
      {/* 1 · Documentos adjuntos */}
      <FileUploadCard
        eyebrow="Documentos adjuntos"
        title="Remito, factura de transporte y conformidad"
        description="Subí el remito del proveedor (PDF/imagen), la factura del transportista y la conformidad de recepción firmada."
        files={detail.archivos}
        editing={editing}
        extractable
        realUpload
      />

      {/* 2 · Info general — proveedor + documento */}
      <DocCard className="p-7 sm:p-8" editing={editing}>
        {/* Proveedor / Cliente header */}
        <div className="flex items-start justify-between gap-4 flex-wrap mb-7">
          <div className="min-w-0">
            <p className="text-[11px] font-bold uppercase tracking-[0.2em] mb-2" style={{ color: 'var(--accent)' }}>
              {contraparteLabel}
            </p>
            <p className="text-[22px] font-extrabold tracking-tight leading-[1.1]"
              style={{ color: provName ? 'var(--foreground)' : 'color-mix(in oklab, var(--muted-foreground) 70%, transparent)' }}>
              {provName || (isIngreso ? 'Sin proveedor' : 'Sin cliente')}
            </p>
            <p className="text-[12.5px] mt-1.5" style={{ color: 'var(--muted-foreground)' }}>
              {provSub
                ? provSub.map((part, i) => (
                    <React.Fragment key={i}>
                      {i > 0 && <span className="mx-1.5 opacity-50">·</span>}
                      {part}
                    </React.Fragment>
                  ))
                : (editing ? (isIngreso ? 'Elegí un proveedor del directorio' : 'Elegí un cliente del directorio') : 'Sin datos cargados')}
            </p>
          </div>
          {editing && (
            <button className="btn btn-ghost" type="button" onClick={() => setProvPicker(true)}>
              <IconPencil size={13} />
              <span className="hidden sm:inline">{provName ? `Cambiar ${isIngreso ? 'proveedor' : 'cliente'}` : `Elegir ${isIngreso ? 'proveedor' : 'cliente'}`}</span>
            </button>
          )}
        </div>

        {/* Divider */}
        <div style={{ borderTop: '1px solid color-mix(in oklab, var(--border) 55%, transparent)', marginBottom: '1.75rem' }} />

        {/* Datos generales */}
        <p className="text-[11px] font-bold uppercase tracking-[0.2em] mb-6" style={{ color: 'var(--accent)' }}>
          Información general
        </p>
        <div className="grid grid-cols-2 sm:grid-cols-4 gap-x-8 gap-y-6">
          {metaFields.map((it, i) => <MicosMetaCell key={i} it={it} />)}
        </div>
      </DocCard>

      {/* 3 · Ítems recibidos */}
      <DocCard editing={editing}>
        <div className="flex flex-wrap items-start justify-between gap-3 mb-5">
          <div className="min-w-0">
            <p className="text-[11px] font-bold uppercase tracking-[0.2em]" style={{ color: 'var(--accent)' }}>
              Ítems recibidos
            </p>
            <p className="text-[15px] font-extrabold mt-1.5" style={{ color: 'var(--foreground)' }}>
              Detalle del remito
            </p>
            <p className="text-[12.5px] mt-1" style={{ color: 'var(--muted-foreground)' }}>
              Verificá cantidades, lotes y vencimientos contra el pedido original.
            </p>
          </div>
          <div className="flex items-center gap-4 flex-wrap">
            <div className="text-right">
              <p className="text-[10.5px] font-bold uppercase tracking-[0.14em]" style={{ color: 'var(--muted-foreground)' }}>Líneas</p>
              <p className="text-[15px] font-extrabold tabular-nums mt-0.5" style={{ color: 'var(--foreground)' }}>{itemsCalc.length}</p>
            </div>
            <div className="text-right">
              <p className="text-[10.5px] font-bold uppercase tracking-[0.14em]" style={{ color: 'var(--muted-foreground)' }}>Pedido</p>
              <p className="text-[15px] font-extrabold tabular-nums mt-0.5" style={{ color: 'var(--foreground)' }}>{totalPedidos}</p>
            </div>
            <div className="text-right">
              <p className="text-[10.5px] font-bold uppercase tracking-[0.14em]" style={{ color: 'var(--muted-foreground)' }}>Recibido</p>
              <p className="text-[15px] font-extrabold tabular-nums mt-0.5" style={{ color: completo ? 'var(--success)' : 'var(--danger)' }}>{totalRecibidos}</p>
            </div>
          </div>
        </div>
        {isIngreso && (
          <div className="mb-6">
            {(editing && (compraPick || !compraRec)) ? (
              <div className="rounded-xl p-4 sm:p-5" style={{ border: '1px solid color-mix(in oklab, var(--border) 60%, transparent)', background: 'color-mix(in oklab, var(--surface) 40%, transparent)' }}>
                <div className="flex items-center justify-between gap-3 mb-2.5">
                  <p className="text-[11px] font-bold uppercase tracking-[0.2em]" style={{ color: 'var(--accent)' }}>Compra de origen</p>
                  {compraRec && (
                    <button type="button" className="btn btn-ghost" style={{ height: 28, padding: '0 10px', fontSize: 12 }} onClick={() => setCompraPick(false)}>Cancelar</button>
                  )}
                </div>
                <CompraCombobox value={compraRec ? compraRec.numero : ''} onPick={pickCompra} />
                <p className="text-[12px] mt-2.5" style={{ color: 'var(--muted-foreground)' }}>
                  Vinculá una orden de compra para traer sus ítems y el proveedor. Si es una recepción sin OC (carga manual), dejalo vacío y cargá los ítems abajo.
                </p>
              </div>
            ) : compraRec ? (
              <div className="rounded-xl flex items-stretch justify-between gap-2 flex-wrap" style={{ border: '1px solid color-mix(in oklab, var(--accent) 35%, transparent)', background: 'color-mix(in oklab, var(--accent) 7%, transparent)' }}>
                <button type="button"
                  onClick={() => onOpenCompra && onOpenCompra(compraRec.id)}
                  className="flex items-center gap-3 min-w-0 flex-1 text-left p-4 sm:p-5 rounded-xl cursor-pointer transition-colors group"
                  onMouseEnter={(e) => { e.currentTarget.style.background = 'color-mix(in oklab, var(--accent) 6%, transparent)'; }}
                  onMouseLeave={(e) => { e.currentTarget.style.background = 'transparent'; }}>
                  <span className="inline-flex items-center justify-center rounded-lg flex-shrink-0" style={{ width: 38, height: 38, background: 'color-mix(in oklab, var(--accent) 16%, transparent)', color: 'var(--accent)' }}>
                    <IconShoppingCart size={18} />
                  </span>
                  <div className="min-w-0 flex-1">
                    <p className="text-[10.5px] font-bold uppercase tracking-[0.16em]" style={{ color: 'var(--accent)' }}>Compra de origen vinculada</p>
                    <p className="text-[16px] font-extrabold font-mono tabular-nums leading-tight" style={{ color: 'var(--foreground)' }}>{compraRec.numero}</p>
                    <p className="text-[12.5px] mt-0.5" style={{ color: 'var(--muted-foreground)' }}>
                      {compraRec.proveedor}
                      <span className="mx-1.5 opacity-50">·</span>
                      {formatMoney(compraRec.total)}
                      <span className="mx-1.5 opacity-50">·</span>
                      {(COMPRA_ESTADOS[compraRec.estado] || {}).label || compraRec.estado}
                    </p>
                  </div>
                  <span className="flex-shrink-0 self-center transition-transform group-hover:translate-x-0.5" style={{ color: 'var(--accent)' }} title="Abrir la compra">
                    <IconArrowUpRight size={18} />
                  </span>
                </button>
                {editing && (
                  <div className="flex items-center gap-2 flex-shrink-0 pr-4 sm:pr-5">
                    <button type="button" className="btn btn-outline" style={{ height: 32 }} onClick={() => setCompraPick(true)}>Cambiar</button>
                    <button type="button" className="btn btn-ghost" style={{ height: 32 }} onClick={unlinkCompra}>Quitar</button>
                  </div>
                )}
              </div>
            ) : compraIdShown ? (
              // FIX P13 (ítem 3, hallazgo P9): antes caía al mismo bloque de "Carga manual —
              // sin orden de compra vinculada" que el caso SIN compraId — mentira si el FK
              // está pero la compra quedó fuera de la ventana hidratada (BIG_LIMIT=500,
              // core/store.js). Fallback honesto: mostrar que SÍ hay vínculo (con el id crudo,
              // no la linda `numero` que solo trae el registro real) en vez de negarlo.
              <div className="rounded-xl p-4 flex items-center gap-2.5" style={{ border: '1px dashed color-mix(in oklab, var(--border) 70%, transparent)' }}>
                <span style={{ color: 'var(--muted-foreground)' }}><IconShoppingCart size={16} /></span>
                <p className="text-[12.5px] font-medium" style={{ color: 'var(--muted-foreground)' }}>
                  Compra vinculada <span className="font-mono">{compraIdShown}</span> — fuera de la ventana cargada.
                </p>
              </div>
            ) : (
              <div className="rounded-xl p-4 flex items-center gap-2.5" style={{ border: '1px dashed color-mix(in oklab, var(--border) 70%, transparent)' }}>
                <span style={{ color: 'var(--muted-foreground)' }}><IconPackage size={16} /></span>
                <p className="text-[12.5px] font-medium" style={{ color: 'var(--muted-foreground)' }}>Carga manual — sin orden de compra vinculada.</p>
              </div>
            )}
          </div>
        )}
        <LogisticaItemsTable
          items={itemsCalc}
          editing={editing}
          onItemChange={patchItem}
          onItemRemove={removeItem}
          onAdd={addItem}
        />
      </DocCard>

      <ObservacionesCard
        editing={editing}
        value={editing && draft ? draft.observaciones : detail.observaciones}
        onChange={(v) => patch('observaciones', v)}
        placeholder="Faltantes, daños, observaciones de la recepción…"
      />

      {provPicker && window.PartySelectorModal && (
        <window.PartySelectorModal
          type={partyType}
          open={true}
          onClose={() => setProvPicker(false)}
          onPick={(obj) => {
            if (obj && obj.id) setDraft((d) => (isIngreso
              ? { ...d, proveedor: obj.razonSocial || obj.nombre || '', proveedorId: obj.id, entidadId: null }
              : { ...d, proveedor: obj.razonSocial || obj.nombre || '', entidadId: obj.id, proveedorId: null }));
            setProvPicker(false);
          }}
        />
      )}
      {confirmDel && window.ConfirmDeleteModal && (
        <window.ConfirmDeleteModal
          title="¿Eliminar remito?"
          itemName={original.publicId}
          description="Se moverá al archivo. Esta acción se puede revertir desde el visor de datos."
          onCancel={() => setConfirmDel(false)}
          onConfirm={() => {
            window.MicosStore.remove('logistica', original.id);
            setConfirmDel(false);
            onDeleted && onDeleted();
          }}
        />
      )}
    </DocumentShell>
  );
}

Object.assign(window, { LogisticaDetailScreen });
