Aronlight — Open Questions for Ricardo

Proposed defaults shown — confirm or correct each item · Jun 2026

6
High
11
Medium
6
Low
3
Blocked
Odoo catalog maintenance — action required (HIGH PRIORITY — no questions, just fixes needed in Odoo)
OD-2 15 products UNCATEGORIZED in Odoo — invisible to the agent, confirmed in real RFQs High

The agent pre-filters catalog search by Odoo category. Products with no category assigned (UNCATEGORIZED) are completely invisible to semantic search — they can only be found when a customer writes the exact Aronlight SKU. Evidence from eval corpus run 2026-07-01 (13 real RFQ cases).

Tier 1 — HIT on direct SKU in multiple real RFQs, but MISS when customer describes by spec:

SKU Product Evidence
ILEM-00034SafeLux P/NP 3H Selftest 6000K IP65 200lmHIT in cases #15, #31, #37, #39 · MISS in case #24 (spec search)
ILAR-00469Perfil de Alumínio de Superfície 2M Opal IP20HIT in case #31 · MISS in case #44

Tier 2 — quoted by rep as correct match, never surfaced by the system (case #44):

SKU Product Qty requested
ILAR-02396BEN 10W 2700K/3000K/4000K 3CCT IP2014
ILAR-02398Lente BEN 36º14
ILAR-02638BEN KIT IP6514
ILAR-0256548W Dura PRO 150cm On-Off Linkable 4000K IP69K6
ILAR-02385PETI 5W 2700K/3000K/4000K White 3CCT IP654
ILAR-02386PETI 5W 2700K/3000K/4000K Black 3CCT IP651
ILAR-02449Miranda 40W D460mm 3CCT IP446
ILAR-02796Prado M 15W 36º Branco 3000K IP2010
ILAR-02868Pini Round 3W Branco 3000K1
ILAR-0336048V 20mm Calha encastrada 2m Preto3
ILAR-0337248V 20mm Módulo de ligação reto Preto2
ILAR-0339148V 20mm LINEAR DOT L112 6W 36º 2700K Preto12
ILAR-03668CIMA Caly H350 8W 3CCT13

Action required: assign an Odoo product category to each SKU above. The category name determines which search bucket the agent uses (e.g. "Painéis LED" → PANELS, "Projetores" → SPOTLIGHTS, "Armaduras Emergência" → EMERGENCY, "Perfis Alumínio" → PROFILES). Without a category, the agent will miss these products on every spec-based RFQ regardless of how well the rest of the system works.

Priority: HIGH — 15 products actively quoted by reps but invisible to the agent. Each one is a guaranteed MISS on any spec-based search.

0 — Client workflow — TOP PRIORITY (from live Odoo data: 5,720 proposals Apr-Jun 2026)
CLI-1 Aronlight España SL — internal channel workflow (796 proposals/quarter) High

ARONLIGHT ESPAÑA SL is the single largest source of proposals in staging: 796 proposals in April-June 2026 (265/month), 90% conversion, €511K. These are internal Portugal→Spain requests, not external clients — they show up as a client because each request creates a sale.order in Odoo PT.

People we know: jordi.marco@aronlight.es, samuel.delvalls@aronlight.es, jose.moreno@aronlight.es. Full workflow is not mapped.

Questions

(a) Full routing sequence. Walk us through: Client → ES rep → PT back office → Odoo quote → ES rep → client?

(b) Who at ES can submit RFQs to PT? Besides the 3 above?

(c) Odoo or email? Should the agent create a real sale.order for Spain requests, or a draft emailed to the ES rep?

(d) Pricing. Does Spain use the same pricelists as external PT clients, or an internal transfer price?

(e) Volume trajectory. Is 265 proposals/month typical, growing, or shrinking?

CLI-2 High-volume distributors — is there a different process? High

Top external clients by proposal volume (Apr-Jun 2026):

ClientProposalsConversionValue
CONTERA22993%€91K
HIPOLOESTE, SA8865%€164K
ARMASUL, SA8564%€118K
LEMELUZ, LDA7782%€51K
STRADA, LDA7478%€59K
SONEPAR PORTUGAL4524%€184K
Questions

(a) Dedicated contact? Does CONTERA (229 proposals) have a dedicated Aronlight rep?

(b) SLA. Do high-frequency clients get faster turnaround (same-day vs. standard 48h)?

(c) Pricelists. What discount tier does each of these clients use?

(d) Channel. Do they email a personal address, a shared inbox, WhatsApp?

(e) SONEPAR handling. 24% conversion suggests price-shopping. Does the team deprioritise them?

(f) Client taxonomy. Internal vs. distributor vs. contractor — does Aronlight treat them differently today?

CLI-3 What does the consultas centralisation look like? High

The goal of the RFQ agent is to centralise requests into a structured consultation flow. We need to understand the current state before designing the new one.

Questions

(a) Inboxes today. Which addresses currently receive client RFQs? Personal (flavio@, carla@, jose@)? Shared (consultas@, pedidos@)? Both?

(b) Routing rules. Do high-volume clients have a designated contact, or email whoever they have a relationship with?

(c) CONTERA concretely. How does CONTERA send a request today? One email with 50 items? Ten emails of 5? WhatsApp?

(d) Portal today? Any client self-service portal, or everything by email?

(e) Ideal design. If you could design it: single inbound address (rfq@aronlight.pt), per-client subdomain, API, WhatsApp number?

1 — Tolerance thresholds (blocks matching engine)
A-TH Matching tolerance thresholds High

The matching engine needs hard cutoffs. Proposed values below based on Jun 2 call + industry practice. Please confirm or adjust each row.

SpecProposed ruleSourceOK?
Lumen≥ spec (no upper cap)Jun 2 call
Wattage≤ 2× spec — reject if more than doubleJun 2 call (30W→60W = rejected)confirm
IP≥ spec (no upper cap)Jun 2 call
CCT±200K toleranceEstimated — not discussedconfirm
CRI≥ spec CRI if stated; ≥ 80 defaultJun 2 call (important, no threshold)confirm
IK≥ spec if stated; ignore if not statedNot discussedconfirm
Dimensions (recessed)Cutout size ≥ spec; outer ≤ spec + 10mmJun 2 call ("não pode ser mais pequeno")
Dimensions (surface)±15% acceptedEstimatedconfirm
A-TH-2 Multi-CCT products — default when CCT not specified Medium

Some Aronlight products are sold as 3CCT or tunable white (e.g. ILAR-03294 Nexa 50W 3000K/4000K/5000K). When an RFQ asks for the product without specifying CCT (case 20 Voltel did exactly this), what should the agent assume?

Proposed default

Quote at 4000K (industry standard for public/commercial/industrial lighting) and add a single-line note in the quote: "CCT default: 4000K — confirm or specify 3000K/5000K if needed." Reviewer can override before sending.

Alternative: withhold the quote and auto-reply asking the client to specify CCT first.

We are proposing 4000K because the real case 20 quote shipped without CCT specified — implying the team is comfortable letting the client clarify after. Blocking on every multi-CCT RFQ would slow down the standard distributor flow significantly.

Confirm the 4000K default, propose a different value, or tell us to ask the client every time.

CCT-OV-1 CCT deliberate override — when does Flávio change color temperature for application reasons? Medium

From RFQ #109 (Alfilux ORCLB2600497), IT01.1: inbound specified 3000K (TUBOLINE SALI 35W 30K), but Flávio quoted 4000K (Dura PRO IP69K 4000K). This appears to be a deliberate application-driven choice, not a catalog gap.

  • (a) Are there room types or applications where the agent should always override the specified CCT (e.g. kitchens → 4000K, food processing → 4000K regardless of request)?
  • (b) If yes, is there a list of keywords in the product description, project title, or room type that trigger a CCT override?
  • (c) When the agent overrides CCT, should it flag the change explicitly in the quote note, or is it expected silently?
IP-UP-1 IP uprating — when does Flávio choose a higher IP than specified or implied? Medium

From RFQ #109, IT01.1: inbound product had no IP specification, but Flávio chose IP69K (food processing / high-pressure washdown grade). Nothing in the email or line text indicated this — it appears to come from knowledge of the product family ("SALI" = kitchen/washdown context).

  • (a) Are there product families or description keywords that always imply a minimum IP grade regardless of what the customer specifies? (e.g. "SALI" → IP69K, "exterior" → IP65 minimum)
  • (b) Is there a mapping of installation context → minimum IP we could encode as a rule? (e.g. food processing = IP69K, exterior = IP65, bathroom = IP44)
  • (c) If the customer specifies a lower IP than the application requires, should the agent flag this and suggest the correct IP, or silently upgrade and note the change?
2 — Dependency rules · Full rules at aronlight-dependency-rules-djy.pages.dev ↗
DR-1 LED Strip → PSU — watts per metre values High

Rule 1 logic: sum(length_m × W/m per SKU) × 1.20 → pick smallest PSU that covers it. W/m values calculated from Odoo catalog (2026-06-20) — please confirm or correct:

SKU familyProduct typeCalculated W/mSourceOK?
ILAR-00620–00625ProStrip 24V monochrome 5m2.9 W/m14.4W ÷ 5mconfirm
ILAR-00638 / 00831ProStrip RGB 24V 5m2.9 W/m14.4W ÷ 5mconfirm
ILAR-03159–03164Fita Led ST 8mm 60Led/m 5m1.0 W/m4.8W ÷ 5mconfirm
ILAR-03174–03181Fita Led ST 8mm 140Led/m 5m2.4 W/m12W ÷ 5mconfirm
ILAR-03182–03189Fita Led ST 8mm 180Led/m 5m2.9 W/m14.4W ÷ 5mconfirm
ILAR-03190–03197Fita Led ST 10mm 240Led/m 5m3.8 W/m19.2W ÷ 5mconfirm

230V strips (SlimStrip AC, Project Strip 230V AC): Rule 1 does NOT fire. These products say "230V AC" in the product name and run direct from mains — no PSU needed. Confirmed from Odoo catalog.

Still needed: any strip SKUs missing from this table (e.g. ILAR-01404 COB PRO — no clear length in name), and confirmation these W/m values are correct.

DR-2 LED Strip → Aluminium Profile — trigger condition Medium
Proposed default

Suggest profile only when order includes strip AND project description mentions a visible install location (no "industrial", "warehouse", "trunking", "canaleta" keywords).

Or should the profile always be suggested and the reviewer removes it?

DR-3 LED Strip → Connector — default SKU for unspecified monochrome Medium
Proposed default

Monochrome (width unspecified): suggest ILAR-03322 (10mm) + note "8mm variant ILAR-03314 also available — confirm strip width."

RGB strip ILAR-00638: always ILAR-00641 (4-pin RGB connector).

Is ILAR-03322 the right default? Any missing connector SKU?

DR-4 Emergency Unit → Luminaire flag — count threshold Medium
Proposed default

If order has ≥ 5 luminaires and no ILEM- SKU → suggest "have you included emergency lighting?"

If order has only ILEM- SKUs and no luminaires → flag for reviewer (standalone emergency or retrofit?).

Is the 5-luminaire threshold right, or should the flag fire on any commercial order regardless of count?

DR-5 Rules 5–10 — believed correct, please flag if wrong Medium
#TriggerSuggestsQtyStatus
R5Panel 300×1200mm ILAR-02979Aro frame ILAR-005081:1HIGH — confirm
R6Thane pendant ILAR-00711Suspension kit ILAR-007131:1HIGH — confirm
R7GU10 lamp (recessed)Aro trim ring1:1How to detect recessed vs track?
R8DALI luminaireDALI driver1:1HIGH — confirm
R9Panel 300×600mm ILAR-01774Bracket ILDV-000321 per 2 panels?Confirm ratio
R10Meller bodyEspelho trim ring1:1HIGH — confirm
DR-6 DVDI bundle structure — how should the agent handle Alfilux/Onlight "DVDI" priced bundles? High

In the Alfilux proposal (ORCLB2600497), bundles are priced with a single "DVDI" placeholder line at full price, and all sub-components listed at €0.00001. Examples: IT05 (CONJUNTO PERFIL MICRO 38 + FITA LED 14.4W) and IT16 (CONJUNTO PERFIL DELTA SPM20).

"DVDI" is not a product reference — it is an Alfilux-internal pricing code meaning "no direct equivalent / bundle." The agent currently cannot parse this structure.

  • (a) When we see a DVDI-priced bundle, should the agent match the sub-components individually and build the Aronlight equivalent? Or treat the whole block as a single custom line?
  • (b) Is "DVDI" specific to Alfilux, or do other distributors use the same convention?
  • (c) For IT05 (LED strip profile bundle), the correct response required summing individual run lengths from a note field and sizing PSUs from that total. Is this the standard approach for all LED strip bundles from distributors?
DR-7 Same-SKU consolidation — when two inbound products map to the same Aronlight SKU, is quantity summed or split? Medium

From RFQ #109: two different Onlight products (OHONCSHOOT.13, IT02 and OHBBEQSRM.13, IT09) both mapped to ILAR-03699 (GABI D65 5W). Flávio quoted them as separate lines (6 units and 4 units), not consolidated to one line of 10. IT02 was also reduced from 10 to 6 — the remaining 4 appear to be covered by IT09.

  • (a) When two inbound items map to the same Aronlight SKU, should the agent keep them as separate lines or consolidate into a single line with summed qty?
  • (b) IT02 was quoted at 6 units, not the requested 10. The remaining 4 appear covered by IT09 (same SKU). Should the agent understand this split, or always quote 1:1 on quantity?
  • (c) Is there a rule for when same-SKU consolidation applies vs. when items should stay separate (e.g. different rooms, different circuits)?
3 — Process routing
PROC-1 Internal team map — who does what High

Before we can build routing logic, we need to map who in the Aronlight team handles each step.

Known ES delegates (confirmed from email samples + Odoo)

· Jordi Marcojordi.marco@aronlight.es — Delegado Comercial (central / south Spain)

· Samuel Del Vallssamuel.delvalls@aronlight.es — ES channel

· José Morenojose.moreno@aronlight.es — Director Comercial ES

· Javier Solerjavier.soler@aronlight.es — northern Spain (Basque Country / Navarra, confirmed 2026-06-20)

Full workflow still unknown — questions below:

Questions

(a) Sales team — Names + email addresses for PT and ES sales reps. Who else besides jose.moreno@aronlight.es?

(b) Back office / quotation team — Who creates proposals in Odoo? Who else besides flavio.monteiro@aronlight.pt?

(c) Does sales ever create proposals in Odoo, or always back office? If both, what determines who creates it?

(d) Full process map — Walk us through a typical RFQ: who receives it → who decides PT or ES → who does the product lookup → who creates the sale.order → who sends the quote to the client?

(e) Internal forward pattern — When a sales rep forwards an RFQ internally, is there a standard subject prefix or convention? (Helps us detect routed emails vs. direct client requests.)

(f) consultas@ and pedidos@ — Shared inboxes or aliases forwarding to individuals? Who monitors each?

Blocks routing design and @aronlight.es sender detection (case 17). Needed before we decide where the agent sits in the workflow.

PR-1 Unreadable email: empty body + attachment cannot be opened High

When an email arrives with an empty body ("ver anexos") and the attachment is unreadable (corrupted, expired link, wrong format):

Proposed default

Auto-reply to sender: "We received your request but could not read the attachment. Please resend directly as PDF or Excel." Log the email in Odoo with a note. No manual team notification.

Or should the team always be notified so they can follow up personally?

PR-2 Strip/tube sold by reel — is reel length in Odoo? Medium

Case 19, Saltoki: "50 metres of ILAR-01691 neon RGB tube." Product sold in 5m reels → 50m = 10 reels, each needing a PSU.

Proposed default

Parse reel length from product name (e.g. "5M" → 5m per reel) and calculate reel count + PSU count automatically.

Is reel length always in the product name? Are there other strip/tube SKUs sold by reel we should know about?

PR-8 Cross-brand equivalence RFQs — suppress suggestions or show flagged candidates? High

Some RFQs (e.g. case #44, Alfilux with Delta/Onlight/Drees products) contain only competitor brand codes where Aronlight carries the category but not the brand. The agent always returns a suggestion for every line — all flagged needs_review — but the rep must dismiss each one individually. For a 50-item cross-brand RFQ this creates significant friction.

Two options:

  • Option A — Suppress: when no confident equivalent is found, return "no equivalent found" and leave the line blank. Rep fills manually.
  • Option B — Flag: always show the best candidate found, clearly marked "requires verification — competitor brand not in catalog." Rep uses it as a starting point.
  • (a) For a cross-brand RFQ like the Alfilux example, does Flávio prefer to start from a blank line (Option A) or a flagged suggestion he can reject (Option B)?
  • (b) Is there a confidence threshold? E.g. show when ≥70% confident, suppress below?
  • (c) When Aronlight carries zero equivalent in a product category (e.g. a specific driver brand not stocked), should the agent flag as "catalog gap" or leave blank?

Priority: HIGH — determines whether we build batch-dismiss UX or suppression logic. Case #44 (50 items, all cross-brand) is the representative example.

PR-7 Distributor "equivalent" RFQs — how should the agent handle requests with no installation context? High

A proportion of RFQs from distributors (e.g. Alfilux, Victor Silva) arrive as: "Em anexo, enviamos uma proposta da [Brand] — é possível dar-nos o equivalente?" The email body contains no project description, no room types, no installation context. All product information is in the PDF attachment.

This pattern makes every context-based matching improvement irrelevant — installation_context is always "unknown" for this RFQ type.

  • (a) What percentage of Aronlight's inbound RFQs are distributor "equivalent" requests with no project context?
  • (b) For these RFQs, what is the correct agent behaviour: pure spec-for-spec substitution (match on wattage, IP, CCT only), or flag missing context and ask the distributor to provide it?
  • (c) Do distributors ever provide context on request, or is it typical to expect a straight equivalent without discussion?
  • (d) For distributor RFQs, does Flávio still apply application-based overrides (IP uprating, CCT change) — or is it always a strict spec-for-spec match?
PR-3 Discontinued competitor product — no datasheet available Medium

Case 16: Aura Light BOGT3 and MILA M appear discontinued — no current datasheet online.

Proposed default

Work from whatever specs the customer provided in the email. If specs are incomplete, flag the item as "insufficient spec — team to verify" and include it in the partial quote with a note. Do not block the whole quote.

Does Aronlight have an archive of competitor datasheets we could query?

PR-5 Partial decode: most items use internal architect codes Low

Case 07, Biobanco Azul: 8 items with Lum_A01.x codes. Only 1 of 8 identifiable.

Proposed default

Process the 1 identified item, quote it, reply with: "We identified 1 of 8 items. The remaining 7 use internal project codes. Please send the caderno de encargos to complete the quote." Do not wait for the full spec.

Confirm: partial quote + explicit list of unmatched items = correct response here?

PR-6 Installation problem with no product request Low

Case 13: customer describes a technical installation problem but does not ask for a specific product.

Proposed default

Route to technical specialist immediately. The agent does not infer a product need from a problem description.

Who is the technical routing contact in PT and ES?

STOCK-1 Stock-aware quoting and ETA propagation High

Case 20 (Voltel, 2026-06-15) showed that real quotes include stock alerts inline: "Artigo indisponível — previsão de entrega: 13/7/26." The agent must replicate this — silently quoting an out-of-stock product is worse than not quoting it.

Proposed default — per line at quote time

1. Read qty_available (or equivalent free-stock field) for each SKU at the active company (PT = company_id=3, ES = company_id=2).

2. If qty_available < requested_qty, attach to the line: "Stock insuficiente — previsão de entrega: [date]."

3. ETA comes from supplier lead time (product.supplierinfo.delay or seller_ids[0].delay) counted forward from today.

Our proposals — please confirm or correct

(a) ✓ Proposed: use free_qty ("Free To Use Quantity" = on-hand minus reservations). Verified in Odoo staging: ILAR-03294 = 103 units free. Correct, or do you read a different concept?

(b) ✓ Proposed: read product.supplierinfo.delay (supplier lead time in days). Voltel case (OR 2026/13707, emitted 2026-06-15, ETA 2026-07-13) suggests ~28 days lead time, consistent with a stored value. Correct, or do you check manually?

(c) ✓ Proposed: two separate lines, matching the Voltel pattern — one line for the in-stock SKU + one line for the out-of-stock alternative with ETA note. Not a single line with a note. Correct?

(d) ETA note positionRESOLVED. Line level via QuoteLine.note (Riccardo #50, 2026-06-16).

(e) Stock-driven alternativesRESOLVED. Standard pattern, not judgment call. Riccardo shipped #51 (2026-06-18): auto-pair available premium alternative when matched SKU is out of stock.

(f) Annotation sourceRESOLVED. Manual. Agent composes the text; Odoo does not auto-generate. Written to QuoteLine.note field (Riccardo #50).

(g) Terrugem warehouse — does it affect delivery time? Odoo staging shows a custom field qty_available_terrugem on 2,195 products. Analysis suggests Terrugem stock IS already included in free_qty (not additive). Question: when stock is split between your main warehouse and Terrugem, does that change the ETA you write on the quote? If no difference, free_qty is correct and no change needed. Priority: Low.

Without these answers, v1 will either skip the alert entirely (silently quoting unavailable stock) or block too aggressively.

Affects every quote, not just out-of-stock cases — the agent needs to know what the in-stock case looks like too.

PT-FIS-1 Portuguese fiscal compliance: ATCUD, software certification, QR code High

Every Aronlight orçamento today carries 3 PT-tax-law-required elements that v1 must preserve when the agent writes back to Odoo (or generates a proposal directly). Example from Voltel OR 2026/13707:

The three mandatory elements

1. ATCUD code (J6HF7M97-13707) — Código Único do Documento, mandatory per Portaria 195/2020. Format: 8-char issuer code + "-" + sequential doc number.

2. Software certification reference (PRZn- Processado por software certificado nº 2790/AT) — every fiscal doc must declare the certification number of the software that emitted it (Portaria 363/2010).

3. QR code containing ATCUD + invoice/quote summary — mandatory per Despacho 8632/2014.

What we believe (confirm or correct)

· ATCUD is generated by Odoo automatically when a sale.order / invoice is created; the agent passes through, doesn't generate.

· The software certification number 2790/AT belongs to Odoo Portugal, not Aronlight specifically — it stays constant per Odoo instance.

· The QR code is rendered by Odoo's report template during PDF emission, not by upstream code.

What we need from Ricardo

(a) Confirm the agent only consumes ATCUD from Odoo (never generates).

(b) Is 2790/AT the certification number that should appear on every agent-generated proposal, or is there a different cert number for the Aronlight ES company (company_id=2)?

(c) If the agent ever generates a PDF without going through Odoo's sale.order workflow (e.g. an early draft for review), what fiscal elements can be present vs. must be omitted to stay compliant?

Affects every quote — wrong handling = legal exposure.

PRICE-2 Why do proposal unit prices differ from Odoo list_price for the same SKU? High

Cross-referencing 14 real proposals (190 SKU lines, June 2026) against Odoo catalog.json reveals a consistent pattern: the unit price shown on many proposals is significantly different from the Odoo list_price for the same SKU — even before any discount column is applied.

Observed patterns

· Exact match (0%) — A.R.Costa, Voltel, Hipoloeste (luminaires), Sonepar accessories

· ~40% below Odoo list, disc1=0% — Reninstal (cases 36/37), DTE Hotel Quinta das Janelas (case 24). Discount is baked into the unit price; no discount column shown.

· ~55–60% below Odoo list, disc1=0% — Rodel / Marina Douro (case 41)

· ~25% above Odoo list — Electrostocks ES (case 35), coelca.com (case 25). Spain channel uses a higher base pricelist, then discounts 55–60%.

Full comparison: aronlight-price-comparison.pages.dev

Questions for Ricardo

(a) Does Aronlight maintain separate Odoo pricelists per client tier (e.g. "net -40%", "net -57%")? Can you export product.pricelist + product.pricelist.item?

(b) For clients like Reninstal and Rodel, is the proposal always generated from a net pricelist (unit price already discounted, no disc% shown)? Or does it vary per quote?

(c) Spain markup (+25%): is this a separate ES pricelist with higher list prices, or a different base catalog in Odoo ES (company_id=2)?

(d) When the agent generates a quote, how does it know which pricelist to apply per client? Is this stored on res.partner in Odoo?

Priority: HIGH — the agent cannot generate correct quotes without knowing which pricelist to pull per client. This affects every line of every quote.

DISC-1 Two-tier discount cascade: 1st Disc. vs 2nd Disc. semantics Medium

Voltel OR 2026/13707 shows TWO discount columns on every line:

· 1st Disc. = 48 (= 48 %)

· 2nd Disc. = 0

PRICE-1 confirms 1st Disc. is the partner pricelist (Voltel = 48 % flat off list). What 2nd Disc. represents semantically is not yet confirmed.

Hypotheses to confirm or correct

Hyp A2nd Disc. is a per-order promo / negotiation discount applied on top of the pricelist (e.g. "Flávio gave Voltel an extra 5 % to close this week"). Filled in manually per quote.

Hyp B2nd Disc. is a per-line product-level discount (e.g. "campaign on the Nexa range, 10 % extra"). Filled in by Odoo automatically from a product.pricelist.item rule.

Hyp C2nd Disc. is a cascade from a parent pricelist (chained pricelist model: distributor pricelist references a project pricelist).

If C is right, the calculation is net = list × (1 − d1) × (1 − d2). If A or B, the agent only needs to consume the value from Odoo, not compute it.

Why this matters for v1

The agent must preserve both fields in the generated quote even when 2nd Disc. is 0 — and must NOT compute 2nd Disc. itself (manual judgment or product-rule-driven, not derivable from partner alone).

Doesn't block v1, but the data model needs both columns and the semantic determines whether the agent ever fills 2nd Disc. vs always reads it from Odoo.

VAL-1 Quote validity period default Low

Voltel OR 2026/13707 shows Validade: 15-07-2026 — exactly 30 days after emission (2026-06-15). Hipoloeste OR 2026/13737 (case 21) also shows a 30-day validity.

Proposed default

Every agent-generated quote uses emission_date + 30 days as validity, unless the partner record has a custom payment_term_id or quote-validity override in Odoo.

Questions

(a) Is 30 days the standard everywhere (PT + ES), or different per company?

(b) Do specific partners get extended validity by negotiation (60 days, 90 days, "open-ended")? If so, where is it stored in Odoo?

(c) What should happen if a customer accepts a quote AFTER its validity expires — auto-regenerate with current prices, or honor the original quote but flag for back-office review?

Sensible default works for v1; refinement is v2.

VAT-1 Per-company VAT rate handling Low

The PT Voltel quote shows IVA 23 % (Portugal mainland rate). Aronlight ES (company_id=2) operates in Spain, where standard VAT is IVA 21 % peninsular, with exceptions for Canarias (7 % IGIC) and Ceuta / Melilla (no VAT).

Proposed default

The agent reads account.tax linked to the sale.order via product.taxes_id per line, per company. Never hardcodes.

Questions

(a) Is the per-product, per-company tax wiring fully populated in Odoo today, or are there products where tax must be inferred from the buyer's region?

(b) For B2B distributor sales, is reverse-charge VAT ever applied (i.e. IVA 0 % with note "Sujeição passiva — invertido")? What triggers it?

Sensible default (read from Odoo) is correct; refinement when the ES company sees real traffic.

4 — Product catalog gaps (Odoo credentials restored 2026-06-19)
OD-1 TITAN armaduras — is INDUSTRIAL the right Odoo category, or do reps quote them outside industrial projects? Medium

ILAR-02135 (Armadura TITAN 1200 IP65 36W 3CCT Prep. EM/Sensor) and ILAR-02137 (Armadura TITAN 1500 IP65 48W 3CCT) are currently in Odoo category "Armaduras Industriais", mapped to our INDUSTRIAL search bucket.

When a customer provides the SKU directly, we find them. When a customer describes the product by spec ("armadura IP65 36W emergência"), the agent's category pre-filter excludes them before the vector search runs — they are invisible. Both were MISS in eval cases #35 and #44.

Note: "Prep. EM/Sensor" in the product name means prepared for emergency/sensor (knockout holes for optional modules) — not that the product is a sensor. The Odoo category "Armaduras Industriais" may be correct; the question is whether it matches the full scope of use.

  • (a) Are TITAN armaduras exclusively quoted in industrial projects (factories, warehouses), or do they also appear in mixed-use projects (garages in residential buildings, commercial warehouses, parking structures)?
  • (b) If they appear outside pure industrial contexts, should they move to a different Odoo category — or is the fix on our side (widen code to also search INDUSTRIAL when an IP65 armadura is requested)?

Priority: MEDIUM — determines whether the fix is in Odoo or in code.

5 — File requests — expired download links
F-1 IP Bragança — mapa de quantidades (TransferNow expired 2026-03-30) Low

Infraestrutura de Portugal 2-lot public tender. Contact: pedro.moreira@pedromoreiraecia.pt (Bruno Lacerda). Please resend as direct attachment.

F-2 San Juan del Puerto — medicion Excel + DWG (WeTransfer expired) Low

Huelva building. Contact: david.huarte@macinfor.com (David Huarte). Please resend as direct attachment.

F-3 Biobanco Azul — caderno de encargos needed to decode Lum_A0x.x codes Low

7 of 8 items unidentifiable without the spec document. Originally from Tiago Vaz (tiagovaz@l3w.pt), forwarded to Alexandre Videira. Please resend.

6 — Lower priority — v2 and later
3-2 Odoo orcamento versioning convention Low

When is a new orcamento created vs. the existing one revised? AlpLuz has three with identical quantities: OR 2026/5710, 7864, 7866.

3-3 / 3-4 / 3-5 External link frequency + brand code + functional label glossary Low
  • 3-3 — How often do RFQs arrive via WeTransfer/TransferNow rather than direct attachment?
  • 3-4 — Abbreviated brand codes in cadernos: "OH SCUBA", "OHB BUC BEAM", "OH POD R" — mapping table?
  • 3-5 — Functional labels "Tipo F", "Tipo G" — internal product category mapping?
3-6 / 3-7 / 3-8 Spanish medicion format + Odoo staging completeness + search scope Low
  • 3-6 — How often do requests arrive in Spanish Excel medicion format?
  • 3-7 — Is Odoo staging a complete copy of production or partial?
  • 3-8 — Should the agent search clients across both PT (company_id=3) and ES (company_id=2), or restrict by country?