use std::path::Path;
use crate::datasets::sec::error::Result;
use crate::datasets::sec::parsers::formd::FormD;
use super::super::provenance::Provenance;
use super::super::sinks::{write_info_row, Sinks};
use super::super::util::{accession_from_path, format_float, strip_leading_zeros};
use super::FormReport;
pub(crate) fn emit_formd(
parsed: &FormD,
path: &Path,
sinks: &mut Sinks,
extracted_at: &str,
report: &mut FormReport,
) -> Result<()> {
{
let issuer_cik = strip_leading_zeros(&parsed.issuer_cik);
let accession = accession_from_path(path).unwrap_or_default();
let document = path
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("")
.to_string();
let prov = Provenance::for_filing("D", &accession, &issuer_cik, &document, extracted_at);
let nid = format!("{}-d", accession);
let _securities_joined = parsed.securities_offered.join(",");
write_info_row(
&mut sinks.offering,
&[
nid.as_str(),
issuer_cik.as_str(),
"private_placement",
"", "", &format_float(parsed.total_offering_amount),
&format_float(parsed.total_amount_sold),
"USD",
"0",
],
&prov,
)?;
report.rows_written += 1;
if !parsed.use_of_proceeds_summary.is_empty() {
let uop_nid = format!("{}-uop", accession);
write_info_row(
&mut sinks.use_of_proceeds,
&[
uop_nid.as_str(),
issuer_cik.as_str(),
"general",
"",
parsed.use_of_proceeds_summary.as_str(),
],
&prov,
)?;
report.rows_written += 1;
}
}
Ok(())
}