fix: restore live IDX ownership import

This commit is contained in:
Rasyidan Akbar F. 2026-06-19 19:42:16 +07:00
commit c100c2da4d
3 changed files with 36 additions and 8 deletions

View file

@ -3,9 +3,9 @@ use std::process::{Command, Output};
use crate::error::IdxError;
const CANDIDATES: &[&str] = &[
"curl_chrome142",
"curl_chrome136",
"curl_chrome133a",
"curl_chrome142",
"curl_chrome131",
"curl_chrome124",
"curl_chrome120",

View file

@ -29,10 +29,15 @@ const HEADER_LABELS: &[&str] = &[
const HOLDER_REGISTER_SCHEMA_MARKERS: &[&str] = &[
"TEXT=\"DATE\"",
"TEXT=\"SHARE_CODE\"",
"TEXT=\"SHARE CODE\"",
"TEXT=\"INVESTOR_NAME\"",
"TEXT=\"INVESTOR NAME\"",
"TEXT=\"INVESTOR_TYPE\"",
"TEXT=\"INVESTOR CLASSIFICATION\"",
"TEXT=\"LOCAL_FOREIGN\"",
"TEXT=\"LOCAL/FOREIGN\"",
"TEXT=\"TOTAL_HOLDING_SHARES\"",
"TEXT=\"TOTAL HOLDING SHARES\"",
"TEXT=\"PERCENTAGE\"",
];
const ANNOUNCEMENT_WRAPPER_SCHEMA_MARKERS: &[&str] =
@ -40,8 +45,9 @@ const ANNOUNCEMENT_WRAPPER_SCHEMA_MARKERS: &[&str] =
const ABOVE_FIVE_SCHEMA_MARKERS: &[&str] =
&["TEXT=\"INVS\"", "REKENING TAMPUNGAN KSEI", "CLOSED MEMBER-"];
const INVESTOR_TYPE_SCHEMA_MARKERS: &[&str] = &[
"TEXT=\"STOCK_CODE\"",
"TEXT=\"NUMBER_OF_SHARES\"",
"STOCK_CODE",
"NUMBER_OF_SHARES",
"TEXT=\"DOMESTIC\"",
"TEXT=\"FOREIGN\"",
];
@ -460,8 +466,33 @@ fn is_id_number_like(value: &str) -> bool {
}
fn is_investor_type_marker(value: &str) -> bool {
let trimmed = value.trim();
!trimmed.is_empty() && trimmed.len() <= 4 && trimmed.chars().all(|ch| ch.is_ascii_uppercase())
let trimmed = value.trim().to_ascii_uppercase();
if trimmed.is_empty() {
return false;
}
if trimmed.len() <= 4 && trimmed.chars().all(|ch| ch.is_ascii_uppercase()) {
return true;
}
matches!(
trimmed.as_str(),
"CORPORATE"
| "INDIVIDUAL"
| "MUTUAL FUND"
| "PENSION FUND"
| "INSURANCE"
| "FOUNDATION"
| "SECURITIES COMPANY"
| "PRIVATE BANK"
| "PRIVATE EQUITY"
| "SOVEREIGN WEALTH FUND"
| "STATE OWNED ENTERPRISES"
| "BANK"
| "FIRM"
| "BROKER"
| "OTHER"
)
}
fn is_locality_marker(value: &str) -> bool {

View file

@ -12,7 +12,6 @@ const DEFAULT_IDX_ANNOUNCEMENT_API_URL: &str =
const IDX_ANNOUNCEMENT_API_ENV: &str = "IDX_OWNERSHIP_ANNOUNCEMENT_API_URL";
const IDX_ANNOUNCEMENT_LISTING_ENV: &str = "IDX_OWNERSHIP_ANNOUNCEMENT_PAGE_URL";
const IDX_ANNOUNCEMENT_PAGE_SIZE: usize = 10;
const USER_AGENT: &str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36";
#[derive(Debug, Clone, Deserialize)]
pub struct AnnouncementPage {
@ -383,7 +382,6 @@ fn fetch_bytes(stage: &str, url: &str, headers: &[(String, String)]) -> Result<V
fn json_headers() -> Vec<(String, String)> {
vec![
("User-Agent".to_string(), USER_AGENT.to_string()),
(
"Accept".to_string(),
"application/json,text/plain,*/*".to_string(),
@ -398,7 +396,6 @@ fn json_headers() -> Vec<(String, String)> {
fn pdf_headers() -> Vec<(String, String)> {
vec![
("User-Agent".to_string(), USER_AGENT.to_string()),
(
"Accept".to_string(),
"application/pdf,application/octet-stream,*/*;q=0.8".to_string(),