# Operational acceptance checks for a migration or integration

Nightly Software · Published October 5, 2026 · Version 1.0

These files contain **synthetic examples for evaluating a system**, not customer data, measured outcomes or a production-ready importer. Product, warehouse, order and operation identifiers are fictional. Your operations owner should adapt and approve these proposed acceptance decisions. Do not upload real inventories, customer documents or credentials to a public tool to test them.

## Files

- [Inventory migration from Excel](https://nightlysoftware.com/datos/migracion-inventario-ejemplo.csv): eight catalog, unit and balance cases.
- [Transfers between warehouses](https://nightlysoftware.com/datos/traspasos-almacenes-ejemplo.csv): ten states covering reservations, blocks and partial receipt.
- [ERP integration](https://nightlysoftware.com/datos/integracion-erp-ejemplo.csv): six confirmation, retry and record-authority cases.

The CSV files use UTF-8, comma separators and decimal points. Select the delimiter when importing into a spreadsheet. Keep SKUs and operation identifiers as text. An empty field means **unknown or not applicable**, never zero. The Spanish `decision_esperada` and `accion_esperada` columns identify expected demonstration outcomes; they are not commands to execute automatically.

## 1. Migrate without concealing discrepancies

Exercise formulas, only when the source values are approved:

`cantidad_base = cantidad_origen × factor_unidad_base`

`diferencia = conteo_fisico_base − cantidad_base`

Column meanings: `sku_origen` is the source SKU, `sku_canonico` the agreed canonical SKU, `almacen` the warehouse, `unidad_origen` the original unit, `factor_unidad_base` the conversion factor, `cantidad_origen` the original quantity, `cantidad_base` the base-unit balance, `conteo_fisico_base` the physical count and `diferencia` the discrepancy.

- **M01:** 120 TOR-M6 pieces and a physical count of 120 give a discrepancy of 0. Numeric agreement does not replace approval of the source and cutover time.
- **M02:** a second row normalizes to the same TOR-M6 SKU and ALM-A warehouse. Do not automatically add 120 + 30: it might be a duplicate, a separate location or an older snapshot. Verify lineage and the business key first.
- **M03:** four ACE-01 boxes equal 48 pieces only if the 12-pieces-per-box conversion is approved for this product. A count of 48 does not establish that the conversion is correct.
- **M04:** two boxes have no approved conversion. A physical count of 24 does not authorize inferring and saving a factor of 12. Hold the row until resolved.
- **M05:** balance and count agree but the identifier is missing. Hold the row: a correct total does not make an unidentified catalog trustworthy.
- **M06:** the file says 20 and the count says 18, a discrepancy of −2. Record the cause and authorized decision before opening operations; do not silently adjust it away.
- **M07:** zero is a valid balance when the catalog and cutoff are approved. Do not delete a product because its balance is zero.
- **M08:** −3 recorded liters and 0 counted give a discrepancy of +3. Preserve the evidence and investigate; do not turn negatives into zero to clean up the report.

Before accepting cutover, record the source/version, catalog and location keys, count owner, cutoff time, discrepancies and opening decision. A backup without a restoration exercise does not establish a usable rollback. A rollback must also reconcile transactions recorded since cutover: do not discard them by restoring an older copy.

Full guide: [Migrating inventory from Excel](https://nightlysoftware.com/en/blog/inventory-migration-from-excel).

## 2. Separate on-hand and available stock

This exercise uses pieces of one SKU and non-overlapping reservation/blocked buckets. That is an example convention; agree on your system's definitions before applying the formulas.

`disponible_A = existencia_A − reservado_A − bloqueado_A`

`total_controlado = existencia_A + existencia_B + en_transito`

`existencia_A/B` means on-hand stock, `reservado_A` reserved stock, `bloqueado_A` blocked stock, `disponible_A` available stock and `en_transito` in-transit stock.

| Case | A: on-hand / available | B: on-hand | In transit | Expected observation |
| --- | --- | --- | --- | --- |
| T00 | 100 / 85 | 20 | 0 | 10 reserved and 5 blocked units remain physically in A. |
| T01 | 88 / 73 | 20 | 12 | Confirmed dispatch of 12; B has not received them. |
| T02 | 88 / 73 | 28 | 4 | B confirms receipt of 8; 4 remain pending. |
| T03 | 88 / 73 | 28 | 4 | Replaying REC-001 creates no additional receipt. |
| T04 | 92 / 77 | 28 | 0 | The outstanding 4 return and A confirms physical receipt. |
| T05 | 92 / 77 | 28 | 0 | Reserving another 80 is rejected: only 77 are available. |
| T06 | 92 / 77 | 28 | 0 | Cancellation does not erase or rewrite the 8 already received in B. |
| T07 | 92 / 82 | 28 | 0 | Releasing 5 reserved units changes availability, not on-hand stock. |
| T08 | 92 / 72 | 28 | 0 | Blocking another 10 changes availability, not the physical total. |
| T09 | 92 / 72 | 28 | 0 | Selling 73 is rejected under the agreed no-overselling rule. |

The total stays at 120 in every state. Cancellation alone does not return physical goods: T04 requires a confirmed return. If goods are lost or damaged, record an evidenced, authorized discrepancy or adjustment; do not force fictional conservation. Also test two people reserving the last unit, receipt above the outstanding quantity, different units and a user without adjustment approval. Decide whether your policy allows backorders; do not confuse that decision with available stock.

Full guide: [Inventory between warehouses](https://nightlysoftware.com/en/blog/inventory-between-warehouses).

## 3. Retry without duplicating or overwriting

Column meanings: `caso` is the case, `id_operacion` the operation identifier, `id_negocio` the business identifier, `sistema_autoridad` the authoritative system, `intento` the attempt, `estado_observado` the observed state and `registros_esperados` the expected destination-record count.

- **E01:** op-100 for ORD-100 is confirmed once and preserves its destination identifier.
- **E02:** the second op-100 attempt returns the previous result without creating a second order. This requires an agreed, supported deduplication mechanism; writing a number into a log does not guarantee idempotency.
- **E03:** op-200 timed out and you do not know whether the destination created ORD-200. The record-count field is intentionally empty. Query using a supported key and reconcile before retrying creation. If the provider cannot support lookup or deduplication, queue manual review; do not promise automatic safe retries.
- **E04:** 10 units were ordered and 8 received. The other 2 remain pending or require an authorized discrepancy. A successful HTTP response does not mean a complete delivery.
- **E05:** permission denied: do not retry under a more privileged identity or expand access as part of the retry.
- **E06:** someone changed the record during synchronization. Do not overwrite without resolving the version and the authoritative system for that field.

Agree on per-field authority, synchronization direction, minimum permissions, API availability under the actual plan/contract, deduplication, reconciliation, logs without secrets, exception owners and how to stop the connector. ERP products do not expose identical resources or retry guarantees. Invoicing, fiscal stamping, payments and tax obligations require separate review; this exercise neither establishes compliance nor executes those operations.

Full guide: [Connecting an ERP without replacing it](https://nightlysoftware.com/en/blog/connect-erp-without-replacing-it).

## Requesting a useful demonstration

Provide only synthetic examples and agreed rules. Ask the supplier to run the successful case, its exception and its retry; record the observed result, evidence, owner and acceptance decision. An expected result remains a hypothesis until tested in the environment and version you will receive. These files neither certify a product nor establish that Nightly implemented these rules for a customer.

[How we work and scope worksheet](https://nightlysoftware.com/en/how-we-work#plantilla-alcance) · [Free diagnosis](https://nightlysoftware.com/en/book) · [Instrucciones en español](https://nightlysoftware.com/datos/pruebas-operacion-es.md).
