Skip to main content

Form8283Row

Struct Form8283Row 

Source
pub struct Form8283Row {
Show 13 fields pub section: Option<Form8283Section>, pub description: String, pub how_acquired: Form8283HowAcquired, pub date_acquired: TaxDate, pub date_contributed: TaxDate, pub cost_basis: Usd, pub fmv: Usd, pub claimed_deduction: Option<Usd>, pub fmv_method: String, pub donee: String, pub appraiser: String, pub needs_review: bool, pub details: Option<DonationDetails>,
}
Expand description

One Form 8283 row = one RemovalLeg of a Donation contributed in the tax year. A pure projection of the leg; no gain/basis/deduction math is done here.

First-leg convention (no CSV SUM double-count): the per-DONATION section, claimed_deduction, fmv_method, and donee appear on the FIRST leg row only; subsequent leg rows carry None/"" — so a naive SUM over the deduction column equals the correct per-donation total (mirrors P2-A’s removals.csv).

Partially unmodeled user-input (honest gaps, never fabricated): appraiser is populated from DonationDetails when present, otherwise empty. needs_review is section-aware: for Section B, false only when DonationDetails is present and is_review_complete(Section::B) returns true. For Section A, false when DonationDetails is present. fmv_method is derived from the section, overridden by DonationDetails.fmv_method_override when present. donee is populated from DonationDetails.donee_name when present, falling back to Removal.donee.

Fields§

§section: Option<Form8283Section>

Section A/B — on the FIRST leg row only (None on subsequent legs). Driven by the §170(f)(11)(F) year-aggregate claimed deduction over ALL BTC donations in the tax year (Section B when the year-aggregate > $5,000; Section A otherwise). The section is UNIFORM across all donations in the year — all BTC is one “similar property” class.

§description: String

Column: description — the EXACT BTC amount, 8dp + " BTC" (btc_amount_description; NFR5).

§how_acquired: Form8283HowAcquired

Column: how the donor acquired the property, from the leg’s BasisSource [R0-N2].

§date_acquired: TaxDate

Column: date acquired = the leg’s holding-period start (leg.acquired_at; §1223 tacked donor date for received gifts). Consistent with the leg’s term by construction (Task 1).

§date_contributed: TaxDate

Column: date contributed = the donation’s removed_at.

§cost_basis: Usd

Column: donor’s cost basis (from the leg).

§fmv: Usd

Column: fair market value at the contribution (from the leg).

§claimed_deduction: Option<Usd>

Column: the per-DONATION §170(e) claimed deduction — on the FIRST leg row only (None on subsequent legs, so a CSV SUM does not double-count).

§fmv_method: String

Column: FMV determination method — on the carrier (first-leg) row: populated from DonationDetails.fmv_method_override when present, otherwise "qualified appraisal" for Section B or "" for Section A (honest gap, never fabricated). Empty on subsequent (non-carrier) leg rows. No FmvStatus dependency — derived from the section only.

§donee: String

Column: donee organization — from DonationDetails.donee_name when present on the carrier row, otherwise from Removal.donee (free-form label; "" when None). Empty on subsequent (non-carrier) legs (first-leg convention).

§appraiser: String

Column: appraiser — from DonationDetails.appraiser_name when present on the carrier row; empty on non-carrier legs and when no details are stored.

§needs_review: bool

true when the row needs manual review: section-aware. For carrier rows with no details, always true. For carrier rows with details: false when is_review_complete(section) returns true (Section B requires full appraiser declaration; Section A: complete on presence). Non-carrier rows: always true.

§details: Option<DonationDetails>

Full donation details for the carrier (first-leg) row — None on non-carrier legs. Used by the CSV writer to flatten the Part III/IV extra columns without bloating the common row fields. None when no details are stored for this donation.

Trait Implementations§

Source§

impl Clone for Form8283Row

Source§

fn clone(&self) -> Form8283Row

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Form8283Row

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for Form8283Row

Source§

impl PartialEq for Form8283Row

Source§

fn eq(&self, other: &Form8283Row) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Form8283Row

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.