Reconstrucción de memoria a partir de Leval, Souchy, Casanova, Ovejero y Redalyc, sin páginas a mano: certeza **A** en la abolición del dinero interior y en el trueque entre colectividades, **B** en vales, carnet y cajas de compensación, **C** en los detalles de emisión y sanción, según la escala de `draft.md` §2. Todo es **[doctrina, sin verbatim]**. Confírmalo en Leval (*Colectividades libertarias en España*, capítulos de Aragón y Levante, y el pasaje sobre el Congreso de Caspe), en Souchy (reportajes de pueblos aragoneses) y en Casanova (*El sueño igualitario*, economía de las colectividades) antes de citar. **Puntos principales del tema «Intercambio sin moneda: vales, don, trueque y cajas de compensación» (reconstrucción)** | # | Tesis | Cert. | | --- | --- | --- | | 1 | **Abolición del dinero dentro de la colectividad.** En muchas colectividades aragonesas (y en menor medida levantinas) la moneda republicana dejó de circular entre miembros: el consumo se cubría desde el almacén comunal, sin compra ni precio interior | A | | 2 | **Carnet de consumo (o de productor)**: cada familia inscrita retira del almacén según un cupo fijado por la asamblea (racionamiento por necesidades, no por saldo). Es contabilidad de reparto, no crédito: lo retirado se anota, no se paga | A/B | | 3 | **Vales locales** para lo no racionado: bonos de papel de valor local, nominativos o al portador según el pueblo, sin curso fuera de la colectividad y, en varios casos, con caducidad. Son instrumento de reparto, no moneda: no dan interés ni se acumulan | B | | 4 | **El trabajo no se cambia por dinero.** Aportar trabajo da derecho al consumo (salario familiar, ficha 04) sin relación aritmética entre horas y bienes; los oficios se intercambian dentro del pueblo sin precio | B | | 5 | **Trueque de excedentes entre colectividades**, en especie, con precio de referencia o sin él, coordinado por la federación comarcal; los excedentes no se venden entre pueblos, se compensan | A | | 6 | **Cajas de compensación y almacenes comarcales**: la federación (comarcal, y en Aragón el Consejo y la Federación de Colectividades tras el Congreso de Caspe, febrero de 1937) centraliza excedentes y déficits; las colectividades ricas abastecen a las pobres sin contraprestación estricta. Caspe acordó además suprimir las monedas locales y unificar el carnet de productor | B | | 7 | **Con el exterior se paga en moneda**: la colectividad tiene una caja común que vende excedentes a las ciudades y compra lo que no produce (maquinaria, abonos) con dinero republicano; el precio existe hacia fuera y no hacia dentro | A | | 8 | **Sin acumulación**: vales y carnet no permiten ahorrar ni prestar; el excedente vuelve al común, y lo no consumido en el periodo caduca o se reintegra | B/C | | 9 | **La confianza sustituye a la garantía monetaria**: en un pueblo donde todos se conocen, el abuso del almacén o del vale se corrige en asamblea, no con un cobro; la reputación es el respaldo del intercambio | C | **Ficha de confirmación del mapeo** (fuente: [draftv0.md](../drafts/draftv0.md)) - **Mapeado:** tesis 1 → hallazgo [5](../drafts/draftv0.md#L15), fila [7](../drafts/draftv0.md#L129) de la confrontación, hallazgo [E](../drafts/draftv0.md#L150), [CL-6](../drafts/draftv0.md#L173) y [TK-E'01](../drafts/draftv0.md#L237) (precio cero, `market_model.js:182`, `shops_model.js:414-415`, verificados); tesis 2 y 3 → [TK-D'03](../drafts/draftv0.md#L194) (pregunta por el carnet y los vales) y [TK-E'02](../drafts/draftv0.md#L238) (vales = `transfers` `TIME`, `transfers_model.js:25`); tesis 4 → [TK-E'03](../drafts/draftv0.md#L239) (bolsa de trabajo sin `salary`, `jobs_model.js:192`); tesis 5 → CL-6 (`kind: "barter"`); tesis 6 → [TK-F'02](../drafts/draftv0.md#L249) y el default de TK-D'03 (saldo `TRUST` liquidado por la federación); tesis 7 → nada explícito, pero [CL-5](../drafts/draftv0.md#L172) (tesoro de tribu) es la caja común que compra fuera. - **Acierto no explicitado 1 (el precio es un número, no un cobro):** ninguna compra de Oasis liquida en cadena. `decrementStock` publica un `marketPurchase` sin pago ([L634](vendor/oasis/src/models/market_model.js#L634)), `buyProduct` un `shopPurchase` igual de vacío ([L614](vendor/oasis/src/models/shops_model.js#L614)), y en la tienda el estado `PAID` lo declara el vendedor por su palabra ([L26](vendor/oasis/src/models/shops_model.js#L26), [L731-L734](vendor/oasis/src/models/shops_model.js#L731-L734)); en los cinco módulos no aparece `sendtoaddress`, `ecoin` ni `wallet`. Draftv0 trata el `> 0` como una prohibición económica; es solo una validación de formulario. Quitarla (TK-E'01) no rompe ninguna liquidación porque no hay ninguna. La tesis 9 (confianza en vez de cobro) describe exactamente cómo funciona ya el código. - **Acierto no explicitado 2 (el trueque ya tiene nombre):** Market conoce un `item_type: "exchange"` que filtra por `FOR SALE` ([L391-L392](vendor/oasis/src/models/market_model.js#L391-L392)) y que el formulario ofrece como opción «Exchange» (`market_view.js:384`), pero `createItem` le exige precio positivo ([L182](vendor/oasis/src/models/market_model.js#L182)) y `updateItemById` también ([L252](vendor/oasis/src/models/market_model.js#L252)). El trueque existe como etiqueta y está prohibido como número. CL-6 proponía inventar `kind: "barter"`; basta con liberar el tipo que ya hay. - **Acierto no explicitado 3 (el banco de tiempo está escrito en Jobs, no en Transfers):** `createJob` guarda `salary` como `0.000000` cuando no se da ([L200-L201](vendor/oasis/src/models/jobs_model.js#L200-L201)), la actualización solo rechaza salarios negativos ([L334](vendor/oasis/src/models/jobs_model.js#L334)), y el tipo `exchange` lleva `hoursOffered`, `hoursRequested` y `exchangeSkill` ([L228-L230](vendor/oasis/src/models/jobs_model.js#L228-L230); «Skill wanted in exchange», `jobs_view.js:383`). Es la tesis 4 (oficios intercambiados sin precio) tal cual. [§2.6](../drafts/draftv0.md#L105) solo dice que «dos son asalariadas» y TK-E'03 propone un tipo `collective` nuevo sin apoyarse en el que existe. - **Acierto no explicitado 4 (la RBU ya paga en vales):** cada asignación de época se registra como `transfer` del PUB al miembro, con `concept: "UBI …"`, estado `UNCLAIMED`, `deadline` de gracia y `tags: ["UBI", …]` ([L974-L986](vendor/oasis/src/models/banking_model.js#L974-L986)), y `transfers_model.js` la reconoce por la etiqueta ([L75-L79](vendor/oasis/src/models/transfers_model.js#L75-L79)). El común ya emite vales nominativos con caducidad: TK-E'02 no parte de cero, parte de ahí. - **Acierto no explicitado 5 (el vale caduca y no se acumula):** `createTransfer` exige `deadline` futura ([L233-L234](vendor/oasis/src/models/transfers_model.js#L233-L234)) y `deriveStatus` pasa a `DISCARDED` lo vencido ([L182-L183](vendor/oasis/src/models/transfers_model.js#L182-L183)). Es la tesis 8 en aritmética. Conviene decirlo en «Lo que no se toca». - **Hueco 1 (grave, tesis 6):** TK-D'03 y TK-F'02 dan por hecho un «saldo `TRUST`». En `transfers_model.js` no hay ningún `balance`, `ledger` ni suma por par (verificado con grep: cero apariciones); `TRUST` es solo una etiqueta normalizada ([L26-L29](vendor/oasis/src/models/transfers_model.js#L26-L29)) sin lógica propia. Peor: `isValidId` solo acepta feeds `@…ed25519` como destinatario ([L12](vendor/oasis/src/models/transfers_model.js#L12), aplicado en [L228](vendor/oasis/src/models/transfers_model.js#L228)), y una tribu es un mensaje `%…`. **Una tribu no puede recibir ni emitir una transferencia.** La caja de compensación no cabe en `Transfers` sin CL-5 (tesoro con identidad propia) y sin un agregado nuevo. - **Hueco 2 (tesis 2):** el carnet de consumo es un cupo por hogar retirado del almacén, no un crédito. TK-E'02 lo mete en `transfers` `TIME` (un vale bilateral) y no depende de CL-9 (`household`). La costura correcta es la tienda de tribu: pedido `shop-purchase` privado entre comprador y vendedor ([L636-L651](vendor/oasis/src/models/shops_model.js#L636-L651)), estados del pedido ([L26-L28](vendor/oasis/src/models/shops_model.js#L26-L28)) y `RECEIVED` que solo firma el comprador ([L731-L732](vendor/oasis/src/models/shops_model.js#L731-L732)). Falta una tarea. - **Hueco 3 (tesis 3):** el vale de Oasis es nominativo y bilateral: `from` es siempre el autor ([L243](vendor/oasis/src/models/transfers_model.js#L243)), lo confirma solo el destinatario ([L339](vendor/oasis/src/models/transfers_model.js#L339)) y se cierra con dos firmas ([L177-L181](vendor/oasis/src/models/transfers_model.js#L177-L181)). No hay endoso: un vale no puede pasar a un tercero. TK-D'03 no pregunta si los vales históricos circulaban o eran nominativos; la respuesta decide si el modelo necesita endoso o no. - **Hueco 4 (tesis 7):** ningún parche dice que el precio **se conserva hacia fuera**. CL-6 «admite» precio cero; no dice que dentro de la tribu sea el default ni que el Market con precio siga siendo el canal con el exterior y la caja común (CL-5) quien compra. Sin esa frase, el criterio 7 parece pedir abolir el precio en toda la red. - **Contradicción a corregir:** la fila [7](../drafts/draftv0.md#L129) afirma que «solo `transfers` `TIME` y `couchsurfing` admiten lo no monetario» y el hallazgo [5](../drafts/draftv0.md#L15) que «el don y el trueque no son representables». Ambas son falsas en parte: `housing` admite precio 0 también en `rent` y `sale`, porque `nonNeg` devuelve 0 para todo lo no positivo ([L25-L28](vendor/oasis/src/models/housing_model.js#L25-L28)) y `buildContent` lo aplica ([L317](vendor/oasis/src/models/housing_model.js#L317)); `jobs` admite `salary` 0 en cualquier tipo; y el trueque es representable como `exchange` con precio nominal. [§2.6](../drafts/draftv0.md#L106) («solo `couchsurfing` fuerza precio cero») es exacto; la fila 7 generaliza mal. Se corrige con nota fechada, no reescribiendo. - **Sin hueco:** tesis 9, cubierta de hecho por `transferOpinion` ([L411-L425](vendor/oasis/src/models/transfers_model.js#L411-L425)) y por `marketOpinion`, que solo puede emitir quien compró ([L542](vendor/oasis/src/models/market_model.js#L542)); no necesita parche, solo que CL-4 saque esas opiniones del karma de la renta, cosa que ya hace. Veredicto: el intercambio sin moneda está mapeado en su prohibición (precio cero, CL-6, TK-E'01) y en su carril de escape (`TIME`), no en su mecánica: el carnet de consumo no tiene costura, la caja de compensación no cabe en `Transfers` (sin saldo, sin tribu como destinatario), y las tres grietas que el código ya trae (Jobs con salario 0 y tipo `exchange`, Market con `exchange` etiquetado, compras que no cobran) no estaban en el draft. --- **Correcciones aplicadas (2026-09-09)** - [draftv0.md hallazgo 5](../drafts/draftv0.md#L15): matizado que el trueque existe como etiqueta `exchange` con precio forzoso y que `jobs` (salario 0) y `housing` (precio 0) son apoyos adicionales del criterio 7 (contradicción). - [draftv0.md fila 7](../drafts/draftv0.md#L129): añadidos `jobs` con `salary` 0 y tipo `exchange` (`jobs_model.js:200-201`, `:228-230`), `housing` con precio 0 (`housing_model.js:25-28`) y el `item_type: "exchange"` de Market con precio forzoso (`market_model.js:391-392`, `:182`); el veredicto pasa de «un carril de escape» a «carriles de escape» (contradicción). - [draftv0.md hallazgo E](../drafts/draftv0.md#L152): nota fechada con las grietas no citadas (Jobs, Housing, `exchange` de Market) y con el hecho de que ninguna compra liquida en cadena (`market_model.js:634`, `shops_model.js:614`, `:26`, `:734`): el precio es un número declarado, no un cobro (aciertos 1, 2 y 3). - [draftv0.md CL-6](../drafts/draftv0.md#L173): `barter` reutiliza `item_type: "exchange"` (`market_model.js:391-392`); los vales son nominativos, con doble confirmación y caducidad (`deriveStatus`, `transfers_model.js:175-185`), como ya hace la RBU (`banking_model.js:974-986`); la caja de compensación exige un agregado nuevo y el tesoro CL-5 como identidad porque `transfers` no tiene saldo ni acepta tribus (`transfers_model.js:12`); el precio se conserva hacia fuera (huecos 1 y 4, aciertos 2 y 4). Costuras ampliadas. - [draftv0.md TK-D'03](../drafts/draftv0.md#L194): añadidas las preguntas cupo o saldo, caducidad y endoso, quién emite, compensación bilateral o multilateral (Caspe, febrero 1937) y pago exterior en moneda (huecos 2, 3 y 4); default: vales nominativos con `deadline` emitidos por la comisión de abastos (cargo CL-2), carnet = cupo por `household` en la tienda de tribu (TK-E'04), saldo `TRUST` por par de tribus con CL-5, Market con precio hacia fuera; nueva alternativa: vales al portador endosables; desbloquea TK-E'02 y TK-E'04. - [draftv0.md TK-E'01](../drafts/draftv0.md#L237): `barter` = tipo `exchange` liberado del `> 0`; el cambio es solo de validación porque `marketPurchase`/`shopPurchase` no pagan; costuras `market_model.js:252`, `:391-392`, `:634`, `shops_model.js:614` (acierto 1 y 2). - [draftv0.md TK-E'02](../drafts/draftv0.md#L238): vales nominativos emitidos por la comisión de abastos, cierre por confirmación del receptor, caducidad por `deadline`, sin endoso; el carnet de consumo sale de aquí y pasa a TK-E'04; depende también de G'03; costuras `transfers_model.js:175-185`, `:243`, `:339` (hueco 3, acierto 5). - [draftv0.md TK-E'03](../drafts/draftv0.md#L239): parte del tipo `exchange` (`hoursOffered`, `hoursRequested`, `exchangeSkill`) y de que `salary` 0 ya es legal; costuras `jobs_model.js:200-201`, `:228-230`, `:334` (acierto 3). - [draftv0.md TK-E'04](../drafts/draftv0.md#L239) (nueva, prioridad media, tras TK-E'03): carnet de consumo sobre la tienda de tribu: pedido `shop-purchase` sin precio que descuenta un cupo por `household`, `RECEIVED` firmado por el consumidor y `PAID` suprimido; depende de D'03, B'02 y E'01; costuras `shops_model.js:26-28`, `:592-616`, `:636-651`, `:731-734` (hueco 2). - [draftv0.md TK-F'02](../drafts/draftv0.md#L249): requiere un agregado de saldo por par de tribus (inexistente) y que el tesoro CL-5 sea emisor y destinatario porque `isValidId` solo acepta feeds; costuras `transfers_model.js:12`, `:26-29`, `:175-185` (hueco 1). - [draftv0.md resumen de prioridades](../drafts/draftv0.md#L275): TK-E'04 añadida a la fila Media. - [00-indice.md](00-indice.md#L14): fila «Intercambio sin moneda» enlazada a esta ficha, con hallazgo principal y tareas tocadas.