THJALFIQUOTE / FIELD GUIDE / 1.0.0

From a component list
to a considered purchase.

A practical guide to issuing a request, reviewing every returned row and handing over supplier drafts with the evidence attached.

Local browser app · One BOM · Up to eight suppliers

1. Open your workspace

Extract the entire buyer ZIP. Open app/index.html in desktop Google Chrome. Keep app/, manual/, screenshots/ and examples/ together. You do not need Node, a local server, an account or an internet connection.

Tested on Linux x86_64, Google Chrome 152.0.7977.82, using local files with the browser context offline. Other browsers and operating systems are unverified. A 390px layout was checked for readable navigation and horizontally scrolling tables; desktop Chrome is the supported workflow.

Save before closing. Your work lives in this tab until you click Save project. Check that the JSON file downloaded. There is no automatic recovery or background saving.
ThjalfiQuote start screen with Northlight example and own-file import
The actual offline app. The sample-first path contains original fictional data.

2. Reach your first result: USD 48

Click Try the Northlight example. This loads a 10-board BOM and two quote files, already mapped and issued as revision 1. The example is deliberately unreviewed. The fixed review date is October 3, 2026.

Northlight needs 20 DEMO-R-A, 10 DEMO-C-B and 10 DEMO-J-C pieces. All names and parts are fictional. This exercise is about purchasing records, not component suitability.

  1. In Review & award, open Alpha / DEMO-R-A. Confirm quote validity and accept the five excess pieces. Add “Accept five spare pieces” and choose Award this offer.
  2. Award Alpha / DEMO-C-B, confirming validity. Award Beta / DEMO-J-C, also confirming validity.
  3. Open Alpha / DEMO-X. Select Excluded extra, write “Not in issued BOM” and Record row decision.
  4. Open Beta / DEMO-R-A. Select Unselected alternate, write “Alpha selected” and record the decision.
  5. Open Beta / DEMO-C-BX. The changed suffix is an identity conflict, so it cannot be awarded. Select Rejected, write “MPN suffix differs” and record the decision.
SupplierSelected partsFixed chargesDraft total
Alpha25 × 0.08 + 10 × 1.20 = 14.005.00USD 19.00
Beta10 × 2.50 = 25.004.00USD 29.00
Combined40 needed / 45 purchased / 5 excessTwo charges, once eachUSD 48.00

All three demand lines are awarded and all six returned rows are accounted for. Only then does Complete coverage appear. This is a reviewed selection, not a cheapest-price recommendation.

Reviewed Northlight job with three awards, zero unreviewed quote rows, five excess pieces and 48.00 total
The expected Northlight result after the six explicit decisions.

The examples/ folder includes the three CSV inputs, an expected-results sheet and expected recipient draft. The separate free pack includes those files and this guide, without the paid application. You can inspect the exercise in a text editor or your own spreadsheet.

3. Bring your own files

For an existing job, go to Job & BOM → Start a new job. Save first. Name the job, choose USD, EUR or GBP and set a review date. Select your BOM and an explicit comma, semicolon or tab separator. Click Read & map columns.

Inputs must be UTF-8 text with one unique, nonempty header row and rectangular data. Quoted fields may contain delimiters, line breaks and doubled quotation marks. LF and CRLF are supported, with an optional UTF-8 byte-order mark. No XLSX, PDF, CAD files, nested BOMs or automatic supplier integrations are included.

BOM fieldHow to map it
Manufacturer, exact MPN, quantityRequired. Identity keeps case, punctuation, suffixes and leading zeros.
Line IDOptional, unique. If blank, generated as L1, L2, etc. Repeated MPNs remain separate rows. Reserved IDs __proto__, constructor and prototype are rejected.
DescriptionOptional, retained for the RFQ.
DNPOptional. Enter each nonempty value you want excluded on a separate line in DNP values. Matching is exact. Any nonempty unrecognized token rejects the import. Clear included tokens such as “No” in your source copy before importing. All quantities, including excluded rows, must still be positive integers.

Choose Per board × build count or Already extended. Always enter a positive build count; it is ignored for already-extended quantities. Click Preview mapped result, inspect included/excluded rows, then Confirm this import. The preview shows the first 20 rows; all valid rows are kept. Changes to mappings or form fields require another preview.

Issue a stable request

In Issue RFQ, review the requested quantities and issue date. Click Issue revision 1. Download the RFQ CSV or printable RFQ HTML and send it yourself to suppliers. Ask them to return the same IDs and exact manufacturer/MPN along with each quantities, price and price-per count.

If demand changes, edit the requested quantities here and click Reissue changed quantities. A confirmation explains that all awards and quote reviews will be cleared. Earlier issued snapshots remain in the project. Fixed quotes are never silently repriced. A quote too short for the new revision cannot be awarded.

Map returned quotes

In Supplier quotes, enter one supplier name and quote reference per file. Add quote date, optional expiry and promised dates, quote currency and fixed charges. Use dot decimals for charges. Choose dot or comma decimals for prices; thousands separators and scientific notation are not supported.

Read the quote file, then map required manufacturer, exact MPN, offered quantity, quoted price and price-per count. Optional fields are requested line ID, quoted line total and per-row currency. A price of 12 with a price-per count of 100 is 12 per 100 each; quantity is always the fixed number of pieces quoted. No pack/reel conversion is inferred. Preview and confirm.

One file is allowed per supplier name. Corrected quote prices or metadata require starting a new job and reimporting the corrected files; v1 does not edit or remove imported quotes. Save the old project for its history. The supplier register lists issued IDs missing from each reply; the review stage exposes unmatched extras and identity conflicts.

4. Review sources, then decide

Rows match a unique issued ID first, otherwise a unique exact manufacturer/MPN pair. A matching ID never makes a different MPN acceptable. Open Review to see the original filename, physical row, quote dates, raw values and SHA-256 source digest.

Source drawer for Beta changed MPN DEMO-C-BX with Identity conflict and disabled award
Beta’s changed suffix stays visible. The original values explain why the award is blocked.

A manual link requires a reason and still cannot override manufacturer or MPN differences. For ambiguous repeated parts, explicitly link the correct issued line; every other returned row still needs its own decision.

ConditionRequired action
Short quantity, changed identity, mixed currency, mismatched quoted totalCannot award. Reject, exclude or mark pending with a reason; obtain a corrected quote if you need to purchase it.
Excess quantity / zero priceExplicitly check the matching confirmation before awarding.
Quote validityConfirm validity on the review date for every award. Blank expiry requires this buyer confirmation. Expired quotes are blocked; obtain a refreshed quote.
Review before issue/quote dateCorrect the review date. Applying a different date clears selections for revalidation.
Extra or unselected rowRecord excluded, rejected or unselected with a reason. Pending technical review remains unresolved.
Demand deferredUse Defer / clear and enter a reason. Deferral keeps coverage partial. Clear decision reverses it; award another offer to change a selection.

Costs use integer/rational arithmetic: fixed offered quantity × price ÷ price-per count. Each line rounds half-up to two decimal places; the rounded lines are summed, then fixed supplier charges are added once for each selected supplier. No tax, duty, currency conversion, price-break optimization or electrical equivalence is calculated.

For example, 3 pieces × 1.666667 per 1000 = 0.005000001, rounded to 0.01. A supplied extended total must equal the computed rounded line amount or the offer is blocked.

5. Export, save and reopen

Open Export handoff. The embedded preview is the same recipient HTML downloaded through Download printable draft. Open that HTML in Chrome and use Print for paper or PDF. Table column headings repeat on continued pages; the quote register title repeats with its headings. The app does not send, order or invoice anything.

Export handoff preview showing complete coverage and selected Northlight supplier requests
Review the recipient draft before sharing it. Partial work is visibly labelled PARTIAL.

Download handoff ZIP includes:

The originals and project can contain your supplier prices and private commercial data. Share only with intended recipients. Originals are not spreadsheet-sanitized. Generated CSVs prefix formula-leading text with an apostrophe; this changes the exported text representation. Spreadsheet applications may still auto-format identifiers such as leading zeros—import those columns as text. Exact originals remain available separately.

Use Save project for a JSON download at any stage. In a fresh app tab, click Reopen and select it. The app validates the schema and original digests, reparses inputs and recomputes amounts/coverage. A damaged project does not replace current work. Source hashes detect accidental changes, not supplier authenticity; deliberately edited projects are not signed audit records.

Supported bounds

ItemLimit
BOM / returned quotes500 BOM data rows; 2,500 quote data rows total; eight suppliers (one file each)
Files5 MiB each; 10 MiB total original UTF-8 inputs; 64 MiB saved project, including JSON escaping and revision history; changes exceeding this size are refused before commitment
Tables64 columns; 20,000 characters per cell; unique nonempty headers
QuantitiesPositive integers: per-BOM row up to 1,000,000; build count up to 100,000; extended/requested/offered each quantity up to 1,000,000,000; price-per count up to 1,000,000
Prices0 to 1,000,000,000 inclusive, maximum six decimals. Quoted line totals and fixed charges have at most two decimals and the same maximum.
Text / revisionsJob and supplier names, quote reference and line IDs up to 200 characters; filenames up to 255; decision/link notes up to 2,000; Up to 100 issued revisions, also subject to the project-size limit
SelectionOne fixed offer per included line; no split awards, substitutions, consolidation or inventory management

Only USD, EUR and GBP are available, with one currency for the entire job. If any supplier/row uses another supported currency it remains visible but cannot be awarded in this job. No CAD, distributor or spreadsheet-application integration is claimed.

390 pixel narrow layout of the actual review workspace
Narrow-screen reference: navigation and summary fit, wide review tables scroll horizontally.

Change would exceed 64 MiB: Your previous work is unchanged. Save the current job, then start a new job with the required current inputs. Large descriptions and repeated revisions consume the same project budget; the 100-revision limit does not guarantee space for every large job.

Troubleshooting

What you seeWhat to do
Blank page or buttons do not workExtract the entire archive, open app/index.html in the tested Chrome, and ensure JavaScript is permitted for local files. Do not open inside an archive preview.
Map required field / wrong number of fieldsSelect the correct separator. Ensure all rows use the same column count and required fields are mapped. Commas inside fields must be quoted. Re-export as UTF-8.
Duplicate headers/IDs or reserved IDUse unique headers and stable, unique line IDs. Keep repeated MPNs as separate identified rows.
Preview disappearsChanging import details invalidates the previous preview. Click Preview mapped result again.
Unknown DNP tokenExplicitly list each excluded token. For included rows, clear nonempty DNP values in a copy of the source before import.
Offer cannot be awardedRead the source drawer's reasons. Quantity, identity, currency, date or supplier-total blockers require correction, not just a confirmation box.
Total is lower than expectedThe total includes valid selected offers and charges for selected suppliers only. Review unresolved/deferred lines and all unselected rows.
Complete coverage will not appearAward all included lines and account for every returned row. Pending reviews and deferrals intentionally keep the draft partial.
Project not opened / hash differsUse an untouched saved JSON from this version. Do not hand-edit source text or approvals. Reimport original inputs into a new job if recovery is necessary.
No downloaded fileCheck Chrome Downloads and local download permissions. A “download requested” message is not a claim the file was saved to disk.

Privacy, keyboard use and removal

Runtime files are bundled; there are no network calls, accounts, telemetry, cookies or local-storage saves. Files are processed in the open tab and exported only when you choose. Closing the tab discards unsaved work. The browser and operating system may retain downloaded files and their usual local records.

Use Tab/Shift+Tab to move among labelled controls, Enter/Space to activate buttons and checkboxes, arrow keys for selections, and Escape to close a review dialog. Visible focus rings help track the active control. No accessibility certification is claimed.

To uninstall, close the tab and delete the extracted folder. Delete project/export files separately if desired. The app installs no service, extension or background process.

Version 1.0.0. Manual and screenshots reflect the tested release. The price is an experiment; no customer adoption, savings or compatibility beyond the tests is claimed.