📘 Screen: Sales/Purchase Contract

The sales/purchase contract is the record of the deal closed with the trading company, the co-op or the processor: so much product, at so much per bag, to ship between such and such dates. In upCampo, it is what gives the crop a destination — each outbound load ticket is deducted from the contract, and the screen shows, at any moment, how much has shipped and how much is still left.

The contract on its own does not take anything out of inventory. It is the agreement: it records what was settled and serves as a reference. What reduces the balance is the outbound load ticket, truck by truck. A 2,000-ton contract can be closed with the warehouse still empty — that is the case of a forward sale, agreed before the crop comes in.

The contract is also where the sale's tax parameters are kept, when an invoice will be issued: nature of operation, series, CFOP, CST, carrier and additional information.

📍 Location in the system

Menu: Storage > Sales/Purchase Contract


🧩 Main function

Track the balance of each contract — quantity contracted, shipped and remaining — and bring together in one place the agreed price, the grading discounts the buyer accepts and the invoice tax data.


🔀 Sale or Purchase

The Type is chosen when the contract is created and does not change after it is saved. It swaps the roles of the entity fields:

  • Sale — the main field is Buyer (Entity), whoever is taking the product; the third-party field is Seller (third party).
  • Purchase — the main field becomes Seller (Entity) and the third-party one, Buyer (third party).

📝 Header fields

FieldDescription
StatusOpen, Started, Finished, Canceled and Forward sale. A finished or canceled contract no longer appears for selection on load tickets.
Tax SettingsWhich branch CNPJ issues the invoice for this contract.
Season Origin / YearThe season of the product being traded.
CurrencyContract currency. It decides which block of values is active.
DateDate the deal was closed.
Number (ours)Required. The farm's own numbering.
Number (supplier)The number the buyer uses for the same contract — it is how the trading company will refer to the deal.
Buyer (Entity)Required. Who the contract was closed with. It fills in the Address, which is read-only.
Storage LocationRequired. Where the product leaves from (or where it comes into, on a purchase).
CropRequired. Besides classifying the contract, its Unit field defines whether the quantity is converted into bags or into arrobas.
ProductRequired. What is being traded — lint cotton, cottonseed, shelled corn.
Shipping Start / End DateThe agreed shipping window.
Quantity KGRequired and greater than zero. The total contracted, in kilos. The contract always tracks the balance in KG — the other units are just a reading of the same number.
Quantity SC or Quantity @The same total, in the unit that product is traded in — and the field label changes with it: Quantity SC for grain (60 kg bags) and Quantity @ for cotton (15 kg arrobas). The Unit field of the Crop decides. Typing on one side fills in the other.
Shipped Quantity KGAdded up from the load tickets. Not typed in.
Remaining Quantity KGWhat is left to ship. It drops with each load ticket and decides whether the contract still appears when entering a new one. It is not a hard stop: the system does not prevent shipments from going over the contracted amount.
Quantity fieldWhich load ticket value goes onto the invoice: Final Net (the default), Initial Net or Quantity. If you choose Quantity, the outbound load ticket shows a Quantity field for typing.
Responsible for taxUs or Them — who bears the tax on the operation. It defines which contract total accumulates the tax from the load tickets.
Who sold / Who bought (broker)The broker or dealer who intermediated — free-text field.
NotesFree-text field.

How upCampo tracks the contract balance

The contract holds the quantity in three units at once, but only one is in charge: the balance is tracked in kilos. The others are readings of the same number, converted.

Quantity SC = Quantity KG ÷ 60 (grain — the bag) Quantity @ = Quantity KG ÷ 15 (cotton — the arroba) Remaining Quantity KG = Quantity KG − Shipped KG ± Amendments

The divisor is decided by the Unit field of the crop: with SC - Bags the calculation is by 60; with any other, by 15. Neither 60 nor 15 is configurable — that is what a bag and an arroba weigh.

Point in timeKilosIn bags
Contracted1,200,000 kg20,000 sc
Already shipped (outbound load tickets)780,000 kg13,000 sc
Remaining Quantity KG420,000 kg7,000 sc
⚠️ There is no balance lock. Nothing prevents you from shipping more than was contracted — the remaining quantity simply goes negative. The list of contracts offered to the load ticket hides those that have reached zero, but that is a display filter, not a block. Checking the remaining quantity before closing out shipping is the operator's job, not the system's.


💵 Values

The values block has Unit Price (KG), the unit price in the product's unit (SC or @, with the label changing accordingly), Total value, Total Freight, Net Value and Total Taxes. Filling in the per-kilo price updates the per-bag price and the total, and vice versa. Net Value is required to save.

There are three blocks of values, one per currency, and the foreign currency blocks also include the Exchange rate. Changing the exchange rate recalculates the converted values.


🧪 % Grading/Discount

This block says how the buyer agrees to discount the load. For each type — moisture, impurity, broken, heat-damaged, damaged and storage — you choose the standard discount table that applies to this contract. The manual checkboxes next to them (moisture, impurity, heat-damaged, damaged and storage) open the discount field for typing instead of looking it up in the table.

A type with no table selected simply does not appear on the load ticket linked to this contract — that is how you slim down the screen for someone who only discounts moisture and impurity, for example.


🗂 Tabs

Amendments

Records quantity changes agreed after the deal was closed. Each amendment has a Type (Adding or Removing), Date, Number, Quantity KG, the quantity in the product's unit, unit prices and Net Value. The amendment changes the contract's remaining quantity: adding increases the balance to ship, removing decreases it.

NF-E - Parameters for Electronic Invoice Issuance

Not every contract issues an invoice. An internal sale — corn going to the farm's own feedlot, for example — is recorded on a contract just to track the quantity. In that case, simply leave this tab and the details tab blank: the contract works normally and the outbound load ticket still takes product out of inventory; what will not exist is Generate NF.

When an invoice is issued, this is where the data the invoice will use lives: Payment method, Freight mode, Carrier (if fixed), Cost center, Series, Nature of operation, Kind and the Additional information — the legal text printed at the bottom of the invoice, which can include automatic fields (the button above the field lists the ones available, such as the driver and the vehicle's CPF). The Copy Parameters from another contract button brings all of this over from a contract that is already set up.

NF-E - Details (products)

The items that go onto the invoice, with Product, NCM, Unit, Quantity, Unit price and the Taxes block — CFOP, CST for ICMS, PIS, COFINS and IPI, with the rates and the base reduction. When you choose the CST, the registered default rate comes with it. This is the tab the load ticket reads when generating the invoice: with no items here, the invoice will not be issued.

File

Contract attachments — the signed PDF, the scanned amendment. Each attachment has Title, Description, file name and Notes, and the list has a view button that opens the document.


💰 Finish and Generate Financials

  • Finish closes the contract; on a contract that is already finished, the same button asks whether you want to reopen it.
  • Generate Financials opens the window that turns the contract's net value into receivable installments in the financial module. The field next to the button shows the title already generated.

📋 The list

The list filters by Season and by Type (Sale, Purchase or All), and shows the Status as a colored label, along with quantity, net value, shipped and remaining quantity — you can read the progress of every contract in the season on one screen. The View inventory button opens the current balance without leaving here, and Reports ▼ lists the reports enabled for this screen.

✅ Result: with the contracts registered:
  • You know, at any moment, how much is left to ship on each contract
  • At shipping time, whoever enters the load ticket finds the right contract, with the balance in view
  • When invoices are issued, they come out of the load ticket with the agreed tax parameters

❓ Frequently asked questions

The contract does not show up to pick on the load ticket. Why?

Three reasons cover almost every case: the contract is finished or canceled, the remaining quantity has reached zero, or it belongs to a season/branch other than the one selected in the load ticket list filter. Check the status and the remaining quantity in the contract list.

I agreed on more quantity with the buyer. Do I create another contract?

No need: use the Amendments tab, with the Adding type. The contract's remaining quantity goes up and a record of what was agreed later is kept. To reduce it, the type is Removing.

The load ticket will not generate the invoice. What is missing on the contract?

It is almost always incomplete tax data: nature of operation and series on the parameters tab, or an item without a CST for ICMS, PIS, COFINS and IPI, or a product without NCM and unit on the details tab. The municipality IBGE code is also required on the contract's entity and on the carrier. The on-screen warning tells you which item is missing.

I sell within my own farm, without an invoice. Can I use a contract?

Yes, and it is a common use — corn going to the feedlot, for example. Register the contract as usual and leave the NF-E tabs blank: you still track the quantity contracted, shipped and remaining, and the outbound load ticket still takes product out of inventory. There just will not be an invoice to issue.

I closed a contract before harvest. Does the system allow it?

Yes. The contract records the agreement, not the inventory — what reduces the balance is the outbound load ticket. A forward sale, closed before the crop comes in, is entered normally, and the Forward sale status exists precisely to make that clear on the list.

What is the "Quantity field" for?

It says which load ticket weight counts as the invoice quantity. The usual one is Final Net — the weight after discounts. If you choose Quantity, the outbound load ticket gets its own quantity field, used when what you are billing is not the scale weight.

The quantity converted to arrobas and I expected bags. Why?

A bag is always 60 kg and an arroba, 15 kg — that is not configured anywhere. What the system needs to know is which of the two that product is traded in, and that comes from the Unit field of the Crop: with SC - Bags the field is called Quantity SC and divides the kilos by 60; with @ - Arroba, it becomes Quantity @ and divides by 15. If it converted to the wrong unit, the fix is on the crop record. Either way, the contract balance is still tracked in kilos.

I finished a contract by mistake. Can I undo it?

Yes. Select the contract and click Finish again: on a contract that is already finished, the button asks whether you want to reopen it, and it goes back to Open status.