Build and edit a deal
Find where a deal's money is, correct estimates, import a proposal, build scope, and reorganise it.
Every command here follows the grammar in how commands work:
a preview first, --yes to apply.
Find what a deal's money is in, before touching it
The index prices every level of the deal, so one call tells you which line item carries the value and the next tells you what is inside it.
estii deal find nd_abc123 --kind feature --json
estii deal inspect nd_abc123 features/ft_7 --json
estii deal find nd_abc123 --kind estimate --json
estii deal set nd_abc123 estimates/es_4 amount=5d --dry-runUnits follow whatever the work is measured in, so a line item reads as days, or as
licences, or as a count of fixed prices where nothing beneath it carries a unit.
Where a line item mixes them, the figure covers the dominant part and is marked
with a +; under --json, total.omitted says what it left out, so a script can
act on the qualifier. A deal whose structure is incomplete still lists every id,
with the totals left off rather than reported as zero.
Correct an estimate
Someone quoted three days where it should have been five.
estii deal list --status draft
estii deal find nd_abc123 --kind estimate
estii deal set nd_abc123 estimates/es_4 amount=5d --dry-run
estii deal set nd_abc123 estimates/es_4 amount=5d --yesfind gives you the path and what the line is currently worth. An amount names its
own unit, so 5d is five days and 4h is four hours. A bare number against a
role, a stream, or anything else measured in time or data is rejected, and the
message names the units it takes. Resources that count whole things, like licences
or a fixed fee, take a bare number. Recurrence is its own field: period=week.
Turn a proposal you already have into a deal
If the scope is already written down — a pricing spreadsheet, a proposal, an RFP — hand the file over instead of typing it back in.
estii deal import proposal.xlsx --yes --json
estii run wait rn_abc123 --json
estii deal show nd_new123Composing takes minutes, so the first command returns as soon as the work starts
and gives you its run id. run wait blocks until it finishes, and stops after
ninety seconds: exit 0 means it finished and the result names the deal it built,
9 means it is still going and you can wait again, 8 means it failed and says
why.
estii run list
estii run show rn_abc123
estii run cancel rn_abc123 --yesrun list shows what is running in the space and run show walks the steps one by
one with what each produced, which is where to look if a composition went somewhere
you did not expect. run cancel stops one and throws away what it uploaded; a run
that failed keeps everything, so you can still see what happened.
Spreadsheets, PDF, Word, HTML, plain text, markdown, CSV, JSON and YAML are all
read, up to 20MB. --prompt "price the optional phases too" tells the import how to
read the file, the same steer the app's import dialog takes. The deal you get is the
deal the app would build from the same file.
Build a deal's scope from nothing
Start with the deal itself. Each create reports the nodes it made, so the id for the next call comes from the last one rather than a lookup.
estii deal create name="Acme Phase 2" account="Acme Corp" --yes --json
estii deal add nd_abc123 sections/sc_2/features name="Onboarding" --yes --json
estii deal add nd_abc123 features/ft_7/tasks name="Workshop" --yes --json
estii deal add nd_abc123 tasks/tk_9/estimates resource="Senior Developer" amount=5d --yes --json
estii deal show nd_abc123The deal arrives usable: creating one also creates its first phase, that phase's
category and the category's section, and the response lists all four with
requested naming the deal. Read the section's id from that response and the next
call has somewhere to put a line item. The account is a name rather than an id, and
one the space does not hold is created and reported.
--from says what the deal starts from, and takes one reference for every kind of
start: a phase template, a deal template, an existing deal to copy, or blank for
an empty one. Leave it off and the space's default applies. When copying,
--without estimates leaves the numbers behind and keeps the structure.
A phase arrives usable the same way: creating one also creates the category and
section it needs, and the response lists all three with requested naming the
phase. To start from a template instead of an empty phase, pass
template="Delivery"; a name the space does not hold is rejected and the message
lists the ones it has.
estii template list names the templates the space holds and
estii template show "Delivery" reports what one of them creates: its categories,
the sections under each, and the items each section is seeded with. Worth a look
before building the same structure by hand. It reads a deal template too, which is a
deal, so it answers exactly as deal show would.
Reorganise a deal's scope
Scope rarely lands in the right shape first time.
estii deal find nd_abc123 --kind feature
estii deal move nd_abc123 features/ft_7 --before ft_3 --yes
estii deal move nd_abc123 features/ft_7 --to sections/sc_5 --yes
estii deal copy nd_abc123 phases/ph_1 --yes --json
estii deal remove nd_abc123 features/ft_9 --yesmove either repositions a node among its siblings or hands it to a new parent,
never both in one call: moving it elsewhere puts it last, so ordering it is a second
move. copy takes everything beneath the node with it. remove takes everything
beneath it too, so removing a line item removes its tasks and their estimates.
Rescope with a way back
Before pulling scope around, leave yourself somewhere to return to.
estii deal snapshot nd_abc123 --name "Before rescope"
estii deal remove nd_abc123 estimates/es_4 --yes
estii deal add nd_abc123 tasks/tk_9/estimates resource="Senior Dev" amount=5d --yes
estii deal show nd_abc123
estii deal restore nd_abc123 "Before rescope" --yesThe version comes first, before anything changes. restore takes the version by
name or id, and saves the current state on its way back if the deal has left draft.
Price a change before making it
estii role estimate "Senior Developer" 10d
estii role estimate "Developer" 10d
estii deal add nd_abc123 adjustments kind=discount method=percent value=10% reason="Launch" --dry-run
estii deal add nd_abc123 adjustments kind=discount method=percent value=10% reason="Launch" --yes
estii deal show nd_abc123The two estimates price a resource swap against your live rate card without touching
the deal. Once an adjustment is on the deal, deal show reports the price your scope
adds up to and the price after the discount, each with its own margin.