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: StringColumn: description — the EXACT BTC amount, 8dp + " BTC" (btc_amount_description; NFR5).
how_acquired: Form8283HowAcquiredColumn: how the donor acquired the property, from the leg’s BasisSource [R0-N2].
date_acquired: TaxDateColumn: 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: TaxDateColumn: date contributed = the donation’s removed_at.
cost_basis: UsdColumn: donor’s cost basis (from the leg).
fmv: UsdColumn: 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: StringColumn: 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: StringColumn: 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: StringColumn: appraiser — from DonationDetails.appraiser_name when present on the carrier row;
empty on non-carrier legs and when no details are stored.
needs_review: booltrue 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
impl Clone for Form8283Row
Source§fn clone(&self) -> Form8283Row
fn clone(&self) -> Form8283Row
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Form8283Row
impl Debug for Form8283Row
impl Eq for Form8283Row
Source§impl PartialEq for Form8283Row
impl PartialEq for Form8283Row
impl StructuralPartialEq for Form8283Row
Auto Trait Implementations§
impl Freeze for Form8283Row
impl RefUnwindSafe for Form8283Row
impl Send for Form8283Row
impl Sync for Form8283Row
impl Unpin for Form8283Row
impl UnsafeUnpin for Form8283Row
impl UnwindSafe for Form8283Row
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.